/** * Processes a newly uploaded file, copies it to disk, and creates * a new artefact object. * Takes the name of a file input. * Returns false for no errors, or a string describing the error. */ public static function save_uploaded_file($inputname, $data) { require_once 'uploadmanager.php'; $um = new upload_manager($inputname); if ($error = $um->preprocess_file()) { throw new UploadException($error); } $size = $um->file['size']; if (!empty($data->owner)) { global $USER; if ($data->owner == $USER->get('id')) { $owner = $USER; } else { $owner = new User(); $owner->find_by_id($data->owner); } if (!$owner->quota_allowed($size)) { throw new QuotaExceededException(get_string('uploadexceedsquota', 'artefact.file')); } } $data->size = $size; $data->filetype = $um->file['type']; $data->oldextension = $um->original_filename_extension(); $f = self::new_file($um->file['tmp_name'], $data); $f->commit(); $id = $f->get('id'); // Save the file using its id as the filename, and use its id modulo // the number of subdirectories as the directory name. if ($error = $um->save_file(self::get_file_directory($id), $id)) { $f->delete(); throw new UploadException($error); } else { if ($owner) { $owner->quota_add($size); $owner->commit(); } } return $id; }