CC-84: Smart Playlists
- audio preview on playlist - cleaning up some code
This commit is contained in:
parent
3b5a3e6713
commit
0d2d8218bf
14 changed files with 202 additions and 72 deletions
|
@ -152,6 +152,11 @@ class Application_Common_DateHelper
|
|||
{
|
||||
return strtotime($time2) - strtotime($time1);
|
||||
}
|
||||
|
||||
public static function TimeAdd($time1, $time2)
|
||||
{
|
||||
return strtotime($time2) + strtotime($time1);
|
||||
}
|
||||
|
||||
public static function ConvertMSToHHMMSSmm($time)
|
||||
{
|
||||
|
|
|
@ -81,6 +81,53 @@ class AudiopreviewController extends Zend_Controller_Action
|
|||
$this->_helper->viewRenderer->setRender('audio-preview');
|
||||
}
|
||||
|
||||
public function blockPreviewAction()
|
||||
{
|
||||
global $CC_CONFIG;
|
||||
|
||||
$blockIndex = $this->_getParam('blockIndex');
|
||||
$blockId = $this->_getParam('blockId');
|
||||
|
||||
$request = $this->getRequest();
|
||||
$baseUrl = $request->getBaseUrl();
|
||||
|
||||
$baseDir = dirname($_SERVER['SCRIPT_FILENAME']);
|
||||
|
||||
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
$this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
$this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
|
||||
$this->_helper->layout->setLayout('audioPlayer');
|
||||
|
||||
$logo = Application_Model_Preference::GetStationLogo();
|
||||
if ($logo) {
|
||||
$this->view->logo = "data:image/png;base64,$logo";
|
||||
} else {
|
||||
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
|
||||
}
|
||||
$this->view->blockIndex= $blockIndex;
|
||||
$this->view->blockId = $blockId;
|
||||
|
||||
$this->_helper->viewRenderer->setRender('audio-preview');
|
||||
}
|
||||
public function getBlockAction()
|
||||
{
|
||||
// disable the view and the layout
|
||||
$this->view->layout()->disableLayout();
|
||||
$this->_helper->viewRenderer->setNoRender(true);
|
||||
|
||||
$blockId = $this->_getParam('blockId');
|
||||
|
||||
if (!isset($blockId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$bl = new Application_Model_Block($blockId);
|
||||
$result = array();
|
||||
foreach ($bl->getContents(true) as $ele) {
|
||||
$result[] = $this->createElementMap($ele);
|
||||
}
|
||||
$this->_helper->json($result);
|
||||
}
|
||||
/**
|
||||
*Function will load and return the contents of the requested playlist.
|
||||
*/
|
||||
|
|
|
@ -76,6 +76,9 @@ class LibraryController extends Zend_Controller_Action
|
|||
$obj = new Application_Model_Playlist($id);
|
||||
} else {
|
||||
$obj = new Application_Model_Block($id);
|
||||
if (!$obj->isStatic()){
|
||||
unset($menu["play"]);
|
||||
}
|
||||
if ($isAdminOrPM || $obj->getCreatorId() == $user->getId()) {
|
||||
if ($this->obj_sess->type === "playlist") {
|
||||
$menu["pl_add"] = array("name"=> "Add to Playlist", "icon" => "add-playlist", "icon" => "copy");
|
||||
|
@ -312,21 +315,22 @@ class LibraryController extends Zend_Controller_Action
|
|||
$this->view->md = $md;
|
||||
$this->view->contents = $file->getContents();
|
||||
} else if ($type == "block") {
|
||||
$file = new Application_Model_Block($id);
|
||||
$block = new Application_Model_Block($id);
|
||||
$this->view->type = $type;
|
||||
$md = $file->getAllPLMetaData();
|
||||
$md = $block->getAllPLMetaData();
|
||||
|
||||
$formatter = new LengthFormatter($md["dcterms:extent"]);
|
||||
$md["dcterms:extent"] = $formatter->format();
|
||||
|
||||
$this->view->md = $md;
|
||||
if ($file->isStatic()) {
|
||||
if ($block->isStatic()) {
|
||||
$this->view->blType = 'Static';
|
||||
$this->view->contents = $file->getContents();
|
||||
$this->view->contents = $block->getContents();
|
||||
} else {
|
||||
$this->view->blType = 'Dynamic';
|
||||
$this->view->contents = $file->getCriteria();
|
||||
$this->view->contents = $block->getCriteria();
|
||||
}
|
||||
$this->view->block = $block;
|
||||
} else if ($type == "stream") {
|
||||
$file = new Application_Model_Webstream($id);
|
||||
|
||||
|
|
|
@ -71,7 +71,6 @@ class PlaylistController extends Zend_Controller_Action
|
|||
$this->view->length = $formatter->format();
|
||||
|
||||
$this->view->obj = $obj;
|
||||
Logging::log($obj->getContents());
|
||||
$this->view->html = $this->view->render('playlist/update.phtml');
|
||||
$this->view->name = $obj->getName();
|
||||
$this->view->description = $obj->getDescription();
|
||||
|
|
|
@ -250,30 +250,50 @@ EOT;
|
|||
} else {
|
||||
$length = $this->getDynamicBlockLength();
|
||||
}
|
||||
$length = $length == null ? "N/A" : $length;
|
||||
return $length;
|
||||
}
|
||||
|
||||
public function getFormattedLength()
|
||||
{
|
||||
$prepend = "";
|
||||
if ($this->isStatic()){
|
||||
$length = $this->block->getDbLength();
|
||||
} else {
|
||||
$length = $this->getDynamicBlockLength();
|
||||
if (!$this->hasItemLimit()) {
|
||||
$prepend = "~";
|
||||
}
|
||||
}
|
||||
$formatter = new LengthFormatter($length);
|
||||
$length = $prepend.$formatter->format();
|
||||
return $length;
|
||||
}
|
||||
|
||||
public function getDynamicBlockLength()
|
||||
{
|
||||
$result = CcBlockcriteriaQuery::create()->filterByDbBlockId($this->id)
|
||||
->filterByDbCriteria('limit')->findOne();
|
||||
$modifier = $result->getDbModifier();
|
||||
$value = $result->getDbValue();
|
||||
list($value, $modifier) = $this->getLimitValueAndModifier();
|
||||
if ($modifier == "items") {
|
||||
$length = $value." ".$modifier;
|
||||
} else {
|
||||
$value = str_pad($value, 2, "0", STR_PAD_LEFT);
|
||||
if ($modifier == "minutes") {
|
||||
$timestamp = "00:".$value.":00";
|
||||
$length = "00:".$value.":00";
|
||||
} else if ($modifier == "hours") {
|
||||
$timestamp = $value."00:00";
|
||||
$length = $value."00:00";
|
||||
}
|
||||
$formatter = new LengthFormatter($timestamp);
|
||||
$length = "~".$formatter->format();
|
||||
}
|
||||
return $length;
|
||||
}
|
||||
|
||||
public function getLimitValueAndModifier()
|
||||
{
|
||||
$result = CcBlockcriteriaQuery::create()->filterByDbBlockId($this->id)
|
||||
->filterByDbCriteria('limit')->findOne();
|
||||
$modifier = $result->getDbModifier();
|
||||
$value = $result->getDbValue();
|
||||
return array($value, $modifier);
|
||||
}
|
||||
|
||||
//
|
||||
public function getStaticLength(){
|
||||
$sql = "SELECT SUM(cliplength) as length FROM cc_blockcontents WHERE block_id={$this->id}";
|
||||
|
@ -886,6 +906,7 @@ EOT;
|
|||
public function setLength($value){
|
||||
$this->block->setDbLength($value);
|
||||
$this->block->save($this->con);
|
||||
$this->updateBlockLengthInAllPlaylist();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1056,18 +1077,31 @@ EOT;
|
|||
// if the block is dynamic, put null to the length
|
||||
// as it cannot be calculated
|
||||
if ($blockType == 'dynamic') {
|
||||
$this->setLength(null);
|
||||
$output['blockLength'] = $this->getDynamicBlockLength();
|
||||
if ($this->hasItemLimit()) {
|
||||
$this->setLength(null);
|
||||
} else {
|
||||
$this->setLength($this->getDynamicBlockLength());
|
||||
}
|
||||
} else {
|
||||
$length = $this->getStaticLength();
|
||||
$this->setLength($length);
|
||||
$formatter = new LengthFormatter($length);
|
||||
$output['blockLength'] = $formatter->format();
|
||||
}
|
||||
$output['blockLength'] = $this->getFormattedLength();
|
||||
}
|
||||
$this->updateBlockLengthInAllPlaylist();
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function hasItemLimit()
|
||||
{
|
||||
list($value, $modifier) = $this->getLimitValueAndModifier();
|
||||
if ($modifier == 'items') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function storeCriteriaIntoDb($p_criteriaData){
|
||||
// delete criteria under $p_blockId
|
||||
CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete();
|
||||
|
@ -1128,18 +1162,28 @@ EOT;
|
|||
$this->deleteAllFilesFromBlock();
|
||||
$this->addAudioClips(array_keys($insertList));
|
||||
// update length in playlist contents.
|
||||
$blocks = CcPlaylistcontentsQuery::create()->filterByDbBlockId($this->id)->find();
|
||||
$blocks->getFirst();
|
||||
$iterator = $blocks->getIterator();
|
||||
while ($iterator->valid()) {
|
||||
$iterator->current()->setDbClipLength($this->getLength());
|
||||
$iterator->current()->save();
|
||||
$iterator->next();
|
||||
}
|
||||
$this->updateBlockLengthInAllPlaylist();
|
||||
return array("result"=>0);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateBlockLengthInAllPlaylist()
|
||||
{
|
||||
$blocks = CcPlaylistcontentsQuery::create()->filterByDbBlockId($this->id)->find();
|
||||
$blocks->getFirst();
|
||||
$iterator = $blocks->getIterator();
|
||||
while ($iterator->valid()) {
|
||||
$length = $this->getLength();
|
||||
if (!preg_match("/^[0-9]{2}:[0-9]{2}:[0-9]{2}/", $length)) {
|
||||
$iterator->current()->setDbClipLength(null);
|
||||
} else {
|
||||
$iterator->current()->setDbClipLength($length);
|
||||
}
|
||||
$iterator->current()->save();
|
||||
$iterator->next();
|
||||
}
|
||||
}
|
||||
|
||||
public function getListOfFilesUnderLimit()
|
||||
{
|
||||
$info = $this->getListofFilesMeetCriteria();
|
||||
|
|
|
@ -94,8 +94,8 @@ class Application_Model_Datatables
|
|||
$pl = new Application_Model_Playlist($r['id']);
|
||||
$r['length'] = $pl->getLength();
|
||||
} else if ($r['ftype'] == "block") {
|
||||
$bl = new Application_Model_Block($r['id']);
|
||||
$r['length'] = $bl->getLength();
|
||||
$bl = new Application_Model_Block($r['id']);
|
||||
$r['length'] = $bl->getFormattedLength();
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
|
|
|
@ -198,7 +198,7 @@ EOT;
|
|||
//format the length for UI.
|
||||
if ($row['type'] == 2){
|
||||
$bl = new Application_Model_Block($row['item_id']);
|
||||
$formatter = new LengthFormatter($bl->getLength());
|
||||
$formatter = new LengthFormatter($bl->getFormattedLength());
|
||||
} else {
|
||||
$formatter = new LengthFormatter($row['length']);
|
||||
}
|
||||
|
@ -257,24 +257,39 @@ EOT;
|
|||
return $fade;
|
||||
}
|
||||
|
||||
public function hasDynamicBlockOrWebStream(){
|
||||
$sql = "SELECT count(*) as count FROM cc_playlistcontents as pc
|
||||
JOIN cc_block as bl ON pc.type=2 AND pc.block_id=bl.id AND bl.type='dynamic'
|
||||
WHERE playlist_id={$this->id} AND (pc.type=2 OR pc.type=1)";
|
||||
$r = $this->con->query($sql);
|
||||
$result = $r->fetchAll(PDO::FETCH_NUM);
|
||||
if (intval($result[0][0]) > 0) {
|
||||
// returns true/false and ids of dynamic blocks
|
||||
public function hasDynamicBlock(){
|
||||
$ids = $this->getIdsOfDynamicBlocks();
|
||||
if (count($ids) > 0) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function getIdsOfDynamicBlocks() {
|
||||
$sql = "SELECT bl.id FROM cc_playlistcontents as pc
|
||||
JOIN cc_block as bl ON pc.type=2 AND pc.block_id=bl.id AND bl.type='dynamic'
|
||||
WHERE playlist_id={$this->id} AND pc.type=2";
|
||||
$r = $this->con->query($sql);
|
||||
$result = $r->fetchAll(PDO::FETCH_ASSOC);
|
||||
return $result;
|
||||
}
|
||||
|
||||
//aggregate column on playlistcontents cliplength column.
|
||||
public function getLength()
|
||||
{
|
||||
if ($this->hasDynamicBlockOrWebStream()){
|
||||
return "N/A";
|
||||
if ($this->hasDynamicBlock()){
|
||||
$ids = $this->getIdsOfDynamicBlocks();
|
||||
$length = $this->pl->getDbLength();
|
||||
foreach ($ids as $id){
|
||||
$bl = new Application_Model_Block($id['id']);
|
||||
if ($bl->hasItemLimit()) {
|
||||
return "N/A";
|
||||
}
|
||||
}
|
||||
$formatter = new LengthFormatter($length);
|
||||
return "~".$formatter->format();
|
||||
} else {
|
||||
return $this->pl->getDbLength();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
<?php if (isset($this->playlistID)): ?>
|
||||
<span class='playlistID'><?php echo "$this->playlistID" ?></span>
|
||||
<span class='playlistIndex'><?php echo "$this->playlistIndex" ?></span>
|
||||
<?php elseif (isset($this->blockId)): ?>
|
||||
<span class='blockId'><?php echo "$this->blockId" ?></span>
|
||||
<span class='blockIndex'><?php echo "$this->blockIndex" ?></span>
|
||||
<?php elseif (isset($this->audioFileID)): ?>
|
||||
<span class='audioFileID'><?php echo "$this->audioFileID" ?></span>
|
||||
<span class='audioFileTitle'><?php echo "$this->audioFileTitle" ?></span>
|
||||
|
|
|
@ -26,23 +26,7 @@
|
|||
<div><span>Name:</span><span><?php echo ($this->md["dc:title"]);?></span></div>
|
||||
<div><span>Creator:</span><span><?php echo ($this->md["dc:creator"]);?></span></div>
|
||||
<?php if ($this->type == "block" && $this->blType == "Dynamic") { ?>
|
||||
<?php if ($this->contents["limit"]["modifier"] == "items") { ?>
|
||||
<?php $len = $this->contents["limit"]["value"]." tracks"; ?>
|
||||
<?php } elseif ($this->contents["limit"]["modifier"] == "minutes") { ?>
|
||||
<?php
|
||||
$mins = $this->contents["limit"]["value"];
|
||||
if ($mins > 59) {
|
||||
$hours = intval($mins / 60);
|
||||
$minutes = $mins % 60;
|
||||
$len = $hours.":".str_pad($minutes, 2, "0", STR_PAD_LEFT).":00.0";
|
||||
} else {
|
||||
$len = $this->contents["limit"]["value"].":00.0";
|
||||
}
|
||||
?>
|
||||
<?php } else {?>
|
||||
<?php $len = $this->contents["limit"]["value"].":00:00.0"; ?>
|
||||
<?php } ?>
|
||||
<div><span>Length:</span><span><?php echo $len;?></span></div>
|
||||
<div><span>Length:</span><span><?php echo $this->block->getFormattedLength();?></span></div>
|
||||
<?php } else { ?>
|
||||
<div><span>Length:</span><span><?php echo ($this->md["dcterms:extent"]);?></span></div>
|
||||
<?php } ?>
|
||||
|
@ -74,13 +58,7 @@
|
|||
<tr class='file-md-qtip-playlist <?php if ($isStatic) echo 'static'; else echo 'dynamic';?>'>
|
||||
<td class='file-md-qtip-row-width-title'><?php echo $row["track_title"] ?></td>
|
||||
<td class='file-md-qtip-row-width-artist'><?php echo $row["creator"] ?></td>
|
||||
<?php if (!$isStatic) { ?>
|
||||
<?php $criteria = $bl->getCriteria();?>
|
||||
<?php $len = $bl->getLength();?>
|
||||
<td class='file-md-qtip-row-width-small'><?php echo $len ?></td>
|
||||
<?php } else { ?>
|
||||
<td class='file-md-qtip-row-width-small'><?php echo $row["length"] ?></td>
|
||||
<?php } ?>
|
||||
<td class='file-md-qtip-row-width-small'><?php echo $bl->getFormattedLength(); ?></td>
|
||||
</tr>
|
||||
<?php } else { ?>
|
||||
<tr>
|
||||
|
|
|
@ -17,7 +17,7 @@ if ($item['type'] == 2) {
|
|||
<span class="ui-icon ui-icon-play"></span>
|
||||
</div>
|
||||
<?php elseif ($item['type'] == 2 && $item['exists']): ?>
|
||||
<div class="big_play ui-state-hover">
|
||||
<div class="big_play ui-state-hover" blockId="<?php echo $item["item_id"]; ?>">
|
||||
<span class="ui-icon ui-icon-alert"></span>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
|
@ -31,9 +31,9 @@ if ($item['type'] == 2) {
|
|||
<span class="spl_cue ui-state-default"></span>
|
||||
<?php } else if ($item['type'] == 2) {
|
||||
if ($staticBlock) {?>
|
||||
<span class="spl_block_expand close" id="expand_block_<?php echo $item['item_id']?>">Static Block Expand</span>
|
||||
<span class="spl_block_expand close" blockId="<?php echo $item["item_id"]; ?>" id="expand_block_<?php echo $item["id"]?>">Static Block Expand</span>
|
||||
<?php } else { ?>
|
||||
<span class="spl_block_expand close" id="expand_block_<?php echo $item['item_id']?>">Dynamic Block</span>
|
||||
<span class="spl_block_expand close" blockId="<?php echo $item["item_id"]; ?>" id="expand_block_<?php echo $item["id"]?>">Dynamic Block</span>
|
||||
<?php }
|
||||
} ?>
|
||||
<span class="spl_title"><?php echo $item['track_title'] ?></span>
|
||||
|
@ -75,7 +75,7 @@ if ($item['type'] == 2) {
|
|||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($item['type'] == 2) {?>
|
||||
<div id="block_<?php echo $item['item_id']?>_info"></div>
|
||||
<div id="block_<?php echo $item["id"]?>_info"></div>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php $i = $i+1; ?>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue