diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 4f9c6d764..59149fe4d 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -271,6 +271,11 @@ class Application_Model_Playlist $row->setDbFadein($info["fadein"]); $row->setDbFadeout($info["fadeout"]); $row->save($this->con); + // above save result update on cc_playlist table on length column. + // but $this->pl doesn't get updated automatically + // so we need to manually grab it again from DB so it has updated values + // It is something to do FORMAT_ON_DEMAND( Lazy Loading ) + $this->pl = CcPlaylistQuery::create()->findPK($this->id); } /* @@ -929,6 +934,7 @@ class Application_Model_Playlist $playlistType = $data['etc']['sp_type'] == 0 ? 'static':'dynamic'; $this->saveType($playlistType); + // validation start if ($data['etc']['sp_limit_options'] == 'hours') { $multiplier = 60; } @@ -952,43 +958,47 @@ class Application_Model_Playlist if (count($error) > 0){ $errors[] = array("element"=>"sp_limit_value", "msg"=>$error); } - - // format validation + foreach ($data['criteria'] as $key=>$d){ $error = array(); + $column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']]); // check for not selected select box if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){ $error[] = "You must select Criteria and Modifier"; } else { - // we need to take care 'length' specially since the column type is varchar + // validation on type of column if ($d['sp_criteria_field'] == 'length') { if (!preg_match("/(\d{2}):(\d{2}):(\d{2})/", $d['sp_criteria_value'])) { $error[] = "'Length' should be in '00:00:00' format"; } - } else if (CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']])->getType() == PropelColumnTypes::TIMESTAMP) { + } else if ($column->getType() == PropelColumnTypes::TIMESTAMP) { if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) { $error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00"; - } else { + } else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value'])) { // check for if it is in valid range( 1753-01-01 ~ 12/31/9999 ) - if(!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value'])){ - $error[] = "$d[sp_criteria_value] is not a valid date/time string"; - } + $error[] = "$d[sp_criteria_value] is not a valid date/time string"; } if (isset($d['sp_criteria_extra'])) { if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) { $error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00"; - } else { + } else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra'])) { // check for if it is in valid range( 1753-01-01 ~ 12/31/9999 ) - if(!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra'])){ - $error[] = "$d[sp_criteria_extra] is not a valid date/time string"; - } + $error[] = "$d[sp_criteria_extra] is not a valid date/time string"; } } - } else if (CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']])->getType() == PropelColumnTypes::INTEGER) { + } else if ($column->getType() == PropelColumnTypes::INTEGER) { if (!is_numeric($d['sp_criteria_value'])) { $error[] = "The value has to be numeric"; } + // length check + if (intval($d['sp_criteria_value']) >= pow(2,31)) { + $error[] = "The value should be less then 2147483648"; + } + } else if ($column->getType() == PropelColumnTypes::VARCHAR) { + if (strlen($d['sp_criteria_value']) > $column->getSize()) { + $error[] = "The value should be less ".$column->getSize()." characters"; + } } } @@ -1105,6 +1115,12 @@ class Application_Model_Playlist $spCriteriaModifier = $criteria['modifier']; $spCriteriaValue = $criteria['value']; + + // change date/time to UTC is the column time is timestamp + if (CcFilesPeer::getTableMap()->getColumnByPhpName($spCriteriaPhpName)->getType() == PropelColumnTypes::TIMESTAMP) { + $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($spCriteriaValue); + } + if ($spCriteriaModifier == "starts with") { $spCriteriaValue = "$spCriteriaValue%"; } else if ($spCriteriaModifier == "ends with") { diff --git a/airtime_mvc/application/models/airtime/map/CcPlaylistcriteriaTableMap.php b/airtime_mvc/application/models/airtime/map/CcPlaylistcriteriaTableMap.php index f564c8e30..05e10ac37 100644 --- a/airtime_mvc/application/models/airtime/map/CcPlaylistcriteriaTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcPlaylistcriteriaTableMap.php @@ -41,8 +41,8 @@ class CcPlaylistcriteriaTableMap extends TableMap { $this->addPrimaryKey('ID', 'DbId', 'INTEGER', true, null, null); $this->addColumn('CRITERIA', 'DbCriteria', 'VARCHAR', true, 16, null); $this->addColumn('MODIFIER', 'DbModifier', 'VARCHAR', true, 16, null); - $this->addColumn('VALUE', 'DbValue', 'VARCHAR', true, 32, null); - $this->addColumn('EXTRA', 'DbExtra', 'VARCHAR', false, 32, null); + $this->addColumn('VALUE', 'DbValue', 'VARCHAR', true, 512, null); + $this->addColumn('EXTRA', 'DbExtra', 'VARCHAR', false, 512, null); $this->addForeignKey('PLAYLIST_ID', 'DbPlaylistId', 'INTEGER', 'cc_playlist', 'ID', true, null, null); // validators } // initialize() diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index 1cb69caf6..04cf0ab77 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -255,8 +255,8 @@ - - + + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index 16141976a..e71b736aa 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -346,8 +346,8 @@ CREATE TABLE "cc_playlistcriteria" "id" serial NOT NULL, "criteria" VARCHAR(16) NOT NULL, "modifier" VARCHAR(16) NOT NULL, - "value" VARCHAR(32) NOT NULL, - "extra" VARCHAR(32), + "value" VARCHAR(512) NOT NULL, + "extra" VARCHAR(512), "playlist_id" INTEGER NOT NULL, PRIMARY KEY ("id") );