/** * Internal method. Validates all old-style uploaded files. */ function _validate_files(&$files) { global $CFG, $COURSE; $files = array(); if (empty($_FILES)) { // we do not need to do any checks because no files were submitted // note: server side rules do not work for files - use custom verification in validate() instead return true; } $errors = array(); $filenames = array(); // now check that we really want each file foreach ($_FILES as $elname => $file) { $required = $this->_form->isElementRequired($elname); if ($file['error'] == 4 and $file['size'] == 0) { if ($required) { $errors[$elname] = get_string('required'); } unset($_FILES[$elname]); continue; } if (!empty($file['error'])) { $errors[$elname] = file_get_upload_error($file['error']); unset($_FILES[$elname]); continue; } if (!is_uploaded_file($file['tmp_name'])) { // TODO: improve error message $errors[$elname] = get_string('error'); unset($_FILES[$elname]); continue; } if (!$this->_form->elementExists($elname) or !$this->_form->getElementType($elname) == 'file') { // hmm, this file was not requested unset($_FILES[$elname]); continue; } /* // TODO: rethink the file scanning if ($CFG->runclamonupload) { if (!clam_scan_moodle_file($_FILES[$elname], $COURSE)) { $errors[$elname] = $_FILES[$elname]['uploadlog']; unset($_FILES[$elname]); continue; } } */ $filename = clean_param($_FILES[$elname]['name'], PARAM_FILE); if ($filename === '') { // TODO: improve error message - wrong chars $errors[$elname] = get_string('error'); unset($_FILES[$elname]); continue; } if (in_array($filename, $filenames)) { // TODO: improve error message - duplicate name $errors[$elname] = get_string('error'); unset($_FILES[$elname]); continue; } $filenames[] = $filename; $_FILES[$elname]['name'] = $filename; $files[$elname] = $_FILES[$elname]['tmp_name']; } // return errors if found if (count($errors) == 0) { return true; } else { $files = array(); return $errors; } }