CC-5450 : Refactor Media Management (Classes/DB) in Airtime

finishing up last relative date rules.
This commit is contained in:
Naomi 2014-03-25 14:11:10 -04:00
parent 5d236c5311
commit b15e1e638c
3 changed files with 185 additions and 45 deletions

View File

@ -156,12 +156,18 @@ class PlaylistController extends Zend_Controller_Action
{
$content = $this->_getParam('content');
$con = Propel::getConnection(PlaylistPeer::DATABASE_NAME);
$con->beginTransaction();
try {
$playlist = $this->getPlaylist();
$playlist->savePlaylistContent($content);
$playlist->savePlaylistContent($con, $content);
$this->createUpdateResponse($playlist);
$con->commit();
}
catch (Exception $e) {
$con->rollBack();
$this->view->error = $e->getMessage();
}
}

View File

@ -66,6 +66,10 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
protected function getCriteriaRules(&$query) {
$displayTimezone = new DateTimeZone(\Application_Model_Preference::GetUserTimezone());
$utcTimezone = new DateTimeZone("UTC");
$now = new DateTime("now", $displayTimezone);
/*
* @param DateTime $now
*/
@ -116,15 +120,13 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
return $yearStart;
};
$displayTimezone = new DateTimeZone(\Application_Model_Preference::GetUserTimezone());
$utcTimezone = new DateTimeZone("UTC");
$now = new DateTime("now", $displayTimezone);
//$pattern is like "%VALUE%", or just "VALUE" if % is not needed.
function createRule(&$query, $comparison, $pattern = "VALUE") {
return function($col, $value1, $value2 = null) use (&$query, $comparison, $pattern) {
return function($col, $data) use (&$query, $comparison, $pattern) {
$m = $query->getModelName();
$value1 = $data["input1"];
$name = mt_rand(10000, 99999);
$cond = "{$m}.{$col} {$comparison} ?";
@ -146,12 +148,15 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$isGreaterThanEqualTo = createRule($query, Criteria::GREATER_EQUAL);
$isLessThanEqualTo = createRule($query, Criteria::LESS_EQUAL);
$range = function ($col, $value1, $value2) use (&$query) {
$range = function ($col, $data) use (&$query) {
$name1 = mt_rand(10000, 99999);
$name2 = mt_rand(10000, 99999);
$name3 = mt_rand(10000, 99999);
$value1 = $data["input1"];
$value2 = $data["input2"];
$m = $query->getModelName();
$comparison1 = Criteria::GREATER_EQUAL;
@ -182,7 +187,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $now->format('Y-m-d H:i:s');
$to = $tomorrow->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$yesterday = function($col) use (&$query, $utcTimezone, $now, $range) {
@ -199,7 +209,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $yesterday->format('Y-m-d H:i:s');
$to = $now->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$thisWeek = function($col) use (&$query, $utcTimezone, $now, $range, $getWeekStartDateTime) {
@ -212,7 +227,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $weekStart->format('Y-m-d H:i:s');
$to = $now->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$lastWeek = function($col) use (&$query, $utcTimezone, $now, $range, $getWeekStartDateTime) {
@ -229,7 +249,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $weekStart->format('Y-m-d H:i:s');
$to = $weekEnd->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$thisMonth = function($col) use (&$query, $utcTimezone, $now, $range, $getMonthStartDateTime) {
@ -242,7 +267,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $monthStart->format('Y-m-d H:i:s');
$to = $now->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$lastMonth = function($col) use (&$query, $utcTimezone, $now, $range, $getMonthStartDateTime) {
@ -259,7 +289,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $monthStart->format('Y-m-d H:i:s');
$to = $monthEnd->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$thisYear = function($col) use (&$query, $utcTimezone, $now, $range, $getYearStartDateTime) {
@ -272,7 +307,12 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $yearStart->format('Y-m-d H:i:s');
$to = $now->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
$lastYear = function($col) use (&$query, $utcTimezone, $now, $range, $getYearStartDateTime) {
@ -289,27 +329,115 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$from = $yearStart->format('Y-m-d H:i:s');
$to = $yearEnd->format('Y-m-d H:i:s');
return $range($col, $from, $to);
$data = array(
"input1" => $from,
"input2" => $to
);
return $range($col, $data);
};
//time is like hh:mm(:ss)
$inTheLast = function($col, $value, $unit) use (&$query, $utcTimezone, $now, $range) {
$info = explode(":", $now);
$hours = $info[0];
$minutes = isset($info[1]) ? intval($info[1]) : 0;
$seconds = isset($info[2]) ? intval($info[2]) : 0;
/*
1 => _("seconds"),
2 => _("minutes"),
3 => _("hours"),
4 => _("days"),
5 => _("weeks"),
6 => _("months"),
7 => _("years"),
*/
$convertRelativeUnit = function($duration, $unit) {
$timespan = $seconds + $minutes*60 + $hours*3600;
$timespan = intval($duration);
$interval = new DateInterval("PT{$timespan}S");
$last = clone $now;
$last->sub($interval);
switch($unit) {
case 1:
$format = "PT{$timespan}S";
break;
case 2:
$format = "PT{$timespan}M";
break;
case 3:
$format = "PT{$timespan}H";
break;
case 4:
$format = "P{$timespan}D";
break;
case 5:
$timespan *= 7;
$format = "P{$timespan}D";
break;
case 6:
$format = "P{$timespan}M";
break;
case 7:
$format = "P{$timespan}Y";
break;
}
return new DateInterval($format);
};
$from = $last->format('Y-m-d H:i:s');
$to = $now->format('Y-m-d H:i:s');
$getRelativeDateTimes = function($now, $data, $utcTimezone, $convertRelativeUnit) {
$value1 = $data["input1"];
$unit1 = $data["unit1"];
$interval1 = $convertRelativeUnit($value1, $unit1);
$from = clone $now;
$to = clone $now;
//relative range rule.
if (isset($data["input2"]) && isset($data["unit2"])) {
$value2 = $data["input2"];
$unit2 = $data["unit2"];
$interval2 = $convertRelativeUnit($value2, $unit2);
$from->sub($interval2);
$to->sub($interval1);
}
else {
$from->sub($interval1);
}
$from->setTimezone($utcTimezone);
$to->setTimezone($utcTimezone);
return array($from, $to);
};
$inTheLast = function($col, $data) use (&$query, $utcTimezone, $now, $getRelativeDateTimes, $convertRelativeUnit, $range) {
return $range($col, $from, $to);
list($from, $to) = $getRelativeDateTimes($now, $data, $utcTimezone, $convertRelativeUnit);
$data = array(
"input1" => $from->format('Y-m-d H:i:s'),
"input2" => $to->format('Y-m-d H:i:s')
);
return $range($col, $data);
};
$notInTheLast = function($col, $data) use (&$query, $utcTimezone, $now, $getRelativeDateTimes, $convertRelativeUnit, $isLessThan, $isGreaterThan) {
list($from, $to) = $getRelativeDateTimes($now, $data, $utcTimezone, $convertRelativeUnit);
$data1 = array(
"input1" => $from->format('Y-m-d H:i:s')
);
$data2 = array(
"input1" => $to->format('Y-m-d H:i:s')
);
$name1 = $isLessThan($col, $data1);
$name2 = $isGreaterThan($col, $data2);
$name3 = mt_rand(10000, 99999);
$query->combine(array($name1, $name2), 'or', $name3);
return $name3;
};
return array(
@ -333,7 +461,8 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$lastMonth,
$thisYear,
$lastYear,
$inTheLast
$inTheLast,
$notInTheLast
);
}
@ -439,10 +568,7 @@ abstract class Playlist extends BasePlaylist implements \Interface_Playlistable
$rule = $criteriaRules[$orBlock["modifier"]];
$column = $orBlock["criteria"];
$input1 = isset($orBlock["input1"]) ? $orBlock["input1"] : null;
$input2 = isset($orBlock["input2"]) ? $orBlock["input2"] : null;
$condition = $rule($column, $input1, $input2);
$condition = $rule($column, $orBlock);
$conditionOr[] = $condition;
}

View File

@ -20,25 +20,33 @@
<?php echo $this->element->getElement("sp_criteria_field_{$suffix}") ?>
<?php echo $this->element->getElement("sp_criteria_modifier_{$suffix}") ?>
<?php $input = $this->element->getElement("sp_criteria_value_{$suffix}") ?>
<?php if(isset($input)): ?>
<?php echo $input; ?>
<?php
$input1 = $this->element->getElement("sp_criteria_value_{$suffix}");
$input2 = $this->element->getElement("sp_criteria_extra_{$suffix}");
$unit1 = $this->element->getElement("sp_rel_date_unit_1_{$suffix}");
$unit2 = $this->element->getElement("sp_rel_date_unit_2_{$suffix}")
?>
<?php if (isset($input1)): ?>
<?php echo $input1; ?>
<?php endif; ?>
<?php $unit1 = $this->element->getElement("sp_rel_date_unit_1_{$suffix}") ?>
<?php if(isset($unit1)): ?>
<?php if (isset($unit1)): ?>
<?php echo $unit1; ?>
<?php endif; ?>
<?php $extra = $this->element->getElement("sp_criteria_extra_{$suffix}") ?>
<?php if(isset($extra)): ?>
<span class='sp_text_font' id="extra_criteria"><?php echo _("to"); ?>
<?php echo $extra; ?>
<?php if (isset($input2)): ?>
<span class='sp_text_font' id="extra_criteria">
<?php echo _("to"); ?>
<?php echo $input2; ?>
</span>
<?php else: ?>
<a class="btn btn-small btn-range">
<span>TO</span>
</a>
<?php endif; ?>
<?php $unit2 = $this->element->getElement("sp_rel_date_unit_2_{$suffix}") ?>
<?php if(isset($unit2)): ?>
<?php if (isset($unit2)): ?>
<?php echo $unit2; ?>
<?php endif; ?>