/** * Copy all the files from one file area to another. * * @param file_storage $fs - The source context id * @param int $fromcontextid - The source context id * @param string $fromcomponent - The source component * @param string $fromfilearea - The source filearea * @param int $fromitemid - The source item id * @param int $tocontextid - The destination context id * @param string $tocomponent - The destination component * @param string $tofilearea - The destination filearea * @param int $toitemid - The destination item id * @return boolean */ private function copy_area_files(file_storage $fs, $fromcontextid, $fromcomponent, $fromfilearea, $fromitemid, $tocontextid, $tocomponent, $tofilearea, $toitemid) { $newfilerecord = new stdClass(); $newfilerecord->contextid = $tocontextid; $newfilerecord->component = $tocomponent; $newfilerecord->filearea = $tofilearea; $newfilerecord->itemid = $toitemid; if ($files = $fs->get_area_files($fromcontextid, $fromcomponent, $fromfilearea, $fromitemid)) { foreach ($files as $file) { if ($file->is_directory() and $file->get_filepath() === '/') { // We need a way to mark the age of each draft area. // By not copying the root dir we force it to be created // automatically with current timestamp. continue; } $newfile = $fs->create_file_from_storedfile($newfilerecord, $file); } } return true; }
/** * Replace the area files in the specified area with those in the source item id. * * @param \file_storage $fs The file storage class * @param int $contextid The ID of the context for the setaskment. * @param int $sourceitemid The itemid to copy from - typically the source grade id. * @param int $itemid The itemid to copy to - typically the target grade id. * @param string $area The file storage area. * @param bool $includesubdirs Whether to copy the content of sub-directories too. */ public static function replace_files_from_to($fs, $contextid, $sourceitemid, $itemid, $area, $includesubdirs = false) { $component = 'setaskfeedback_editpdf'; // Remove the existing files within this area. $fs->delete_area_files($contextid, $component, $area, $itemid); // Copy the files from the source area. if ($files = $fs->get_area_files($contextid, $component, $area, $sourceitemid, "filename", $includesubdirs)) { foreach ($files as $file) { $newrecord = new \stdClass(); $newrecord->contextid = $contextid; $newrecord->itemid = $itemid; $fs->create_file_from_storedfile($newrecord, $file); } } }