/**
* Internal method. Validates all uploaded files.
*/
- function _validate_files() {
+ function _validate_files(&$files) {
+ $files = array();
+
if (empty($_FILES)) {
// we do not need to do any checks because no files were submitted
- // TODO: find out why server side required rule does not work for uploaded files;
- // testing is easily done by always returning true from this function and adding
- // $mform->addRule('soubor', get_string('required'), 'required', null, 'server');
- // and submitting form without selected file
+ // note: server side rules do not work for files - use custom verification in validate() instead
return true;
}
$errors = array();
continue;
}
$errors[$elname] = $this->_upload_manager->files[$elname]['uploadlog'];
+
+ } else if ($this->_upload_manager->files[$elname]['clear']) {
+ $files[$elname] = $this->_upload_manager->files[$elname]['tmp_name'];
}
} else {
error('Incorrect upload attempt!');
// return errors if found
if ($status and 0 == count($errors)){
return true;
+
} else {
+ $files = array();
return $errors;
}
}
return false;
} elseif ($validated === null) {
$internal_val = $mform->validate();
- $moodle_val = $this->validation($mform->exportValues(null, true));
+
+ $files = array();
+ $file_val = $this->_validate_files($files);
+ if ($file_val !== true) {
+ if (!empty($file_val)) {
+ foreach ($file_val as $element=>$msg) {
+ $mform->setElementError($element, $msg);
+ }
+ }
+ $file_val = false;
+ }
+
+ $data = $mform->exportValues(null, true);
+ $moodle_val = $this->validation($data, $files);
if ($moodle_val !== true) {
if ((is_array($moodle_val) && count($moodle_val)!==0)) {
foreach ($moodle_val as $element=>$msg) {
$moodle_val = true;
}
}
- $file_val = $this->_validate_files();
- if ($file_val !== true) {
- if (!empty($file_val)) {
- foreach ($file_val as $element=>$msg) {
- $mform->setElementError($element, $msg);
- }
- }
- $file_val = false;
- }
+
$validated = ($internal_val and $moodle_val and $file_val);
}
return $validated;
return false;
}
+ if (empty($this->_upload_manager->files[$elname]['clear'])) {
+ return false;
+ }
+
if (empty($this->_upload_manager->files[$elname]['tmp_name'])) {
return false;
+ }
- } else {
- $data = "";
- $file = @fopen($this->_upload_manager->files[$elname]['tmp_name'], "rb");
- if ($file) {
- while (!feof($file)) {
- $data .= fread($file, 1024); // TODO: do we really have to do this?
- }
- fclose($file);
- return $data;
- } else {
- return false;
+ $data = "";
+ $file = @fopen($this->_upload_manager->files[$elname]['tmp_name'], "rb");
+ if ($file) {
+ while (!feof($file)) {
+ $data .= fread($file, 1024); // TODO: do we really have to do this?
}
+ fclose($file);
+ return $data;
+ } else {
+ return false;
}
}
* If there are errors return array of errors ("fieldname"=>"error message"),
* otherwise true if ok.
*
+ * Server side rules do not work for uploaded files, implement serverside rules here if needed.
+ *
* @param array $data array of ("fieldname"=>value) of submitted data
- * @return bool array of errors or true if ok
+ * @param array $files array of uploaded files "element_name"=>tmp_file_path
+ * @return bool array of errors or true if ok "element_name"=>"error_description"
*/
- function validation($data) {
- return array();
+ function validation($data, $files) {
+ return true;
}
/**