diff --git a/main/admin/grade_models.php b/main/admin/grade_models.php index 084bd15022..74f417e8ac 100644 --- a/main/admin/grade_models.php +++ b/main/admin/grade_models.php @@ -113,11 +113,13 @@ switch ($action) { $url = api_get_self().'?action='.Security::remove_XSS($_GET['action']); $form = $obj->return_form($url, 'add'); - + + + // The validation or display if ($form->validate()) { - if ($check) { - $values = $form->exportValues(); + if ($check) { + $values = $form->exportValues(); $res = $obj->save($values); if ($res) { Display::display_confirmation_message(get_lang('ItemAdded')); diff --git a/main/inc/lib/formvalidator/FormValidator.class.php b/main/inc/lib/formvalidator/FormValidator.class.php index b59afa5329..9a7f981d32 100644 --- a/main/inc/lib/formvalidator/FormValidator.class.php +++ b/main/inc/lib/formvalidator/FormValidator.class.php @@ -143,7 +143,8 @@ class FormValidator extends HTML_QuickForm $this->registerRule('username', null, 'HTML_QuickForm_Rule_Username', $dir . 'Rule/Username.php'); $this->registerRule('filetype', null, 'HTML_QuickForm_Rule_Filetype', $dir . 'Rule/Filetype.php'); $this->registerRule('multiple_required', 'required', 'HTML_QuickForm_Rule_MultipleRequired', $dir . 'Rule/MultipleRequired.php'); - $this->registerRule('url', null, 'HTML_QuickForm_Rule_Url', $dir . 'Rule/Url.php'); + $this->registerRule('url', null, 'HTML_QuickForm_Rule_Url', $dir . 'Rule/Url.php'); + $this->registerRule('compare_fields', null, 'HTML_QuickForm_Compare_Fields', $dir . 'Rule/CompareFields.php'); // Modify the default templates $renderer = & $this->defaultRenderer(); diff --git a/main/inc/lib/formvalidator/Rule/CompareFields.php b/main/inc/lib/formvalidator/Rule/CompareFields.php new file mode 100644 index 0000000000..866a795e76 --- /dev/null +++ b/main/inc/lib/formvalidator/Rule/CompareFields.php @@ -0,0 +1,28 @@ +=, etc + * @param string the value to compare + * @return boolean True if date is valid + */ + function validate($values, $operator_and_max_value) { + if (is_array($values) && !empty($values) && !empty($operator_and_max_value)) { + $final_value = 0; + foreach ($values as $value) { + $final_value += $value; + } + $params = explode('@', $operator_and_max_value); + $operator = $params[0]; + $max_value = $params[1]; + return parent::validate(array($final_value, $max_value), $operator); + } + return false; + } +} \ No newline at end of file diff --git a/main/inc/lib/grade_model.lib.php b/main/inc/lib/grade_model.lib.php index 799d8c3727..fd2c19c38f 100644 --- a/main/inc/lib/grade_model.lib.php +++ b/main/inc/lib/grade_model.lib.php @@ -78,7 +78,7 @@ class GradeModel extends Model { //Get components $nr_items = 2; - $max = 10; + $max = 10; // Setting the defaults @@ -90,10 +90,15 @@ class GradeModel extends Model { if (!empty($components)) { $nr_items = count($components) -1; } - } + } + + $form->addElement('hidden', 'maxvalue', '100'); + $form->addElement('hidden', 'minvalue', '0'); $renderer = & $form->defaultRenderer(); + $component_array = array(); + for ($i = 0; $i <= $max; $i++) { $counter = $i; $form->addElement('text', 'components['.$i.'][percentage]', null, array('class' => 'span1')); @@ -101,52 +106,48 @@ class GradeModel extends Model { $form->addElement('text', 'components['.$i.'][title]', null, array('class' => 'span3')); $form->addElement('hidden', 'components['.$i.'][id]', null, array('class' => 'span3')); - $template_percentage = - '
- -

+ $template_percentage = + '

+

+ * + {element} {error} % = '; + + $template_acronym = ' + * + {element} {label} {error} '; - - * - - {element} - % = '; - - $template_acronym = ' - * - {element} {label}'; - - $template_title = - ' {element} - - '.get_lang('Add').' - - - '.get_lang('Delete').' - -
-

-
'; + $template_title = + ' {element} {error} + + '.get_lang('Add').' + + + '.get_lang('Delete').' + +

'; $renderer->setElementTemplate($template_title, 'components['.$i.'][title]'); $renderer->setElementTemplate($template_percentage , 'components['.$i.'][percentage]'); $renderer->setElementTemplate($template_acronym , 'components['.$i.'][acronym]'); if ($i == 0) { - //$form->addRule('components['.$i.'][percentage]', '
'.get_lang('ThisFieldIsRequired'), 'required'); - //$form->addRule('components['.$i.'][title]', '
'.get_lang('ThisFieldIsRequired'), 'required'); - //$form->addRule('components['.$i.'][acronym]', '
'.get_lang('ThisFieldIsRequired'), 'required'); - + $form->addRule('components['.$i.'][percentage]', get_lang('ThisFieldIsRequired'), 'required'); + $form->addRule('components['.$i.'][title]', get_lang('ThisFieldIsRequired'), 'required'); + $form->addRule('components['.$i.'][acronym]', get_lang('ThisFieldIsRequired'), 'required'); } + $form->addRule('components['.$i.'][percentage]', get_lang('OnlyNumbers'), 'numeric'); + + $form->addRule(array('components['.$i.'][percentage]', 'maxvalue'), get_lang('Over100'), 'compare', '<='); + $form->addRule(array('components['.$i.'][percentage]', 'minvalue'), get_lang('UnderMin'), 'compare', '>='); + + $component_array[] = 'components['.$i.'][percentage]'; } - //Required field - - - - //$this->addRule('score', get_lang('OnlyNumbers'), 'numeric',null,'client'); + //New rule added in the formvalidator compare_fields that filters a group of fields in order to compare with the wanted value + $form->addRule($component_array, get_lang('AllMustWeight100'), 'compare_fields', '==@100'); + $form->addElement('advanced_settings', get_lang('AllMustWeight100')); if ($action == 'edit') {