Adding new rule added in the formvalidator "compare_fields" that checks the value of the selected fields in order to compare with a value

skala
Julio Montoya 14 years ago
parent e38cb2eb6e
commit 68bd7b998c
  1. 8
      main/admin/grade_models.php
  2. 3
      main/inc/lib/formvalidator/FormValidator.class.php
  3. 28
      main/inc/lib/formvalidator/Rule/CompareFields.php
  4. 73
      main/inc/lib/grade_model.lib.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'));

@ -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();

@ -0,0 +1,28 @@
<?php
require_once 'HTML/QuickForm/Rule.php';
/**
* QuickForm rule to check a date
*/
class HTML_QuickForm_Compare_Fields extends HTML_QuickForm_Rule_Compare
{
/**
* Function to check an array of fields
* @param array of field names
* @param string operator ==, >=, 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;
}
}

@ -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 =
'<div id=' . $i . ' style="display: '.(($i<=$nr_items)?'inline':'none').';" class="control-group">
<p>
$template_percentage =
'<div id=' . $i . ' style="display: '.(($i<=$nr_items)?'inline':'none').';" class="control-group">
<p>
<label class="control-label">{label}</label>
<div class="controls">
<!-- BEGIN required --><span class="form_required">*</span> <!-- END required -->
{element} <!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --> % = ';
$template_acronym = '
<!-- BEGIN required --><span class="form_required">*</span> <!-- END required -->
{element} {label} <!-- BEGIN error --><span class="form_error">{error}</span> <!-- END error -->';
<!-- BEGIN required -->
<span class="form_required">*</span>
<!-- END required -->
{element}
% = ';
$template_acronym = '
<!-- BEGIN required --><span class="form_required">*</span> <!-- END required -->
{element} {label}';
$template_title =
'&nbsp{element}
<a href="javascript:plusItem(' . ($counter+1) . ')">
<img style="display: '.(($counter>=$nr_items)?'inline':'none').';" id="plus-' . ($counter+1) . '" src="../img/icons/22/add.png" alt="'.get_lang('Add').'" title="'.get_lang('Add').'"></img>
</a>
<a href="javascript:minItem(' . ($counter) . ')">
<img style="display: '.(($counter>=$nr_items)?'inline':'none').';" id="min-' . $counter . '" src="../img/delete.png" alt="'.get_lang('Delete').'" title="'.get_lang('Delete').'"></img>
</a>
</div>
</p>
</div>';
$template_title =
'&nbsp{element} <!-- BEGIN error --> <span class="form_error">{error}</span><!-- END error -->
<a href="javascript:plusItem(' . ($counter+1) . ')">
<img style="display: '.(($counter>=$nr_items)?'inline':'none').';" id="plus-' . ($counter+1) . '" src="../img/icons/22/add.png" alt="'.get_lang('Add').'" title="'.get_lang('Add').'"></img>
</a>
<a href="javascript:minItem(' . ($counter) . ')">
<img style="display: '.(($counter>=$nr_items)?'inline':'none').';" id="min-' . $counter . '" src="../img/delete.png" alt="'.get_lang('Delete').'" title="'.get_lang('Delete').'"></img>
</a>
</div></p></div>';
$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]', '<div class="required">'.get_lang('ThisFieldIsRequired'), 'required');
//$form->addRule('components['.$i.'][title]', '<div class="required">'.get_lang('ThisFieldIsRequired'), 'required');
//$form->addRule('components['.$i.'][acronym]', '<div class="required">'.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') {

Loading…
Cancel
Save