Skip to content

Commit

Permalink
MDL-25937 Froms Library: Added server side validation for filepicker …
Browse files Browse the repository at this point in the history
…and filemanager
  • Loading branch information
Rajesh Taneja committed Sep 16, 2011
1 parent 9cfaebb commit f03a17b
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
2 changes: 1 addition & 1 deletion grade/import/xml/grade_import_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ function definition () {
$mform->setType('id', PARAM_INT);

$mform->addElement('header', 'general', get_string('importfile', 'grades'));
$mform->disabledIf('url', 'userfile', 'noteq', '');

$mform->addElement('advcheckbox', 'feedback', get_string('importfeedback', 'grades'));
$mform->setDefault('feedback', 0);
Expand All @@ -42,6 +41,7 @@ function definition () {
$mform->disabledIf('userfile', 'url', 'noteq', '');

$mform->addElement('text', 'url', get_string('fileurl', 'gradeimport_xml'), 'size="80"');
$mform->disabledIf('url', 'userfile', 'noteq', '');

if (!empty($CFG->gradepublishing)) {
$mform->addElement('header', 'publishing', get_string('publishing', 'grades'));
Expand Down
1 change: 1 addition & 0 deletions lib/form/filemanager.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ function MoodleQuickForm_filemanager($elementName=null, $elementLabel=null, $att
if (!empty($options['maxbytes'])) {
$this->_options['maxbytes'] = get_max_upload_file_size($CFG->maxbytes, $options['maxbytes']);
}
$this->_type = 'filemanager';
parent::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
}

Expand Down
1 change: 1 addition & 0 deletions lib/form/filepicker.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attr
if (!empty($options['maxbytes'])) {
$this->_options['maxbytes'] = get_max_upload_file_size($CFG->maxbytes, $options['maxbytes']);
}
$this->_type = 'filepicker';
parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
}

Expand Down
47 changes: 47 additions & 0 deletions lib/formslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,43 @@ function _validate_files(&$files) {
}
}

/**
* Internal method. Validates filepicker and filemanager files if they are
* set as required fields. Also, sets the error message if encountered one.
*
* @return bool/array with errors
*/
function _validate_draft_files() {
global $USER;
$mform =& $this->_form;

$errors = array();
//Go through all the required elements and make sure you hit filepicker or
//filemanager element.
foreach ($mform->_rules as $elementname => $rules) {
$elementtype = $mform->getElementType($elementname);
//If element is of type filepicker then do validation
if (($elementtype == 'filepicker') || ($elementtype == 'filemanager')){
//Check if rule defined is required rule
foreach ($rules as $rule) {
if ($rule['type'] == 'required') {
$draftid = (int)$mform->getSubmitValue($elementname);
$fs = get_file_storage();
$context = get_context_instance(CONTEXT_USER, $USER->id);
if (!$files = $fs->get_area_files($context->id, 'user', 'draft', $draftid, 'id DESC', false)) {
$errors[$elementname] = $rule['message'];
}
}
}
}
}
if (empty($errors)) {
return true;
} else {
return $errors;
}
}

/**
* Load in existing data as form defaults. Usually new entry defaults are stored directly in
* form definition (new entry form); this function is used to load in data where values
Expand Down Expand Up @@ -439,6 +476,16 @@ function validate_defined_fields($validateonnosubmit=false) {

$files = array();
$file_val = $this->_validate_files($files);
//check draft files for validation and flag them if required files
//are not in draft area.
$draftfilevalue = $this->_validate_draft_files();

if ($file_val !== true && $draftfilevalue !== true) {
$file_val = array_merge($file_val, $draftfilevalue);
} else if ($draftfilevalue !== true) {
$file_val = $draftfilevalue;
} //default is file_val, so no need to assign.

if ($file_val !== true) {
if (!empty($file_val)) {
foreach ($file_val as $element=>$msg) {
Expand Down

0 comments on commit f03a17b

Please sign in to comment.