MDL-26847 new method file_storage::delete_area_files_select for efficient bulk file...
authorTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 16 Mar 2011 18:52:36 +0000 (18:52 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Mon, 21 Mar 2011 15:21:02 +0000 (15:21 +0000)
lib/filestorage/file_storage.php

index 383da52..79f9770 100644 (file)
@@ -434,13 +434,43 @@ class file_storage {
 
         $file_records = $DB->get_records('files', $conditions);
         foreach ($file_records as $file_record) {
-            $stored_file = $this->get_file_instance($file_record);
-            $stored_file->delete();
+            $this->get_file_instance($file_record)->delete();
         }
 
         return true; // BC only
     }
 
+    /**
+     * Delete all the files from certain areas where itemid is limited by an
+     * arbitrary bit of SQL.
+     *
+     * @param int $contextid the id of the context the files belong to. Must be given.
+     * @param string $component the owning component. Must be given.
+     * @param string $filearea the file area name. Must be given.
+     * @param string $itemidstest an SQL fragment that the itemid must match. Used
+     *      in the query like WHERE itemid $itemidstest. Must used named parameters,
+     *      and may not used named parameters called contextid, component or filearea.
+     * @param array $params any query params used by $itemidstest.
+     */
+    public function delete_area_files_select($contextid, $component,
+            $filearea, $itemidstest, array $params = null) {
+        global $DB;
+
+        $where = "contextid = :contextid
+                AND component = :component
+                AND filearea = :filearea
+                AND itemid $itemidstest";
+        $params['contextid'] = $contextid;
+        $params['component'] = $component;
+        $params['filearea'] = $filearea;
+
+        $file_records = $DB->get_recordset_select('files', $where, $params);
+        foreach ($file_records as $file_record) {
+            $this->get_file_instance($file_record)->delete();
+        }
+        $file_records->close();
+    }
+
     /**
      * Move all the files in a file area from one context to another.
      * @param integer $oldcontextid the context the files are being moved from.