From 68bd7b998c7a6af9d9f401ac8a7f72794ed8720e Mon Sep 17 00:00:00 2001
From: Julio Montoya
Date: Sat, 19 May 2012 19:00:26 +0200
Subject: [PATCH] Adding new rule added in the formvalidator "compare_fields"
that checks the value of the selected fields in order to compare with a value
---
main/admin/grade_models.php | 8 +-
.../lib/formvalidator/FormValidator.class.php | 3 +-
.../lib/formvalidator/Rule/CompareFields.php | 28 +++++++
main/inc/lib/grade_model.lib.php | 73 ++++++++++---------
4 files changed, 72 insertions(+), 40 deletions(-)
create mode 100644 main/inc/lib/formvalidator/Rule/CompareFields.php
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}
-
-
-
-
-
-
-
-
-
';
+ $template_title =
+ ' {element}
{error}
+
+
+
+
+
+
+
';
$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') {