diff --git a/lib/form/filepicker.js b/lib/form/filepicker.js
index 2a84f0329e1..e27d4af5c38 100644
--- a/lib/form/filepicker.js
+++ b/lib/form/filepicker.js
@@ -1,19 +1,34 @@
M.form_filepicker = {};
-
+M.form_filepicker.Y = null;
+M.form_filepicker.instances = [];
M.form_filepicker.callback = function(params) {
var html = ''+params['file']+'';
document.getElementById('file_info_'+params['client_id']).innerHTML = html;
+ //When file is added then set status of global variable to true
+ var elementname = M.core_filepicker.instances[params['client_id']].options.elementname;
+ M.form_filepicker.instances[elementname].fileadded = true;
+ //generate event to indicate changes which will be used by disable if or validation code
+ M.form_filepicker.Y.one('#id_'+elementname).simulate('change');
};
/**
* This fucntion is called for each file picker on page.
*/
M.form_filepicker.init = function(Y, options) {
+ //Keep reference of YUI, so that it can be used in callback.
+ M.form_filepicker.Y = Y;
+
+ //For client side validation, initialize file status for this filepicker
+ M.form_filepicker.instances[options.elementname] = {};
+ M.form_filepicker.instances[options.elementname].fileadded = false;
+
+ //Set filepicker callback
options.formcallback = M.form_filepicker.callback;
+
if (!M.core_filepicker.instances[options.client_id]) {
- M.core_filepicker.init(Y, options);
+ M.core_filepicker.init(Y, options);
}
Y.on('click', function(e, client_id) {
e.preventDefault();
diff --git a/lib/form/filepicker.php b/lib/form/filepicker.php
index 26f57fc53b1..cfa491d3366 100644
--- a/lib/form/filepicker.php
+++ b/lib/form/filepicker.php
@@ -79,6 +79,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
$args->maxbytes = $this->_options['maxbytes'];
$args->context = $PAGE->context;
$args->buttonname = $elname.'choose';
+ $args->elementname = $elname;
$html = $this->_getTabs();
$fp = new file_picker($args);
@@ -87,7 +88,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
$html .= $OUTPUT->render($fp);
$html .= '';
- $module = array('name'=>'form_filepicker', 'fullpath'=>'/lib/form/filepicker.js', 'requires'=>array('core_filepicker'));
+ $module = array('name'=>'form_filepicker', 'fullpath'=>'/lib/form/filepicker.js', 'requires'=>array('core_filepicker', 'node', 'node-event-simulate'));
$PAGE->requires->js_init_call('M.form_filepicker.init', array($fp->options), true, $module);
$nonjsfilepicker = new moodle_url('/repository/draftfiles_manager.php', array(
diff --git a/lib/form/form.js b/lib/form/form.js
index 140a47502e3..0b69586b760 100644
--- a/lib/form/form.js
+++ b/lib/form/form.js
@@ -277,7 +277,17 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
return;
}
- lock = lock || this.get('value') == value;
+ //check for filepicker status
+ if (this.getAttribute('class').toLowerCase() == 'filepickerhidden') {
+ var elementname = this.getAttribute('name');
+ if (elementname && M.form_filepicker.instances[elementname].fileadded) {
+ lock = false;
+ } else {
+ lock = true;
+ }
+ } else {
+ lock = lock || this.get('value') == value;
+ }
});
return {
lock : lock,
@@ -298,7 +308,17 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
return;
}
- lock = lock || this.get('value') != value;
+ //check for filepicker status
+ if (this.getAttribute('class').toLowerCase() == 'filepickerhidden') {
+ var elementname = this.getAttribute('name');
+ if (elementname && M.form_filepicker.instances[elementname].fileadded) {
+ lock = true;
+ } else {
+ lock = false;
+ }
+ } else {
+ lock = lock || this.get('value') != value;
+ }
});
return {
lock : lock,
diff --git a/lib/formslib.php b/lib/formslib.php
index 7ca16279394..cee1aafaeda 100644
--- a/lib/formslib.php
+++ b/lib/formslib.php
@@ -2327,7 +2327,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
if (!$form->isFrozen()) {
$args = $form->getLockOptionObject();
if (count($args[1]) > 0) {
- $PAGE->requires->js_init_call('M.form.initFormDependencies', $args, false, moodleform::get_js_module());
+ $PAGE->requires->js_init_call('M.form.initFormDependencies', $args, true, moodleform::get_js_module());
}
}
}