CC-84: Smart Playlists

- audio preview on playlist
- cleaning up some code
This commit is contained in:
James 2012-08-02 16:36:12 -04:00
parent 3b5a3e6713
commit 0d2d8218bf
14 changed files with 202 additions and 72 deletions

View file

@ -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();

View file

@ -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) {

View file

@ -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();
}