CC-84: Smart Playlists

- temp commit
This commit is contained in:
James 2012-07-13 14:23:30 -04:00
parent 55fd4e5d50
commit 207582eb7e
5 changed files with 84 additions and 36 deletions

View file

@ -78,6 +78,7 @@ class PlaylistController extends Zend_Controller_Action
$form = new Application_Form_SmartPlaylistCriteria();
$form->removeDecorator('DtDdWrapper');
$form->loadCriteria($pl->getId());
$this->view->form = $form;
$this->view->pl = $pl;

View file

@ -57,7 +57,7 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$numElements = count($criteriaOptions);
for ($i = 0; $i < $numElements; $i++) {
$criteria = new Zend_Form_Element_Select('sp_criteria_'.$i);
$criteria = new Zend_Form_Element_Select('sp_criteria_field_'.$i);
$criteria->setAttrib('class', 'input_select');
$criteria->setValue('Select criteria');
$criteria->setDecorators(array('viewHelper'));
@ -84,6 +84,12 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$criteriaValue->setAttrib('disabled', 'disabled');
}
$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');
$this->addElement($criteriaExtra);
}
$limit = new Zend_Form_Element_Select('sp_limit_options');
@ -104,4 +110,31 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$save->setLabel('Generate');
$this->addElement($save);
}
public function loadCriteria($p_playlistId)
{
$c = new Criteria();
$c->add(CcPlaylistcriteriaPeer::PLAYLIST_ID, $p_playlistId);
$out = CcPlaylistcriteriaPeer::doSelect($c);
$i = 0;
foreach ($out as $crit) {
$criteria = $crit->getDbCriteria();
$modifier = $crit->getDbModifier();
$value = $crit->getDbValue();
$extra = $crit->getDbExtra();
if($criteria == "limit"){
$this->getElement("sp_limit_options")->setValue($modifier);
$this->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);
$i++;
}
}
Logging::log($out);
}
}

View file

@ -880,10 +880,8 @@ class Application_Model_Playlist {
if (count($error) > 0){
$errors[] = array("element"=>"sp_limit_value", "msg"=>$error);
}
Logging::log($errors);
}
Logging::log($errors);
// format validation
foreach ($data['criteria'] as $key=>$d){
$error = array();
@ -921,7 +919,6 @@ class Application_Model_Playlist {
public static function storeCriteriaIntoDb($p_criteriaData, $p_playlistId){
// delete criteria under $p_playlistId
Logging::log($p_criteriaData);
$deleteCrit = new Criteria();
$deleteCrit->add(CcPlaylistcriteriaPeer::PLAYLIST_ID, $p_playlistId);
CcPlaylistcriteriaPeer::doDelete($deleteCrit);
@ -964,7 +961,6 @@ class Application_Model_Playlist {
public static function generateSmartPlaylist($p_criteria, $p_playlistId)
{
$result = self::saveSmartPlaylistCriteria($p_criteria, $p_playlistId);
Logging::log($result);
if ($result['result'] != 0) {
return $result;
}else{

View file

@ -18,13 +18,13 @@
<dd id='sp_criteria-element'>
<?php for ($i = 0; $i < $this->criteriasLength; $i++) {?>
<div <?php if (($i > 0) && ($this->element->getElement('sp_criteria_'.$i)->getAttrib('disabled') == 'disabled')) {
<div <?php if (($i > 0) && ($this->element->getElement('sp_criteria_field_'.$i)->getAttrib('disabled') == 'disabled')) {
echo 'style=display:none';
} ?>>
<?php echo $this->element->getElement('sp_criteria_'.$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_value_'.$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 if ($i != 0) { ?>
<a href='#' id='criteria_remove_<?php echo $i ?>'>Remove&nbsp;</a>
<?php } else { ?>

View file

@ -37,51 +37,54 @@ function setSmartPlaylistEvents() {
/* assign next row to current row for all rows below and including
* the row getting removed
*/
for (var i=0; i<=count; i++) {
var criteria = next.find('[name^="sp_criteria"]').val();
curr.find('[name^="sp_criteria"]').val(criteria);
for (var i=0; i<count; i++) {
var criteria = next.find('[name^="sp_criteria_field"]').val();
curr.find('[name^="sp_criteria_field"]').val(criteria);
var modifier = next.find('[name^="sp_criteria_modifier"]').val();
populateModifierSelect(curr.find('[name^="sp_criteria"]'));
populateModifierSelect(curr.find('[name^="sp_criteria_field"]'));
curr.find('[name^="sp_criteria_modifier"]').val(modifier);
var criteria_value = next.find('[name^="sp_criteria_value"]').val();
curr.find('[name^="sp_criteria_value"]').val(criteria_value);
var id = curr.find('[name^="sp_criteria"]').attr('id');
var index = id.charAt(id.length-1);
/* if current and next row have the extra criteria value
* (for 'is in the range' modifier), then assign the next
* extra value to current and remove that element from
* next row
*/
if (curr.find('[name^="sp_criteria_extra"]').length > 0
&& next.find('[name^="sp_criteria_extra"]').length > 0) {
if (curr.find('[name^="sp_criteria_extra"]').attr("disabled") != "disabled"
&& next.find('[name^="sp_criteria_extra"]').attr("disabled") != "disabled") {
var criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
next.find('[name^="sp_criteria_extra"]').remove();
next.find('span[id="sp_criteria_extra_label"]').remove();
disableAndHideExtraField(next.find(':first-child'), index+1);
/*next.find('[name^="sp_criteria_extra"]').remove();
next.find('span[id="sp_criteria_extra_label"]').remove();*/
/* if only the current row has the extra criteria value,
* then just remove the current row's extra criteria element
*/
} else if (curr.find('[name^="sp_criteria_extra"]').length > 0
&& next.find('[name^="sp_criteria_extra"]').length == 0) {
curr.find('[name^="sp_criteria_extra"]').remove();
curr.find('span[id="sp_criteria_extra_label"]').remove();
} else if (curr.find('[name^="sp_criteria_extra"]').attr("disabled") != "disabled"
&& next.find('[name^="sp_criteria_extra"]').attr("disabled") == "disabled") {
disableAndHideExtraField(curr.find(':first-child'), index);
/*curr.find('[name^="sp_criteria_extra"]').remove();
curr.find('span[id="sp_criteria_extra_label"]').remove();*/
/* if only the next row has the extra criteria value,
* then add the extra criteria element to current row
* and assign next row's value to it
*/
} else if (next.find('[name^="sp_criteria_extra"]').length > 0) {
var index_name = curr.find('[name^="sp_criteria_value"]').attr('id'),
index_num = index_name.charAt(index_name.length-1),
criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
curr.find('[name^="sp_criteria_value"]')
} else if (next.find('[name^="sp_criteria_extra"]').attr("disabled") != "disabled") {
criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
enableAndShowExtraField(curr.find(':first-child'), index);
/*curr.find('[name^="sp_criteria_value"]')
.after($('<input type="text" class="input_text">')
.attr('id', 'sp_criteria_extra_'+index_num)
.attr('name', 'sp_criteria_extra_'+index_num)).after('<span id="sp_criteria_extra_label"> to </span>');
.attr('name', 'sp_criteria_extra_'+index_num)).after('<span id="sp_criteria_extra_label"> to </span>');*/
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
}
@ -136,13 +139,16 @@ function setSmartPlaylistEvents() {
$('button[id="save_button"]').text(button_text);
});
form.find('select[id^="sp_criteria"]').live("change", function(){
form.find('select[id^="sp_criteria"]:not([id^="sp_criteria_modifier"])').live("change", function(){
var index_name = $(this).attr('id'),
index_num = index_name.charAt(index_name.length-1);
if ($('#sp_criteria_extra_'+index_num).length > 0) {
// disalbe extra field and hide the span
disableAndHideExtraField($(this), index_num);
/*if ($('#sp_criteria_extra_'+index_num).length > 0) {
$('#sp_criteria_extra_'+index_num).remove();
$('#sp_criteria_extra_label_'+index_num).remove();
}
}*/
populateModifierSelect(this);
});
@ -152,20 +158,34 @@ function setSmartPlaylistEvents() {
index_num = index_name.charAt(index_name.length-1);
if ($(this).val() == 'is in the range') {
criteria_value.after($('<input type="text" class="input_text">')
enableAndShowExtraField(criteria_value, index_num);
/*after($('<input type="text" class="input_text">')
.attr('id', 'sp_criteria_extra_'+index_num)
.attr('name', 'sp_criteria_extra_'+index_num)).after('<span id="sp_criteria_extra_label_'+index_num+'"> to </span>');
.attr('name', 'sp_criteria_extra_'+index_num)).after('<span id="sp_criteria_extra_label_'+index_num+'"> to </span>');*/
} else {
if ($('#sp_criteria_extra_'+index_num).length > 0) {
disableAndHideExtraField(criteria_value, index_num);
/*if ($('#sp_criteria_extra_'+index_num).length > 0) {
$('#sp_criteria_extra_'+index_num).remove();
$('#sp_criteria_extra_label_'+index_num).remove();
}
}*/
}
});
}
function enableAndShowExtraField(valEle, index) {
var spanExtra = valEle.nextAll("#extra_criteria");
spanExtra.children('#sp_criteria_extra_'+index).removeAttr("disabled");
spanExtra.show();
}
function disableAndHideExtraField(valEle, index) {
var spanExtra = valEle.nextAll("#extra_criteria");
spanExtra.children('#sp_criteria_extra_'+index).val("").attr("disabled", "disabled");
spanExtra.hide();
}
function populateModifierSelect(e) {
var criteria = $(e).val(),
criteria_type = criteriaTypes[criteria],
@ -194,7 +214,6 @@ function staticCallback(data) {
form.find(' span[id="sp-errors"]').remove();
var json = $.parseJSON(data);
if (json.result == "1") {
var error_element;
$.each(json.errors, function(index, error){
$.each(error.msg, function(index, message){
$('#'+error.element).parent().append("<span class='sp-errors'>"+message+"</span><span id='sp-errors'><br /></span>");
@ -206,7 +225,6 @@ function staticCallback(data) {
function dynamicCallback(json) {
var json = $.parseJSON(data);
if (json.result == "1") {
var error_element;
$.each(json.errors, function(index, error){
$.each(error.msg, function(index, message){
$('#'+error.element).parent().append("<span class='errors'>"+message+"<br /></span>");