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']); $parent_cat = Category::load($addvalues['select_gradebook']);
$global_weight = $category[0]->get_weight(); $global_weight = $category[0]->get_weight();
$link->set_weight($addvalues['weight_mask']); $link->set_weight($addvalues['weight_mask']);
if ($link->needs_max()) { if ($link->needs_max()) {

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

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

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

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

@ -167,4 +167,23 @@ class DateRangePicker extends HTML_QuickForm_text
return true; 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. * Adds a text field for letters and spaces to the form.
* A trim-filter is attached to the field. * A trim-filter is attached to the field.

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

Loading…
Cancel
Save