CC-84: Smart Playlists

- editing playlist
This commit is contained in:
James 2012-07-13 15:58:23 -04:00
parent bf46605ea1
commit ae9442d7f5
4 changed files with 129 additions and 27 deletions

View File

@ -78,6 +78,7 @@ class PlaylistController extends Zend_Controller_Action
$form = new Application_Form_SmartPlaylistCriteria(); $form = new Application_Form_SmartPlaylistCriteria();
$form->removeDecorator('DtDdWrapper'); $form->removeDecorator('DtDdWrapper');
$form->startForm($pl->getId());
//$form->loadCriteria($pl->getId()); //$form->loadCriteria($pl->getId());
$this->view->form = $form; $this->view->form = $form;
@ -149,6 +150,7 @@ class PlaylistController extends Zend_Controller_Action
$pl = new Application_Model_Playlist($this->pl_sess->id); $pl = new Application_Model_Playlist($this->pl_sess->id);
$this->view->pl = $pl; $this->view->pl = $pl;
$form = new Application_Form_SmartPlaylistCriteria(); $form = new Application_Form_SmartPlaylistCriteria();
$form->startForm($this->pl_sess->id);
$this->view->form = $form; $this->view->form = $form;
$formatter = new LengthFormatter($pl->getLength()); $formatter = new LengthFormatter($pl->getLength());

View File

@ -1,9 +1,11 @@
<?php <?php
class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
{ {
public function init() public function init(){
{
}
public function startForm($p_playlistId)
{
$criteriaOptions = array( $criteriaOptions = array(
0 => "Select criteria", 0 => "Select criteria",
"album_title" => "Album", "album_title" => "Album",
@ -34,6 +36,55 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
"year" => "Year" "year" => "Year"
); );
$criteriaTypes = array(
0 => "",
"album_title" => "s",
"artist_name" => "s",
"bit_rate" => "n",
"bpm" => "n",
"comments" => "s",
"composer" => "s",
"conductor" => "s",
"utime" => "n",
"mtime" => "n",
"disc_number" => "n",
"genre" => "s",
"isrc_number" => "s",
"label" => "s",
"language" => "s",
"length" => "n",
"lyricist" => "s",
"mood" => "s",
"name" => "s",
"orchestra" => "s",
"radio_station_name" => "s",
"rating" => "n",
"sample_rate" => "n",
"soundcloud_id" => "n",
"track_title" => "s",
"track_num" => "n",
"year" => "n"
);
$stringCriteriaOptions = array(
"0" => "Select modifier",
"contains" => "contains",
"does not contain" => "does not contain",
"is" => "is",
"is not" => "is not",
"starts with" => "starts with",
"ends with" => "ends with"
);
$numericCriteriaOptions = array(
"0" => "Select modifier",
"is" => "is",
"is not" => "is not",
"is greater than" => "is greater than",
"is less than" => "is less than",
"is in the range" => "is in the range"
);
$limitOptions = array( $limitOptions = array(
"hours" => "hours", "hours" => "hours",
"minutes" => "minutes", "minutes" => "minutes",
@ -55,40 +106,80 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$spType->setValue('Static'); $spType->setValue('Static');
$this->addElement($spType); $this->addElement($spType);
// load criteria from db
$c = new Criteria();
$c->add(CcPlaylistcriteriaPeer::PLAYLIST_ID, $p_playlistId);
$out = CcPlaylistcriteriaPeer::doSelect($c);
$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);
}
}
$numElements = count($criteriaOptions); $numElements = count($criteriaOptions);
for ($i = 0; $i < $numElements; $i++) { for ($i = 0; $i < $numElements; $i++) {
$criteriaType = "";
$criteria = new Zend_Form_Element_Select('sp_criteria_field_'.$i); $criteria = new Zend_Form_Element_Select('sp_criteria_field_'.$i);
$criteria->setAttrib('class', 'input_select'); $criteria->setAttrib('class', 'input_select')
$criteria->setValue('Select criteria'); ->setValue('Select criteria')
$criteria->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'))
$criteria->setMultiOptions($criteriaOptions); ->setMultiOptions($criteriaOptions);
if ($i != 0){ if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteria->setAttrib('disabled', 'disabled'); $criteria->setAttrib('disabled', 'disabled');
} }
if (isset($storedCrit["crit"][$i])) {
$criteriaType = $criteriaTypes[$storedCrit["crit"][$i]["criteria"]];
$criteria->setValue($storedCrit["crit"][$i]["criteria"]);
}
$this->addElement($criteria); $this->addElement($criteria);
$criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_'.$i); $criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_'.$i);
$criteriaModifers->setValue('Select modifier'); $criteriaModifers->setValue('Select modifier')
$criteriaModifers->setAttrib('class', 'input_select'); ->setAttrib('class', 'input_select')
$criteriaModifers->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier')); if ($i != 0 && !isset($storedCrit["crit"][$i])){
if ($i != 0){
$criteriaModifers->setAttrib('disabled', 'disabled'); $criteriaModifers->setAttrib('disabled', 'disabled');
} }
if (isset($storedCrit["crit"][$i])) {
if($criteriaType == "s"){
$criteriaModifers->setMultiOptions($stringCriteriaOptions);
}else{
$criteriaModifers->setMultiOptions($numericCriteriaOptions);
}
$criteriaModifers->setValue($storedCrit["crit"][$i]["modifier"]);
}else{
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier'));
}
$this->addElement($criteriaModifers); $this->addElement($criteriaModifers);
$criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_'.$i); $criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_'.$i);
$criteriaValue->setAttrib('class', 'input_text'); $criteriaValue->setAttrib('class', 'input_text')
$criteriaValue->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
if ($i != 0){ if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteriaValue->setAttrib('disabled', 'disabled'); $criteriaValue->setAttrib('disabled', 'disabled');
} }
if (isset($storedCrit["crit"][$i])) {
$criteriaValue->setValue($storedCrit["crit"][$i]["value"]);
}
$this->addElement($criteriaValue); $this->addElement($criteriaValue);
$criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_'.$i); $criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_'.$i);
$criteriaExtra->setAttrib('class', 'input_text'); $criteriaExtra->setAttrib('class', 'input_text')
$criteriaExtra->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
$criteriaExtra->setAttrib('disabled', 'disabled'); if (isset($storedCrit["crit"][$i]["extra"])) {
$criteriaExtra->setValue($storedCrit["crit"][$i]["extra"]);
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$this->addElement($criteriaExtra); $this->addElement($criteriaExtra);
} }
@ -96,6 +187,11 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$limit->setAttrib('class', 'input_select'); $limit->setAttrib('class', 'input_select');
$limit->setDecorators(array('viewHelper')); $limit->setDecorators(array('viewHelper'));
$limit->setMultiOptions($limitOptions); $limit->setMultiOptions($limitOptions);
if (isset($storedCrit["limit"])) {
$limit->setValue($storedCrit["limit"]["modifier"]);
}else{
$limit->setAttrib('disabled', 'disabled');
}
$this->addElement($limit); $this->addElement($limit);
$limitValue = new Zend_Form_Element_Text('sp_limit_value'); $limitValue = new Zend_Form_Element_Text('sp_limit_value');
@ -103,6 +199,11 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$limitValue->setLabel('Limit to'); $limitValue->setLabel('Limit to');
$limitValue->setDecorators(array('viewHelper')); $limitValue->setDecorators(array('viewHelper'));
$this->addElement($limitValue); $this->addElement($limitValue);
if (isset($storedCrit["limit"])) {
$limitValue->setValue($storedCrit["limit"]["value"]);
}else{
$limitValue->setAttrib('disabled', 'disabled');
}
$save = new Zend_Form_Element_Button('save_button'); $save = new Zend_Form_Element_Button('save_button');
$save->setAttrib('class', 'ui-button ui-state-default right-floated'); $save->setAttrib('class', 'ui-button ui-state-default right-floated');
@ -125,16 +226,15 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$extra = $crit->getDbExtra(); $extra = $crit->getDbExtra();
if($criteria == "limit"){ if($criteria == "limit"){
$this->getElement("sp_limit_options")->setValue($modifier); Zend_Form::getElement("sp_limit_options")->setValue($modifier);
$this->getElement("sp_limit_value")->setValue($value); Zend_Form::getElement("sp_limit_value")->setValue($value);
}else{ }else{
$this->getElement("sp_criteria_$i")->setValue($criteria); Zend_Form::getElement("sp_criteria_$i")->setValue($criteria);
$this->getElement("sp_criteria_modifier_$i")->setValue($criteria); Zend_Form::getElement("sp_criteria_modifier_$i")->setValue($criteria);
$this->getElement("sp_criteria_value_$i")->setValue($criteria); Zend_Form::getElement("sp_criteria_value_$i")->setValue($criteria);
Zend_Form::getElement("sp_criteria_extra_$i")->setValue($criteria);
$i++; $i++;
} }
} }
Logging::log($out);
} }
} }

View File

@ -24,7 +24,7 @@
<?php echo $this->element->getElement('sp_criteria_field_'.$i) ?> <?php echo $this->element->getElement('sp_criteria_field_'.$i) ?>
<?php echo $this->element->getElement('sp_criteria_modifier_'.$i) ?> <?php echo $this->element->getElement('sp_criteria_modifier_'.$i) ?>
<?php echo $this->element->getElement('sp_criteria_value_'.$i) ?><span id="extra_criteria" style="display:none;"> to <?php echo $this->element->getElement('sp_criteria_extra_'.$i) ?></span> <?php echo $this->element->getElement('sp_criteria_value_'.$i) ?><span id="extra_criteria" <?php echo $this->element->getElement('sp_criteria_extra_'.$i)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>> to <?php echo $this->element->getElement('sp_criteria_extra_'.$i) ?></span>
<?php if ($i != 0) { ?> <?php if ($i != 0) { ?>
<a href='#' id='criteria_remove_<?php echo $i ?>'>Remove&nbsp;</a> <a href='#' id='criteria_remove_<?php echo $i ?>'>Remove&nbsp;</a>
<?php } else { ?> <?php } else { ?>

View File

@ -238,7 +238,7 @@ var criteriaTypes = {
"album_title" : "s", "album_title" : "s",
"artist_name" : "s", "artist_name" : "s",
"bit_rate" : "n", "bit_rate" : "n",
"bmp" : "n", "bpm" : "n",
"comments" : "s", "comments" : "s",
"composer" : "s", "composer" : "s",
"conductor" : "s", "conductor" : "s",