diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index e7df03065..df4f38d07 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -83,8 +83,8 @@ $ccAcl->allow('G', 'index') ->allow('H', 'library') ->allow('H', 'playlist') ->allow('H', 'playouthistory') + ->allow('H', 'listenerstat') ->allow('A', 'playouthistorytemplate') - ->allow('A', 'listenerstat') ->allow('A', 'user') ->allow('A', 'systemstatus') ->allow('A', 'preference') diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index e08e925f1..cfdfba417 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1622,7 +1622,7 @@ SQL; // this function return list of propel object - public function getListofFilesMeetCriteria($show = null) + public function getListofFilesMeetCriteria($showLimit = null) { $storedCrit = $this->getCriteria(); @@ -1782,9 +1782,8 @@ SQL; $limits['items'] = $storedCrit['limit']['value']; } elseif (($storedCrit['limit']['modifier'] == "remaining") ){ // show will be null unless being called inside a show instance - if (!(is_null($show))) { - $showInstance = new Application_Model_ShowInstance($show); - $limits['time'] = $showInstance->getSecondsRemaining(); + if (!(is_null($showLimit))) { + $limits['time'] = $showLimit; $limits['items'] = null; } else { @@ -1813,7 +1812,6 @@ SQL; try { $out = $qry->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)->find(); - Logging::info($qry->toString()); return array("files"=>$out, "limit"=>$limits, "repeat_tracks"=> $repeatTracks, "overflow_tracks"=> $overflowTracks, "count"=>$out->count()); } catch (Exception $e) { @@ -1823,7 +1821,6 @@ SQL; } public static function organizeSmartPlaylistCriteria($p_criteria) { - Logging::info($p_criteria); $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) { @@ -1862,7 +1859,6 @@ SQL; $output['etc'][$ele['name']] = $ele['value']; } } - Logging::info($output); return $output; } public static function getAllBlockFiles() diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index 3d8eb1185..4f2519492 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -213,6 +213,10 @@ final class Application_Model_Scheduler */ private function retrieveMediaFiles($id, $type, $show) { + // if there is a show we need to set a show limit to pass to smart blocks in case they use time remaining + $showInstance = new Application_Model_ShowInstance($show); + $showLimit = $showInstance->getSecondsRemaining(); + $files = array(); if ($type === "audioclip") { $file = CcFilesQuery::create()->findPK($id, $this->con); @@ -241,7 +245,8 @@ final class Application_Model_Scheduler } elseif ($type === "playlist") { $pl = new Application_Model_Playlist($id); $contents = $pl->getContents(); - + // because the time remaining is not updated until after the schedule inserts we need to track it for + // the entire add vs. querying on the smartblock level foreach ($contents as $plItem) { if ($plItem['type'] == 0) { $data["id"] = $plItem['item_id']; @@ -278,7 +283,7 @@ final class Application_Model_Scheduler } else { $defaultFadeIn = Application_Model_Preference::GetDefaultFadeIn(); $defaultFadeOut = Application_Model_Preference::GetDefaultFadeOut(); - $dynamicFiles = $bl->getListOfFilesUnderLimit($show); + $dynamicFiles = $bl->getListOfFilesUnderLimit($showLimit); foreach ($dynamicFiles as $f) { $fileId = $f['id']; $file = CcFilesQuery::create()->findPk($fileId); @@ -301,6 +306,9 @@ final class Application_Model_Scheduler } } } + // if this is a playlist it might contain multiple time remaining smart blocks + // since the schedule isn't updated until after this insert we need to keep tally + $showLimit -= $this->timeLengthOfFiles($files); } } elseif ($type == "stream") { //need to return @@ -337,7 +345,7 @@ final class Application_Model_Scheduler } else { $defaultFadeIn = Application_Model_Preference::GetDefaultFadeIn(); $defaultFadeOut = Application_Model_Preference::GetDefaultFadeOut(); - $dynamicFiles = $bl->getListOfFilesUnderLimit($show); + $dynamicFiles = $bl->getListOfFilesUnderLimit($showLimit); foreach ($dynamicFiles as $f) { $fileId = $f['id']; $file = CcFilesQuery::create()->findPk($fileId); @@ -993,6 +1001,7 @@ final class Application_Model_Scheduler $this->calculateCrossfades($instanceId); } }//for each instance + }//for each schedule location $endProfile = microtime(true); @@ -1294,6 +1303,20 @@ final class Application_Model_Scheduler throw $e; } } + /* + * This is used to determine the duration of a files array + * + * + */ + public function timeLengthOfFiles($files) { + $timeLength = 0; + foreach ($files as $file) { + $timeLength += Application_Common_DateHelper::playlistTimeToSeconds($file['cliplength']); + $timeLength += $file['fadein']; + $timeLength += $file['fadeout']; + } + return $timeLength; + } /* * Used for cancelling the current show instance.