CC-5629 : Smart Block timestamps aren't saved in UTC time

This commit is contained in:
Naomi 2013-12-11 17:35:31 -05:00
parent c5f30c2b54
commit e6d28b250e
5 changed files with 51 additions and 61 deletions

View file

@ -121,26 +121,6 @@ class Application_Common_DateHelper
$this->_dateTime = $dateTime->getTimestamp();
}
/**
* Calculate and return the timestamp for end of day today
* in local time.
*
* For example, if local time is 2PM on 2011-11-01,
* then the function would return 2011-11-02 00:00:00
*
* @return End of day timestamp in local timezone
*/
public static function GetDayEndTimestamp($time = "") {
$dateTime = $time == "" ? new DateTime(date("Y-m-d")) : new DateTime($time);
$dateTime->add(new DateInterval('P1D'));
return $dateTime->format('Y-m-d H:i:s');
}
public static function GetDayEndTimestampInUtc($time = "") {
$dayEndTimestamp = Application_Common_DateHelper::GetDayEndTimestamp($time);
return Application_Common_DateHelper::ConvertToUtcDateTimeString($dayEndTimestamp);
}
/**
* Find the epoch timestamp difference from "now" to the beginning of today.
*/
@ -273,26 +253,6 @@ class Application_Common_DateHelper
return $dateTime;
}
public static function ConvertToSpecificTimezoneDateTime($p_dateString, $timezone){
$dateTime = new DateTime($p_dateString, new DateTimeZone("UTC"));
$dateTime->setTimezone(new DateTimeZone($timezone));
return $dateTime;
}
public static function ConvertToLocalDateTime($p_dateString){
$dateTime = new DateTime($p_dateString, new DateTimeZone("UTC"));
$dateTime->setTimezone(new DateTimeZone(Application_Model_Preference::GetTimezone()));
return $dateTime;
}
public static function ConvertToUtcDateTimeString($p_dateString, $p_format="Y-m-d H:i:s"){
if (is_null($p_dateString) || strlen($p_dateString) == 0)
return $p_dateString;
return self::ConvertToUtcDateTime($p_dateString)->format($p_format);
}
/*
* Example input: "00:02:32.746562". Output is a DateInterval object
* representing that 2 minute, 32.746562 second interval.

View file

@ -128,6 +128,31 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
{
}
/*
* converts UTC timestamp citeria into user timezone strings.
*/
private function convertTimestamps(&$criteria)
{
$columns = array("utime", "mtime", "lptime");
foreach ($columns as $column) {
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']);
}
}
}
}
}
public function startForm($p_blockId, $p_isValid = false)
{
// load type
@ -151,6 +176,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$bl = new Application_Model_Block($p_blockId);
$storedCrit = $bl->getCriteria();
//need to convert criteria to be displayed in the user's timezone if there's some timestamp type.
self::convertTimestamps($storedCrit["crit"]);
/* $modRoadMap stores the number of same criteria
* Ex: 3 Album titles, and 2 Track titles
* We need to know this so we display the form elements properly

View file

@ -1197,13 +1197,26 @@ SQL;
$critKeys = array_keys($p_criteriaData['criteria']);
for ($i = 0; $i < count($critKeys); $i++) {
foreach ($p_criteriaData['criteria'][$critKeys[$i]] as $d) {
$field = $d['sp_criteria_field'];
$value = $d['sp_criteria_value'];
if ($field == 'utime' || $field == 'mtime' || $field == 'lptime') {
$value = Application_Common_DateHelper::UserTimezoneStringToUTCString($value);
}
$qry = new CcBlockcriteria();
$qry->setDbCriteria($d['sp_criteria_field'])
$qry->setDbCriteria($field)
->setDbModifier($d['sp_criteria_modifier'])
->setDbValue($d['sp_criteria_value'])
->setDbValue($value)
->setDbBlockId($this->id);
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']);
}
$qry->setDbExtra($d['sp_criteria_extra']);
}
$qry->save();
@ -1413,28 +1426,18 @@ SQL;
foreach ($storedCrit["crit"] as $crit) {
$i = 0;
foreach ($crit as $criteria) {
//$spCriteriaPhpName = self::$criteria2PeerMap[$criteria['criteria']];
$spCriteria = $criteria['criteria'];
$spCriteriaModifier = $criteria['modifier'];
$column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$spCriteria]);
// if the column is timestamp, convert it into UTC
//data should already be in UTC, do we have to do anything special here anymore?
if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
$spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']);
/* Check if only a date was supplied and trim
* the time after it is converted to UTC time
*/
if (strlen($criteria['value']) <= 10) {
//extract date only from timestamp in db
$spCriteria = 'date('.$spCriteria.')';
$spCriteriaValue = substr($spCriteriaValue, 0, 10);
}
$spCriteriaValue = $criteria['value'];
if (isset($criteria['extra'])) {
$spCriteriaExtra = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['extra']);
if (strlen($criteria['extra']) <= 10) {
$spCriteriaExtra = substr($spCriteriaExtra, 0, 10);
}
$spCriteriaExtra = $criteria['extra'];
}
} elseif ($spCriteria == "bit_rate" || $spCriteria == 'sample_rate') {
// multiply 1000 because we store only number value

View file

@ -53,7 +53,6 @@ class Application_Model_Datatables
}
}
Logging::info($where);
return $where;
}
/*

View file

@ -569,7 +569,7 @@ input.input_text.sp_input_text{
}
input.input_text.sp_extra_input_text{
width: 60px !important;
width: 139px !important;
}
.sp_text_font{