Add FloatNumber element to FormValidator to handle float numbers

- It should be only used with $formValidator->addFloat()
- The float number check that it has a float number with a
  decimal point as a comma "," or a point ".".
  The element transforms 3,1415 to 3.1415

See BT#12133
pull/2487/head
jmontoyaa 9 years ago
parent 2a48183ba8
commit afdb79e253
  1. 1
      main/gradebook/gradebook_add_link.php
  2. 3
      main/gradebook/gradebook_edit_cat.php
  3. 72
      main/gradebook/lib/fe/catform.class.php
  4. 138
      main/gradebook/lib/fe/evalform.class.php
  5. 65
      main/gradebook/lib/fe/linkaddeditform.class.php
  6. 19
      main/inc/lib/formvalidator/Element/DateRangePicker.php
  7. 84
      main/inc/lib/formvalidator/Element/FloatNumber.php
  8. 79
      main/inc/lib/formvalidator/FormValidator.class.php
  9. 219
      main/inc/lib/pear/HTML/QuickForm.php

@ -85,7 +85,6 @@ if (isset($typeSelected) && $typeSelected != '0') {
$parent_cat = Category::load($addvalues['select_gradebook']);
$global_weight = $category[0]->get_weight();
$link->set_weight($addvalues['weight_mask']);
if ($link->needs_max()) {

@ -62,7 +62,7 @@ if ($form->validate()) {
$cat->setGenerateCertificates(false);
}
if ($values['hid_parent_id'] == 0 ) {
if ($values['hid_parent_id'] == 0) {
$cat->set_certificate_min_score($values['certif_min_score']);
}
@ -79,7 +79,6 @@ if ($form->validate()) {
} else {
$cat->setIsRequirement(false);
}
$cat->save();
header('Location: '.Security::remove_XSS($_SESSION['gradebook_dest']).'?editcat=&selectcat=' . $cat->get_parent_id().'&'.api_get_cidreq());
exit;

@ -16,11 +16,13 @@ class CatForm extends FormValidator
private $category_object;
/**
* CatForm constructor.
* Builds a form containing form items based on a given parameter
* @param int form_type 1=add, 2=edit,3=move,4=browse
* @param obj cat_obj the category object
* @param string form name
* @param method method
* @param string $form_type 1=add, 2=edit,3=move,4=browse
* @param string $category_object
* @param string $form_name
* @param string $method
* @param null $action
*/
public function __construct(
$form_type,
@ -31,7 +33,7 @@ class CatForm extends FormValidator
) {
parent :: __construct($form_name, $method, $action);
$this->form_type = $form_type;
if (isset ($category_object)) {
if (isset($category_object)) {
$this->category_object = $category_object;
}
if ($this->form_type == self :: TYPE_EDIT) {
@ -86,7 +88,6 @@ class CatForm extends FormValidator
//check if we are a root category
//if so, you can only choose between courses
if ($this->category_object->get_parent_id() == '0') {
//$select = $this->addElement('select','select_course',array(get_lang('PickACourse'),'test'), null);
$coursecat = Category :: get_not_created_course_categories(
api_get_user_id()
);
@ -146,6 +147,7 @@ class CatForm extends FormValidator
$session_id,
false
); //already init
$links = null;
if (isset($test_cats[0])) {
$links = $test_cats[0]->get_links();
@ -167,17 +169,17 @@ class CatForm extends FormValidator
$this->setDefaults(
array(
'name' => $category_name,
'description' => $this->category_object->get_description(),
'hid_user_id' => $this->category_object->get_user_id(),
'hid_parent_id' => $this->category_object->get_parent_id(),
'grade_model_id' => $grade_model_id,
'skills' => $skills,
'weight' => $this->category_object->get_weight(),
'visible' => $this->category_object->is_visible(),
'certif_min_score' => $this->category_object->get_certificate_min_score(),
'name' => $category_name,
'description' => $this->category_object->get_description(),
'hid_user_id' => $this->category_object->get_user_id(),
'hid_parent_id' => $this->category_object->get_parent_id(),
'grade_model_id' => $grade_model_id,
'skills' => $skills,
'weight' => $this->category_object->get_weight(),
'visible' => $this->category_object->is_visible(),
'certif_min_score' => $this->category_object->get_certificate_min_score(),
'generate_certificates' => $this->category_object->getGenerateCertificates(),
'is_requirement' => $this->category_object->getIsRequirement()
'is_requirement' => $this->category_object->getIsRequirement(),
)
);
$this->addElement('hidden', 'hid_id', $this->category_object->get_id());
@ -194,7 +196,6 @@ class CatForm extends FormValidator
*/
private function build_basic_form()
{
$this->addElement('hidden', 'zero', 0);
$this->addText(
'name',
get_lang('CategoryName'),
@ -217,15 +218,16 @@ class CatForm extends FormValidator
} else {
$value = 100;
}
$this->addText('weight',
$this->addFloat(
'weight',
array(
get_lang('TotalWeight'),
get_lang('TotalSumOfWeights')
get_lang('TotalSumOfWeights'),
),
true,
array('value' => $value, 'class' => 'span1', 'maxlength' => '5')
array('value' => $value, 'maxlength' => '5')
);
$this->addRule('weight', get_lang('ThisFieldIsRequired'), 'required');
$skillsDefaults = [];
@ -263,24 +265,23 @@ class CatForm extends FormValidator
$this->addText(
'certif_min_score',
get_lang('CertificateMinScore'),
false,
true,
array('maxlength' => '5')
);
$this->addRule(
'certif_min_score',
get_lang('ThisFieldIsRequired'),
'required'
);
$this->addRule(
'certif_min_score',
get_lang('OnlyNumbers'),
'numeric'
);
$this->addRule(
array('certif_min_score', 'zero'),
'certif_min_score',
get_lang('NegativeValue'),
'compare',
'>='
'>=',
'server',
false,
false,
0
);
} else {
$this->addElement('checkbox', 'visible', null, get_lang('Visible'));
@ -296,11 +297,8 @@ class CatForm extends FormValidator
if (isset($this->category_object) &&
$this->category_object->get_parent_id() == 0 &&
(api_is_platform_admin() || api_get_setting(
'teachers_can_change_grade_model_settings'
) == 'true')
(api_is_platform_admin() || api_get_setting('teachers_can_change_grade_model_settings') == 'true')
) {
// Getting grade models
$obj = new GradeModel();
$obj->fill_grade_model_select_in_form(
@ -368,14 +366,6 @@ class CatForm extends FormValidator
$this->addButtonUpdate(get_lang('EditCategory'));
}
$this->addRule('weight', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(
array('weight', 'zero'),
get_lang('NegativeValue'),
'compare',
'>='
);
$setting = api_get_setting('tool_visible_by_default_at_creation');
$visibility_default = 1;
if (isset($setting['gradebook']) && $setting['gradebook'] == 'false') {

@ -127,8 +127,6 @@ class EvalForm extends FormValidator
protected function build_all_results_edit_form()
{
//extra field for check on maxvalue
$this->addElement('hidden', 'maxvalue', $this->evaluation_object->get_max());
$this->addElement('hidden', 'minvalue', 0);
$this->addElement('header', get_lang('EditResult'));
$renderer = & $this->defaultRenderer();
@ -181,35 +179,18 @@ class EvalForm extends FormValidator
$result = $result_and_user['result'];
$renderer = &$this->defaultRenderer();
$this->addText(
$this->addFloat(
'score['.$result->get_id().']',
$this->build_stud_label($user['user_id'], $user['username'], $user['lastname'], $user['firstname']),
false,
array(
'class' => "span2",
'maxlength' => 5
)
);
$this->addRule('score[' . $result->get_id() . ']', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(
array(
'score['.$result->get_id().']',
'maxvalue',
),
get_lang('OverMax'),
'compare',
'<='
);
$this->addRule(
array(
'score['.$result->get_id().']',
'minvalue',
),
get_lang('UnderMin'),
'compare',
'>='
false,
0,
$this->evaluation_object->get_max()
);
$defaults['score[' . $result->get_id() . ']'] = $result->get_score();
if (api_is_western_name_order()) {
@ -308,18 +289,18 @@ class EvalForm extends FormValidator
$scoreColumnProperties['autofocus'] = '';
$firstUser = false;
}
//user_id, user.username, lastname, firstname
$this->addText(
$this->addFloat(
$element_name,
$this->build_stud_label($user[0], $user[1], $user[2], $user[3]),
false,
$scoreColumnProperties
$scoreColumnProperties,
false,
0,
$this->evaluation_object->get_max()
);
$this->addRule($element_name, get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array($element_name, 'maxvalue'), get_lang('OverMax'), 'compare', '<=');
$this->addRule(array($element_name, 'minvalue'), get_lang('UnderMin'), 'compare', '>=');
if (api_is_western_name_order()) {
$user_info = '<td align="left" >' . $user[3] . '</td>';
$user_info .= '<td align="left" >' . $user[2] . '</td>';
@ -358,16 +339,18 @@ class EvalForm extends FormValidator
*/
protected function build_result_edit_form()
{
$this->setDefaults(array(
'score' => $this->result_object->get_score(),
'maximum' => $this->evaluation_object->get_max()
));
$this->setDefaults(
array(
'score' => $this->result_object->get_score(),
'maximum' => $this->evaluation_object->get_max(),
)
);
$userInfo = api_get_user_info($this->result_object->get_user_id());
$renderer = & $this->defaultRenderer();
$renderer->setCustomElementTemplate('<span>{element}</span> ');
$this->addHeader(get_lang('User').': '.$userInfo['complete_name']);
$this->addText(
$this->addFloat(
'score',
array(
get_lang('Score'),
@ -378,42 +361,14 @@ class EvalForm extends FormValidator
array(
'size' => '4',
'maxlength' => '5',
)
),
false,
0,
$this->evaluation_object->get_max()
);
$this->addButtonSave(get_lang('Edit'), 'submit');
$this->addElement('hidden', 'minvalue', 0);
$this->addElement('hidden', 'hid_user_id', $this->result_object->get_user_id());
$this->addElement('hidden', 'maxvalue', $this->evaluation_object->get_max());
$this->addRule(
'score',
get_lang('OnlyNumbers'),
'numeric',
null,
'client'
);
$this->addRule(
array(
'score',
'maxvalue',
),
get_lang('OverMax'),
'compare',
'<=',
'client'
);
$this->addRule(
array(
'score',
'minvalue',
),
get_lang('UnderMin'),
'compare',
'>=',
'client'
);
}
/**
@ -483,14 +438,18 @@ class EvalForm extends FormValidator
}
$this->addElement('header', $form_title);
$this->addElement('hidden', 'zero', 0);
$this->addElement('hidden', 'hid_user_id');
$this->addElement('hidden', 'hid_course_code');
$this->addText('name', get_lang('EvaluationName'), true, array(
'maxlength' => '50',
'id' => 'evaluation_title'
));
$this->addText(
'name',
get_lang('EvaluationName'),
true,
array(
'maxlength' => '50',
'id' => 'evaluation_title',
)
);
$cat_id = $this->evaluation_object->get_category_id();
@ -517,7 +476,6 @@ class EvalForm extends FormValidator
array('id' => 'hid_category_id')
);
$this->addRule('hid_category_id', get_lang('ThisFieldIsRequired'), 'nonzero');
$default_weight = 0;
if (!empty($all_categories)) {
foreach ($all_categories as $my_cat) {
@ -543,7 +501,7 @@ class EvalForm extends FormValidator
}
}
$this->addText(
$this->addFloat(
'weight_mask',
array(
get_lang('Weight'),
@ -557,12 +515,6 @@ class EvalForm extends FormValidator
)
);
/* $this->addText('weight', array(null, null, '/ <span id="max_weight">'.$default_weight.'</span>'), true, array (
'size' => '4',
'maxlength' => '5',
'class' => 'span1'
)); */
if ($edit) {
if (!$this->evaluation_object->has_results()) {
$this->addText(
@ -585,10 +537,14 @@ class EvalForm extends FormValidator
);
}
} else {
$this->addText('max', get_lang('QualificationNumeric'), true, array(
'class' => 'span1',
'maxlength' => '5'
));
$this->addText(
'max',
get_lang('QualificationNumeric'),
true,
array(
'maxlength' => '5',
)
);
$default_max = api_get_setting('gradebook_default_weight');
$defaults['max'] = isset($default_max) ? $default_max : 100;
$this->setDefaults($defaults);
@ -597,11 +553,8 @@ class EvalForm extends FormValidator
$this->addElement('textarea', 'description', get_lang('Description'));
$this->addRule('hid_category_id', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('checkbox', 'visible', null, get_lang('Visible'));
$this->addRule('weight_mask', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array('weight_mask', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
$this->addRule('max', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array('max', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
$this->addRule('max', get_lang('NegativeValue'), 'compare', '>=');
$setting = api_get_setting('tool_visible_by_default_at_creation');
$visibility_default = 1;
if (isset($setting['gradebook']) && $setting['gradebook'] == 'false') {
@ -620,6 +573,13 @@ class EvalForm extends FormValidator
parent :: setDefaults($defaults, $filter);
}
/**
* @param $id
* @param $username
* @param $lastname
* @param $firstname
* @return string
*/
private function build_stud_label($id, $username, $lastname, $firstname)
{
$opendocurl_start = '';
@ -636,7 +596,7 @@ class EvalForm extends FormValidator
return $opendocurl_start . api_get_person_name($firstname, $lastname) . ' (' . $username . ')' . $opendocurl_end;
}
function sort_by_user($item1, $item2)
public function sort_by_user($item1, $item2)
{
$user1 = $item1['user'];
$user2 = $item2['user'];

@ -31,16 +31,14 @@ class LinkAddEditForm extends FormValidator
if (isset($link_object)) {
$link = $link_object;
} elseif (isset($link_type) && isset($category_object)) {
$link = LinkFactory :: create ($link_type);
$link = LinkFactory:: create($link_type);
$link->set_course_code(api_get_course_id());
$link->set_category_id($category_object[0]->get_id());
} else {
die ('LinkAddEditForm error: define link_type/category_object or link_object');
die('LinkAddEditForm error: define link_type/category_object or link_object');
}
$defaults = array();
$this->addElement('hidden', 'zero', 0);
if (!empty($_GET['editlink'])) {
$this->addElement('header', '', get_lang('EditLink'));
}
@ -56,8 +54,18 @@ class LinkAddEditForm extends FormValidator
}
}
} else {
$this->addElement('label', get_lang('Name'), '<span class="freeze">'.$link->get_name().' ['.$link->get_type_name().']</span>');
$this->addElement('hidden','name_link',$link->get_name(),array('id'=>'name_link'));
$this->addElement(
'label',
get_lang('Name'),
'<span class="freeze">'.$link->get_name().' ['.$link->get_type_name().']</span>'
);
$this->addElement(
'hidden',
'name_link',
$link->get_name(),
array('id' => 'name_link')
);
}
if (count($category_object) == 1) {
@ -71,7 +79,6 @@ class LinkAddEditForm extends FormValidator
array('id' => 'hide_category_id')
);
$this->addRule('select_gradebook', get_lang('ThisFieldIsRequired'), 'nonzero');
$default_weight = 0;
if (!empty($category_object)) {
foreach ($category_object as $my_cat) {
@ -95,33 +102,25 @@ class LinkAddEditForm extends FormValidator
}
}
$this->addText(
$this->addFloat(
'weight_mask',
array(get_lang('Weight'), null, ' [0 .. <span id="max_weight">'.$category_object[0]->get_weight().'</span>] '),
array(
get_lang('Weight'),
null,
' [0 .. <span id="max_weight">'.$category_object[0]->get_weight(
).'</span>] ',
),
true,
array(
'size' => '4',
'maxlength' => '5',
'class' => 'span1'
'maxlength' => '5'
)
);
$this->addElement('hidden', 'weight');
/*
// ELEMENT: weight
$this->addText('weight', array(get_lang('Weight'), null, '/ <span id="max_weight">'.$default_weight.'</span>'), true, array (
'size' => '4',
'maxlength' => '5',
'class' => 'span1'
));*/
$this->addRule('weight_mask', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array ('weight_mask', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
if ($form_type == self :: TYPE_EDIT) {
$parent_cat = Category :: load($link->get_category_id());
if ($parent_cat[0]->get_parent_id() == 0) {
$values['weight'] = $link->get_weight();
} else {
@ -140,11 +139,20 @@ class LinkAddEditForm extends FormValidator
// ELEMENT: max
if ($link->needs_max()) {
if ($form_type == self :: TYPE_EDIT && $link->has_results()) {
$this->addText('max', get_lang('QualificationNumeric'), false, array ('size' => '4','maxlength' => '5', 'disabled' => 'disabled'));
$this->addText(
'max',
get_lang('QualificationNumeric'),
false,
array(
'size' => '4',
'maxlength' => '5',
'disabled' => 'disabled',
)
);
} else {
$this->addText('max', get_lang('QualificationNumeric'), true, array ('size' => '4','maxlength' => '5'));
$this->addRule('max', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array ('max', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
$this->addRule('max', get_lang('NegativeValue'), 'compare', '>=');
}
if ($form_type == self :: TYPE_EDIT) {
$defaults['max'] = $link->get_max();
@ -153,7 +161,12 @@ class LinkAddEditForm extends FormValidator
// ELEMENT: description
if ($link->needs_name_and_description()) {
$this->addElement('textarea', 'description', get_lang('Description'), array ('rows' => '3','cols' => '34'));
$this->addElement(
'textarea',
'description',
get_lang('Description'),
array('rows' => '3', 'cols' => '34')
);
if ($form_type == self :: TYPE_EDIT) {
$defaults['description'] = $link->get_description();
}

@ -167,4 +167,23 @@ class DateRangePicker extends HTML_QuickForm_text
return true;
}
/**
* @param mixed $value
* @param array $submitValues
* @param array $errors
*/
public function getSubmitValue($value, &$submitValues, &$errors)
{
/** @var DateRangePicker $element */
$elementName = $this->getName();
$parsedDates = $this->parseDateRange($value);
$validateFormat = $this->getAttribute('validate_format');
if (!$this->validateDates($parsedDates, $validateFormat)) {
$errors[$elementName] = get_lang('CheckDates');
}
$submitValues[$elementName.'_start'] = $parsedDates['start'];
$submitValues[$elementName.'_end'] = $parsedDates['end'];
}
}

@ -0,0 +1,84 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Float element
*
* Accepts values like 3.1415 and 3,1415 (its processed and converted to 3.1415)
*
* Class Float
*/
class FloatNumber extends HTML_QuickForm_text
{
/**
* @param string $elementName
* @param string $elementLabel
* @param array $attributes
*/
public function __construct($elementName = null, $elementLabel = null, $attributes = null)
{
if (!isset($attributes['id'])) {
$attributes['id'] = $elementName;
}
$attributes['type'] = 'float';
$attributes['class'] = 'form-control';
parent::__construct($elementName, $elementLabel, $attributes);
$this->_appendName = true;
$this->setType('float');
}
/**
* @param string $value
*/
public function setValue($value)
{
$value = api_float_val($value);
$this->updateAttributes(
array(
'value'=>$value
)
);
}
/**
* @return float
*/
public function getValue()
{
$value = $this->getAttribute('value');
$value = api_float_val($value);
return $value;
}
/**
* @param mixed $value
* @param array $submitValues
* @param array $errors
*/
public function getSubmitValue($value, &$submitValues, &$errors)
{
$value = api_float_val($value);
$elementName = $this->getName();
$submitValues[$elementName] = $value;
return $value;
}
/**
* We check the options and return only the values that _could_ have been
* selected. We also return a scalar value if select is not "multiple"
*/
public function exportValue(&$submitValues, $assoc = false)
{
$value = $this->_findValue($submitValues);
$value = api_float_val($value);
if (!$value) {
$value = '';
}
return $this->_prepareValue($value, $assoc);
}
}

@ -1185,6 +1185,85 @@ EOT;
);
}
/**
* @param $name
* @param $label
* @param bool $required
* @param array $attributes
* @param bool $allowNegative
* @param null $minValue
* @param null $maxValue
*/
public function addFloat(
$name,
$label,
$required = false,
$attributes = [],
$allowNegative = false,
$minValue = null,
$maxValue = null
) {
$this->addElement(
'FloatNumber',
$name,
$label,
$attributes
);
$this->applyFilter($name, 'trim');
if ($required) {
$this->addRule($name, get_lang('ThisFieldIsRequired'), 'required');
}
// Rule allows "," and "."
/*$this->addRule(
$name,
get_lang('OnlyNumbers'),
'regex',
'/(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)|(^-?\d\d*\,\d*$)|(^-?\,\d\d*$)/'
);*/
if ($allowNegative == false) {
$this->addRule(
$name,
get_lang('NegativeValue'),
'compare',
'>=',
'server',
false,
false,
0
);
}
if (!is_null($minValue)) {
$this->addRule(
$name,
get_lang('UnderMin'),
'compare',
'>=',
'server',
false,
false,
$minValue
);
}
if (!is_null($maxValue)) {
$this->addRule(
$name,
get_lang('OverMax'),
'compare',
'<=',
'server',
false,
false,
$maxValue
);
}
}
/**
* Adds a text field for letters and spaces to the form.
* A trim-filter is attached to the field.

@ -42,16 +42,16 @@
*
* @see HTML_QuickForm::errorMessage()
*/
define('QUICKFORM_OK', 1);
define('QUICKFORM_ERROR', -1);
define('QUICKFORM_INVALID_RULE', -2);
define('QUICKFORM_NONEXIST_ELEMENT', -3);
define('QUICKFORM_INVALID_FILTER', -4);
define('QUICKFORM_UNREGISTERED_ELEMENT', -5);
define('QUICKFORM_INVALID_ELEMENT_NAME', -6);
define('QUICKFORM_INVALID_PROCESS', -7);
define('QUICKFORM_DEPRECATED', -8);
define('QUICKFORM_INVALID_DATASOURCE', -9);
define('QUICKFORM_OK', 1);
define('QUICKFORM_ERROR', -1);
define('QUICKFORM_INVALID_RULE', -2);
define('QUICKFORM_NONEXIST_ELEMENT', -3);
define('QUICKFORM_INVALID_FILTER', -4);
define('QUICKFORM_UNREGISTERED_ELEMENT', -5);
define('QUICKFORM_INVALID_ELEMENT_NAME', -6);
define('QUICKFORM_INVALID_PROCESS', -7);
define('QUICKFORM_DEPRECATED', -8);
define('QUICKFORM_INVALID_DATASOURCE', -9);
/**#@-*/
// }}}
@ -216,9 +216,6 @@ class HTML_QuickForm extends HTML_Common
*/
public $_flagSubmitted = false;
// }}}
// {{{ constructor
/**
* Class constructor
* @param string $formName Form's name.
@ -229,8 +226,14 @@ class HTML_QuickForm extends HTML_Common
* @param bool $trackSubmit (optional)Whether to track if the form was submitted by adding a special hidden field
* @access public
*/
public function __construct($formName='', $method='post', $action='', $target='', $attributes=null, $trackSubmit = false)
{
public function __construct(
$formName = '',
$method = 'post',
$action = '',
$target = '',
$attributes = null,
$trackSubmit = false
) {
parent::__construct($attributes);
$method = (strtoupper($method) == 'GET') ? 'get' : 'post';
$action = ($action == '') ? api_get_self() : $action;
@ -247,21 +250,8 @@ class HTML_QuickForm extends HTML_Common
) + $target;
$this->updateAttributes($attributes);
if (!$trackSubmit || isset($_REQUEST['_qf__' . $formName])) {
if (1 == get_magic_quotes_gpc()) {
$this->_submitValues = $this->_recursiveFilter('stripslashes', 'get' == $method? $_GET: $_POST);
foreach ($_FILES as $keyFirst => $valFirst) {
foreach ($valFirst as $keySecond => $valSecond) {
if ('name' == $keySecond) {
$this->_submitFiles[$keyFirst][$keySecond] = $this->_recursiveFilter('stripslashes', $valSecond);
} else {
$this->_submitFiles[$keyFirst][$keySecond] = $valSecond;
}
}
}
} else {
$this->_submitValues = 'get' == $method? $_GET: $_POST;
$this->_submitFiles = $_FILES;
}
$this->_submitValues = 'get' == $method ? $_GET : $_POST;
$this->_submitFiles = $_FILES;
$this->_flagSubmitted = count($this->_submitValues) > 0 || count($this->_submitFiles) > 0;
}
if ($trackSubmit) {
@ -294,10 +284,7 @@ class HTML_QuickForm extends HTML_Common
// $this->_maxFileSize = intval($free_course_quota);
// }
// }
} // end constructor
// }}}
// {{{ apiVersion()
}
/**
* Returns the current API version
@ -309,10 +296,7 @@ class HTML_QuickForm extends HTML_Common
function apiVersion()
{
return 3.2;
} // end func apiVersion
// }}}
// {{{ registerElementType()
}
/**
* Registers a new element type
@ -327,10 +311,7 @@ class HTML_QuickForm extends HTML_Common
function registerElementType($typeName, $include, $className)
{
$GLOBALS['HTML_QUICKFORM_ELEMENT_TYPES'][strtolower($typeName)] = array($include, $className);
} // end func registerElementType
// }}}
// {{{ registerRule()
}
/**
* Registers a new validation rule
@ -347,10 +328,7 @@ class HTML_QuickForm extends HTML_Common
{
$registry =& HTML_QuickForm_RuleRegistry::singleton();
$registry->registerRule($ruleName, $type, $data1, $data2);
} // end func registerRule
// }}}
// {{{ elementExists()
}
/**
* Returns true if element is in the form
@ -365,10 +343,6 @@ class HTML_QuickForm extends HTML_Common
return isset($this->_elementIndex[$element]);
}
// }}}
// {{{ setDefaults()
/**
* Initializes default form values
*
@ -403,10 +377,7 @@ class HTML_QuickForm extends HTML_Common
$this->_elements[$key]->onQuickFormEvent('updateValue', null, $this);
}
}
} // end func setDefaults
// }}}
// {{{ setConstants()
}
/**
* Initializes constant form values.
@ -442,10 +413,7 @@ class HTML_QuickForm extends HTML_Common
$this->_elements[$key]->onQuickFormEvent('updateValue', null, $this);
}
}
} // end func setConstants
// }}}
// {{{ setMaxFileSize()
}
/**
* Sets the value of MAX_FILE_SIZE hidden element
@ -466,10 +434,7 @@ class HTML_QuickForm extends HTML_Common
$el =& $this->getElement('MAX_FILE_SIZE');
$el->updateAttributes(array('value' => $this->_maxFileSize));
}
} // end func setMaxFileSize
// }}}
// {{{ getMaxFileSize()
}
/**
* Returns the value of MAX_FILE_SIZE hidden element
@ -481,10 +446,7 @@ class HTML_QuickForm extends HTML_Common
public function getMaxFileSize()
{
return $this->_maxFileSize;
} // end func getMaxFileSize
// }}}
// {{{ &createElement()
}
/**
* Creates a new form element of the given type.
@ -501,12 +463,13 @@ class HTML_QuickForm extends HTML_Common
public function &createElement($elementType)
{
$args = func_get_args();
$element = HTML_QuickForm::_loadElement('createElement', $elementType, array_slice($args, 1));
$element = HTML_QuickForm::_loadElement(
'createElement',
$elementType,
array_slice($args, 1)
);
return $element;
} // end func createElement
// }}}
// {{{ _loadElement()
}
/**
* Returns a form element of the given type
@ -578,9 +541,6 @@ class HTML_QuickForm extends HTML_Common
return $element;
}
// }}}
// {{{ addElement()
/**
* Adds an element into the form
*
@ -701,9 +661,6 @@ class HTML_QuickForm extends HTML_Common
return $element;
}
// }}}
// {{{ addGroup()
/**
* Adds an element group
* @param array $elements array of elements composing the group
@ -727,10 +684,7 @@ class HTML_QuickForm extends HTML_Common
}
$group = & $this->addElement('group', $name, $groupLabel, $elements, $separator, $appendName);
return $group;
} // end func addGroup
// }}}
// {{{ &getElement()
}
/**
* Returns a reference to the element
@ -791,7 +745,7 @@ class HTML_QuickForm extends HTML_Common
* @access public
* @return mixed submitted element value or null if not set
*/
function getSubmitValue($elementName)
public function getSubmitValue($elementName)
{
$value = null;
if (isset($this->_submitValues[$elementName]) || isset($this->_submitFiles[$elementName])) {
@ -804,19 +758,20 @@ class HTML_QuickForm extends HTML_Common
);
}
}
} elseif ('file' == $this->getElementType($elementName)) {
return $this->getElementValue($elementName);
} elseif (false !== ($pos = strpos($elementName, '['))) {
$base = str_replace(
array('\\', '\''), array('\\\\', '\\\''),
substr($elementName, 0, $pos)
);
$idx = "['" . str_replace(
array('\\', '\'', ']', '['), array('\\\\', '\\\'', '', "']['"),
substr($elementName, $pos + 1, -1)
) . "']";
array('\\', '\''),
array('\\\\', '\\\''),
substr($elementName, 0, $pos)
);
$idx = "['".str_replace(
array('\\', '\'', ']', '['),
array('\\\\', '\\\'', '', "']['"),
substr($elementName, $pos + 1, -1)
)."']";
if (isset($this->_submitValues[$base])) {
$value = eval("return (isset(\$this->_submitValues['{$base}']{$idx})) ? \$this->_submitValues['{$base}']{$idx} : null;");
}
@ -852,20 +807,9 @@ class HTML_QuickForm extends HTML_Common
}
}
if ($this->getElementType($elementName) == 'date_range_picker') {
/** @var DateRangePicker $element */
$element = $this->getElement($elementName);
$parsedDates = $element->parseDateRange($value);
$validateFormat = $element->getAttribute('validate_format');
if (!$element->validateDates($parsedDates, $validateFormat)) {
$this->_errors[$elementName] = get_lang('CheckDates');
}
$this->_submitValues[$elementName.'_start'] = $parsedDates['start'];
$this->_submitValues[$elementName.'_end'] = $parsedDates['end'];
$element = $this->getElement($elementName);
if (method_exists($element, 'getSubmitValue')) {
$value = $element->getSubmitValue($value, $this->_submitValues, $this->_errors);
}
return $value;
@ -891,9 +835,6 @@ class HTML_QuickForm extends HTML_Common
}
}
// }}}
// {{{ getElementError()
/**
* Returns error corresponding to validated element
*
@ -978,10 +919,7 @@ class HTML_QuickForm extends HTML_Common
}
}
}
} // end func updateElementAttr
// }}}
// {{{ removeElement()
}
/**
* Removes an element
@ -1029,13 +967,13 @@ class HTML_QuickForm extends HTML_Common
* To validate grouped elements as separated entities,
* use addGroupRule instead of addRule.
*
* @param string $element Form element name
* @param string $message Message to display for invalid data
* @param string $type Rule type, use getRegisteredRules() to get types
* @param string $format (optional)Required for extra rule data
* @param string $validation (optional)Where to perform validation: "server", "client"
* @param boolean $reset Client-side validation: reset the form element to its original value if there is an error?
* @param boolean $force Force the rule to be applied, even if the target form element does not exist
* @param string $element Form element name
* @param string $message Message to display for invalid data
* @param string $type Rule type, use getRegisteredRules() to get types
* @param string $format (optional)Required for extra rule data
* @param string $validation (optional)Where to perform validation: "server", "client"
* @param boolean $reset Client-side validation: reset the form element to its original value if there is an error?
* @param boolean $force Force the rule to be applied, even if the target form element does not exist
* @since 1.0
* @access public
*/
@ -1046,7 +984,8 @@ class HTML_QuickForm extends HTML_Common
$format = null,
$validation = 'server',
$reset = false,
$force = false
$force = false,
$dependent = null
) {
if (!$force) {
if (!is_array($element) && !$this->elementExists($element)) {
@ -1064,12 +1003,12 @@ class HTML_QuickForm extends HTML_Common
} elseif (is_string($newName)) {
$type = $newName;
}
if (is_array($element)) {
$dependent = $element;
$element = array_shift($dependent);
} else {
$dependent = null;
$element = array_shift($dependent);
}
if ($type == 'required' || $type == 'uploadedfile') {
$this->_required[] = $element;
}
@ -1091,7 +1030,6 @@ class HTML_QuickForm extends HTML_Common
);
}
/**
* Adds a validation rule for the given group of elements
*
@ -1356,32 +1294,7 @@ class HTML_QuickForm extends HTML_Common
function isRuleRegistered($name, $autoRegister = false)
{
return true;
if (is_scalar($name) && isset($GLOBALS['_HTML_QuickForm_registered_rules'][$name])) {
return true;
} elseif (!$autoRegister) {
return false;
}
$ruleName = false;
if (is_object($name) && is_a($name, 'html_quickform_rule')) {
$ruleName = !empty($name->name)? $name->name: strtolower(get_class($name));
} elseif (is_string($name) && class_exists($name)) {
$parent = strtolower($name);
do {
if ('html_quickform_rule' == strtolower($parent)) {
$ruleName = strtolower($name);
break;
}
} while ($parent = get_parent_class($parent));
}
if ($ruleName) {
$registry =& HTML_QuickForm_RuleRegistry::singleton();
$registry->registerRule($ruleName, null, $name);
}
return $ruleName;
} // end func isRuleRegistered
// }}}
// {{{ getRegisteredRules()
}
/**
* Returns an array of registered validation rules
@ -1501,7 +1414,6 @@ class HTML_QuickForm extends HTML_Common
foreach ($this->_rules as $target => $rules) {
$submitValue = $this->getSubmitValue($target);
foreach ($rules as $rule) {
if ((isset($rule['group']) && isset($this->_errors[$rule['group']])) ||
isset($this->_errors[$target])) {
@ -1538,6 +1450,7 @@ class HTML_QuickForm extends HTML_Common
}
}
}
if (isset($rule['dependent']) && is_array($rule['dependent'])) {
$values = array($submitValue);
foreach ($rule['dependent'] as $elName) {
@ -1806,7 +1719,7 @@ class HTML_QuickForm extends HTML_Common
*/
public function getSubmitValues($mergeFiles = false)
{
return $mergeFiles? HTML_QuickForm::arrayMerge($this->_submitValues, $this->_submitFiles): $this->_submitValues;
return $mergeFiles ? HTML_QuickForm::arrayMerge($this->_submitValues, $this->_submitFiles): $this->_submitValues;
}
/**
@ -1842,7 +1755,7 @@ class HTML_QuickForm extends HTML_Common
* @return mixed
* @throws HTML_QuickForm_Error
*/
function exportValue($element)
public function exportValue($element)
{
if (!isset($this->_elementIndex[$element])) {
throw new \Exception("Element '$element' does not exist in HTML_QuickForm::getElementValue()");
@ -1873,7 +1786,7 @@ class HTML_QuickForm extends HTML_Common
* @return array An assoc array of elements' values
* @throws HTML_QuickForm_Error
*/
function exportValues($elementList = null)
public function exportValues($elementList = null)
{
$values = array();
if (null === $elementList) {

Loading…
Cancel
Save