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

View File

@ -1,9 +1,11 @@
<?php
class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
{
public function init()
{
public function init(){
}
public function startForm($p_playlistId)
{
$criteriaOptions = array(
0 => "Select criteria",
"album_title" => "Album",
@ -34,6 +36,55 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
"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(
"hours" => "hours",
"minutes" => "minutes",
@ -55,40 +106,80 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$spType->setValue('Static');
$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);
for ($i = 0; $i < $numElements; $i++) {
$criteriaType = "";
$criteria = new Zend_Form_Element_Select('sp_criteria_field_'.$i);
$criteria->setAttrib('class', 'input_select');
$criteria->setValue('Select criteria');
$criteria->setDecorators(array('viewHelper'));
$criteria->setMultiOptions($criteriaOptions);
if ($i != 0){
$criteria->setAttrib('class', 'input_select')
->setValue('Select criteria')
->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions);
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteria->setAttrib('disabled', 'disabled');
}
if (isset($storedCrit["crit"][$i])) {
$criteriaType = $criteriaTypes[$storedCrit["crit"][$i]["criteria"]];
$criteria->setValue($storedCrit["crit"][$i]["criteria"]);
}
$this->addElement($criteria);
$criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_'.$i);
$criteriaModifers->setValue('Select modifier');
$criteriaModifers->setAttrib('class', 'input_select');
$criteriaModifers->setDecorators(array('viewHelper'));
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier'));
if ($i != 0){
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$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);
$criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_'.$i);
$criteriaValue->setAttrib('class', 'input_text');
$criteriaValue->setDecorators(array('viewHelper'));
if ($i != 0){
$criteriaValue->setAttrib('class', 'input_text')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteriaValue->setAttrib('disabled', 'disabled');
}
if (isset($storedCrit["crit"][$i])) {
$criteriaValue->setValue($storedCrit["crit"][$i]["value"]);
}
$this->addElement($criteriaValue);
$criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_'.$i);
$criteriaExtra->setAttrib('class', 'input_text');
$criteriaExtra->setDecorators(array('viewHelper'));
$criteriaExtra->setAttrib('disabled', 'disabled');
$criteriaExtra->setAttrib('class', 'input_text')
->setDecorators(array('viewHelper'));
if (isset($storedCrit["crit"][$i]["extra"])) {
$criteriaExtra->setValue($storedCrit["crit"][$i]["extra"]);
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$this->addElement($criteriaExtra);
}
@ -96,6 +187,11 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$limit->setAttrib('class', 'input_select');
$limit->setDecorators(array('viewHelper'));
$limit->setMultiOptions($limitOptions);
if (isset($storedCrit["limit"])) {
$limit->setValue($storedCrit["limit"]["modifier"]);
}else{
$limit->setAttrib('disabled', 'disabled');
}
$this->addElement($limit);
$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->setDecorators(array('viewHelper'));
$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->setAttrib('class', 'ui-button ui-state-default right-floated');
@ -125,16 +226,15 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$extra = $crit->getDbExtra();
if($criteria == "limit"){
$this->getElement("sp_limit_options")->setValue($modifier);
$this->getElement("sp_limit_value")->setValue($value);
Zend_Form::getElement("sp_limit_options")->setValue($modifier);
Zend_Form::getElement("sp_limit_value")->setValue($value);
}else{
$this->getElement("sp_criteria_$i")->setValue($criteria);
$this->getElement("sp_criteria_modifier_$i")->setValue($criteria);
$this->getElement("sp_criteria_value_$i")->setValue($criteria);
Zend_Form::getElement("sp_criteria_$i")->setValue($criteria);
Zend_Form::getElement("sp_criteria_modifier_$i")->setValue($criteria);
Zend_Form::getElement("sp_criteria_value_$i")->setValue($criteria);
Zend_Form::getElement("sp_criteria_extra_$i")->setValue($criteria);
$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_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) { ?>
<a href='#' id='criteria_remove_<?php echo $i ?>'>Remove&nbsp;</a>
<?php } else { ?>

View File

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