CC-4229: Smart Playlist: refactor code

- bug fixes
This commit is contained in:
James 2012-08-15 16:22:56 -04:00
parent d366220b85
commit 2d80131351
3 changed files with 207 additions and 103 deletions

View file

@ -1,14 +1,7 @@
<?php <?php
class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
{ {
private $criteriaOptions = array(
public function init(){
}
public function startForm($p_blockId)
{
$criteriaOptions = array(
0 => "Select criteria", 0 => "Select criteria",
"album_title" => "Album", "album_title" => "Album",
"bit_rate" => "Bit Rate", "bit_rate" => "Bit Rate",
@ -37,12 +30,12 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"year" => "Year" "year" => "Year"
); );
$criteriaTypes = array( private $criteriaTypes = array(
0 => "", 0 => "",
"album_title" => "s", "album_title" => "s",
"artist_name" => "s", "artist_name" => "s",
"bit_rate" => "n", "bit_rate" => "n",
"bpm" => "s", "bpm" => "n",
"comments" => "s", "comments" => "s",
"composer" => "s", "composer" => "s",
"conductor" => "s", "conductor" => "s",
@ -66,7 +59,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"year" => "n" "year" => "n"
); );
$stringCriteriaOptions = array( private $stringCriteriaOptions = array(
"0" => "Select modifier", "0" => "Select modifier",
"contains" => "contains", "contains" => "contains",
"does not contain" => "does not contain", "does not contain" => "does not contain",
@ -76,7 +69,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"ends with" => "ends with" "ends with" => "ends with"
); );
$numericCriteriaOptions = array( private $numericCriteriaOptions = array(
"0" => "Select modifier", "0" => "Select modifier",
"is" => "is", "is" => "is",
"is not" => "is not", "is not" => "is not",
@ -85,12 +78,18 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"is in the range" => "is in the range" "is in the range" => "is in the range"
); );
$limitOptions = array( private $limitOptions = array(
"hours" => "hours", "hours" => "hours",
"minutes" => "minutes", "minutes" => "minutes",
"items" => "items" "items" => "items"
); );
public function init(){
}
public function startForm($p_blockId)
{
// load type // load type
$out = CcBlockQuery::create()->findPk($p_blockId); $out = CcBlockQuery::create()->findPk($p_blockId);
if ($out->getDbType() == "static") { if ($out->getDbType() == "static") {
@ -128,7 +127,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
if (isset($storedCrit["crit"])) { if (isset($storedCrit["crit"])) {
$criteriaKeys = array_keys($storedCrit["crit"]); $criteriaKeys = array_keys($storedCrit["crit"]);
} }
$numElements = count($criteriaOptions); $numElements = count($this->criteriaOptions);
for ($i = 0; $i < $numElements; $i++) { for ($i = 0; $i < $numElements; $i++) {
$criteriaType = ""; $criteriaType = "";
@ -155,13 +154,13 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$criteria->setAttrib('class', 'input_select sp_input_select'.$invisible) $criteria->setAttrib('class', 'input_select sp_input_select'.$invisible)
->setValue('Select criteria') ->setValue('Select criteria')
->setDecorators(array('viewHelper')) ->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions); ->setMultiOptions($this->criteriaOptions);
if ($i != 0 && !isset($criteriaKeys[$i])) { if ($i != 0 && !isset($criteriaKeys[$i])) {
$criteria->setAttrib('disabled', 'disabled'); $criteria->setAttrib('disabled', 'disabled');
} }
if (isset($criteriaKeys[$i])) { if (isset($criteriaKeys[$i])) {
$criteriaType = $criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]]; $criteriaType = $this->criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]];
$criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]); $criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
} }
$this->addElement($criteria); $this->addElement($criteria);
@ -176,9 +175,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
} }
if (isset($criteriaKeys[$i])) { if (isset($criteriaKeys[$i])) {
if($criteriaType == "s"){ if($criteriaType == "s"){
$criteriaModifers->setMultiOptions($stringCriteriaOptions); $criteriaModifers->setMultiOptions($this->stringCriteriaOptions);
}else{ }else{
$criteriaModifers->setMultiOptions($numericCriteriaOptions); $criteriaModifers->setMultiOptions($this->numericCriteriaOptions);
} }
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]); $criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
}else{ }else{
@ -217,7 +216,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$limit = new Zend_Form_Element_Select('sp_limit_options'); $limit = new Zend_Form_Element_Select('sp_limit_options');
$limit->setAttrib('class', 'sp_input_select') $limit->setAttrib('class', 'sp_input_select')
->setDecorators(array('viewHelper')) ->setDecorators(array('viewHelper'))
->setMultiOptions($limitOptions); ->setMultiOptions($this->limitOptions);
if (isset($storedCrit["limit"])) { if (isset($storedCrit["limit"])) {
$limit->setValue($storedCrit["limit"]["modifier"]); $limit->setValue($storedCrit["limit"]["modifier"]);
} }
@ -262,19 +261,117 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->setDecorators(array( $this->setDecorators(array(
array('ViewScript', array('viewScript' => 'form/smart-block-criteria.phtml', "openOption"=> $openSmartBlockOption, array('ViewScript', array('viewScript' => 'form/smart-block-criteria.phtml', "openOption"=> $openSmartBlockOption,
'criteriasLength' => count($criteriaOptions), 'poolCount' => $files['count'], 'modRowMap' => $modRowMap)) 'criteriasLength' => count($this->criteriaOptions), 'poolCount' => $files['count'], 'modRowMap' => $modRowMap))
)); ));
} }
function isValid($params){ function preValidation($params) {
Logging::log("isvalid called"); $data = Application_Model_Block::organizeSmartPlyalistCriteria($params['data']);
$isValid = true; // add elelments that needs to be added
// set multioption for modifier according to creiteria_field
$modRowMap = array();
foreach ($data['criteria'] as $critKey=>$d) {
$count = 1;
foreach($d as $modKey=>$modInfo) {
if ($modKey == 0) {
$eleCrit = $this->getElement("sp_criteria_field_".$critKey."_".$modKey);
$eleCrit->setValue($this->criteriaOptions[$modInfo['sp_criteria_field']]);
$eleCrit->setAttrib("disabled", null);
$eleMod = $this->getElement("sp_criteria_modifier_".$critKey."_".$modKey);
$criteriaType = $this->criteriaTypes[$modInfo['sp_criteria_field']];
if ($criteriaType == "s") {
$eleMod->setMultiOptions($this->stringCriteriaOptions);
} else if ($criteriaType == "n") {
$eleMod->setMultiOptions($this->numericCriteriaOptions);
} else {
$eleMod->setMultiOptions(array('0' => 'Select modifier'));
}
$eleMod->setValue($modInfo['sp_criteria_modifier']);
$eleMod->setAttrib("disabled", null);
$eleValue = $this->getElement("sp_criteria_value_".$critKey."_".$modKey);
$eleValue->setValue($modInfo['sp_criteria_value']);
$eleValue->setAttrib("disabled", null);
if (isset($modInfo['sp_criteria_extra'])) {
$eleExtra = $this->getElement("sp_criteria_extra_".$critKey."_".$modKey);
$eleExtra->setValue($modInfo['sp_criteria_extra']);
$eleValue->setAttrib('class', 'input_text sp_extra_input_text');
$eleExtra->setAttrib("disabled", null);
}
} else {
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$critKey."_".$modKey);
$criteria->setAttrib('class', 'input_select sp_input_select sp-invisible')
->setValue('Select criteria')
->setDecorators(array('viewHelper'))
->setMultiOptions($this->criteriaOptions);
$criteriaType = $this->criteriaTypes[$modInfo['sp_criteria_field']];
$criteria->setValue($this->criteriaOptions[$modInfo['sp_criteria_field']]);
$this->addElement($criteria);
/****************** MODIFIER ***********/
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$critKey."_".$modKey);
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select')
->setDecorators(array('viewHelper'));
if ($criteriaType == "s") {
$criteriaModifers->setMultiOptions($this->stringCriteriaOptions);
} else if ($criteriaType == "n") {
$criteriaModifers->setMultiOptions($this->numericCriteriaOptions);
} else {
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier'));
}
$criteriaModifers->setValue($modInfo['sp_criteria_modifier']);
$this->addElement($criteriaModifers);
/****************** VALUE ***********/
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$critKey."_".$modKey);
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'));
$criteriaValue->setValue($modInfo['sp_criteria_value']);
$this->addElement($criteriaValue);
/****************** EXTRA ***********/
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$critKey."_".$modKey);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
if (isset($modInfo['sp_criteria_extra'])) {
$criteriaExtra->setValue($modInfo['sp_criteria_extra']);
$criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$this->addElement($criteriaExtra);
$count++;
}
}
$modRowMap[$critKey] = $count;
}
$decorator = $this->getDecorator("ViewScript");
$existingModRow = $decorator->getOption("modRowMap");
foreach ($modRowMap as $key=>$v) {
$existingModRow[$key] = $v;
}
$decorator->setOption("modRowMap", $existingModRow);
// reconstruct the params['criteria'] so we can populate the form // reconstruct the params['criteria'] so we can populate the form
$formData = array(); $formData = array();
foreach ($params['data'] as $ele) { foreach ($params['data'] as $ele) {
$formData[$ele['name']] = $ele['value']; $formData[$ele['name']] = $ele['value'];
} }
$this->populate($formData); $this->populate($formData);
return $data;
}
function isValid($params){
$isValid = true;
$data = $this->preValidation($params);
$criteria2PeerMap = array( $criteria2PeerMap = array(
0 => "Select criteria", 0 => "Select criteria",
"album_title" => "DbAlbumTitle", "album_title" => "DbAlbumTitle",
@ -303,7 +400,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"track_number" => "DbTrackNumber", "track_number" => "DbTrackNumber",
"year" => "DbYear" "year" => "DbYear"
); );
$data = Application_Model_Block::organizeSmartPlyalistCriteria($params['data']);
// things we need to check // things we need to check
// 1. limit value shouldn't be empty and has upperbound of 24 hrs // 1. limit value shouldn't be empty and has upperbound of 24 hrs
// 2. sp_criteria or sp_criteria_modifier shouldn't be 0 // 2. sp_criteria or sp_criteria_modifier shouldn't be 0

View file

@ -57,6 +57,13 @@
<span class='sp_text_font'><?php echo $this->element->getElement('sp_limit_value')->getLabel() ?></span> <span class='sp_text_font'><?php echo $this->element->getElement('sp_limit_value')->getLabel() ?></span>
<?php echo $this->element->getElement('sp_limit_value')?> <?php echo $this->element->getElement('sp_limit_value')?>
<?php echo $this->element->getElement('sp_limit_options') ?> <?php echo $this->element->getElement('sp_limit_options') ?>
<?php if($this->element->getElement("sp_limit_value")->hasErrors()) : ?>
<?php foreach($this->element->getElement("sp_limit_value")->getMessages() as $error): ?>
<span class='errors sp-errors'>
<?php echo $error; ?>
</span>
<?php endforeach; ?>
<?php endif; ?>
<br /> <br />
</dd> </dd>
<div class='sp_text_font sp_text_font_bold'> <div class='sp_text_font sp_text_font_bold'>

View file

@ -441,14 +441,12 @@ function getCriteriaOptionType(e) {
} }
function callback(data, type) { function callback(data, type) {
var form = $('#smart-playlist-form'), var json = $.parseJSON(data),
json = $.parseJSON(data),
dt = $('table[id="library_display"]').dataTable(); dt = $('table[id="library_display"]').dataTable();
form.find('span[class="errors sp-errors"]').remove();
if (type == 'shuffle' || type == 'generate') { if (type == 'shuffle' || type == 'generate') {
AIRTIME.playlist.fnOpenPlaylist(json); AIRTIME.playlist.fnOpenPlaylist(json);
form = $('#smart-playlist-form'); var form = $('#smart-playlist-form');
if (json.result == "0") { if (json.result == "0") {
if (type == 'shuffle') { if (type == 'shuffle') {
form.find('.success').text('Smart playlist shuffled'); form.find('.success').text('Smart playlist shuffled');
@ -462,6 +460,7 @@ function callback(data, type) {
form.find('#smart_playlist_options').removeClass("closed"); form.find('#smart_playlist_options').removeClass("closed");
} else { } else {
AIRTIME.playlist.fnOpenPlaylist(json); AIRTIME.playlist.fnOpenPlaylist(json);
var form = $('#smart-playlist-form');
if (json.result == "0") { if (json.result == "0") {
$('#sp-success-saved').text('Smart playlist saved'); $('#sp-success-saved').text('Smart playlist saved');
$('#sp-success-saved').show(); $('#sp-success-saved').show();
@ -470,6 +469,7 @@ function callback(data, type) {
var dt = $('table[id="library_display"]').dataTable(); var dt = $('table[id="library_display"]').dataTable();
dt.fnStandingRedraw(); dt.fnStandingRedraw();
} }
form.find('#smart_playlist_options').removeClass("closed");
} }
setTimeout(removeSuccessMsg, 5000); setTimeout(removeSuccessMsg, 5000);
} }
@ -529,7 +529,7 @@ var criteriaTypes = {
"album_title" : "s", "album_title" : "s",
"artist_name" : "s", "artist_name" : "s",
"bit_rate" : "n", "bit_rate" : "n",
"bpm" : "s", "bpm" : "n",
"comments" : "s", "comments" : "s",
"composer" : "s", "composer" : "s",
"conductor" : "s", "conductor" : "s",