Merge remote-tracking branch 'robbt/feature/relative_smartblocks' into dev/merge-testing
This commit is contained in:
commit
090fdae99b
|
@ -4,6 +4,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
private $criteriaOptions;
|
private $criteriaOptions;
|
||||||
private $stringCriteriaOptions;
|
private $stringCriteriaOptions;
|
||||||
private $numericCriteriaOptions;
|
private $numericCriteriaOptions;
|
||||||
|
private $dateTimeCriteriaOptions;
|
||||||
|
private $timePeriodCriteriaOptions;
|
||||||
private $sortOptions;
|
private $sortOptions;
|
||||||
private $limitOptions;
|
private $limitOptions;
|
||||||
|
|
||||||
|
@ -24,9 +26,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
"description" => "s",
|
"description" => "s",
|
||||||
"artist_name" => "s",
|
"artist_name" => "s",
|
||||||
"encoded_by" => "s",
|
"encoded_by" => "s",
|
||||||
"utime" => "n",
|
"utime" => "d",
|
||||||
"mtime" => "n",
|
"mtime" => "d",
|
||||||
"lptime" => "n",
|
"lptime" => "d",
|
||||||
"genre" => "s",
|
"genre" => "s",
|
||||||
"isrc_number" => "s",
|
"isrc_number" => "s",
|
||||||
"label" => "s",
|
"label" => "s",
|
||||||
|
@ -114,6 +116,43 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
return $this->numericCriteriaOptions;
|
return $this->numericCriteriaOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function getDateTimeCriteriaOptions()
|
||||||
|
{
|
||||||
|
if (!isset($this->dateTimeCriteriaOptions)) {
|
||||||
|
$this->dateTimeCriteriaOptions = array(
|
||||||
|
"0" => _("Select modifier"),
|
||||||
|
"before" => _("before"),
|
||||||
|
"after" => _("after"),
|
||||||
|
"between" => _("between"),
|
||||||
|
"is" => _("is"),
|
||||||
|
"is not" => _("is not"),
|
||||||
|
"is greater than" => _("is greater than"),
|
||||||
|
"is less than" => _("is less than"),
|
||||||
|
"is in the range" => _("is in the range")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->dateTimeCriteriaOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function getTimePeriodCriteriaOptions()
|
||||||
|
{
|
||||||
|
if (!isset($this->timePeriodCriteriaOptions)) {
|
||||||
|
$this->timePeriodCriteriaOptions = array(
|
||||||
|
"0" => _("Select unit of time"),
|
||||||
|
"minute" => _("minute(s)"),
|
||||||
|
"hour" => _("hour(s)"),
|
||||||
|
"day" => _("day(s)"),
|
||||||
|
"week" => _("week(s)"),
|
||||||
|
"month" => _("month(s)"),
|
||||||
|
"year" => _("year(s)")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->timePeriodCriteriaOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private function getLimitOptions()
|
private function getLimitOptions()
|
||||||
{
|
{
|
||||||
if (!isset($this->limitOptions)) {
|
if (!isset($this->limitOptions)) {
|
||||||
|
@ -154,19 +193,32 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
if (isset($criteria[$column])) {
|
if (isset($criteria[$column])) {
|
||||||
|
|
||||||
foreach ($criteria[$column] as &$constraint) {
|
foreach ($criteria[$column] as &$constraint) {
|
||||||
|
// convert to appropriate timezone timestamps only if the modifier is not a relative time
|
||||||
$constraint['value'] =
|
if (!in_array($constraint['modifier'], array('before','after','between'))) {
|
||||||
Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['value']);
|
$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']);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function takes a blockID as param and creates the data structure for the form displayed with the view
|
||||||
|
* smart-block-criteria.phtml
|
||||||
|
*
|
||||||
|
* A description of the dataflow. First it loads the block and determines if it is a static or dynamic smartblock.
|
||||||
|
* Next it adds a radio selector for static or dynamic type.
|
||||||
|
* Then it loads the criteria via the getCriteria() function, which returns an array for each criteria.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
public function startForm($p_blockId, $p_isValid = false)
|
public function startForm($p_blockId, $p_isValid = false)
|
||||||
{
|
{
|
||||||
// load type
|
// load type
|
||||||
|
@ -204,20 +256,25 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$openSmartBlockOption = true;
|
$openSmartBlockOption = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this returns a number indexed array for each criteria found in the database
|
||||||
$criteriaKeys = array();
|
$criteriaKeys = array();
|
||||||
if (isset($storedCrit["crit"])) {
|
if (isset($storedCrit["crit"])) {
|
||||||
$criteriaKeys = array_keys($storedCrit["crit"]);
|
$criteriaKeys = array_keys($storedCrit["crit"]);
|
||||||
}
|
}
|
||||||
$numElements = count($this->getCriteriaOptions());
|
$numElements = count($this->getCriteriaOptions());
|
||||||
|
// loop through once for each potential criteria option ie album, composer, track
|
||||||
|
|
||||||
for ($i = 0; $i < $numElements; $i++) {
|
for ($i = 0; $i < $numElements; $i++) {
|
||||||
$criteriaType = "";
|
$criteriaType = "";
|
||||||
|
|
||||||
|
// if there is a criteria found then count the number of rows for this specific criteria ie > 1 track title
|
||||||
if (isset($criteriaKeys[$i])) {
|
if (isset($criteriaKeys[$i])) {
|
||||||
$critCount = count($storedCrit["crit"][$criteriaKeys[$i]]);
|
$critCount = count($storedCrit["crit"][$criteriaKeys[$i]]);
|
||||||
} else {
|
} else {
|
||||||
$critCount = 1;
|
$critCount = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// store the number of items with the same key in the ModRowMap
|
||||||
$modRowMap[$i] = $critCount;
|
$modRowMap[$i] = $critCount;
|
||||||
|
|
||||||
/* Loop through all criteria with the same field
|
/* Loop through all criteria with the same field
|
||||||
|
@ -225,6 +282,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
*/
|
*/
|
||||||
for ($j = 0; $j < $critCount; $j++) {
|
for ($j = 0; $j < $critCount; $j++) {
|
||||||
/****************** CRITERIA ***********/
|
/****************** CRITERIA ***********/
|
||||||
|
// hide the criteria drop down select on any rows after the first
|
||||||
if ($j > 0) {
|
if ($j > 0) {
|
||||||
$invisible = ' sp-invisible';
|
$invisible = ' sp-invisible';
|
||||||
} else {
|
} else {
|
||||||
|
@ -236,17 +294,23 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
->setValue('Select criteria')
|
->setValue('Select criteria')
|
||||||
->setDecorators(array('viewHelper'))
|
->setDecorators(array('viewHelper'))
|
||||||
->setMultiOptions($this->getCriteriaOptions());
|
->setMultiOptions($this->getCriteriaOptions());
|
||||||
|
// if this isn't the first criteria and there isn't an entry for it already disable it
|
||||||
if ($i != 0 && !isset($criteriaKeys[$i])) {
|
if ($i != 0 && !isset($criteriaKeys[$i])) {
|
||||||
$criteria->setAttrib('disabled', 'disabled');
|
$criteria->setAttrib('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
|
// add the numbering to the form ie the i loop for each specific criteria and
|
||||||
|
// the j loop starts at 0 and grows for each item matching the same criteria
|
||||||
|
// look up the criteria type using the criteriaTypes function from above based upon the criteria value
|
||||||
if (isset($criteriaKeys[$i])) {
|
if (isset($criteriaKeys[$i])) {
|
||||||
$criteriaType = $this->criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]];
|
$criteriaType = $this->criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]];
|
||||||
$criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
|
$criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
|
||||||
}
|
}
|
||||||
$this->addElement($criteria);
|
$this->addElement($criteria);
|
||||||
|
|
||||||
|
|
||||||
/****************** MODIFIER ***********/
|
/****************** MODIFIER ***********/
|
||||||
|
// every element has an optional modifier dropdown select
|
||||||
|
|
||||||
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i."_".$j);
|
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i."_".$j);
|
||||||
$criteriaModifers->setValue('Select modifier')
|
$criteriaModifers->setValue('Select modifier')
|
||||||
->setAttrib('class', 'input_select sp_input_select')
|
->setAttrib('class', 'input_select sp_input_select')
|
||||||
|
@ -254,10 +318,15 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
if ($i != 0 && !isset($criteriaKeys[$i])) {
|
if ($i != 0 && !isset($criteriaKeys[$i])) {
|
||||||
$criteriaModifers->setAttrib('disabled', 'disabled');
|
$criteriaModifers->setAttrib('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
|
// determine the modifier based upon criteria type which is looked up based upon an array
|
||||||
if (isset($criteriaKeys[$i])) {
|
if (isset($criteriaKeys[$i])) {
|
||||||
if ($criteriaType == "s") {
|
if ($criteriaType == "s") {
|
||||||
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
||||||
} else {
|
}
|
||||||
|
elseif ($criteriaType == "d") {
|
||||||
|
$criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||||
|
}
|
||||||
|
else {
|
||||||
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
||||||
}
|
}
|
||||||
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
|
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
|
||||||
|
@ -267,6 +336,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$this->addElement($criteriaModifers);
|
$this->addElement($criteriaModifers);
|
||||||
|
|
||||||
/****************** VALUE ***********/
|
/****************** VALUE ***********/
|
||||||
|
/* The challenge here is that datetime */
|
||||||
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i."_".$j);
|
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i."_".$j);
|
||||||
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
|
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
|
||||||
->setDecorators(array('viewHelper'));
|
->setDecorators(array('viewHelper'));
|
||||||
|
@ -274,22 +344,96 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$criteriaValue->setAttrib('disabled', 'disabled');
|
$criteriaValue->setAttrib('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
if (isset($criteriaKeys[$i])) {
|
if (isset($criteriaKeys[$i])) {
|
||||||
$criteriaValue->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]);
|
/*
|
||||||
|
* Need to parse relative dates in a special way to populate select box down below
|
||||||
|
*/
|
||||||
|
// this is used below to test whether the datetime select should be shown or hidden
|
||||||
|
$relativeDateTime = false;
|
||||||
|
$modifierTest = (string)$storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"];
|
||||||
|
if(isset($criteriaType) && $criteriaType == "d" &&
|
||||||
|
preg_match('/before|after|between/', $modifierTest) == 1) {
|
||||||
|
// set relativeDatetime boolean to true so that the datetime select is displayed below
|
||||||
|
$relativeDateTime = true;
|
||||||
|
// the criteria value will be a number followed by time unit and ago so set input to number part
|
||||||
|
$criteriaValue->setValue(filter_var($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"], FILTER_SANITIZE_NUMBER_INT));
|
||||||
|
} else {
|
||||||
|
$criteriaValue->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->addElement($criteriaValue);
|
$this->addElement($criteriaValue);
|
||||||
|
|
||||||
|
|
||||||
|
/****************** DATETIME SELECT *************/
|
||||||
|
$criteriaDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_datetime_select_".$i."_".$j);
|
||||||
|
$criteriaDatetimeSelect->setAttrib('class','input_select sp_input_select')
|
||||||
|
->setDecorators(array('viewHelper'));
|
||||||
|
if (isset($criteriaKeys[$i]) && $relativeDateTime) {
|
||||||
|
$criteriaDatetimeSelect->setAttrib('enabled', 'enabled');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$criteriaDatetimeSelect->setAttrib('disabled', 'disabled');
|
||||||
|
}
|
||||||
|
// check if the value is stored and it is a relative datetime field
|
||||||
|
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"])
|
||||||
|
&& isset($criteriaType) && $criteriaType == "d" &&
|
||||||
|
preg_match('/before|after|between/', $modifierTest) == 1) {
|
||||||
|
// need to remove any leading numbers stored in the database
|
||||||
|
$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
|
||||||
|
$dateTimeSelectValue = trim(preg_replace('/\W\w+\s*(\W*)$/', '$1', $dateTimeSelectValue));
|
||||||
|
$criteriaDatetimeSelect->setMultiOptions($this->getTimePeriodCriteriaOptions());
|
||||||
|
$criteriaDatetimeSelect->setValue($dateTimeSelectValue);
|
||||||
|
$criteriaDatetimeSelect->setAttrib('enabled', 'enabled');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$criteriaDatetimeSelect->setMultiOptions(array('0' => _('Select unit of time')));
|
||||||
|
$criteriaDatetimeSelect->setMultiOptions($this->getTimePeriodCriteriaOptions());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addElement($criteriaDatetimeSelect);
|
||||||
|
|
||||||
/****************** EXTRA ***********/
|
/****************** EXTRA ***********/
|
||||||
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i."_".$j);
|
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i."_".$j);
|
||||||
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
|
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
|
||||||
->setDecorators(array('viewHelper'));
|
->setDecorators(array('viewHelper'));
|
||||||
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])) {
|
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])) {
|
||||||
$criteriaExtra->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"]);
|
// need to check if this is a relative date time value
|
||||||
|
if(isset($criteriaType) && $criteriaType == "d" && $modifierTest == 'between') {
|
||||||
|
// the criteria value will be a number followed by time unit and ago so set input to number part
|
||||||
|
$criteriaExtra->setValue(filter_var($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"], FILTER_SANITIZE_NUMBER_INT));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$criteriaExtra->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"]);
|
||||||
|
}
|
||||||
$criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
|
$criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
|
||||||
} else {
|
} else {
|
||||||
$criteriaExtra->setAttrib('disabled', 'disabled');
|
$criteriaExtra->setAttrib('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
$this->addElement($criteriaExtra);
|
$this->addElement($criteriaExtra);
|
||||||
|
/****************** DATETIME SELECT EXTRA **********/
|
||||||
|
|
||||||
|
$criteriaExtraDatetimeSelect = new Zend_Form_Element_Select("sp_criteria_extra_datetime_select_".$i."_".$j);
|
||||||
|
$criteriaExtraDatetimeSelect->setAttrib('class','input_select sp_input_select')
|
||||||
|
->setDecorators(array('viewHelper'));
|
||||||
|
|
||||||
|
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])
|
||||||
|
&& $modifierTest == 'between') {
|
||||||
|
// need to remove the leading numbers stored in the database
|
||||||
|
$extraDateTimeSelectValue = preg_replace('/[0-9]+/', '', $storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"]);
|
||||||
|
// need to strip white from front and ago from the end to match with the value of the time unit select dropdown
|
||||||
|
$extraDateTimeSelectValue = trim(preg_replace('/\W\w+\s*(\W*)$/', '$1', $extraDateTimeSelectValue));
|
||||||
|
$criteriaExtraDatetimeSelect->setMultiOptions($this->getTimePeriodCriteriaOptions());
|
||||||
|
// Logging::info('THIS IS-'.$extraDateTimeSelectValue.'-IT');
|
||||||
|
$criteriaExtraDatetimeSelect->setValue($extraDateTimeSelectValue);
|
||||||
|
$criteriaExtraDatetimeSelect->setAttrib('enabled', 'enabled');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$criteriaExtraDatetimeSelect->setMultiOptions(array('0' => _('Select unit of time')));
|
||||||
|
$criteriaExtraDatetimeSelect->setMultiOptions($this->getTimePeriodCriteriaOptions());
|
||||||
|
$criteriaExtraDatetimeSelect->setAttrib('disabled', 'disabled');
|
||||||
|
}
|
||||||
|
$this->addElement($criteriaExtraDatetimeSelect);
|
||||||
}//for
|
}//for
|
||||||
|
|
||||||
}//for
|
}//for
|
||||||
|
@ -369,6 +513,12 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
'criteriasLength' => count($this->getCriteriaOptions()), 'modRowMap' => $modRowMap))
|
'criteriasLength' => count($this->getCriteriaOptions()), 'modRowMap' => $modRowMap))
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* 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)
|
||||||
{
|
{
|
||||||
|
@ -394,12 +544,23 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$eleMod->setMultiOptions($this->getStringCriteriaOptions());
|
$eleMod->setMultiOptions($this->getStringCriteriaOptions());
|
||||||
} elseif ($criteriaType == "n") {
|
} elseif ($criteriaType == "n") {
|
||||||
$eleMod->setMultiOptions($this->getNumericCriteriaOptions());
|
$eleMod->setMultiOptions($this->getNumericCriteriaOptions());
|
||||||
|
} elseif ($criteriaType == "d") {
|
||||||
|
$eleMod->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||||
} else {
|
} else {
|
||||||
$eleMod->setMultiOptions(array('0' => _('Select modifier')));
|
$eleMod->setMultiOptions(array('0' => _('Select modifier')));
|
||||||
}
|
}
|
||||||
$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);
|
||||||
|
@ -410,6 +571,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);
|
||||||
|
@ -432,6 +602,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
||||||
} elseif ($criteriaType == "n") {
|
} elseif ($criteriaType == "n") {
|
||||||
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
||||||
|
}
|
||||||
|
elseif ($criteriaType == "d") {
|
||||||
|
$criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||||
} else {
|
} else {
|
||||||
$criteriaModifers->setMultiOptions(array('0' => _('Select modifier')));
|
$criteriaModifers->setMultiOptions(array('0' => _('Select modifier')));
|
||||||
}
|
}
|
||||||
|
@ -444,7 +617,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')
|
||||||
|
@ -456,6 +642,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++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -477,6 +678,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
|
|
||||||
$this->populate($formData);
|
$this->populate($formData);
|
||||||
|
|
||||||
|
// Logging::info($formData);
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,25 +771,26 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$element->addError(_("'Length' should be in '00:00:00' format"));
|
$element->addError(_("'Length' should be in '00:00:00' format"));
|
||||||
$isValid = false;
|
$isValid = false;
|
||||||
}
|
}
|
||||||
|
// this looks up the column type for the criteria the modified time, upload time etc.
|
||||||
} elseif ($column->getType() == PropelColumnTypes::TIMESTAMP) {
|
} elseif ($column->getType() == PropelColumnTypes::TIMESTAMP) {
|
||||||
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
|
// need to check for relative modifiers first - bypassing currently
|
||||||
$element->addError(_("The value should be in timestamp format (e.g. 0000-00-00 or 0000-00-00 00:00:00)"));
|
if (in_array($d['sp_criteria_modifier'], array('before','after','between'))) {
|
||||||
$isValid = false;
|
if (!preg_match("/^[1-9][0-9]*$|0/",$d['sp_criteria_value'])) {
|
||||||
} else {
|
$element->addError(_("Only non-negative integer numbers are allowed (e.g 1 or 5) for the text value"));
|
||||||
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value']);
|
$isValid = false;
|
||||||
if (!$result["success"]) {
|
// TODO validate this on numeric input with whatever parsing also do for extra
|
||||||
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
|
//if the modifier is before ago or between we skip validation until we confirm format
|
||||||
$element->addError($result["errMsg"]);
|
}
|
||||||
|
elseif (isSet($d['sp_criteria_datetime_select']) && $d['sp_criteria_datetime_select'] == "0") {
|
||||||
|
$element->addError(_("You must select a time unit for a relative datetime."));
|
||||||
$isValid = false;
|
$isValid = false;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
|
||||||
if (isset($d['sp_criteria_extra'])) {
|
|
||||||
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) {
|
|
||||||
$element->addError(_("The value should be in timestamp format (e.g. 0000-00-00 or 0000-00-00 00:00:00)"));
|
$element->addError(_("The value should be in timestamp format (e.g. 0000-00-00 or 0000-00-00 00:00:00)"));
|
||||||
$isValid = false;
|
$isValid = false;
|
||||||
} else {
|
} else {
|
||||||
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra']);
|
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value']);
|
||||||
if (!$result["success"]) {
|
if (!$result["success"]) {
|
||||||
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
|
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
|
||||||
$element->addError($result["errMsg"]);
|
$element->addError($result["errMsg"]);
|
||||||
|
@ -595,6 +798,33 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isset($d['sp_criteria_extra'])) {
|
||||||
|
if ($d['sp_criteria_modifier'] == 'between') {
|
||||||
|
// validate that the input value only contains a number if using relative date times
|
||||||
|
if (!preg_match("/^[1-9][0-9]*$|0/",$d['sp_criteria_extra'])) {
|
||||||
|
$element->addError(_("Only non-negative integer numbers are allowed for a relative date time"));
|
||||||
|
$isValid = false;
|
||||||
|
}
|
||||||
|
// also need to check to make sure they chose a time unit from the dropdown
|
||||||
|
elseif ($d['sp_criteria_extra_datetime_select'] == "0") {
|
||||||
|
$element->addError(_("You must select a time unit for a relative datetime."));
|
||||||
|
$isValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) {
|
||||||
|
$element->addError(_("The value should be in timestamp format (e.g. 0000-00-00 or 0000-00-00 00:00:00)"));
|
||||||
|
$isValid = false;
|
||||||
|
} else {
|
||||||
|
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra']);
|
||||||
|
if (!$result["success"]) {
|
||||||
|
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
|
||||||
|
$element->addError($result["errMsg"]);
|
||||||
|
$isValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} elseif ($column->getType() == PropelColumnTypes::INTEGER &&
|
} elseif ($column->getType() == PropelColumnTypes::INTEGER &&
|
||||||
$d['sp_criteria_field'] != 'owner_id') {
|
$d['sp_criteria_field'] != 'owner_id') {
|
||||||
if (!is_numeric($d['sp_criteria_value'])) {
|
if (!is_numeric($d['sp_criteria_value'])) {
|
||||||
|
|
|
@ -51,7 +51,10 @@ class Application_Model_Block implements Application_Model_LibraryEditable
|
||||||
"ends with" => Criteria::ILIKE,
|
"ends with" => Criteria::ILIKE,
|
||||||
"is greater than" => Criteria::GREATER_THAN,
|
"is greater than" => Criteria::GREATER_THAN,
|
||||||
"is less than" => Criteria::LESS_THAN,
|
"is less than" => Criteria::LESS_THAN,
|
||||||
"is in the range" => Criteria::CUSTOM);
|
"is in the range" => Criteria::CUSTOM,
|
||||||
|
"before" => Criteria::CUSTOM,
|
||||||
|
"after" => Criteria::CUSTOM,
|
||||||
|
"between" => Criteria::CUSTOM);
|
||||||
|
|
||||||
private static $criteria2PeerMap = array(
|
private static $criteria2PeerMap = array(
|
||||||
0 => "Select criteria",
|
0 => "Select criteria",
|
||||||
|
@ -1188,18 +1191,30 @@ SQL;
|
||||||
{
|
{
|
||||||
// delete criteria under $p_blockId
|
// delete criteria under $p_blockId
|
||||||
CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete();
|
CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete();
|
||||||
//Logging::info($p_criteriaData);
|
// Logging::info($p_criteriaData);
|
||||||
//insert modifier rows
|
//insert modifier rows
|
||||||
if (isset($p_criteriaData['criteria'])) {
|
if (isset($p_criteriaData['criteria'])) {
|
||||||
$critKeys = array_keys($p_criteriaData['criteria']);
|
$critKeys = array_keys($p_criteriaData['criteria']);
|
||||||
for ($i = 0; $i < count($critKeys); $i++) {
|
for ($i = 0; $i < count($critKeys); $i++) {
|
||||||
foreach ($p_criteriaData['criteria'][$critKeys[$i]] as $d) {
|
foreach ($p_criteriaData['criteria'][$critKeys[$i]] as $d) {
|
||||||
|
// Logging::info($d);
|
||||||
$field = $d['sp_criteria_field'];
|
$field = $d['sp_criteria_field'];
|
||||||
$value = $d['sp_criteria_value'];
|
$value = $d['sp_criteria_value'];
|
||||||
|
$modifier = $d['sp_criteria_modifier'];
|
||||||
|
if (isset($d['sp_criteria_extra'])) { $extra = $d['sp_criteria_extra']; }
|
||||||
|
if (isset($d['sp_criteria_datetime_select'])) { $datetimeunit = $d['sp_criteria_datetime_select']; }
|
||||||
|
if (isset($d['sp_criteria_extra_datetime_select'])) {$extradatetimeunit = $d['sp_criteria_extra_datetime_select'];}
|
||||||
|
|
||||||
if ($field == 'utime' || $field == 'mtime' || $field == 'lptime') {
|
if ($field == 'utime' || $field == 'mtime' || $field == 'lptime') {
|
||||||
$value = Application_Common_DateHelper::UserTimezoneStringToUTCString($value);
|
// if the date isn't relative we want to convert the value to a specific UTC date
|
||||||
|
if (!(in_array($modifier,array('before','after','between')))) {
|
||||||
|
$value = Application_Common_DateHelper::UserTimezoneStringToUTCString($value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$value = $value . ' ' . $datetimeunit . ' ago';
|
||||||
|
// Logging::info($value);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$qry = new CcBlockcriteria();
|
$qry = new CcBlockcriteria();
|
||||||
|
@ -1211,10 +1226,17 @@ SQL;
|
||||||
if (isset($d['sp_criteria_extra'])) {
|
if (isset($d['sp_criteria_extra'])) {
|
||||||
|
|
||||||
if ($field == 'utime' || $field == 'mtime' || $field == 'lptime') {
|
if ($field == 'utime' || $field == 'mtime' || $field == 'lptime') {
|
||||||
$d['sp_criteria_extra'] = Application_Common_DateHelper::UserTimezoneStringToUTCString($d['sp_criteria_extra']);
|
// if the date isn't relative we want to convert the value to a specific UTC date
|
||||||
|
if (!(in_array($modifier,array('before','after','between')))) {
|
||||||
|
$extra = Application_Common_DateHelper::UserTimezoneStringToUTCString($extra);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$extra = $extra . ' ' . $extradatetimeunit. ' ago';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$qry->setDbExtra($d['sp_criteria_extra']);
|
$qry->setDbExtra($extra);
|
||||||
}
|
}
|
||||||
$qry->save();
|
$qry->save();
|
||||||
}
|
}
|
||||||
|
@ -1350,6 +1372,13 @@ SQL;
|
||||||
return $insertList;
|
return $insertList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses each row in the database for the criteria associated with this block and renders human readable labels.
|
||||||
|
* Returns it as an array with each criteria_name and modifier_name added based upon options array lookup.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
public function getCriteria()
|
public function getCriteria()
|
||||||
{
|
{
|
||||||
$criteriaOptions = array(
|
$criteriaOptions = array(
|
||||||
|
@ -1393,6 +1422,9 @@ SQL;
|
||||||
"is not" => _("is not"),
|
"is not" => _("is not"),
|
||||||
"starts with" => _("starts with"),
|
"starts with" => _("starts with"),
|
||||||
"ends with" => _("ends with"),
|
"ends with" => _("ends with"),
|
||||||
|
"before" => _("before"),
|
||||||
|
"after" => _("after"),
|
||||||
|
"between" => _("between"),
|
||||||
"is" => _("is"),
|
"is" => _("is"),
|
||||||
"is not" => _("is not"),
|
"is not" => _("is not"),
|
||||||
"is greater than" => _("is greater than"),
|
"is greater than" => _("is greater than"),
|
||||||
|
@ -1453,9 +1485,9 @@ SQL;
|
||||||
|
|
||||||
//data should already be in UTC, do we have to do anything special here anymore?
|
//data should already be in UTC, do we have to do anything special here anymore?
|
||||||
if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
|
if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
|
||||||
|
|
||||||
$spCriteriaValue = $criteria['value'];
|
$spCriteriaValue = $criteria['value'];
|
||||||
|
|
||||||
if (isset($criteria['extra'])) {
|
if (isset($criteria['extra'])) {
|
||||||
$spCriteriaExtra = $criteria['extra'];
|
$spCriteriaExtra = $criteria['extra'];
|
||||||
}
|
}
|
||||||
|
@ -1501,6 +1533,28 @@ SQL;
|
||||||
} elseif ($spCriteriaModifier == "is in the range") {
|
} elseif ($spCriteriaModifier == "is in the range") {
|
||||||
$spCriteriaValue = "$spCriteria >= '$spCriteriaValue' AND $spCriteria <= '$spCriteriaExtra'";
|
$spCriteriaValue = "$spCriteria >= '$spCriteriaValue' AND $spCriteria <= '$spCriteriaExtra'";
|
||||||
}
|
}
|
||||||
|
elseif ($spCriteriaModifier == "before") {
|
||||||
|
// need to pull in the current time and subtract the value or figure out how to make it relative
|
||||||
|
$relativedate = new DateTime($spCriteriaValue);
|
||||||
|
$dt = $relativedate->format(DateTime::ISO8601);
|
||||||
|
$spCriteriaValue = "$spCriteria <= '$dt'";
|
||||||
|
// Logging::info($spCriteriaValue);
|
||||||
|
}
|
||||||
|
elseif ($spCriteriaModifier == "after") {
|
||||||
|
$relativedate = new DateTime($spCriteriaValue);
|
||||||
|
$dt = $relativedate->format(DateTime::ISO8601);
|
||||||
|
$spCriteriaValue = "$spCriteria >= '$dt'";
|
||||||
|
// Logging::info($spCriteriaValue);
|
||||||
|
} elseif ($spCriteriaModifier == "between") {
|
||||||
|
$fromrelativedate = new DateTime($spCriteriaValue);
|
||||||
|
$fdt = $fromrelativedate->format(DateTime::ISO8601);
|
||||||
|
// Logging::info($fdt);
|
||||||
|
|
||||||
|
$torelativedate = new DateTime($spCriteriaExtra);
|
||||||
|
$tdt = $torelativedate->format(DateTime::ISO8601);
|
||||||
|
// Logging::info($tdt);
|
||||||
|
$spCriteriaValue = "$spCriteria >= '$fdt' AND $spCriteria <= '$tdt'";
|
||||||
|
}
|
||||||
|
|
||||||
$spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier];
|
$spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier];
|
||||||
|
|
||||||
|
@ -1574,7 +1628,7 @@ SQL;
|
||||||
}
|
}
|
||||||
public static function organizeSmartPlaylistCriteria($p_criteria)
|
public static function organizeSmartPlaylistCriteria($p_criteria)
|
||||||
{
|
{
|
||||||
$fieldNames = array('sp_criteria_field', 'sp_criteria_modifier', 'sp_criteria_value', 'sp_criteria_extra');
|
$fieldNames = array('sp_criteria_field', 'sp_criteria_modifier', 'sp_criteria_value', 'sp_criteria_extra', 'sp_criteria_datetime_select', 'sp_criteria_extra_datetime_select');
|
||||||
$output = array();
|
$output = array();
|
||||||
foreach ($p_criteria as $ele) {
|
foreach ($p_criteria as $ele) {
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
@ -93,13 +93,18 @@
|
||||||
echo 'style=display:none';
|
echo 'style=display:none';
|
||||||
} ?> >
|
} ?> >
|
||||||
<?php echo $this->element->getElement("sp_criteria_field_".$i."_".$j) ?>
|
<?php echo $this->element->getElement("sp_criteria_field_".$i."_".$j) ?>
|
||||||
<?php echo $this->element->getElement("sp_criteria_modifier_".$i."_".$j) ?>
|
<?php echo $this->element->getElement("sp_criteria_modifier_".$i."_".$j) /* @todo finish this */?>
|
||||||
|
|
||||||
<?php echo $this->element->getElement("sp_criteria_value_".$i."_".$j) ?>
|
<?php echo $this->element->getElement("sp_criteria_value_".$i."_".$j) ?>
|
||||||
|
<span class='sp_text_font' id="datetime_select" <?php echo $this->element->getElement("sp_criteria_datetime_select_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>><?php echo $this->element->getElement('sp_criteria_datetime_select_'.$i."_".$j) ?><?php echo _(" ago "); ?></span>
|
||||||
|
|
||||||
<a class='btn btn-small btn-new' id='modifier_add_<?php echo $i ?>'>
|
<a class='btn btn-small btn-new' id='modifier_add_<?php echo $i ?>'>
|
||||||
<i class='icon-white icon-plus'></i><?php echo(_("New Modifier")); ?>
|
<i class='icon-white icon-plus'></i><?php echo(_("New Modifier")); ?>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<span class='sp_text_font' id="extra_criteria" <?php echo $this->element->getElement("sp_criteria_extra_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>><?php echo _(" to "); ?><?php echo $this->element->getElement('sp_criteria_extra_'.$i."_".$j) ?></span>
|
<span class='sp_text_font' id="extra_criteria" <?php echo $this->element->getElement("sp_criteria_extra_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>><?php echo _(" to "); ?><?php echo $this->element->getElement('sp_criteria_extra_'.$i."_".$j) ?></span>
|
||||||
|
<span class='sp_text_font' id="extra_datetime_select" <?php echo $this->element->getElement("sp_criteria_extra_datetime_select_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>><?php echo $this->element->getElement('sp_criteria_extra_datetime_select_'.$i."_".$j) ?><?php echo _(" ago "); ?></span>
|
||||||
|
|
||||||
<a style='margin-right:3px' class='btn btn-small btn-danger' id='criteria_remove_<?php echo $i ?>'>
|
<a style='margin-right:3px' class='btn btn-small btn-danger' id='criteria_remove_<?php echo $i ?>'>
|
||||||
<i class='icon-white icon-remove spl-no-r-margin'></i>
|
<i class='icon-white icon-remove spl-no-r-margin'></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -734,7 +734,7 @@ input.input_text.sp_extra_input_text{
|
||||||
.sp_text_font{
|
.sp_text_font{
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-family: Helvetica, Arial, sans-serif;
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
color: #5B5B5B;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp_text_font_bold{
|
.sp_text_font_bold{
|
||||||
|
|
|
@ -19,6 +19,8 @@ function setSmartBlockEvents() {
|
||||||
appendAddButton();
|
appendAddButton();
|
||||||
appendModAddButton();
|
appendModAddButton();
|
||||||
removeButtonCheck();
|
removeButtonCheck();
|
||||||
|
disableAndHideDateTimeDropdown(newRowVal);
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -34,6 +36,8 @@ function setSmartBlockEvents() {
|
||||||
appendAddButton();
|
appendAddButton();
|
||||||
appendModAddButton();
|
appendModAddButton();
|
||||||
removeButtonCheck();
|
removeButtonCheck();
|
||||||
|
disableAndHideDateTimeDropdown(newRowVal);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -66,6 +70,8 @@ function setSmartBlockEvents() {
|
||||||
newRowVal.val('');
|
newRowVal.val('');
|
||||||
newRowExtra.val('');
|
newRowExtra.val('');
|
||||||
disableAndHideExtraField(newRowVal);
|
disableAndHideExtraField(newRowVal);
|
||||||
|
disableAndHideDateTimeDropdown(newRowVal);
|
||||||
|
disableAndHideExtraDateTimeDropdown(newRowVal);
|
||||||
sizeTextBoxes(newRowVal, 'sp_extra_input_text', 'sp_input_text');
|
sizeTextBoxes(newRowVal, 'sp_extra_input_text', 'sp_input_text');
|
||||||
|
|
||||||
//remove the 'criteria add' button from new modifier row
|
//remove the 'criteria add' button from new modifier row
|
||||||
|
@ -89,18 +95,28 @@ function setSmartBlockEvents() {
|
||||||
var item_to_hide;
|
var item_to_hide;
|
||||||
var prev;
|
var prev;
|
||||||
var index;
|
var index;
|
||||||
|
|
||||||
//remove error message from current row, if any
|
//remove error message from current row, if any
|
||||||
var error_element = curr.find('span[class="errors sp-errors"]');
|
var error_element = curr.find('span[class="errors sp-errors"]');
|
||||||
if (error_element.is(':visible')) {
|
if (error_element.is(':visible')) {
|
||||||
error_element.remove();
|
error_element.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* In the case that there is only one element we need to remove the
|
||||||
|
* date_select drop down.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (count == 0) {
|
||||||
|
disableAndHideDateTimeDropdown(curr.find(':first-child'), index);
|
||||||
|
disableAndHideExtraDateTimeDropdown(curr.find(':first-child'),index);
|
||||||
|
disableAndHideExtraField(curr.find(':first-child'),index);
|
||||||
|
}
|
||||||
|
|
||||||
/* assign next row to current row for all rows below and including
|
/* assign next row to current row for all rows below and including
|
||||||
* the row getting removed
|
* the row getting removed
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
for (var i=0; i<count; i++) {
|
for (var i=0; i<count; i++) {
|
||||||
|
|
||||||
index = getRowIndex(curr);
|
index = getRowIndex(curr);
|
||||||
|
|
||||||
var criteria = next.find('[name^="sp_criteria_field"]').val();
|
var criteria = next.find('[name^="sp_criteria_field"]').val();
|
||||||
|
@ -109,10 +125,12 @@ function setSmartBlockEvents() {
|
||||||
var modifier = next.find('[name^="sp_criteria_modifier"]').val();
|
var modifier = next.find('[name^="sp_criteria_modifier"]').val();
|
||||||
populateModifierSelect(curr.find('[name^="sp_criteria_field"]'), false);
|
populateModifierSelect(curr.find('[name^="sp_criteria_field"]'), false);
|
||||||
curr.find('[name^="sp_criteria_modifier"]').val(modifier);
|
curr.find('[name^="sp_criteria_modifier"]').val(modifier);
|
||||||
|
|
||||||
var criteria_value = next.find('[name^="sp_criteria_value"]').val();
|
var criteria_value = next.find('[name^="sp_criteria_value"]').val();
|
||||||
curr.find('[name^="sp_criteria_value"]').val(criteria_value);
|
curr.find('[name^="sp_criteria_value"]').val(criteria_value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* if current and next row have the extra criteria value
|
/* if current and next row have the extra criteria value
|
||||||
* (for 'is in the range' modifier), then assign the next
|
* (for 'is in the range' modifier), then assign the next
|
||||||
* extra value to current and remove that element from
|
* extra value to current and remove that element from
|
||||||
|
@ -124,7 +142,7 @@ function setSmartBlockEvents() {
|
||||||
var criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
|
var criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
|
||||||
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
|
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
|
||||||
disableAndHideExtraField(next.find(':first-child'), getRowIndex(next));
|
disableAndHideExtraField(next.find(':first-child'), getRowIndex(next));
|
||||||
|
|
||||||
/* if only the current row has the extra criteria value,
|
/* if only the current row has the extra criteria value,
|
||||||
* then just remove the current row's extra criteria element
|
* then just remove the current row's extra criteria element
|
||||||
*/
|
*/
|
||||||
|
@ -142,6 +160,54 @@ function setSmartBlockEvents() {
|
||||||
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
|
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* if current and next row have the date_time_select_criteria visible
|
||||||
|
* then show the current and it from the next row
|
||||||
|
*/
|
||||||
|
if (curr.find('[name^="sp_criteria_datetime_select"]').attr("disabled") != "disabled"
|
||||||
|
&& next.find('#datetime_select').is(':visible')) {
|
||||||
|
|
||||||
|
var criteria_datetime = next.find('[name^="sp_criteria_datetime_select"]').val();
|
||||||
|
curr.find('[name^="sp_criteria_datetime_select"]').val(criteria_datetime);
|
||||||
|
disableAndHideDateTimeDropdown(next.find('first-child'), getRowIndex(next));
|
||||||
|
/* if only the current row has the extra criteria value,
|
||||||
|
* then just remove the current row's extra criteria element
|
||||||
|
*/
|
||||||
|
} else if (curr.find('[name^="sp_criteria_datetime_select"]').attr("disabled") != "disabled"
|
||||||
|
&& next.find('#datetime_select').not(':visible')) {
|
||||||
|
disableAndHideDateTimeDropdown(curr.find(':first-child'), index);
|
||||||
|
/* if only the next row has date_time_select then just enable it on the current row
|
||||||
|
*/
|
||||||
|
} else if (next.find('#datetime_select').is(':visible')) {
|
||||||
|
criteria_datetime = next.find('[name^="sp_criteria_datetime_select"]').val();
|
||||||
|
enableAndShowDateTimeDropdown(curr.find(':first-child'), index);
|
||||||
|
curr.find('[name^="sp_criteria_datetime_select"]').val(criteria_datetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if current and next row have the extra_date_time_select_criteria visible
|
||||||
|
* then show the current and it from the next row
|
||||||
|
*/
|
||||||
|
if (curr.find('[name^="sp_criteria_extra_datetime_select"]').attr("disabled") != "disabled"
|
||||||
|
&& next.find('#extra_datetime_select').is(':visible')) {
|
||||||
|
|
||||||
|
var extra_criteria_datetime = next.find('[name^="sp_criteria_extra_datetime_select"]').val();
|
||||||
|
curr.find('[name^="sp_criteria_extra_datetime_select"]').val(extra_criteria_datetime);
|
||||||
|
disableAndHideExtraDateTimeDropdown(next.find('first-child'), getRowIndex(next));
|
||||||
|
/* if only the current row has the extra criteria value,
|
||||||
|
* then just remove the current row's extra criteria element
|
||||||
|
*/
|
||||||
|
} else if (curr.find('[name^="sp_criteria_extra_datetime_select"]').attr("disabled") != "disabled"
|
||||||
|
&& next.find('#extra_datetime_select').not(':visible')) {
|
||||||
|
disableAndHideExtraDateTimeDropdown(curr.find(':first-child'), index);
|
||||||
|
/* if only the next row has date_time_select then just enable it on the current row
|
||||||
|
*/
|
||||||
|
} else if (next.find('#datetime_select').is(':visible')) {
|
||||||
|
criteria_datetime = next.find('[name^="sp_criteria_extra_datetime_select"]').val();
|
||||||
|
enableAndShowExtraDateTimeDropdown(curr.find(':first-child'), index);
|
||||||
|
curr.find('[name^="sp_criteria_extra_datetime_select"]').val(criteria_datetime);
|
||||||
|
}
|
||||||
|
|
||||||
/* determine if current row is a modifier row
|
/* determine if current row is a modifier row
|
||||||
* if it is, make the criteria select invisible
|
* if it is, make the criteria select invisible
|
||||||
*/
|
*/
|
||||||
|
@ -167,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();
|
||||||
|
@ -241,6 +312,8 @@ function setSmartBlockEvents() {
|
||||||
|
|
||||||
// disable extra field and hide the span
|
// disable extra field and hide the span
|
||||||
disableAndHideExtraField($(this), index);
|
disableAndHideExtraField($(this), index);
|
||||||
|
disableAndHideDateTimeDropdown($(this), index);
|
||||||
|
disableAndHideExtraDateTimeDropdown($(this),index);
|
||||||
populateModifierSelect(this, true);
|
populateModifierSelect(this, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -248,12 +321,30 @@ function setSmartBlockEvents() {
|
||||||
form.find('select[id^="sp_criteria_modifier"]').live("change", function(){
|
form.find('select[id^="sp_criteria_modifier"]').live("change", function(){
|
||||||
var criteria_value = $(this).next(),
|
var criteria_value = $(this).next(),
|
||||||
index_num = getRowIndex($(this).parent());
|
index_num = getRowIndex($(this).parent());
|
||||||
|
|
||||||
if ($(this).val() == 'is in the range') {
|
if ($(this).val().match('before|after')) {
|
||||||
|
enableAndShowDateTimeDropdown(criteria_value, index_num);
|
||||||
|
console.log($(this).val());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
disableAndHideDateTimeDropdown(criteria_value, index_num);
|
||||||
|
disableAndHideExtraDateTimeDropdown(criteria_value,index_num);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($(this).val().match('is in the range')) {
|
||||||
enableAndShowExtraField(criteria_value, index_num);
|
enableAndShowExtraField(criteria_value, index_num);
|
||||||
} else {
|
} else {
|
||||||
disableAndHideExtraField(criteria_value, index_num);
|
disableAndHideExtraField(criteria_value, index_num);
|
||||||
}
|
}
|
||||||
|
if ($(this).val().match('between')) {
|
||||||
|
enableAndShowExtraField(criteria_value, index_num);
|
||||||
|
enableAndShowDateTimeDropdown(criteria_value,index_num);
|
||||||
|
enableAndShowExtraDateTimeDropdown(criteria_value,index_num);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
disableAndHideExtraDateTimeDropdown(criteria_value,index_num);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
setupUI();
|
setupUI();
|
||||||
|
@ -440,8 +531,68 @@ function setupUI() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Utilizing jQuery this function finds the #datetime_select element on the given row
|
||||||
|
* and shows the criteria drop-down
|
||||||
|
*/
|
||||||
|
function enableAndShowDateTimeDropdown(valEle, index) {
|
||||||
|
console.log('datetime show');
|
||||||
|
var spanDatetime = valEle.nextAll("#datetime_select");
|
||||||
|
spanDatetime.children('#sp_criteria_datetime_select_'+index).removeAttr("disabled");
|
||||||
|
spanDatetime.children('#sp_criteria_extra_datetime_select_'+index).removeAttr("disabled");
|
||||||
|
spanDatetime.show();
|
||||||
|
|
||||||
|
//make value input smaller since we have extra element now
|
||||||
|
var criteria_val = $('#sp_criteria_value_'+index);
|
||||||
|
sizeTextBoxes(criteria_val, 'sp_input_text', 'sp_extra_input_text');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Utilizing jQuery this function finds the #datetime_select element on the given row
|
||||||
|
* and hides the datetime criteria drop-down
|
||||||
|
*/
|
||||||
|
|
||||||
|
function disableAndHideDateTimeDropdown(valEle, index) {
|
||||||
|
console.log('datetime hide');
|
||||||
|
var spanDatetime = valEle.nextAll("#datetime_select");
|
||||||
|
spanDatetime.children('#sp_criteria_datetime_select_'+index).val("").attr("disabled", "disabled");
|
||||||
|
spanDatetime.hide();
|
||||||
|
|
||||||
|
//make value input larger since we don't have extra field now
|
||||||
|
var criteria_value = $('#sp_criteria_value_'+index);
|
||||||
|
sizeTextBoxes(criteria_value, 'sp_extra_input_text', 'sp_input_text');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utilizing jQuery this function finds the #datetime_select element on the given row
|
||||||
|
* and shows the criteria drop-down
|
||||||
|
*/
|
||||||
|
function enableAndShowExtraDateTimeDropdown(valEle, index) {
|
||||||
|
console.log('datetime show');
|
||||||
|
var spanDatetime = valEle.nextAll("#extra_datetime_select");
|
||||||
|
spanDatetime.children('#sp_criteria_extra_datetime_select_'+index).removeAttr("disabled");
|
||||||
|
spanDatetime.show();
|
||||||
|
|
||||||
|
//make value input smaller since we have extra element now
|
||||||
|
var criteria_val = $('#sp_criteria_value_'+index);
|
||||||
|
sizeTextBoxes(criteria_val, 'sp_input_text', 'sp_extra_input_text');
|
||||||
|
}
|
||||||
|
/* Utilizing jQuery this function finds the #datetime_select element on the given row
|
||||||
|
* and hides the datetime criteria drop-down
|
||||||
|
*/
|
||||||
|
|
||||||
|
function disableAndHideExtraDateTimeDropdown(valEle, index) {
|
||||||
|
console.log('datetime hide');
|
||||||
|
var spanDatetime = valEle.nextAll("#extra_datetime_select");
|
||||||
|
spanDatetime.children('#sp_criteria_extra_datetime_select_'+index).val("").attr("disabled", "disabled");
|
||||||
|
spanDatetime.hide();
|
||||||
|
|
||||||
|
//make value input larger since we don't have extra field now
|
||||||
|
var criteria_value = $('#sp_criteria_value_'+index);
|
||||||
|
sizeTextBoxes(criteria_value, 'sp_extra_input_text', 'sp_input_text');
|
||||||
|
}
|
||||||
|
|
||||||
function enableAndShowExtraField(valEle, index) {
|
function enableAndShowExtraField(valEle, index) {
|
||||||
var spanExtra = valEle.nextAll("#extra_criteria");
|
var spanExtra = valEle.nextAll("#extra_criteria");
|
||||||
|
console.log('shown');
|
||||||
spanExtra.children('#sp_criteria_extra_'+index).removeAttr("disabled");
|
spanExtra.children('#sp_criteria_extra_'+index).removeAttr("disabled");
|
||||||
spanExtra.show();
|
spanExtra.show();
|
||||||
|
|
||||||
|
@ -454,6 +605,7 @@ function disableAndHideExtraField(valEle, index) {
|
||||||
var spanExtra = valEle.nextAll("#extra_criteria");
|
var spanExtra = valEle.nextAll("#extra_criteria");
|
||||||
spanExtra.children('#sp_criteria_extra_'+index).val("").attr("disabled", "disabled");
|
spanExtra.children('#sp_criteria_extra_'+index).val("").attr("disabled", "disabled");
|
||||||
spanExtra.hide();
|
spanExtra.hide();
|
||||||
|
console.log('hidden');
|
||||||
|
|
||||||
//make value input larger since we don't have extra field now
|
//make value input larger since we don't have extra field now
|
||||||
var criteria_value = $('#sp_criteria_value_'+index);
|
var criteria_value = $('#sp_criteria_value_'+index);
|
||||||
|
@ -485,7 +637,15 @@ function populateModifierSelect(e, popAllMods) {
|
||||||
.attr('value', key)
|
.attr('value', key)
|
||||||
.text(value));
|
.text(value));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else if(criteria_type == 'd') {
|
||||||
|
$.each(dateTimeCriteriaOptions, function(key, value){
|
||||||
|
$(div).append($('<option></option>')
|
||||||
|
.attr('value', key)
|
||||||
|
.text(value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
$.each(numericCriteriaOptions, function(key, value){
|
$.each(numericCriteriaOptions, function(key, value){
|
||||||
$(div).append($('<option></option>')
|
$(div).append($('<option></option>')
|
||||||
.attr('value', key)
|
.attr('value', key)
|
||||||
|
@ -611,9 +771,9 @@ var criteriaTypes = {
|
||||||
"description" : "s",
|
"description" : "s",
|
||||||
"artist_name" : "s",
|
"artist_name" : "s",
|
||||||
"encoded_by" : "s",
|
"encoded_by" : "s",
|
||||||
"utime" : "n",
|
"utime" : "d",
|
||||||
"mtime" : "n",
|
"mtime" : "d",
|
||||||
"lptime" : "n",
|
"lptime" : "d",
|
||||||
"genre" : "s",
|
"genre" : "s",
|
||||||
"isrc_number" : "s",
|
"isrc_number" : "s",
|
||||||
"label" : "s",
|
"label" : "s",
|
||||||
|
@ -648,3 +808,15 @@ var numericCriteriaOptions = {
|
||||||
"is less than" : $.i18n._("is less than"),
|
"is less than" : $.i18n._("is less than"),
|
||||||
"is in the range" : $.i18n._("is in the range")
|
"is in the range" : $.i18n._("is in the range")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var dateTimeCriteriaOptions = {
|
||||||
|
"0" : $.i18n._("Select modifier"),
|
||||||
|
"before" : $.i18n._("before"),
|
||||||
|
"after" : $.i18n._("after"),
|
||||||
|
"between" : $.i18n._("between"),
|
||||||
|
"is" : $.i18n._("is"),
|
||||||
|
"is not" : $.i18n._("is not"),
|
||||||
|
"is greater than" : $.i18n._("is greater than"),
|
||||||
|
"is less than" : $.i18n._("is less than"),
|
||||||
|
"is in the range" : $.i18n._("is in the range")
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue