diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php
index 84848d301..35b486cd3 100644
--- a/airtime_mvc/application/controllers/PlaylistController.php
+++ b/airtime_mvc/application/controllers/PlaylistController.php
@@ -555,6 +555,7 @@ class PlaylistController extends Zend_Controller_Action
if ($form->isValid($params)) {
$this->setPlaylistNameDescAction();
$bl->saveSmartBlockCriteria($params['data']);
+ // Logging::info($params['data']);
$this->createUpdateResponse($bl);
$this->view->result = 0;
diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php
index 25070006b..1e0c55613 100644
--- a/airtime_mvc/application/forms/SmartBlockCriteria.php
+++ b/airtime_mvc/application/forms/SmartBlockCriteria.php
@@ -4,6 +4,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
private $criteriaOptions;
private $stringCriteriaOptions;
private $numericCriteriaOptions;
+ private $dateTimeCriteriaOptions;
+ private $timePeriodCriteriaOptions;
private $sortOptions;
private $limitOptions;
@@ -24,9 +26,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"description" => "s",
"artist_name" => "s",
"encoded_by" => "s",
- "utime" => "n",
- "mtime" => "n",
- "lptime" => "n",
+ "utime" => "d",
+ "mtime" => "d",
+ "lptime" => "d",
"genre" => "s",
"isrc_number" => "s",
"label" => "s",
@@ -114,6 +116,43 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
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()
{
if (!isset($this->limitOptions)) {
@@ -154,19 +193,33 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
if (isset($criteria[$column])) {
foreach ($criteria[$column] as &$constraint) {
-
- $constraint['value'] =
- Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['value']);
-
- if (isset($constraint['extra'])) {
- $constraint['extra'] =
- Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['extra']);
- }
+ // convert to appropriate timezone timestamps only if the modifier is not a relative time
+ if (!in_array($constraint['modifier'], array('before','after','between'))) {
+ $constraint['value'] =
+ Application_Common_DateHelper::UTCStringToUserTimezoneString($constraint['value']);
+
+ if (isset($constraint['extra'])) {
+ $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)
{
// load type
@@ -204,20 +257,25 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$openSmartBlockOption = true;
}
+ // this returns a number indexed array for each criteria found in the database
$criteriaKeys = array();
if (isset($storedCrit["crit"])) {
$criteriaKeys = array_keys($storedCrit["crit"]);
}
$numElements = count($this->getCriteriaOptions());
+ // loop through once for each potential criteria option ie album, composer, track
+
for ($i = 0; $i < $numElements; $i++) {
$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])) {
$critCount = count($storedCrit["crit"][$criteriaKeys[$i]]);
} else {
$critCount = 1;
}
+ // store the number of items with the same key in the ModRowMap
$modRowMap[$i] = $critCount;
/* Loop through all criteria with the same field
@@ -225,6 +283,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
*/
for ($j = 0; $j < $critCount; $j++) {
/****************** CRITERIA ***********/
+ // hide the criteria drop down select on any rows after the first
if ($j > 0) {
$invisible = ' sp-invisible';
} else {
@@ -236,17 +295,23 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
->setValue('Select criteria')
->setDecorators(array('viewHelper'))
->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])) {
$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])) {
$criteriaType = $this->criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]];
$criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
}
$this->addElement($criteria);
+
/****************** MODIFIER ***********/
+ // every element has an optional modifier dropdown select
+
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i."_".$j);
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select')
@@ -254,10 +319,15 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
if ($i != 0 && !isset($criteriaKeys[$i])) {
$criteriaModifers->setAttrib('disabled', 'disabled');
}
+ // determine the modifier based upon criteria type which is looked up based upon an array
if (isset($criteriaKeys[$i])) {
if ($criteriaType == "s") {
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
- } else {
+ }
+ elseif ($criteriaType == "d") {
+ $criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
+ }
+ else {
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
}
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
@@ -267,6 +337,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->addElement($criteriaModifers);
/****************** VALUE ***********/
+ /* The challenge here is that datetime */
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i."_".$j);
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'));
@@ -274,22 +345,93 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$criteriaValue->setAttrib('disabled', 'disabled');
}
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);
+
+ /****************** 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('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 the 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 ***********/
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i."_".$j);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
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');
} else {
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$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
@@ -390,6 +532,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$eleMod->setMultiOptions($this->getStringCriteriaOptions());
} elseif ($criteriaType == "n") {
$eleMod->setMultiOptions($this->getNumericCriteriaOptions());
+ } elseif ($criteriaType == "d") {
+ $eleMod->setMultiOptions($this->getDateTimeCriteriaOptions());
} else {
$eleMod->setMultiOptions(array('0' => _('Select modifier')));
}
@@ -428,6 +572,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
} elseif ($criteriaType == "n") {
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
+ }
+ elseif ($criteriaType == "d") {
+ $criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
} else {
$criteriaModifers->setMultiOptions(array('0' => _('Select modifier')));
}
@@ -473,6 +620,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->populate($formData);
+ // Logging::info($formData);
return $data;
}
@@ -565,25 +713,26 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$element->addError(_("'Length' should be in '00:00:00' format"));
$isValid = false;
}
+ // this looks up the column type for the criteria the modified time, upload time etc.
} elseif ($column->getType() == PropelColumnTypes::TIMESTAMP) {
- if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
- $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_value']);
- if (!$result["success"]) {
- // check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
- $element->addError($result["errMsg"]);
+ // need to check for relative modifiers first - bypassing currently
+ if (in_array($d['sp_criteria_modifier'], array('before','after','between'))) {
+ if (!preg_match("/^[1-9][0-9]*$|0/",$d['sp_criteria_value'])) {
+ $element->addError(_("Only non-negative integer numbers are allowed (e.g 1 or 5) for the text value"));
+ $isValid = false;
+ // TODO validate this on numeric input with whatever parsing also do for extra
+ //if the modifier is before ago or between we skip validation until we confirm format
+ }
+ 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;
}
- }
-
- if (isset($d['sp_criteria_extra'])) {
- if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) {
+ } else {
+ if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
$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']);
+ $result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value']);
if (!$result["success"]) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$element->addError($result["errMsg"]);
@@ -591,6 +740,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 &&
$d['sp_criteria_field'] != 'owner_id') {
if (!is_numeric($d['sp_criteria_value'])) {
diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php
index d07a636f0..306dc7b80 100644
--- a/airtime_mvc/application/models/Block.php
+++ b/airtime_mvc/application/models/Block.php
@@ -51,7 +51,10 @@ class Application_Model_Block implements Application_Model_LibraryEditable
"ends with" => Criteria::ILIKE,
"is greater than" => Criteria::GREATER_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(
0 => "Select criteria",
@@ -1188,18 +1191,30 @@ SQL;
{
// delete criteria under $p_blockId
CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete();
- //Logging::info($p_criteriaData);
+ // Logging::info($p_criteriaData);
//insert modifier rows
if (isset($p_criteriaData['criteria'])) {
$critKeys = array_keys($p_criteriaData['criteria']);
for ($i = 0; $i < count($critKeys); $i++) {
foreach ($p_criteriaData['criteria'][$critKeys[$i]] as $d) {
-
+ // Logging::info($d);
$field = $d['sp_criteria_field'];
$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') {
- $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();
@@ -1211,10 +1226,17 @@ SQL;
if (isset($d['sp_criteria_extra'])) {
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();
}
@@ -1350,6 +1372,13 @@ SQL;
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()
{
$criteriaOptions = array(
@@ -1393,6 +1422,9 @@ SQL;
"is not" => _("is not"),
"starts with" => _("starts with"),
"ends with" => _("ends with"),
+ "before" => _("before"),
+ "after" => _("after"),
+ "between" => _("between"),
"is" => _("is"),
"is not" => _("is not"),
"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?
if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
-
+
$spCriteriaValue = $criteria['value'];
-
+
if (isset($criteria['extra'])) {
$spCriteriaExtra = $criteria['extra'];
}
@@ -1501,6 +1533,28 @@ SQL;
} elseif ($spCriteriaModifier == "is in the range") {
$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];
@@ -1574,7 +1628,7 @@ SQL;
}
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();
foreach ($p_criteria as $ele) {
diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml
index 032ae669f..114cfd919 100644
--- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml
+++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml
@@ -93,13 +93,18 @@
echo 'style=display:none';
} ?> >
element->getElement("sp_criteria_field_".$i."_".$j) ?>
- element->getElement("sp_criteria_modifier_".$i."_".$j) ?>
+ element->getElement("sp_criteria_modifier_".$i."_".$j) /* @todo finish this */?>
+
element->getElement("sp_criteria_value_".$i."_".$j) ?>
+ element->getElement("sp_criteria_datetime_select_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>>element->getElement('sp_criteria_datetime_select_'.$i."_".$j) ?>
+
element->getElement("sp_criteria_extra_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>>element->getElement('sp_criteria_extra_'.$i."_".$j) ?>
+ element->getElement("sp_criteria_extra_datetime_select_".$i."_".$j)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>>element->getElement('sp_criteria_extra_datetime_select_'.$i."_".$j) ?>
+
diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
index 0bbc16852..5442de35c 100644
--- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
+++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js
@@ -19,6 +19,8 @@ function setSmartBlockEvents() {
appendAddButton();
appendModAddButton();
removeButtonCheck();
+ disableAndHideDateTimeDropdown(newRowVal);
+
} else {
@@ -34,6 +36,8 @@ function setSmartBlockEvents() {
appendAddButton();
appendModAddButton();
removeButtonCheck();
+ disableAndHideDateTimeDropdown(newRowVal);
+
}
});
@@ -66,6 +70,8 @@ function setSmartBlockEvents() {
newRowVal.val('');
newRowExtra.val('');
disableAndHideExtraField(newRowVal);
+ disableAndHideDateTimeDropdown(newRowVal);
+ disableAndHideExtraDateTimeDropdown(newRowVal);
sizeTextBoxes(newRowVal, 'sp_extra_input_text', 'sp_input_text');
//remove the 'criteria add' button from new modifier row
@@ -89,18 +95,28 @@ function setSmartBlockEvents() {
var item_to_hide;
var prev;
var index;
-
//remove error message from current row, if any
var error_element = curr.find('span[class="errors sp-errors"]');
if (error_element.is(':visible')) {
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
* the row getting removed
*/
+
+
for (var i=0; i')
+ .attr('value', key)
+ .text(value));
+ });
+ }
+ else {
$.each(numericCriteriaOptions, function(key, value){
$(div).append($('')
.attr('value', key)
@@ -610,9 +765,9 @@ var criteriaTypes = {
"description" : "s",
"artist_name" : "s",
"encoded_by" : "s",
- "utime" : "n",
- "mtime" : "n",
- "lptime" : "n",
+ "utime" : "d",
+ "mtime" : "d",
+ "lptime" : "d",
"genre" : "s",
"isrc_number" : "s",
"label" : "s",
@@ -647,3 +802,15 @@ var numericCriteriaOptions = {
"is less than" : $.i18n._("is less than"),
"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")
+};