diff --git a/repository/upload/lib.php b/repository/upload/lib.php index 125c918cfb8..f42c054b3a5 100644 --- a/repository/upload/lib.php +++ b/repository/upload/lib.php @@ -1,5 +1,4 @@ process_upload($saveas_filename, $maxbytes, $types, $savepath, $itemid, $license, $author, $overwriteexisting, $areamaxbytes); + return $this->process_upload($saveasfilename, $maxbytes, $types, $savepath, $itemid, $license, $author, + $overwriteexisting, $areamaxbytes); } /** * Do the actual processing of the uploaded file - * @param string $saveas_filename name to give to the file + * @param string $saveasfilename name to give to the file * @param int $maxbytes maximum file size * @param mixed $types optional array of file extensions that are allowed or '*' for all * @param string $savepath optional path to save the file to @@ -78,7 +78,7 @@ class repository_upload extends repository { * @param int $areamaxbytes maximum size of the file area. * @return object containing details of the file uploaded */ - public function process_upload($saveas_filename, $maxbytes, $types = '*', $savepath = '/', $itemid = 0, + public function process_upload($saveasfilename, $maxbytes, $types = '*', $savepath = '/', $itemid = 0, $license = null, $author = '', $overwriteexisting = false, $areamaxbytes = FILE_AREA_MAX_BYTES_UNLIMITED) { global $USER, $CFG; @@ -117,29 +117,29 @@ class repository_upload extends repository { } if (!empty($_FILES[$elname]['error'])) { switch ($_FILES[$elname]['error']) { - case UPLOAD_ERR_INI_SIZE: - throw new moodle_exception('upload_error_ini_size', 'repository_upload'); - break; - case UPLOAD_ERR_FORM_SIZE: - throw new moodle_exception('upload_error_form_size', 'repository_upload'); - break; - case UPLOAD_ERR_PARTIAL: - throw new moodle_exception('upload_error_partial', 'repository_upload'); - break; - case UPLOAD_ERR_NO_FILE: - throw new moodle_exception('upload_error_no_file', 'repository_upload'); - break; - case UPLOAD_ERR_NO_TMP_DIR: - throw new moodle_exception('upload_error_no_tmp_dir', 'repository_upload'); - break; - case UPLOAD_ERR_CANT_WRITE: - throw new moodle_exception('upload_error_cant_write', 'repository_upload'); - break; - case UPLOAD_ERR_EXTENSION: - throw new moodle_exception('upload_error_extension', 'repository_upload'); - break; - default: - throw new moodle_exception('nofile'); + case UPLOAD_ERR_INI_SIZE: + throw new moodle_exception('upload_error_ini_size', 'repository_upload'); + break; + case UPLOAD_ERR_FORM_SIZE: + throw new moodle_exception('upload_error_form_size', 'repository_upload'); + break; + case UPLOAD_ERR_PARTIAL: + throw new moodle_exception('upload_error_partial', 'repository_upload'); + break; + case UPLOAD_ERR_NO_FILE: + throw new moodle_exception('upload_error_no_file', 'repository_upload'); + break; + case UPLOAD_ERR_NO_TMP_DIR: + throw new moodle_exception('upload_error_no_tmp_dir', 'repository_upload'); + break; + case UPLOAD_ERR_CANT_WRITE: + throw new moodle_exception('upload_error_cant_write', 'repository_upload'); + break; + case UPLOAD_ERR_EXTENSION: + throw new moodle_exception('upload_error_extension', 'repository_upload'); + break; + default: + throw new moodle_exception('nofile'); } } @@ -149,7 +149,7 @@ class repository_upload extends repository { $sourcefield = $this->get_file_source_info($_FILES[$elname]['name']); $record->source = self::build_source_field($sourcefield); - if (empty($saveas_filename)) { + if (empty($saveasfilename)) { $record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE); } else { $ext = ''; @@ -157,7 +157,7 @@ class repository_upload extends repository { $filename = clean_param($_FILES[$elname]['name'], PARAM_FILE); if (strpos($filename, '.') === false) { // File has no extension at all - do not add a dot. - $record->filename = $saveas_filename; + $record->filename = $saveasfilename; } else { if (preg_match('/\.([a-z0-9]+)$/i', $filename, $match)) { if (isset($match[1])) { @@ -165,26 +165,27 @@ class repository_upload extends repository { } } $ext = !empty($ext) ? $ext : ''; - if (preg_match('#\.(' . $ext . ')$#i', $saveas_filename)) { - // saveas filename contains file extension already - $record->filename = $saveas_filename; + if (preg_match('#\.(' . $ext . ')$#i', $saveasfilename)) { + // The saveas filename contains file extension already. + $record->filename = $saveasfilename; } else { - $record->filename = $saveas_filename . '.' . $ext; + $record->filename = $saveasfilename . '.' . $ext; } } } // Check the file has some non-null contents - usually an indication that a user has - // tried to upload a folder by mistake + // tried to upload a folder by mistake. if (!$this->check_valid_contents($_FILES[$elname]['tmp_name'])) { throw new moodle_exception('upload_error_invalid_file', 'repository_upload', '', $record->filename); } if ($this->mimetypes != '*') { - // check filetype + // Check filetype. $filemimetype = file_storage::mimetype($_FILES[$elname]['tmp_name'], $record->filename); if (!in_array($filemimetype, $this->mimetypes)) { - throw new moodle_exception('invalidfiletype', 'repository', '', get_mimetype_description(array('filename' => $_FILES[$elname]['name']))); + throw new moodle_exception('invalidfiletype', 'repository', '', + get_mimetype_description(array('filename' => $_FILES[$elname]['name']))); } } @@ -212,47 +213,50 @@ class repository_upload extends repository { if (repository::draftfile_exists($record->itemid, $record->filepath, $record->filename)) { $existingfilename = $record->filename; - $unused_filename = repository::get_unused_filename($record->itemid, $record->filepath, $record->filename); - $record->filename = $unused_filename; - $stored_file = $fs->create_file_from_pathname($record, $_FILES[$elname]['tmp_name']); + $unusedfilename = repository::get_unused_filename($record->itemid, $record->filepath, $record->filename); + $record->filename = $unusedfilename; + $storedfile = $fs->create_file_from_pathname($record, $_FILES[$elname]['tmp_name']); if ($overwriteexisting) { - repository::overwrite_existing_draftfile($record->itemid, $record->filepath, $existingfilename, $record->filepath, $record->filename); + repository::overwrite_existing_draftfile($record->itemid, $record->filepath, $existingfilename, + $record->filepath, $record->filename); $record->filename = $existingfilename; } else { $event = array(); $event['event'] = 'fileexists'; $event['newfile'] = new stdClass; $event['newfile']->filepath = $record->filepath; - $event['newfile']->filename = $unused_filename; - $event['newfile']->url = moodle_url::make_draftfile_url($record->itemid, $record->filepath, $unused_filename)->out(false); + $event['newfile']->filename = $unusedfilename; + $event['newfile']->url = moodle_url::make_draftfile_url($record->itemid, $record->filepath, + $unusedfilename)->out(false); $event['existingfile'] = new stdClass; $event['existingfile']->filepath = $record->filepath; $event['existingfile']->filename = $existingfilename; - $event['existingfile']->url = moodle_url::make_draftfile_url($record->itemid, $record->filepath, $existingfilename)->out(false); + $event['existingfile']->url = moodle_url::make_draftfile_url($record->itemid, $record->filepath, + $existingfilename)->out(false); return $event; } } else { - $stored_file = $fs->create_file_from_pathname($record, $_FILES[$elname]['tmp_name']); + $storedfile = $fs->create_file_from_pathname($record, $_FILES[$elname]['tmp_name']); } $logevent = \core\event\draft_file_added::create([ - 'objectid' => $stored_file->get_id(), + 'objectid' => $storedfile->get_id(), 'context' => $context, 'other' => [ 'itemid' => $record->itemid, 'filename' => $record->filename, 'filesize' => $filesize, 'filepath' => $record->filepath, - 'contenthash' => $stored_file->get_contenthash(), + 'contenthash' => $storedfile->get_contenthash(), ], ]); $logevent->trigger(); return array( - 'url'=>moodle_url::make_draftfile_url($record->itemid, $record->filepath, $record->filename)->out(false), - 'id'=>$record->itemid, - 'file'=>$record->filename); + 'url' => moodle_url::make_draftfile_url($record->itemid, $record->filepath, $record->filename)->out(false), + 'id' => $record->itemid, + 'file' => $record->filename); } @@ -267,17 +271,17 @@ class repository_upload extends repository { $fp = fopen($filepath, 'r'); if (!$fp) { - return false; // Cannot read the file - something has gone wrong + return false; // Cannot read the file - something has gone wrong. } while (!feof($fp)) { - // Read the file 4k at a time + // Read the file 4k at a time. $data = fread($fp, $buffersize); if (preg_match('/[^\0]+/', $data)) { fclose($fp); - return true; // Return as soon as a non-null byte is found + return true; // Return as soon as a non-null byte is found. } } - // Entire file is NULL + // Entire file is NULL. fclose($fp); return false; } @@ -294,8 +298,8 @@ class repository_upload extends repository { $ret['norefresh'] = true; $ret['list'] = array(); $ret['dynload'] = false; - $ret['upload'] = array('label'=>get_string('attachment', 'repository'), 'id'=>'repo-form'); - $ret['allowcaching'] = true; // indicates that result of get_listing() can be cached in filepicker.js + $ret['upload'] = array('label' => get_string('attachment', 'repository'), 'id' => 'repo-form'); + $ret['allowcaching'] = true; // Indicates that result of get_listing() can be cached in filepicker.js. return $ret; } diff --git a/webservice/upload.php b/webservice/upload.php index 9a49d98b298..59807b7cfdc 100644 --- a/webservice/upload.php +++ b/webservice/upload.php @@ -52,7 +52,7 @@ $itemid = optional_param('itemid', 0, PARAM_INT); echo $OUTPUT->header(); -// authenticate the user +// Authenticate the user. $token = required_param('token', PARAM_ALPHANUM); $webservicelib = new webservice(); $authenticationinfo = $webservicelib->authenticate_user($token); @@ -67,33 +67,33 @@ $fs = get_file_storage(); $totalsize = 0; $files = array(); -foreach ($_FILES as $fieldname=>$uploaded_file) { - // check upload errors +foreach ($_FILES as $fieldname => $uploadedfile) { + // Check upload errors. if (!empty($_FILES[$fieldname]['error'])) { switch ($_FILES[$fieldname]['error']) { - case UPLOAD_ERR_INI_SIZE: - throw new moodle_exception('upload_error_ini_size', 'repository_upload'); - break; - case UPLOAD_ERR_FORM_SIZE: - throw new moodle_exception('upload_error_form_size', 'repository_upload'); - break; - case UPLOAD_ERR_PARTIAL: - throw new moodle_exception('upload_error_partial', 'repository_upload'); - break; - case UPLOAD_ERR_NO_FILE: - throw new moodle_exception('upload_error_no_file', 'repository_upload'); - break; - case UPLOAD_ERR_NO_TMP_DIR: - throw new moodle_exception('upload_error_no_tmp_dir', 'repository_upload'); - break; - case UPLOAD_ERR_CANT_WRITE: - throw new moodle_exception('upload_error_cant_write', 'repository_upload'); - break; - case UPLOAD_ERR_EXTENSION: - throw new moodle_exception('upload_error_extension', 'repository_upload'); - break; - default: - throw new moodle_exception('nofile'); + case UPLOAD_ERR_INI_SIZE: + throw new moodle_exception('upload_error_ini_size', 'repository_upload'); + break; + case UPLOAD_ERR_FORM_SIZE: + throw new moodle_exception('upload_error_form_size', 'repository_upload'); + break; + case UPLOAD_ERR_PARTIAL: + throw new moodle_exception('upload_error_partial', 'repository_upload'); + break; + case UPLOAD_ERR_NO_FILE: + throw new moodle_exception('upload_error_no_file', 'repository_upload'); + break; + case UPLOAD_ERR_NO_TMP_DIR: + throw new moodle_exception('upload_error_no_tmp_dir', 'repository_upload'); + break; + case UPLOAD_ERR_CANT_WRITE: + throw new moodle_exception('upload_error_cant_write', 'repository_upload'); + break; + case UPLOAD_ERR_EXTENSION: + throw new moodle_exception('upload_error_extension', 'repository_upload'); + break; + default: + throw new moodle_exception('nofile'); } } @@ -102,15 +102,15 @@ foreach ($_FILES as $fieldname=>$uploaded_file) { $file = new stdClass(); $file->filename = clean_param($_FILES[$fieldname]['name'], PARAM_FILE); - // check system maxbytes setting + // Check system maxbytes setting. if (($_FILES[$fieldname]['size'] > get_max_upload_file_size($CFG->maxbytes))) { - // oversize file will be ignored, error added to array to notify - // web service client + // Oversize file will be ignored, error added to array to notify + // web service client. $file->errortype = 'fileoversized'; $file->error = get_string('maxbytes', 'error'); } else { $file->filepath = $_FILES[$fieldname]['tmp_name']; - // calculate total size of upload + // Calculate total size of upload. $totalsize += $_FILES[$fieldname]['size']; // Size of individual file. $file->size = $_FILES[$fieldname]['size']; @@ -135,44 +135,44 @@ if ($maxupload !== USER_CAN_IGNORE_FILE_SIZE_LIMITS && $totalsize > $maxupload) $results = array(); foreach ($files as $file) { if (!empty($file->error)) { - // including error and filename + // Including error and filename. $results[] = $file; continue; } - $file_record = new stdClass; - $file_record->component = 'user'; - $file_record->contextid = $context->id; - $file_record->userid = $USER->id; - $file_record->filearea = 'draft'; - $file_record->filename = $file->filename; - $file_record->filepath = $filepath; - $file_record->itemid = $itemid; - $file_record->license = $CFG->sitedefaultlicense; - $file_record->author = fullname($authenticationinfo['user']); - $file_record->source = serialize((object)array('source' => $file->filename)); - $file_record->filesize = $file->size; + $filerecord = new stdClass; + $filerecord->component = 'user'; + $filerecord->contextid = $context->id; + $filerecord->userid = $USER->id; + $filerecord->filearea = 'draft'; + $filerecord->filename = $file->filename; + $filerecord->filepath = $filepath; + $filerecord->itemid = $itemid; + $filerecord->license = $CFG->sitedefaultlicense; + $filerecord->author = fullname($authenticationinfo['user']); + $filerecord->source = serialize((object)array('source' => $file->filename)); + $filerecord->filesize = $file->size; - //Check if the file already exist - $existingfile = $fs->file_exists($file_record->contextid, $file_record->component, $file_record->filearea, - $file_record->itemid, $file_record->filepath, $file_record->filename); + // Check if the file already exist. + $existingfile = $fs->file_exists($filerecord->contextid, $filerecord->component, $filerecord->filearea, + $filerecord->itemid, $filerecord->filepath, $filerecord->filename); if ($existingfile) { $file->errortype = 'filenameexist'; $file->error = get_string('filenameexist', 'webservice', $file->filename); $results[] = $file; } else { - $stored_file = $fs->create_file_from_pathname($file_record, $file->filepath); - $results[] = $file_record; + $storedfile = $fs->create_file_from_pathname($filerecord, $file->filepath); + $results[] = $filerecord; // Log the event when a file is uploaded to the draft area. $logevent = \core\event\draft_file_added::create([ - 'objectid' => $stored_file->get_id(), + 'objectid' => $storedfile->get_id(), 'context' => $context, 'other' => [ - 'itemid' => $file_record->itemid, - 'filename' => $file_record->filename, - 'filesize' => $file_record->filesize, - 'filepath' => $file_record->filepath, - 'contenthash' => $stored_file->get_contenthash(), + 'itemid' => $filerecord->itemid, + 'filename' => $filerecord->filename, + 'filesize' => $filerecord->filesize, + 'filepath' => $filerecord->filepath, + 'contenthash' => $storedfile->get_contenthash(), ], ]); $logevent->trigger();