Fixed form validation and display after errors and when removing rows

This commit is contained in:
Robbt 2018-01-08 21:48:31 -05:00
parent 5e7a5b3e1d
commit 144f1b5561
3 changed files with 74 additions and 7 deletions

View file

@ -195,9 +195,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
foreach ($criteria[$column] as &$constraint) { foreach ($criteria[$column] as &$constraint) {
// convert to appropriate timezone timestamps only if the modifier is not a relative time // convert to appropriate timezone timestamps only if the modifier is not a relative time
if (!in_array($constraint['modifier'], array('before','after','between'))) { if (!in_array($constraint['modifier'], array('before','after','between'))) {
$constraint['value'] = $constraint['value'] =
Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['value']); Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['value']);
if (isset($constraint['extra'])) { if (isset($constraint['extra'])) {
$constraint['extra'] = $constraint['extra'] =
Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['extra']); Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['extra']);
@ -368,14 +367,17 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$criteriaDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_datetime_select_".$i."_".$j); $criteriaDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_datetime_select_".$i."_".$j);
$criteriaDatetimeSelect->setAttrib('class','input_select sp_input_select') $criteriaDatetimeSelect->setAttrib('class','input_select sp_input_select')
->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
if (!isset($criteriaKeys[$i]) || !$relativeDateTime) { if (isset($criteriaKeys[$i]) && $relativeDateTime) {
$criteriaDatetimeSelect->setAttrib('enabled', 'enabled');
}
else {
$criteriaDatetimeSelect->setAttrib('disabled', 'disabled'); $criteriaDatetimeSelect->setAttrib('disabled', 'disabled');
} }
// check if the value is stored and it is a relative datetime field // check if the value is stored and it is a relative datetime field
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]) if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"])
&& isset($criteriaType) && $criteriaType == "d" && && isset($criteriaType) && $criteriaType == "d" &&
preg_match('/before|after|between/', $modifierTest) == 1) { preg_match('/before|after|between/', $modifierTest) == 1) {
// need to remove the leading numbers stored in the database // need to remove any leading numbers stored in the database
$dateTimeSelectValue = preg_replace('/[0-9]+/', '', $storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]); $dateTimeSelectValue = preg_replace('/[0-9]+/', '', $storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]);
// need to strip white from front and ago from the end to match with the value of the time unit select dropdown // need to strip white from front and ago from the end to match with the value of the time unit select dropdown
$dateTimeSelectValue = trim(preg_replace('/\W\w+\s*(\W*)$/', '$1', $dateTimeSelectValue)); $dateTimeSelectValue = trim(preg_replace('/\W\w+\s*(\W*)$/', '$1', $dateTimeSelectValue));
@ -507,6 +509,12 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
'showPoolCount' => $showPoolCount)) 'showPoolCount' => $showPoolCount))
)); ));
} }
/*
* This is a simple function that determines if a modValue should enable a datetime
*/
public function enableDateTimeUnit($modValue) {
return (preg_match('/before|after|between/', $modValue) == 1);
}
public function preValidation($params) public function preValidation($params)
{ {
@ -540,6 +548,15 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$eleMod->setValue($modInfo['sp_criteria_modifier']); $eleMod->setValue($modInfo['sp_criteria_modifier']);
$eleMod->setAttrib("disabled", null); $eleMod->setAttrib("disabled", null);
$eleDatetime = $this->getElement("sp_criteria_datetime_select_".$critKey."_".$modKey);
if ($this->enableDateTimeUnit($eleMod->getValue())) {
$eleDatetime->setAttrib("enabled", "enabled");
$eleDatetime->setValue($modInfo['sp_criteria_datetime_select']);
$eleDatetime->setAttrib("disabled", null);
}
else {
$eleDatetime->setAttrib("disabled","disabled");
}
$eleValue = $this->getElement("sp_criteria_value_".$critKey."_".$modKey); $eleValue = $this->getElement("sp_criteria_value_".$critKey."_".$modKey);
$eleValue->setValue($modInfo['sp_criteria_value']); $eleValue->setValue($modInfo['sp_criteria_value']);
$eleValue->setAttrib("disabled", null); $eleValue->setAttrib("disabled", null);
@ -550,6 +567,15 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$eleValue->setAttrib('class', 'input_text sp_extra_input_text'); $eleValue->setAttrib('class', 'input_text sp_extra_input_text');
$eleExtra->setAttrib("disabled", null); $eleExtra->setAttrib("disabled", null);
} }
$eleExtraDatetime = $this->getElement("sp_criteria_extra_datetime_select_".$critKey."_".$modKey);
if ($eleMod->getValue() == 'between') {
$eleExtraDatetime->setAttrib("enabled", "enabled");
$eleExtraDatetime->setValue($modInfo['sp_criteria_extra_datetime_select']);
$eleExtraDatetime->setAttrib("disabled", null);
}
else {
$eleExtraDatetime->setAttrib("disabled","disabled");
}
} else { } else {
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$critKey."_".$modKey); $criteria = new Zend_Form_Element_Select("sp_criteria_field_".$critKey."_".$modKey);
@ -587,7 +613,20 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
$criteriaValue->setValue($modInfo['sp_criteria_value']); $criteriaValue->setValue($modInfo['sp_criteria_value']);
$this->addElement($criteriaValue); $this->addElement($criteriaValue);
/****************** DATETIME UNIT SELECT ***********/
$criteriaDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_datetime_select_".$critKey."_".$modKey);
$criteriaDatetimeSelect->setAttrib('class','input_select sp_input_select')
->setDecorators(array('viewHelper'));
if ($this->enableDateTimeUnit($criteriaValue->getValue())) {
$criteriaDatetimeSelect->setAttrib('enabled', 'enabled');
$criteriaDatetimeSelect->setAttrib('disabled', null);
$criteriaDatetimeSelect->setValue($modInfo['sp_criteria_datetime_select']);
$this->addElement($criteriaDatetimeSelect);
}
else {
$criteriaDatetimeSelect->setAttrib('disabled', 'disabled');
}
/****************** EXTRA ***********/ /****************** EXTRA ***********/
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$critKey."_".$modKey); $criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$critKey."_".$modKey);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text') $criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
@ -599,6 +638,21 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$criteriaExtra->setAttrib('disabled', 'disabled'); $criteriaExtra->setAttrib('disabled', 'disabled');
} }
$this->addElement($criteriaExtra); $this->addElement($criteriaExtra);
/****************** EXTRA DATETIME UNIT SELECT ***********/
$criteriaExtraDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_extra_datetime_select_".$critKey."_".$modKey);
$criteriaExtraDatetimeSelect->setAttrib('class','input_select sp_input_select')
->setDecorators(array('viewHelper'));
if ($criteriaValue->getValue() == 'between') {
$criteriaExtraDatetimeSelect->setAttrib('enabled', 'enabled');
$criteriaExtraDatetimeSelect->setAttrib('disabled', null);
$criteriaExtraDatetimeSelect->setValue($modInfo['sp_criteria_extra_datetime_select']);
$this->addElement($criteriaExtraDatetimeSelect);
}
else {
$criteriaExtraDatetimeSelect->setAttrib('disabled', 'disabled');
}
$count++; $count++;
} }
} }
@ -624,6 +678,14 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
return $data; return $data;
} }
/*
* This function will enable or disable form criteria elements based upon the current form
* This is necessary after validation fails and the elements loaded from startForm are different from
* the current form data
*
*/
public function reValidate(){
}
public function isValid($params) public function isValid($params)
{ {
$isValid = true; $isValid = true;

View file

@ -67,7 +67,7 @@
<dd id='sp_criteria-element' class='criteria-element'> <dd id='sp_criteria-element' class='criteria-element'>
<a class='btn btn-small btn-new' id='criteria_add'><i class='icon-white icon-plus'></i><?php echo(_("New Criteria")); ?></a> <a class='btn btn-small btn-new' id='criteria_add'><i class='icon-white icon-plus'></i><?php echo(_("New Criteria")); ?></a>
<?php for ($i = 0; $i < $this->criteriasLength; $i++) { <?php for ($i = 0; $i < $this->criteriasLength; $i++) {
// modRowMap holds the number of modifier rows for each criteria element // modRowMap holds the number of modifier rows for each criteria element
// i.e. if we have 'Album contains 1' and 'Album contains 2' the modRowMap // i.e. if we have 'Album contains 1' and 'Album contains 2' the modRowMap
// for Album is 2 // for Album is 2

View file

@ -233,13 +233,18 @@ function setSmartBlockEvents() {
*/ */
item_to_hide = list.find('div:visible:last'); item_to_hide = list.find('div:visible:last');
item_to_hide.children().attr('disabled', 'disabled'); item_to_hide.children().attr('disabled', 'disabled');
item_to_hide.find('[name^="sp_criteria_datetime_select"]').attr('disabled', 'disabled');
item_to_hide.find('[name^="sp_criteria_extra"]').attr('disabled', 'disabled');
item_to_hide.find('[name^="sp_criteria_extra_datetime_select"]').attr('disabled', 'disabled');
if (item_to_hide.find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) { if (item_to_hide.find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) {
item_to_hide.find('select[name^="sp_criteria_field"]').removeClass('sp-invisible'); item_to_hide.find('select[name^="sp_criteria_field"]').removeClass('sp-invisible');
} }
item_to_hide.find('[name^="sp_criteria_field"]').val(0).end() item_to_hide.find('[name^="sp_criteria_field"]').val(0).end()
.find('[name^="sp_criteria_modifier"]').val(0).end() .find('[name^="sp_criteria_modifier"]').val(0).end()
.find('[name^="sp_criteria_datetime_select"]').end()
.find('[name^="sp_criteria_value"]').val('').end() .find('[name^="sp_criteria_value"]').val('').end()
.find('[name^="sp_criteria_extra"]').val(''); .find('[name^="sp_criteria_extra"]').val('')
.find('[name^="sp_criteria_extra_datetime_select"]').end();
sizeTextBoxes(item_to_hide.find('[name^="sp_criteria_value"]'), 'sp_extra_input_text', 'sp_input_text'); sizeTextBoxes(item_to_hide.find('[name^="sp_criteria_value"]'), 'sp_extra_input_text', 'sp_input_text');
item_to_hide.hide(); item_to_hide.hide();