diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index ce5be5f90..e5972aadc 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -27,6 +27,7 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('smart-block-criteria-save', 'json') ->addActionContext('smart-block-generate', 'json') ->addActionContext('smart-block-shuffle', 'json') + ->addActionContext('get-block-info', 'json') ->initContext(); /*$this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME); @@ -124,9 +125,9 @@ class PlaylistController extends Zend_Controller_Action $this->view->error = $e->getMessage(); } - private function playlistDynamic($obj) + private function blockDynamic($obj) { - $this->view->error = "You cannot add tracks to dynamic playlist."; + $this->view->error = "You cannot add tracks to dynamic block."; $this->createFullResponse($obj); } @@ -309,7 +310,7 @@ class PlaylistController extends Zend_Controller_Action // if the dest is a block object $obj->addAudioClips($ids, $afterItem, $addType); } else { - throw new PlaylistDyanmicException; + throw new BlockDynamicException; } $this->createUpdateResponse($obj); } @@ -319,8 +320,8 @@ class PlaylistController extends Zend_Controller_Action catch (PlaylistNotFoundException $e) { $this->playlistNotFound($obj_type); } - catch (PlaylistDyanmicException $e) { - $this->playlistDynamic($obj); + catch (BlockDynamicException $e) { + $this->blockDynamic($obj); } catch (Exception $e) { $this->playlistUnknownError($e); @@ -452,7 +453,7 @@ class PlaylistController extends Zend_Controller_Action try { $obj = $this->getPlaylist($type); - $obj->setPlaylistfades($fadeIn, $fadeOut); + $obj->setfades($fadeIn, $fadeOut); $this->view->modified = $obj->getLastModified("U"); } catch (PlaylistOutDatedException $e) { $this->playlistOutdated($e); @@ -565,4 +566,18 @@ class PlaylistController extends Zend_Controller_Action return $info; } + public function getBlockInfoAction(){ + $request = $this->getRequest(); + $params = $request->getPost(); + $bl = new Application_Model_Block($params['id']); + if ($bl->isStatic()) { + $out = $bl->getContents(); + $out['isStatic'] = true; + } else { + $out = $bl->getCriteria(); + $out['isStatic'] = false; + } + die(json_encode($out)); + } + } diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index e9a5b8adb..7b1aa64b2 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -112,7 +112,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm ->setValue($blockType); $this->addElement($spType); - $storedCrit = Application_Model_Block::getCriteria($p_blockId); + $bl = new Application_Model_Block($p_blockId); + $storedCrit = $bl->getCriteria(); /* $modRoadMap stores the number of modifier rows each * criteria row has. We need to know this so we display the diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 90ef0d62a..c50840526 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -193,9 +193,11 @@ class Application_Model_Block $files = array(); $sql = <<<"EOT" - SELECT pc.id as id, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, + SELECT pc.id as id, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, bl.type, f.id as item_id, f.track_title, f.artist_name as creator, f.file_exists as exists, f.filepath as path FROM cc_blockcontents AS pc - LEFT JOIN cc_files AS f ON pc.file_id=f.id WHERE pc.block_id = {$this->id}; + LEFT JOIN cc_files AS f ON pc.file_id=f.id + LEFT JOIN cc_block AS bl ON pc.block_id = bl.id + WHERE pc.block_id = {$this->id}; EOT; $con = Propel::getConnection(); $rows = $con->query($sql)->fetchAll(); @@ -1099,10 +1101,40 @@ EOT; return $insertList; } - public static function getCriteria($p_blockId) + public function getCriteria() { + $criteriaOptions = array( + 0 => "Select criteria", + "album_title" => "Album", + "bit_rate" => "Bit Rate", + "bpm" => "Bpm", + "comments" => "Comments", + "composer" => "Composer", + "conductor" => "Conductor", + "artist_name" => "Creator", + "disc_number" => "Disc Number", + "genre" => "Genre", + "isrc_number" => "ISRC", + "label" => "Label", + "language" => "Language", + "mtime" => "Last Modified", + "lptime" => "Last Played", + "length" => "Length", + "lyricist" => "Lyricist", + "mood" => "Mood", + "name" => "Name", + "orchestra" => "Orchestra", + "radio_station_name" => "Radio Station Name", + "rating" => "Rating", + "sample_rate" => "Sample Rate", + "track_title" => "Title", + "track_num" => "Track Number", + "utime" => "Uploaded", + "year" => "Year" + ); + // Load criteria from db - $out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($p_blockId); + $out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($this->id); $storedCrit = array(); foreach ($out as $crit) { @@ -1114,7 +1146,7 @@ EOT; if ($criteria == "limit") { $storedCrit["limit"] = array("value"=>$value, "modifier"=>$modifier); } else { - $storedCrit["crit"][$criteria][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra); + $storedCrit["crit"][$criteria][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra, "display_name"=>$criteriaOptions[$criteria]); } } @@ -1125,45 +1157,34 @@ EOT; // this function return list of propel object public function getListofFilesMeetCriteria() { - $out = CcBlockcriteriaQuery::create()->findByDbBlockId($this->id); - $storedCrit = array(); - foreach ($out as $crit) { - $criteria = $crit->getDbCriteria(); - $modifier = $crit->getDbModifier(); - $value = $crit->getDbValue(); - $extra = $crit->getDbExtra(); - - if($criteria == "limit"){ - $storedCrit["limit"] = array("value"=>$value, "modifier"=>$modifier); - }else{ - $storedCrit["crit"][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra); - } - } + $storedCrit = $this->getCriteria(); $qry = CcFilesQuery::create(); if (isset($storedCrit["crit"])) { - foreach ($storedCrit["crit"] as $criteria) { - $spCriteriaPhpName = self::$criteria2PeerMap[$criteria['criteria']]; - $spCriteria = $criteria['criteria']; - - $spCriteriaModifier = $criteria['modifier']; - $spCriteriaValue = $criteria['value']; - if ($spCriteriaModifier == "starts with") { - $spCriteriaValue = "$spCriteriaValue%"; - } else if ($spCriteriaModifier == "ends with") { - $spCriteriaValue = "%$spCriteriaValue"; - } else if ($spCriteriaModifier == "contains" || $spCriteriaModifier == "does not contain") { - $spCriteriaValue = "%$spCriteriaValue%"; - } else if ($spCriteriaModifier == "is in the range") { - $spCriteriaValue = "$spCriteria > '$spCriteriaValue' AND $spCriteria < '$criteria[extra]'"; - } - $spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier]; - try{ - $qry->filterBy($spCriteriaPhpName, $spCriteriaValue, $spCriteriaModifier); - $qry->addAscendingOrderByColumn('random()'); - }catch (Exception $e){ - Logging::log($e); + foreach ($storedCrit["crit"] as $crit) { + foreach ($crit as $criteria) { + $spCriteriaPhpName = self::$criteria2PeerMap[$criteria['criteria']]; + $spCriteria = $criteria['criteria']; + + $spCriteriaModifier = $criteria['modifier']; + $spCriteriaValue = $criteria['value']; + if ($spCriteriaModifier == "starts with") { + $spCriteriaValue = "$spCriteriaValue%"; + } else if ($spCriteriaModifier == "ends with") { + $spCriteriaValue = "%$spCriteriaValue"; + } else if ($spCriteriaModifier == "contains" || $spCriteriaModifier == "does not contain") { + $spCriteriaValue = "%$spCriteriaValue%"; + } else if ($spCriteriaModifier == "is in the range") { + $spCriteriaValue = "$spCriteria > '$spCriteriaValue' AND $spCriteria < '$criteria[extra]'"; + } + $spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier]; + try{ + $qry->filterBy($spCriteriaPhpName, $spCriteriaValue, $spCriteriaModifier); + $qry->addAscendingOrderByColumn('random()'); + }catch (Exception $e){ + Logging::log($e); + } } } } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index f660fea34..fddd8684d 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -320,23 +320,6 @@ EOT; } } - /*private function buildStreamEntry($p_item, $pos) - { - $stream = CcWebstreamQuery::create()->findPK($p_item, $this->con); - - if (isset($stream)) { - $entry = $this->plItem; - $entry["id"] = $stream->getDbId(); - $entry["pos"] = $pos; - $entry["cliplength"] = $stream->getDbLength(); - $entry["cueout"] = $stream->getDbLength(); - - return $entry; - } else { - throw new Exception("trying to add a stream that does not exist."); - } - }*/ - /* * @param array $p_items * an array of audioclips to add to the playlist @@ -612,7 +595,7 @@ EOT; return array("fadeIn" => $fadeIn, "fadeOut" => $fadeOut); } - public function setPlaylistfades($fadein, $fadeout) + public function setfades($fadein, $fadeout) { if (isset($fadein)) { Logging::log("Setting playlist fade in {$fadein}"); @@ -872,4 +855,3 @@ EOT; class PlaylistNotFoundException extends Exception {} class PlaylistNoPermissionException extends Exception {} class PlaylistOutDatedException extends Exception {} -class PlaylistDyanmicException extends Exception {} diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index a07d998d4..e995b88ed 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -182,9 +182,13 @@ class Application_Model_Scheduler $data["id"] = $file->getDbId(); $data["cliplength"] = $file->getDbLength(); $data["cuein"] = "00:00:00"; - $data["cueout"] = "00:00:00"; - $data["fadein"] = "00:00:00"; - $data["fadeout"] = "00:00:00"; + $data["cueout"] = $file->getDbLength(); + $defaultFade = Application_Model_Preference::GetDefaultFade(); + if (isset($defaultFade)) { + //fade is in format SS.uuuuuu + $data["fadein"] = $defaultFade; + $data["fadeout"] = $defaultFade; + } $data["type"] = 0; $files[] = $data; } @@ -192,48 +196,6 @@ class Application_Model_Scheduler } } } - // find if the playslit is static or dynamic - /*$c = new Criteria(); - $c->add(CcPlaylistPeer::ID, $id); - $pl = CcPlaylistPeer::doSelect($c); - $playlistType = $pl[0]->getDbType(); - - if ($playlistType == "static") { - $contents = CcPlaylistcontentsQuery::create() - ->orderByDbPosition() - ->filterByDbPlaylistId($id) - ->find($this->con); - } else { - $pl = new Application_Model_Playlist($id); - $contents = $pl->getListOfFilesUnderLimit(); - } - - if (is_null($contents)) { - throw new Exception("A selected Playlist does not exist!"); - }*/ - - /*foreach ($contents as $fileId => $plItem) { - $data = $this->fileInfo; - if ($plItem['type'] == 0){ - $file = $plItem->getCcFiles($this->con); - if (isset($file) && $file->getDbFileExists()) { - $data["id"] = $plItem->getDbFileId(); - $data["cliplength"] = $plItem->getDbCliplength(); - $data["cuein"] = $plItem->getDbCuein(); - $data["cueout"] = $plItem->getDbCueout(); - $data["fadein"] = $plItem->getDbFadein(); - $data["fadeout"] = $plItem->getDbFadeout(); - } - } else { - // on dynamic playslsit, $fileId is id of files - $file = Application_Model_StoredFile::Recall($fileId)->getPropelOrm(); - if (isset($file) && $file->getDbFileExists()) { - $data["id"] = $fileId; - $data["cliplength"] = $file->getDbLength(); - } - } - $files[] = $data; - }*/ } else if ($type == "stream") { //need to return $stream = CcWebstreamQuery::create()->findPK($id, $this->con); @@ -256,6 +218,39 @@ class Application_Model_Scheduler $files[] = $data; } + } else if ($type == "block") { + $bl = new Application_Model_Block($id); + if ($bl->isStatic()) { + foreach ($bl->getContents() as $track) { + $data["id"] = $track['item_id']; + $data["cliplength"] = $track['length']; + $data["cuein"] = $track['cuein']; + $data["cueout"] = $track['cueout']; + $data["fadein"] = $track['fadein']; + $data["fadeout"] = $track['fadeout']; + $data["type"] = 0; + $files[] = $data; + } + } else { + $dynamicFiles = $bl->getListOfFilesUnderLimit(); + foreach ($dynamicFiles as $fileId=>$f) { + $file = CcFilesQuery::create()->findPk($fileId); + if (isset($file) && $file->getDbFileExists()) { + $data["id"] = $file->getDbId(); + $data["cliplength"] = $file->getDbLength(); + $data["cuein"] = "00:00:00"; + $data["cueout"] = $file->getDbLength(); + $defaultFade = Application_Model_Preference::GetDefaultFade(); + if (isset($defaultFade)) { + //fade is in format SS.uuuuuu + $data["fadein"] = $defaultFade; + $data["fadeout"] = $defaultFade; + } + $data["type"] = 0; + $files[] = $data; + } + } + } } return $files; } diff --git a/airtime_mvc/application/views/scripts/playlist/set-fade.phtml b/airtime_mvc/application/views/scripts/playlist/set-fade.phtml index 68aa09fc6..6e21fb315 100644 --- a/airtime_mvc/application/views/scripts/playlist/set-fade.phtml +++ b/airtime_mvc/application/views/scripts/playlist/set-fade.phtml @@ -1,12 +1,16 @@