diff --git a/lib/filestorage/file_storage.php b/lib/filestorage/file_storage.php index 383da522e14dd..79f9770fc8aff 100644 --- a/lib/filestorage/file_storage.php +++ b/lib/filestorage/file_storage.php @@ -434,13 +434,43 @@ public function delete_area_files($contextid, $component = false, $filearea = fa $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.