From 12b23443db645745ca2efff320e441a048eebae8 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Thu, 29 Mar 2012 16:27:08 +0200 Subject: [PATCH 1/3] CC-3547 : Refactoring Views, removing action stack to better work with permissions. Reorganizing Statistics Dialog. --- airtime_mvc/application/configs/ACL.php | 5 - .../controllers/ShowbuilderController.php | 13 +- airtime_mvc/application/models/Alib.php | 168 -------- airtime_mvc/application/models/Nowplaying.php | 194 --------- airtime_mvc/application/models/Preference.php | 8 + airtime_mvc/application/models/Prefs.php | 401 ------------------ airtime_mvc/application/models/XmlParser.php | 398 ----------------- airtime_mvc/application/models/genres.xml | 136 ------ 8 files changed, 12 insertions(+), 1311 deletions(-) delete mode 100644 airtime_mvc/application/models/Alib.php delete mode 100644 airtime_mvc/application/models/Nowplaying.php delete mode 100644 airtime_mvc/application/models/Prefs.php delete mode 100644 airtime_mvc/application/models/XmlParser.php delete mode 100644 airtime_mvc/application/models/genres.xml diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index 242f23a3e..fa1c6bd91 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -18,12 +18,9 @@ $ccAcl->add(new Zend_Acl_Resource('library')) ->add(new Zend_Acl_Resource('plupload')) ->add(new Zend_Acl_Resource('schedule')) ->add(new Zend_Acl_Resource('api')) - ->add(new Zend_Acl_Resource('nowplaying')) ->add(new Zend_Acl_Resource('systemstatus')) - ->add(new Zend_Acl_Resource('search')) ->add(new Zend_Acl_Resource('dashboard')) ->add(new Zend_Acl_Resource('preference')) - ->add(new Zend_Acl_Resource('recorder')) ->add(new Zend_Acl_Resource('showbuilder')) ->add(new Zend_Acl_Resource('auth')) ->add(new Zend_Acl_Resource('playouthistory')) @@ -37,13 +34,11 @@ $ccAcl->allow('G', 'index') ->allow('G', 'showbuilder') ->allow('G', 'api') ->allow('G', 'auth') - ->allow('G', 'recorder') ->allow('G', 'schedule') ->allow('G', 'dashboard') ->allow('H', 'usersettings') ->allow('H', 'plupload') ->allow('H', 'library') - ->allow('H', 'search') ->allow('H', 'playlist') ->allow('A', 'playouthistory') ->allow('A', 'user') diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index d8ac343fd..41a1a8896 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -44,11 +44,8 @@ class ShowbuilderController extends Zend_Controller_Action $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_showbuilder.js?'.$CC_CONFIG['airtime_version']),'text/javascript'); - $user = Application_Model_User::GetCurrentUser(); - + $user = Application_Model_User::GetCurrentUser(); $refer_sses = new Zend_Session_Namespace('referrer'); - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $user = new Application_Model_User($userInfo->id); if ($request->isPost()) { $form = new Application_Form_RegisterAirtime(); @@ -96,7 +93,7 @@ class ShowbuilderController extends Zend_Controller_Action } //popup if previous page was login - if ($refer_sses->referrer == 'login' && Application_Model_Nowplaying::ShouldShowPopUp() + if ($refer_sses->referrer == 'login' && Application_Model_Preference::ShouldShowPopUp() && !Application_Model_Preference::GetSupportFeedback() && $user->isAdmin()){ $form = new Application_Form_RegisterAirtime(); @@ -110,8 +107,7 @@ class ShowbuilderController extends Zend_Controller_Action } //determine whether to remove/hide/display the library. - $showLib = false; - $user = Application_Model_User::GetCurrentUser(); + $showLib = false; if (!$user->isGuest()) { $hideLib = false; $data = Application_Model_Preference::GetValue("nowplaying_screen", true); @@ -168,8 +164,7 @@ class ShowbuilderController extends Zend_Controller_Action $baseUrl = $request->getBaseUrl(); $menu = array(); - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $user = new Application_Model_User($userInfo->id); + $user = Application_Model_User::GetCurrentUser(); $item = CcScheduleQuery::create()->findPK($id); $instance = $item->getCcShowInstances(); diff --git a/airtime_mvc/application/models/Alib.php b/airtime_mvc/application/models/Alib.php deleted file mode 100644 index 6fd294f67..000000000 --- a/airtime_mvc/application/models/Alib.php +++ /dev/null @@ -1,168 +0,0 @@ -query($sql); - } // fn removePerm - - - /* ---------------------------------------------------------- object tree */ - - /* --------------------------------------------------------- users/groups */ - - /* ------------------------------------------------------------- sessions */ - /** - * Get login from session id (token) - * - * @param string $sessid - * @return string|PEAR_Error - */ - public static function GetSessLogin($sessid) - { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT login FROM ".$CC_CONFIG['sessTable']." WHERE sessid='$sessid'"; - $r = $CC_DBC->getOne($sql); - if (PEAR::isError($r)) { - return $r; - } - if (is_null($r)){ - return PEAR::raiseError("Alib::GetSessLogin:". - " invalid session id ($sessid)", - ALIBERR_NOTEXISTS, PEAR_ERROR_RETURN); - } - return $r; - } // fn GetSessLogin - - - /** - * Get user id from session id. - * - * @param string $p_sessid - * @return int|PEAR_Error - */ - public static function GetSessUserId($p_sessid) - { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT userid FROM ".$CC_CONFIG['sessTable']." WHERE sessid='$p_sessid'"; - $r = $CC_DBC->getOne($sql); - if (PEAR::isError($r)) { - return $r; - } - if (is_null($r)) { - return PEAR::raiseError("Alib::getSessUserId:". - " invalid session id ($p_sessid)", - ALIBERR_NOTEXISTS, PEAR_ERROR_RETURN); - } - return $r; - } // fn getSessUserId - - - /* --------------------------------------------------------- info methods */ - /** - * Get all permissions on object. - * - * @param int $id - * @return array|null|PEAR_Error - */ - public static function GetObjPerms($id) - { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT s.login, p.* FROM ".$CC_CONFIG['permTable']." p, ".$CC_CONFIG['subjTable']." s" - ." WHERE s.id=p.subj AND p.obj=$id"; - return $CC_DBC->getAll($sql); - } // fn GetObjPerms - - - /** - * Get all permissions of subject. - * - * @param int $sid - * @return array - */ - public static function GetSubjPerms($sid) - { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT *" - ." FROM ".$CC_CONFIG['permTable'] - ." WHERE p.subj=$sid"; - $a1 = $CC_DBC->getAll($sql); - return $a1; - } // fn GetSubjPerms - - - /* ------------------------ info methods related to application structure */ - /* (this part should be added/rewritten to allow defining/modifying/using - * application structure) - * (only very simple structure definition - in $CC_CONFIG - supported now) - */ - - /* ====================================================== private methods */ - - /** - * Create new session id. Return the new session ID. - * - * @return string - */ - private static function _createSessid() - { - global $CC_CONFIG, $CC_DBC; - for ($c = 1; $c > 0; ){ - $sessid = md5(uniqid(rand())); - $sql = "SELECT count(*) FROM ".$CC_CONFIG['sessTable'] - ." WHERE sessid='$sessid'"; - $c = $CC_DBC->getOne($sql); - if (PEAR::isError($c)) { - return $c; - } - } - return $sessid; - } // fn _createSessid - - -} // class Alib diff --git a/airtime_mvc/application/models/Nowplaying.php b/airtime_mvc/application/models/Nowplaying.php deleted file mode 100644 index 901af3fd9..000000000 --- a/airtime_mvc/application/models/Nowplaying.php +++ /dev/null @@ -1,194 +0,0 @@ -format("Y-m-d H:i:s"); - $showEnds = $showEndDateTime->format("Y-m-d H:i:s"); - } - - foreach ($p_dbRows as $dbRow) { - - $itemStartDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['item_starts']); - $itemEndDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['item_ends']); - - $itemStarts = $itemStartDateTime->format("Y-m-d H:i:s"); - $itemEnds = $itemEndDateTime->format("Y-m-d H:i:s"); - - // Allow show to exceed 1 second per CC-3183 - $status = ($showEnds < $itemEnds) ? "x" : ""; - - $type = "a"; - $type .= ($itemStartDateTime->getTimestamp() <= $epochNow - && $epochNow < $itemEndDateTime->getTimestamp() - && $epochNow < $showEndDateTime->getTimestamp()) ? "c" : ""; - - // remove millisecond from the time format - $itemStart = explode('.', $dbRow['item_starts']); - $itemEnd = explode('.', $dbRow['item_ends']); - - //format duration - $duration = explode('.', $dbRow['clip_length']); - $formatted = self::FormatDuration($duration[0]); - $dataTablesRows[] = array($type, $itemStarts, $itemStarts, $itemEnds, - $formatted, $dbRow['track_title'], $dbRow['artist_name'], $dbRow['album_title'], - $dbRow['playlist_name'], $dbRow['show_name'], $status); - } - - //Modify the last entry in the data table to adjust its end time to be equal to the - //shows end time if it exceeds it. - $lastRow = end($dataTablesRows); - if (isset($lastRow) && strtotime($showEnds) < strtotime($lastRow[3])){ - $dataTablesRows[sizeof($dataTablesRows)-1][3] = $showEnds; - } - return $dataTablesRows; - } - - private static function CreateGapRow($p_gapTime){ - return array("g", "", "", "", $p_gapTime, "", "", "", "", "", ""); - } - - private static function CreateRecordingRow($p_showInstance){ - return array("r", "", "", "", $p_showInstance->getName(), "", "", "", "", "", ""); - } - - - /* - * The purpose of this function is to return an array of scheduled - * items. There are two parameters. $p_viewType can be either "now" - * or "day". If "now", we show all scheduled items in the near future. - * - * If "day" we need to find what day was requested by the user, and return - * scheduled items for that day. - * - * $p_dateString is only used when $p_viewType is "day" it is in the format - * "2012-12-31". In this case it tells us which day to use. - */ - public static function GetDataGridData($p_viewType, $p_dateString){ - - if ($p_viewType == "now"){ - $start_dt = new DateTime("now", new DateTimeZone("UTC")); - $end_dt = clone $start_dt; - - $start_dt->sub(new DateInterval("PT60S")); - $end_dt->add(new DateInterval("PT24H")); - } else { - //convert to UTC - $utc_dt = Application_Model_DateHelper::ConvertToUtcDateTime($p_dateString); - $start_dt = $utc_dt; - - $end_dt = clone $utc_dt; - $end_dt->add(new DateInterval("PT24H")); - } - - $starts = $start_dt->format("Y-m-d H:i:s"); - $ends = $end_dt->format("Y-m-d H:i:s"); - - $showIds = Application_Model_ShowInstance::GetShowsInstancesIdsInRange($starts, $ends); - - //get all the pieces to be played between the start cut off and the end cut off. - $scheduledItems = Application_Model_Schedule::getScheduleItemsInRange($starts, $ends); - - $orderedScheduledItems; - foreach ($scheduledItems as $scheduledItem){ - $orderedScheduledItems[$scheduledItem['instance_id']][] = $scheduledItem; - } - - $data = array(); - foreach ($showIds as $showId){ - $instanceId = $showId['id']; - - //gets the show information - $si = new Application_Model_ShowInstance($instanceId); - - $showId = $si->getShowId(); - $show = new Application_Model_Show($showId); - - $showStartDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($si->getShowInstanceStart()); - $showEndDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($si->getShowInstanceEnd()); - - //append show header row - $data[] = self::CreateHeaderRow($show->getName(), $showStartDateTime->format("Y-m-d H:i:s"), $showEndDateTime->format("Y-m-d H:i:s")); - - $dataTablesRows = self::CreateDatatableRows($orderedScheduledItems[$instanceId]); - - //append show audio item rows - $data = array_merge($data, $dataTablesRows); - - //append show gap time row - $gapTime = self::FormatDuration($si->getShowEndGapTime(), true); - if ($si->isRecorded()) - $data[] = self::CreateRecordingRow($si); - else if ($gapTime > 0) - $data[] = self::CreateGapRow($gapTime); - } - - $timeNow = gmdate("Y-m-d H:i:s"); - $rows = Application_Model_Show::GetCurrentShow($timeNow); - Application_Model_Show::ConvertToLocalTimeZone($rows, array("starts", "ends", "start_timestamp", "end_timestamp")); - return array("currentShow"=>$rows, "rows"=>$data); - } - - public static function ShouldShowPopUp(){ - $today = mktime(0, 0, 0, gmdate("m"), gmdate("d"), gmdate("Y")); - $remindDate = Application_Model_Preference::GetRemindMeDate(); - if($remindDate == NULL || $today >= $remindDate){ - return true; - } - } - /* - * default $time format should be in format of 00:00:00 - * if $inSecond = true, then $time should be in seconds - */ - private static function FormatDuration($time, $inSecond=false){ - if($inSecond == false){ - $duration = explode(':', $time); - }else{ - $duration = array(); - $duration[0] = intval(($time/3600)%24); - $duration[1] = intval(($time/60)%60); - $duration[2] = $time%60; - } - - if($duration[2] == 0){ - $duration[2] = ''; - }else{ - $duration[2] = intval($duration[2],10).'s'; - } - - if($duration[1] == 0){ - if($duration[2] == ''){ - $duration[1] = ''; - }else{ - $duration[1] = intval($duration[1],10).'m '; - } - }else{ - $duration[1] = intval($duration[1],10).'m '; - } - - if($duration[0] == 0){ - $duration[0] = ''; - }else{ - $duration[0] = intval($duration[0],10).'h '; - } - - $out = $duration[0].$duration[1].$duration[2]; - return $out; - } -} diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index b6fbd550b..d8c0de5d8 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -773,5 +773,13 @@ class Application_Model_Preference return self::GetValue("live_dj_source_connection_url"); } /* User specific preferences end */ + + public static function ShouldShowPopUp(){ + $today = mktime(0, 0, 0, gmdate("m"), gmdate("d"), gmdate("Y")); + $remindDate = Application_Model_Preference::GetRemindMeDate(); + if($remindDate == NULL || $today >= $remindDate){ + return true; + } + } } diff --git a/airtime_mvc/application/models/Prefs.php b/airtime_mvc/application/models/Prefs.php deleted file mode 100644 index bb90720e7..000000000 --- a/airtime_mvc/application/models/Prefs.php +++ /dev/null @@ -1,401 +0,0 @@ -readVal($subjid, $key); - if (PEAR::isError($val)) { - return $val; - } - if ($val === FALSE) { - return PEAR::raiseError("Prefs::loadPref: invalid preference key", - GBERR_PREF); - } - return $val; - } - - - /** - * Save preference record by session id - * - * @param string $sessid - * session id - * @param string $key - * preference key - * @param string $value - * preference value - * @return boolean - */ - function savePref($sessid, $key, $value) - { - $subjid = Alib::GetSessUserId($sessid); - if (PEAR::isError($subjid)) { - return $subjid; - } - if (is_null($subjid)) { - return PEAR::raiseError("Prefs::savePref: invalid session id", GBERR_SESS); - } - $r = $this->update($subjid, $key, $value); - if (PEAR::isError($r)) { - return $r; - } - if ($r === FALSE) { - $r = $this->insert($subjid, $key, $value); - if (PEAR::isError($r)) { - return $r; - } - } - return TRUE; - } - - - /** - * Delete preference record by session id - * - * @param string $sessid - * session id - * @param string $key - * preference key - * @return boolean - */ - function delPref($sessid, $key) - { - $subjid = Alib::GetSessUserId($sessid); - if (PEAR::isError($subjid)) { - return $subjid; - } - if (is_null($subjid)) { - return PEAR::raiseError("Prefs::delPref: invalid session id", GBERR_SESS); - } - $r = $this->delete($subjid, $key); - if (PEAR::isError($r)) { - return $r; - } - if ($r === FALSE) { - return PEAR::raiseError("Prefs::delPref: invalid preference key", GBERR_PREF); - } - return TRUE; - } - - - /* ---------------------------------------------------- group preferences */ - /** - * Read group preference record - * - * @param string $group - * group name - * @param string $key - * preference key - * @param boolean $returnErrorIfKeyNotExists - * If set to true and the key doesnt exist, return a PEAR error. - * @return string - * preference value - */ - function loadGroupPref($group, $key, $returnErrorIfKeyNotExists = true) - { - // if sessid is would be used here fix Transport::cronCallMethod ! - $subjid = Application_Model_Subjects::GetSubjId($group); - if (PEAR::isError($subjid)) { - return $subjid; - } - if (is_null($subjid)) { - return PEAR::raiseError( - "Prefs::loadGroupPref: invalid group name", ALIBERR_NOTGR); - } - $val = $this->readVal($subjid, $key); - if (PEAR::isError($val)) { - return $val; - } - if ($val === FALSE) { - if ($returnErrorIfKeyNotExists) { - return PEAR::raiseError( - "Prefs::loadGroupPref: invalid preference key", GBERR_PREF); - } else { - return ''; - } - } - return $val; - } - - - /** - * Save group preference record - * - * @param string $sessid - * session id - * @param string $group - * group name - * @param string $key - * preference key - * @param string $value - * preference value - * @return boolean - */ - function saveGroupPref($sessid, $group, $key, $value) - { - $uid = Alib::GetSessUserId($sessid); - if (PEAR::isError($uid)) { - return $uid; - } - if (is_null($uid)) { - return PEAR::raiseError( - "Prefs::saveGroupPref: invalid session id", GBERR_SESS); - } - $gid = Application_Model_Subjects::GetSubjId($group); - if (PEAR::isError($gid)) { - return $gid; - } - if (is_null($gid)) { - return PEAR::raiseError( - "Prefs::saveGroupPref: invalid group name", GBERR_SESS); - } - $memb = Application_Model_Subjects::IsMemberOf($uid, $gid); - if (PEAR::isError($memb)) { - return $memb; - } - if (!$memb) { - return PEAR::raiseError( - "Prefs::saveGroupPref: access denied", GBERR_DENY); - } - $r = $this->update($gid, $key, $value); - if (PEAR::isError($r)) { - return $r; - } - if ($r === FALSE) { - $r = $this->insert($gid, $key, $value); - if (PEAR::isError($r)) { - return $r; - } - } - return TRUE; - } - - /** - * Delete group preference record - * - * @param string $sessid - * session id - * @param string $group - * group name - * @param string $key - * preference key - * @return boolean - */ - function delGroupPref($sessid, $group, $key) - { - $uid = Alib::GetSessUserId($sessid); - if (PEAR::isError($uid)) { - return $uid; - } - if (is_null($uid)) { - return PEAR::raiseError( - "Prefs::delGroupPref: invalid session id", GBERR_SESS); - } - $gid = Application_Model_Subjects::GetSubjId($group); - if (PEAR::isError($gid)) { - return $gid; - } - if (is_null($gid)) { - return PEAR::raiseError( - "Prefs::delGroupPref: invalid group name", GBERR_SESS); - } - $memb = Application_Model_Subjects::IsMemberOf($uid, $gid); - if (PEAR::isError($memb)) { - return $memb; - } - if (!$memb) { - return PEAR::raiseError( - "Prefs::delGroupPref: access denied", GBERR_DENY); - } - $r = $this->delete($gid, $key); - if (PEAR::isError($r)) { - return $r; - } - if ($r === FALSE) { - return PEAR::raiseError( - "Prefs::delGroupPref: invalid preference key", GBERR_PREF); - } - return TRUE; - } - - - /* ==================================================== low level methods */ - /** - * Insert of new preference record - * - * @param int $subjid - * local user/group id - * @param string $keystr - * preference key - * @param string $valstr - * preference value - * @return int - * local user id - */ - public static function Insert($subjid, $keystr, $valstr='') - { - global $CC_CONFIG, $CC_DBC; - $id = $CC_DBC->nextId($CC_CONFIG['prefSequence']); - if (PEAR::isError($id)) { - return $id; - } - $r = $CC_DBC->query(" - INSERT INTO ".$CC_CONFIG['prefTable']." - (id, subjid, keystr, valstr) - VALUES - ($id, $subjid, '$keystr', '$valstr') - "); - if (PEAR::isError($r)) { - return $r; - } - return $id; - } - - - /** - * Read value of preference record - * - * @param int $subjid - * local user/group id - * @param string $keystr - * preference key - * @return string - * preference value - */ - function readVal($subjid, $keystr) - { - global $CC_CONFIG, $CC_DBC; - $val = $CC_DBC->getOne(" - SELECT valstr FROM ".$CC_CONFIG['prefTable']." - WHERE subjid=$subjid AND keystr='$keystr' - "); - if (PEAR::isError($val)) { - return $val; - } - if (is_null($val)) { - return FALSE; - } - return $val; - } - - - /** - * Read all keys of subject's preferences - * - * @param int $subjid - * local user/group id - * @return array - * preference keys - */ - function readKeys($subjid) - { - global $CC_CONFIG, $CC_DBC; - $res = $CC_DBC->getAll(" - SELECT keystr FROM ".$CC_CONFIG['prefTable']." - WHERE subjid=$subjid - "); - if (PEAR::isError($res)) { - return $res; - } - if (is_null($res)) { - return FALSE; - } - return $res; - } - - - /** - * Update value of preference record - * - * @param int $subjid - * local user/group id - * @param string $keystr - * preference key - * @param string $newvalstr - * new preference value - * @return boolean - */ - function update($subjid, $keystr, $newvalstr='') - { - global $CC_CONFIG, $CC_DBC; - $r = $CC_DBC->query(" - UPDATE ".$CC_CONFIG['prefTable']." SET - valstr='$newvalstr' - WHERE subjid=$subjid AND keystr='$keystr' - "); - if (PEAR::isError($r)) { - return $r; - } - if ($CC_DBC->affectedRows() < 1) { - return FALSE; - } - return TRUE; - } - - - /** - * Delete preference record - * - * @param int $subjid - * local user/group id - * @param string $keystr - * preference key - * @return boolean - */ - function delete($subjid, $keystr) - { - global $CC_CONFIG, $CC_DBC; - $r = $CC_DBC->query(" - DELETE FROM ".$CC_CONFIG['prefTable']." - WHERE subjid=$subjid AND keystr='$keystr' - "); - if (PEAR::isError($r)) { - return $r; - } - if ($CC_DBC->affectedRows() < 1) { - return FALSE; - } - return TRUE; - } - - -} // class Prefs - diff --git a/airtime_mvc/application/models/XmlParser.php b/airtime_mvc/application/models/XmlParser.php deleted file mode 100644 index bf2989ab6..000000000 --- a/airtime_mvc/application/models/XmlParser.php +++ /dev/null @@ -1,398 +0,0 @@ -ns = $a['namespace']; - $this->name = $a['localPart']; - $this->attrs = $attrs; - $this->nSpaces = $nSpaces; - $this->children = $children; - } -} // class XmlElement - - -/* ================================================================ Attribute */ -/** - * Object representation of one XML attribute - * - * @package Airtime - * @subpackage StorageServer - * @copyright 2010 Sourcefabric O.P.S. - * @license http://www.gnu.org/licenses/gpl.txt - * @see MetaData - */ -class XmlAttrib { - /** - * Namespace prefix - * @var string - */ - public $ns; - - /** - * Attribute name - * @var string - */ - public $name; - - /** - * Attribute value - * @var string - */ - public $val; - - /** - * @param string $atns - * namespace prefix - * @param string $atnm - * attribute name - * @param string $atv - * attribute value - */ - public function __construct($atns, $atnm, $atv) - { - $this->ns = $atns; - $this->name = $atnm; - $this->val = $atv; - } -} // fn XmlAttrib - - -/* =================================================================== Parser */ -/** - * XML parser object encapsulation - * - * @package Airtime - * @subpackage StorageServer - * @copyright 2010 Sourcefabric O.P.S. - * @license http://www.gnu.org/licenses/gpl.txt - * @see MetaData - */ -class XmlParser { - /** - * Tree of nodes - * @var array - */ - private $tree = NULL; - - /** - * Parse stack - * @var array - */ - private $stack = array(); - - /** - * Error structure - * @var array - */ - private $err = array(FALSE, ''); - - /** - * @param string $data - * XML string to be parsed - */ - public function __construct($data){ - $xml_parser = xml_parser_create('UTF-8'); - xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, FALSE); - xml_set_object($xml_parser, $this); - xml_set_element_handler($xml_parser, "startTag", "endTag"); - xml_set_character_data_handler($xml_parser, 'characterData'); - $res = xml_parse($xml_parser, $data, TRUE); - if (!$res) { - $this->err = array(TRUE, - sprintf("XML error: %s at line %d\n", - xml_error_string(xml_get_error_code($xml_parser)), - xml_get_current_line_number($xml_parser) - ) - ); - // var_dump($data); - } - xml_parser_free($xml_parser); - } - - - /** - * Parse XML file or string - * - * @param string $data - * local path to XML file or XML string - * @param string $loc - * location: 'file'|'string' - * @return array - * reference, parse result tree (or PEAR::error) - */ - function &parse($data='', $loc='file') - { - switch ($loc) { - case "file": - if (!is_file($data)) { - return PEAR::raiseError( - "XmlParser::parse: file not found ($data)" - ); - } - if (!is_readable($data)) { - return PEAR::raiseError( - "XmlParser::parse: can't read file ($data)" - ); - } - $data = file_get_contents($data); - case "string": - $parser = new XmlParser($data); - if ($parser->isError()) { - return PEAR::raiseError( - "XmlParser::parse: ".$parser->getError() - ); - } - $tree = $parser->getTree(); - break; - default: - return PEAR::raiseError( - "XmlParser::parse: unsupported source location ($loc)" - ); - } - return $tree; - } - - - /** - * Start tag handler - * - * @param resource $parser - * reference to parser resource - * @param string $fullname - * element name - * @param array $attrs - * array of attributes - * @return none - */ - function startTag($parser, $fullname, $attrs) { - $nSpaces = array(); - foreach ($attrs as $atn => $atv) { - $a = XML_Util::splitQualifiedName($atn); - $atns = $a['namespace']; - $atnm = $a['localPart']; - unset($attrs[$atn]); - if ($atns == 'xmlns') { - $nSpaces[$atnm] = $atv; - } else if ($atns == NULL && $atnm == 'xmlns') { - $nSpaces[''] = $atv; - } else { - $attrs[$atn] = new XmlAttrib($atns, $atnm, $atv); - } - } - $el = new XmlElement($fullname, $attrs, $nSpaces); - array_push($this->stack, $el); - } - - - /** - * End tag handler - * - * @param resource $parser - * reference to parser resource - * @param string $fullname - * element name - * @return none - */ - function endTag($parser, $fullname) { - $cnt = count($this->stack); - if ($cnt > 1) { - $this->stack[$cnt-2]->children[] = $this->stack[$cnt-1]; - $lastEl = array_pop($this->stack); - } else { - $this->tree = $this->stack[0]; - } - } - - - /** - * Character data handler - * - * @param resource $parser - * reference to parser resource - * @param string $data - * @return none - */ - function characterData($parser, $data) { - $cnt = count($this->stack); - if (trim($data)!='') { - $this->stack[$cnt-1]->content .= $data; - } - } - - - /** - * Default handler - * - * @param resource $parser - * reference to parser resource - * @param string $data - * @return none - */ - function defaultHandler($parser, $data) - { - $cnt = count($this->stack); - //if(substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";"){ - // $this->stack[$cnt-1]->content .= trim($data); - //}else{ - $this->stack[$cnt-1]->content .= "*** $data ***"; - //} - } - - - /** - * Return result tree - * - * @return array - * tree structure - */ - function getTree() - { - return $this->tree; - } - - - /** - * Return error string - * - * @return boolean - * whether error occured - */ - function isError() - { - return $this->err[0]; - } - - - /** - * Return error string - * - * @return string - * error message - */ - function getError() - { - return $this->err[1]; - } - - - /* ----------------------------------- auxiliary methos for serialization */ - /** - * Serialize metadata of one file - * - * @return string, serialized XML - */ - function serialize() - { - $res = ''; - $res .= $this->serializeEl($this->tree); - $res .= "\n"; - return $res; - } - - - /** - * Serialize one metadata element - * - * @param el object, element object - * @param lvl int, level for indentation - * @return string, serialized XML - */ - function serializeEl($el, $lvl=0) - { - $ind = str_repeat(" ", $lvl); - $elNs = $el->ns; - $elName = $el->name; - $attrs = XML_Util::attributesToString($el->attrs); - $fullName = ($elNs=='' ? '' : "$elNs:")."$elName"; - $res = "\n{$ind}<{$fullName}{$attrs}>"; - $haveCh = (count($el->children)>0); - foreach ($el->children as $ch) { - $res .= $this->serializeEl($ch, $lvl+1); - } - $res .= XML_Util::replaceEntities("{$el->content}"); - if ($haveCh) { - $res .= "\n{$ind}"; - } - $res .= ""; - return $res; - } - - - /* -------------------------------------------------------- debug methods */ - /** - * Debug dump of tree - * - * @return hash, tree structure - */ - function dump() - { - var_dump($this->tree); - } - -} - diff --git a/airtime_mvc/application/models/genres.xml b/airtime_mvc/application/models/genres.xml deleted file mode 100644 index 9afb92275..000000000 --- a/airtime_mvc/application/models/genres.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 5a24331ef6abe69eb51f5374facb88f8f863e2ae Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Thu, 29 Mar 2012 17:37:18 +0200 Subject: [PATCH 2/3] CC-3547 : Refactoring Views, removing action stack to better work with permissions. Reorganizing Statistics Dialog. --- .../application/controllers/ApiController.php | 42 ---- .../controllers/ShowbuilderController.php | 6 +- airtime_mvc/application/models/Schedule.php | 146 ------------ .../application/models/ScheduleGroup.php | 216 ------------------ .../application/models/ShowInstance.php | 98 -------- .../views/scripts/showbuilder/index.phtml | 4 +- 6 files changed, 5 insertions(+), 507 deletions(-) delete mode 100644 airtime_mvc/application/models/ScheduleGroup.php diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 07b4ae379..a553f93b5 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -376,48 +376,6 @@ class ApiController extends Zend_Controller_Action } } -/* - public function notifyScheduleGroupPlayAction() - { - global $CC_CONFIG; - - // disable the view and the layout - $this->view->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(true); - - $api_key = $this->_getParam('api_key'); - if(!in_array($api_key, $CC_CONFIG["apiKey"])) - { - header('HTTP/1.0 401 Unauthorized'); - print 'You are not allowed to access this resource.'; - exit; - } - - PEAR::setErrorHandling(PEAR_ERROR_RETURN); - - $schedule_group_id = $this->_getParam("schedule_id"); - if (is_numeric($schedule_group_id)) { - $sg = new Application_Model_ScheduleGroup($schedule_group_id); - if ($sg->exists()) { - $result = $sg->notifyGroupStartPlay(); - if (!PEAR::isError($result)) { - echo json_encode(array("status"=>1, "message"=>"")); - exit; - } else { - echo json_encode(array("status"=>0, "message"=>"DB Error:".$result->getMessage())); - exit; - } - } else { - echo json_encode(array("status"=>0, "message"=>"Schedule group does not exist: ".$schedule_group_id)); - exit; - } - } else { - echo json_encode(array("status"=>0, "message"=>"Incorrect or non-numeric arguments given.")); - exit; - } - } - */ - public function recordedShowsAction() { global $CC_CONFIG; diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index 41a1a8896..cf079e29e 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -109,7 +109,7 @@ class ShowbuilderController extends Zend_Controller_Action //determine whether to remove/hide/display the library. $showLib = false; if (!$user->isGuest()) { - $hideLib = false; + $disableLib = false; $data = Application_Model_Preference::GetValue("nowplaying_screen", true); if ($data != "") { $settings = unserialize($data); @@ -120,9 +120,9 @@ class ShowbuilderController extends Zend_Controller_Action } } else { - $hideLib = true; + $disableLib = true; } - $this->view->hideLib = $hideLib; + $this->view->disableLib = $disableLib; $this->view->showLib = $showLib; //populate date range form for show builder. diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 7d6b7acca..2bf362e04 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -2,31 +2,6 @@ class Application_Model_Schedule { - /** - * Return true if there is nothing in the schedule for the given start time - * up to the length of time after that. - * - * @param string $p_datetime - * In the format YYYY-MM-DD HH:MM:SS.mmmmmm - * @param string $p_length - * In the format HH:MM:SS.mmmmmm - * @return boolean|PEAR_Error - */ - public static function isScheduleEmptyInRange($p_datetime, $p_length) { - global $CC_CONFIG, $CC_DBC; - if (empty($p_length)) { - return new PEAR_Error("Application_Model_Schedule::isSchedulerEmptyInRange: param p_length is empty."); - } - $sql = "SELECT COUNT(*) FROM ".$CC_CONFIG["scheduleTable"] - ." WHERE (starts >= '$p_datetime') " - ." AND (ends <= (TIMESTAMP '$p_datetime' + INTERVAL '$p_length'))"; - //$_SESSION["debug"] = $sql; - //echo $sql; - $count = $CC_DBC->GetOne($sql); - //var_dump($count); - return ($count == '0'); - } - /** * Return TRUE if file is going to be played in the future. * @@ -238,110 +213,6 @@ class Application_Model_Schedule { return $row; } - /** - * Builds an SQL Query for accessing scheduled item information from - * the database. - * - * @param int $timeNow - * @param int $timePeriod - * @param int $count - * @param String $interval - * @return date - * - * $timeNow is the the currentTime in the format "Y-m-d H:i:s". - * For example: 2011-02-02 22:00:54 - * - * $timePeriod can be either negative, zero or positive. This is used - * to indicate whether we want items from the past, present or future. - * - * $count indicates how many results we want to limit ourselves to. - * - * $interval is used to indicate how far into the past or future we - * want to search the database. For example "5 days", "18 hours", "60 minutes", - * "30 seconds" etc. - */ - public static function GetScheduledItemData($timeStamp, $timePeriod=0, $count = 0, $interval="0 hours") - { - global $CC_CONFIG, $CC_DBC; - - $sql = "SELECT DISTINCT" - ." pt.name," - ." ft.track_title," - ." ft.artist_name," - ." ft.album_title," - ." st.starts," - ." st.ends," - ." st.clip_length," - ." st.media_item_played," - ." st.group_id," - ." show.name as show_name," - ." st.instance_id" - ." FROM $CC_CONFIG[scheduleTable] st" - ." LEFT JOIN $CC_CONFIG[filesTable] ft" - ." ON st.file_id = ft.id" - ." LEFT JOIN $CC_CONFIG[playListTable] pt" - ." ON st.playlist_id = pt.id" - ." LEFT JOIN $CC_CONFIG[showInstances] si" - ." ON st.instance_id = si.id" - ." LEFT JOIN $CC_CONFIG[showTable] show" - ." ON si.show_id = show.id" - ." WHERE st.starts < si.ends"; - - if ($timePeriod < 0){ - $sql .= " AND st.ends < TIMESTAMP '$timeStamp'" - ." AND st.ends > (TIMESTAMP '$timeStamp' - INTERVAL '$interval')" - ." ORDER BY st.starts DESC" - ." LIMIT $count"; - } else if ($timePeriod == 0){ - $sql .= " AND st.starts <= TIMESTAMP '$timeStamp'" - ." AND st.ends >= TIMESTAMP '$timeStamp'"; - } else if ($timePeriod > 0){ - $sql .= " AND st.starts > TIMESTAMP '$timeStamp'" - ." AND st.starts < (TIMESTAMP '$timeStamp' + INTERVAL '$interval')" - ." ORDER BY st.starts" - ." LIMIT $count"; - } - - $rows = $CC_DBC->GetAll($sql); - return $rows; - } - - - public static function getScheduleItemsInRange($starts, $ends) - { - global $CC_DBC, $CC_CONFIG; - - $sql = "SELECT" - ." si.starts as show_starts," - ." si.ends as show_ends," - ." si.rebroadcast as rebroadcast," - ." st.starts as item_starts," - ." st.ends as item_ends," - ." st.clip_length as clip_length," - ." ft.track_title as track_title," - ." ft.artist_name as artist_name," - ." ft.album_title as album_title," - ." s.name as show_name," - ." si.id as instance_id," - ." pt.name as playlist_name" - ." FROM ".$CC_CONFIG["showInstances"]." si" - ." LEFT JOIN ".$CC_CONFIG["scheduleTable"]." st" - ." ON st.instance_id = si.id" - ." LEFT JOIN ".$CC_CONFIG["playListTable"]." pt" - ." ON st.playlist_id = pt.id" - ." LEFT JOIN ".$CC_CONFIG["filesTable"]." ft" - ." ON st.file_id = ft.id" - ." LEFT JOIN ".$CC_CONFIG["showTable"]." s" - ." ON si.show_id = s.id" - ." WHERE ((si.starts < TIMESTAMP '$starts' AND si.ends > TIMESTAMP '$starts')" - ." OR (si.starts > TIMESTAMP '$starts' AND si.ends < TIMESTAMP '$ends')" - ." OR (si.starts < TIMESTAMP '$ends' AND si.ends > TIMESTAMP '$ends'))" - ." AND (st.starts < si.ends)" - ." ORDER BY si.id, si.starts, st.starts"; - - return $CC_DBC->GetAll($sql); - } - /* * * @param DateTime $p_startDateTime @@ -396,23 +267,6 @@ class Application_Model_Schedule { return $rows; } - public static function GetShowInstanceItems($instance_id) - { - global $CC_CONFIG, $CC_DBC; - - $sql = "SELECT DISTINCT pt.name, ft.track_title, ft.artist_name, ft.album_title, st.starts, st.ends, st.clip_length, st.media_item_played, st.group_id, show.name as show_name, st.instance_id" - ." FROM $CC_CONFIG[scheduleTable] st, $CC_CONFIG[filesTable] ft, $CC_CONFIG[playListTable] pt, $CC_CONFIG[showInstances] si, $CC_CONFIG[showTable] show" - ." WHERE st.playlist_id = pt.id" - ." AND st.file_id = ft.id" - ." AND st.instance_id = si.id" - ." AND si.show_id = show.id" - ." AND instance_id = $instance_id" - ." ORDER BY st.starts"; - - $rows = $CC_DBC->GetAll($sql); - return $rows; - } - public static function UpdateMediaPlayedStatus($p_id) { global $CC_CONFIG, $CC_DBC; diff --git a/airtime_mvc/application/models/ScheduleGroup.php b/airtime_mvc/application/models/ScheduleGroup.php deleted file mode 100644 index 5d8b29b21..000000000 --- a/airtime_mvc/application/models/ScheduleGroup.php +++ /dev/null @@ -1,216 +0,0 @@ -groupId = $p_groupId; - } - - /** - * Return true if the schedule group exists in the DB. - * @return boolean - */ - public function exists() { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT COUNT(*) FROM ".$CC_CONFIG['scheduleTable'] - ." WHERE group_id=".$this->groupId; - $result = $CC_DBC->GetOne($sql); - if (PEAR::isError($result)) { - return $result; - } - return $result != "0"; - } - - /** - * Add a music clip or playlist to the schedule. - * - * @param int $p_showInstance - * ID of the show. - * @param $p_datetime - * In the format YYYY-MM-DD HH:MM:SS.mmmmmm - * @param $p_audioFileId - * (optional, either this or $p_playlistId must be set) DB ID of the audio file - * @param $p_playlistId - * (optional, either this of $p_audioFileId must be set) DB ID of the playlist - * @param $p_options - * Does nothing at the moment. - * - * @return int|PEAR_Error - * Return PEAR_Error if the item could not be added. - * Error code 555 is a scheduling conflict. - */ - public function add($p_showInstance, $p_datetime, $p_audioFileId = null, $p_playlistId = null, $p_options = null) { - global $CC_CONFIG, $CC_DBC; - - if (!is_null($p_audioFileId)) { - // Schedule a single audio track - - // Load existing track - $track = Application_Model_StoredFile::Recall($p_audioFileId); - if (is_null($track)) { - return new PEAR_Error("Could not find audio track."); - } - - // Check if there are any conflicts with existing entries - $metadata = $track->getMetadata(); - $length = $metadata['MDATA_KEY_DURATION']; - if (empty($length)) { - return new PEAR_Error("Length is empty."); - } - // Insert into the table - $this->groupId = $CC_DBC->GetOne("SELECT nextval('schedule_group_id_seq')"); - - $sql = "INSERT INTO ".$CC_CONFIG["scheduleTable"] - ." (instance_id, starts, ends, clip_length, group_id, file_id, cue_out)" - ." VALUES ($p_showInstance, TIMESTAMP '$p_datetime', " - ." (TIMESTAMP '$p_datetime' + INTERVAL '$length')," - ." '$length'," - ." {$this->groupId}, $p_audioFileId, '$length')"; - $result = $CC_DBC->query($sql); - if (PEAR::isError($result)) { - //var_dump($sql); - return $result; - } - - } - elseif (!is_null($p_playlistId)){ - // Schedule a whole playlist - - // Load existing playlist - $playlist = Application_Model_Playlist::Recall($p_playlistId); - if (is_null($playlist)) { - return new PEAR_Error("Could not find playlist."); - } - - // Check if there are any conflicts with existing entries - $length = trim($playlist->getLength()); - //var_dump($length); - if (empty($length)) { - return new PEAR_Error("Length is empty."); - } - - // Insert all items into the schedule - $this->groupId = $CC_DBC->GetOne("SELECT nextval('schedule_group_id_seq')"); - $itemStartTime = $p_datetime; - - $plItems = $playlist->getContents(); - //var_dump($plItems); - foreach ($plItems as $row) { - $trackLength = $row["cliplength"]; - //var_dump($trackLength); - $sql = "INSERT INTO ".$CC_CONFIG["scheduleTable"] - ." (instance_id, playlist_id, starts, ends, group_id, file_id," - ." clip_length, cue_in, cue_out, fade_in, fade_out)" - ." VALUES ($p_showInstance, $p_playlistId, TIMESTAMP '$itemStartTime', " - ." (TIMESTAMP '$itemStartTime' + INTERVAL '$trackLength')," - ." '{$this->groupId}', '{$row['file_id']}', '$trackLength', '{$row['cuein']}'," - ." '{$row['cueout']}', '{$row['fadein']}','{$row['fadeout']}')"; - $result = $CC_DBC->query($sql); - if (PEAR::isError($result)) { - //var_dump($sql); - return $result; - } - $itemStartTime = $CC_DBC->getOne("SELECT TIMESTAMP '$itemStartTime' + INTERVAL '$trackLength'"); - } - } - - Application_Model_RabbitMq::PushSchedule(); - return $this->groupId; - } - - public function addFileAfter($show_instance, $p_groupId, $p_audioFileId) { - global $CC_CONFIG, $CC_DBC; - // Get the end time for the given entry - $sql = "SELECT MAX(ends) FROM ".$CC_CONFIG["scheduleTable"] - ." WHERE group_id=$p_groupId"; - $startTime = $CC_DBC->GetOne($sql); - return $this->add($show_instance, $startTime, $p_audioFileId); - } - - public function addPlaylistAfter($show_instance, $p_groupId, $p_playlistId) { - global $CC_CONFIG, $CC_DBC; - // Get the end time for the given entry - $sql = "SELECT MAX(ends) FROM ".$CC_CONFIG["scheduleTable"] - ." WHERE group_id=$p_groupId"; - - $startTime = $CC_DBC->GetOne($sql); - return $this->add($show_instance, $startTime, null, $p_playlistId); - } - - /** - * Remove the group from the schedule. - * Note: does not check if it is in the past, you can remove anything. - * - * @return boolean - * TRUE on success, false if there is no group ID defined. - */ - public function remove() { - global $CC_CONFIG, $CC_DBC; - if (is_null($this->groupId) || !is_numeric($this->groupId)) { - return false; - } - $sql = "DELETE FROM ".$CC_CONFIG["scheduleTable"] - ." WHERE group_id = ".$this->groupId; - //echo $sql; - $retVal = $CC_DBC->query($sql); - Application_Model_RabbitMq::PushSchedule(); - return $retVal; - } - - /** - * Return the number of items in this group. - * @return string - */ - public function count() { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT COUNT(*) FROM {$CC_CONFIG['scheduleTable']}" - ." WHERE group_id={$this->groupId}"; - return $CC_DBC->GetOne($sql); - } - - /* - * Return the list of items in this group as a 2D array. - * @return array - */ - public function getItems() { - global $CC_CONFIG, $CC_DBC; - $sql = "SELECT " - ." st.id," - ." st.file_id," - ." st.cue_in," - ." st.cue_out," - ." st.clip_length," - ." st.fade_in," - ." st.fade_out," - ." st.starts," - ." st.ends" - ." FROM $CC_CONFIG[scheduleTable] as st" - ." LEFT JOIN $CC_CONFIG[showInstances] as si" - ." ON st.instance_id = si.id" - ." WHERE st.group_id=$this->groupId" - ." AND st.starts < si.ends" - ." ORDER BY st.starts"; - return $CC_DBC->GetAll($sql); - } - - public function notifyGroupStartPlay() { - global $CC_CONFIG, $CC_DBC; - $sql = "UPDATE ".$CC_CONFIG['scheduleTable'] - ." SET schedule_group_played=TRUE" - ." WHERE group_id=".$this->groupId; - $retVal = $CC_DBC->query($sql); - return $retVal; - } - - public function notifyMediaItemStartPlay($p_fileId) { - global $CC_CONFIG, $CC_DBC; - $sql = "UPDATE ".$CC_CONFIG['scheduleTable'] - ." SET media_item_played=TRUE" - ." WHERE group_id=".$this->groupId - ." AND file_id=".pg_escape_string($p_fileId); - $retVal = $CC_DBC->query($sql); - return $retVal; - } -} diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index f58d329f2..a4fa2c9ad 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -346,18 +346,6 @@ class Application_Model_ShowInstance { Application_Model_RabbitMq::PushSchedule(); } - /** - * Get the group ID for this show. - * - */ - private function getLastGroupId() - { - global $CC_DBC; - $sql = "SELECT group_id FROM cc_schedule WHERE instance_id = '{$this->_instanceId}' ORDER BY ends DESC LIMIT 1"; - $res = $CC_DBC->GetOne($sql); - return $res; - } - /** * Add a playlist as the last item of the current show. * @@ -406,29 +394,6 @@ class Application_Model_ShowInstance { } } - public function removeGroupFromShow($group_id) - { - global $CC_DBC; - - $sql = "SELECT MAX(ends) as end_timestamp, (MAX(ends) - MIN(starts)) as length - FROM cc_schedule - WHERE group_id = '{$group_id}'"; - - $groupBoundry = $CC_DBC->GetRow($sql); - - $group = CcScheduleQuery::create() - ->filterByDbGroupId($group_id) - ->delete(); - - $sql = "UPDATE cc_schedule - SET starts = (starts - INTERVAL '{$groupBoundry["length"]}'), ends = (ends - INTERVAL '{$groupBoundry["length"]}') - WHERE starts >= '{$groupBoundry["end_timestamp"]}' AND instance_id = {$this->_instanceId}"; - - $CC_DBC->query($sql); - Application_Model_RabbitMq::PushSchedule(); - $this->updateScheduledTime(); - } - public function clearShow() { CcScheduleQuery::create() @@ -646,11 +611,6 @@ class Application_Model_ShowInstance { return $interval->format("%h:%I:%S"); } - public function searchPlaylistsForShow($datatables) - { - return Application_Model_StoredFile::searchPlaylistsForSchedule($datatables); - } - public function getShowListContent() { global $CC_DBC; @@ -677,64 +637,6 @@ class Application_Model_ShowInstance { return $results; } - - public static function GetShowsInstancesIdsInRange($p_start, $p_end) - { - global $CC_DBC; - - $sql = "SELECT id FROM cc_show_instances AS si " - ."WHERE modified_instance != TRUE AND (" - ."(si.starts < TIMESTAMP '$p_start'" - ."AND si.ends > TIMESTAMP '$p_start') " - ."OR (si.starts > TIMESTAMP '$p_start' " - ."AND si.ends < TIMESTAMP '$p_end') " - ."OR (si.starts < TIMESTAMP '$p_end' " - ."AND si.ends > TIMESTAMP '$p_end') " - .") " - ." ORDER BY si.starts"; - - Logging::debug($sql); - - $rows = $CC_DBC->GetAll($sql); - return $rows; - } - - public function getScheduleItemsInRange($timeNow, $start, $end) - { - global $CC_DBC, $CC_CONFIG; - - $instanceId = $this->_instanceId; - - $sql = "SELECT" - ." si.starts as show_starts," - ." si.ends as show_ends," - ." si.rebroadcast as rebroadcast," - ." st.starts as item_starts," - ." st.ends as item_ends," - ." st.clip_length as clip_length," - ." ft.track_title as track_title," - ." ft.artist_name as artist_name," - ." ft.album_title as album_title," - ." s.name as show_name," - ." si.id as instance_id" - ." FROM {$CC_CONFIG['showInstances']} si" - ." LEFT JOIN {$CC_CONFIG['scheduleTable']} st" - ." ON st.instance_id = si.id" - ." LEFT JOIN {$CC_CONFIG['filesTable']} ft" - ." ON st.file_id = ft.id" - ." LEFT JOIN {$CC_CONFIG['showTable']} s" - ." ON si.show_id = s.id" - ." WHERE ((si.starts < TIMESTAMP '$timeNow' - INTERVAL '$start seconds' AND si.ends > TIMESTAMP '$timeNow' - INTERVAL '$start seconds')" - ." OR (si.starts > TIMESTAMP '$timeNow' - INTERVAL '$start seconds' AND si.ends < TIMESTAMP '$timeNow' + INTERVAL '$end seconds')" - ." OR (si.starts < TIMESTAMP '$timeNow' + INTERVAL '$end seconds' AND si.ends > TIMESTAMP '$timeNow' + INTERVAL '$end seconds'))" - ." AND (st.starts < si.ends)" - ." AND si.id = $instanceId" - ." ORDER BY si.starts, st.starts"; - - Logging::log($sql); - - return $CC_DBC->GetAll($sql); - } public function getLastAudioItemEnd(){ global $CC_DBC; diff --git a/airtime_mvc/application/views/scripts/showbuilder/index.phtml b/airtime_mvc/application/views/scripts/showbuilder/index.phtml index fcd59da06..28a882d7d 100644 --- a/airtime_mvc/application/views/scripts/showbuilder/index.phtml +++ b/airtime_mvc/application/views/scripts/showbuilder/index.phtml @@ -1,4 +1,4 @@ -hideLib): ?> +disableLib): ?>
showLib): ?> style="display:none" @@ -9,7 +9,7 @@
- hideLib && !$this->showLib): ?> + disableLib && !$this->showLib): ?>
From cea37774cae2a98ccf8e1c180972c81460ae7070 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Thu, 29 Mar 2012 19:20:02 +0200 Subject: [PATCH 3/3] CC-3551 : Change Cue Out for currently deleted track --- .../controllers/ScheduleController.php | 5 +- .../controllers/ShowbuilderController.php | 3 -- airtime_mvc/application/models/Datatables.php | 10 ++-- airtime_mvc/application/models/Schedule.php | 2 - airtime_mvc/application/models/Scheduler.php | 53 ++++++++++--------- .../application/models/airtime/CcSchedule.php | 11 ++-- 6 files changed, 41 insertions(+), 43 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index f8d434273..9ee7cd9ee 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -772,10 +772,9 @@ class ScheduleController extends Zend_Controller_Action public function cancelShowAction() { - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $user = new Application_Model_User($userInfo->id); + $user = Application_Model_User::GetCurrentUser(); - if($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { + if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { $showInstanceId = $this->_getParam('id'); try { diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index cf079e29e..e3889b49d 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -254,9 +254,6 @@ class ShowbuilderController extends Zend_Controller_Action $startsDT = DateTime::createFromFormat("U", $starts_epoch, new DateTimeZone("UTC")); $endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC")); - Logging::log("showbuilder starts {$startsDT->format("Y-m-d H:i:s")}"); - Logging::log("showbuilder ends {$endsDT->format("Y-m-d H:i:s")}"); - $opts = array("myShows" => $my_shows, "showFilter" => $show_filter); $showBuilder = new Application_Model_ShowBuilder($startsDT, $endsDT, $opts); diff --git a/airtime_mvc/application/models/Datatables.php b/airtime_mvc/application/models/Datatables.php index 0c01091b7..efe5cffc7 100644 --- a/airtime_mvc/application/models/Datatables.php +++ b/airtime_mvc/application/models/Datatables.php @@ -75,13 +75,11 @@ class Application_Model_Datatables { } try { - $r = $con->query($sqlTotalRows); - Logging::log($sqlTotalRows); + $r = $con->query($sqlTotalRows); $totalRows = $r->fetchColumn(0); if (isset($sqlTotalDisplayRows)) { - $r = $con->query($sqlTotalDisplayRows); - Logging::log($sqlTotalDisplayRows); + $r = $con->query($sqlTotalDisplayRows); $totalDisplayRows = $r->fetchColumn(0); } else { @@ -93,11 +91,11 @@ class Application_Model_Datatables { $results = $r->fetchAll(); } catch (Exception $e) { - Logging::log($e->getMessage()); + Logging::debug($e->getMessage()); } //display sql executed in airtime log for testing - Logging::log($sql); + //Logging::log($sql); return array( "sEcho" => intval($data["sEcho"]), diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 2bf362e04..5f50d8bfa 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -261,8 +261,6 @@ class Application_Model_Schedule { $sql .= " ORDER BY si.starts, sched.starts;"; - Logging::log($sql); - $rows = $CC_DBC->GetAll($sql); return $rows; } diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index 229f26e05..30c72c2d2 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -13,13 +13,17 @@ class Application_Model_Scheduler { "sched_id" => null, ); + private $epochNow; private $nowDT; private $user; public function __construct($id = null) { $this->con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); - $this->nowDT = new DateTime("now", new DateTimeZone("UTC")); + + $this->epochNow = floatval(microtime(true)); + $this->nowDT = DateTime::createFromFormat("U.u", $this->epochNow, new DateTimeZone("UTC")); + $this->user = Application_Model_User::GetCurrentUser(); } @@ -30,7 +34,7 @@ class Application_Model_Scheduler { */ private function validateRequest($items) { - $nowEpoch = intval($this->nowDT->format("U")); + $nowEpoch = floatval($this->nowDT->format("U.u")); for ($i = 0; $i < count($items); $i++) { $id = $items[$i]["id"]; @@ -83,7 +87,7 @@ class Application_Model_Scheduler { throw new Exception("You are not allowed to schedule show {$show->getDbName()}."); } - $showEndEpoch = intval($instance->getDbEnds("U")); + $showEndEpoch = floatval($instance->getDbEnds("U.u")); if ($showEndEpoch < $nowEpoch) { throw new OutDatedScheduleException("The show {$show->getDbName()} is over and cannot be scheduled."); @@ -169,7 +173,7 @@ class Application_Model_Scheduler { * * @return DateTime endDT in UTC */ - private static function findEndTime($p_startDT, $p_duration) { + private function findEndTime($p_startDT, $p_duration) { $startEpoch = $p_startDT->format("U.u"); $durationSeconds = Application_Model_Playlist::playlistTimeToSeconds($p_duration); @@ -178,22 +182,14 @@ class Application_Model_Scheduler { //DateTime::createFromFormat("U.u") will have a problem if there is no decimal in the resulting number. $endEpoch = bcadd($startEpoch , (string) $durationSeconds, 6); - Logging::log("start DateTime created {$p_startDT->format("Y-m-d H:i:s.u")}"); - Logging::log("start epoch is {$startEpoch}"); - Logging::log("duration in seconds is {$durationSeconds}"); - Logging::log("end epoch is {$endEpoch}"); - $dt = DateTime::createFromFormat("U.u", $endEpoch, new DateTimeZone("UTC")); - - Logging::log("end DateTime created {$dt->format("Y-m-d H:i:s.u")}"); - return $dt; } private function findNextStartTime($DT, $instance) { - $sEpoch = intval($DT->format("U")); - $nowEpoch = intval($this->nowDT->format("U")); + $sEpoch = floatval($DT->format("U.u")); + $nowEpoch = $this->epochNow; //check for if the show has started. if ($nowEpoch > $sEpoch) { @@ -273,7 +269,7 @@ class Application_Model_Scheduler { foreach($schedFiles as $file) { - $endTimeDT = self::findEndTime($nextStartDT, $file['cliplength']); + $endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']); //item existed previously and is being moved. //need to keep same id for resources if we want REST. @@ -303,7 +299,7 @@ class Application_Model_Scheduler { //recalculate the start/end times after the inserted items. foreach ($followingSchedItems as $item) { - $endTimeDT = self::findEndTime($nextStartDT, $item->getDbClipLength()); + $endTimeDT = $this->findEndTime($nextStartDT, $item->getDbClipLength()); $item->setDbStarts($nextStartDT); $item->setDbEnds($endTimeDT); @@ -448,17 +444,26 @@ class Application_Model_Scheduler { $instance = $removedItem->getCcShowInstances($this->con); //check to truncate the currently playing item instead of deleting it. - if ($removedItem->isCurrentItem()) { - $now = new DateTime("now", new DateTimeZone("UTC")); + if ($removedItem->isCurrentItem($this->epochNow)) { - $nEpoch = floatval($now->format('U.u')); + $nEpoch = $this->epochNow; $sEpoch = floatval($removedItem->getDbStarts('U.u')); $length = $nEpoch - $sEpoch; $cliplength = Application_Model_Playlist::secondsToPlaylistTime($length); - $removedItem->setDbClipLength($cliplength); - $removedItem->setDbEnds($now); - $removedItem->save($this->con); + $cueinSec = Application_Model_Playlist::playlistTimeToSeconds($removedItem->getDbCueIn()); + $cueOutSec = $cueinSec + $length; + $cueout = Application_Model_Playlist::secondsToPlaylistTime($length); + + Logging::log('$nEpoch: '. $nEpoch); + Logging::log('$sEpoch: '. $sEpoch); + Logging::log('$length: '. $length); + Logging::log('$cliplength: '. $cliplength); + + $removedItem->setDbCueOut($cueout) + ->setDbClipLength($cliplength) + ->setDbEnds($now) + ->save($this->con); } else { $removedItem->delete($this->con); @@ -529,9 +534,7 @@ class Application_Model_Scheduler { foreach ($schedule as $item) { - Logging::log("adjusting item #".$item->getDbId()); - - $itemEndDT = self::findEndTime($itemStartDT, $item->getDbClipLength()); + $itemEndDT = $this->findEndTime($itemStartDT, $item->getDbClipLength()); $item->setDbStarts($itemStartDT); $item->setDbEnds($itemEndDT); diff --git a/airtime_mvc/application/models/airtime/CcSchedule.php b/airtime_mvc/application/models/airtime/CcSchedule.php index bf279d356..9db58807e 100644 --- a/airtime_mvc/application/models/airtime/CcSchedule.php +++ b/airtime_mvc/application/models/airtime/CcSchedule.php @@ -224,11 +224,14 @@ class CcSchedule extends BaseCcSchedule { return $this; } // setDbEnds() - public function isCurrentItem() { + public function isCurrentItem($epochNow = null) { - $epochNow = time(); - $epochStart = intval($this->getDbStarts('U')); - $epochEnd = intval($this->getDbEnds('U')); + if (is_null($epochNow)) { + $epochNow = microtime(true); + } + + $epochStart = floatval($this->getDbStarts('U.u')); + $epochEnd = floatval($this->getDbEnds('U.u')); if ($epochStart < $epochNow && $epochEnd > $epochNow) { return true;