diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 06835ed24..e8da5c0e1 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -1,6 +1,88 @@ "Select criteria", + "album_title" => "Album", + "bit_rate" => "Bit Rate", + "bpm" => "Bpm", + "comments" => "Comments", + "composer" => "Composer", + "conductor" => "Conductor", + "artist_name" => "Creator", + "disc_number" => "Disc Number", + "genre" => "Genre", + "isrc_number" => "ISRC", + "label" => "Label", + "language" => "Language", + "mtime" => "Last Modified", + "lptime" => "Last Played", + "length" => "Length", + "lyricist" => "Lyricist", + "mood" => "Mood", + "name" => "Name", + "orchestra" => "Orchestra", + "rating" => "Rating", + "sample_rate" => "Sample Rate", + "track_title" => "Title", + "track_number" => "Track Number", + "utime" => "Uploaded", + "year" => "Year" + ); + + private $criteriaTypes = array( + 0 => "", + "album_title" => "s", + "artist_name" => "s", + "bit_rate" => "n", + "bpm" => "n", + "comments" => "s", + "composer" => "s", + "conductor" => "s", + "utime" => "n", + "mtime" => "n", + "lptime" => "n", + "disc_number" => "n", + "genre" => "s", + "isrc_number" => "s", + "label" => "s", + "language" => "s", + "length" => "n", + "lyricist" => "s", + "mood" => "s", + "name" => "s", + "orchestra" => "s", + "rating" => "n", + "sample_rate" => "n", + "track_title" => "s", + "track_number" => "n", + "year" => "n" + ); + + private $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" + ); + + private $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" + ); + + private $limitOptions = array( + "hours" => "hours", + "minutes" => "minutes", + "items" => "items" + ); public function init(){ @@ -8,89 +90,6 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm public function startForm($p_blockId) { - $criteriaOptions = array( - 0 => "Select criteria", - "album_title" => "Album", - "bit_rate" => "Bit Rate", - "bpm" => "Bpm", - "comments" => "Comments", - "composer" => "Composer", - "conductor" => "Conductor", - "artist_name" => "Creator", - "disc_number" => "Disc Number", - "genre" => "Genre", - "isrc_number" => "ISRC", - "label" => "Label", - "language" => "Language", - "mtime" => "Last Modified", - "lptime" => "Last Played", - "length" => "Length", - "lyricist" => "Lyricist", - "mood" => "Mood", - "name" => "Name", - "orchestra" => "Orchestra", - "rating" => "Rating", - "sample_rate" => "Sample Rate", - "track_title" => "Title", - "track_number" => "Track Number", - "utime" => "Uploaded", - "year" => "Year" - ); - - $criteriaTypes = array( - 0 => "", - "album_title" => "s", - "artist_name" => "s", - "bit_rate" => "n", - "bpm" => "s", - "comments" => "s", - "composer" => "s", - "conductor" => "s", - "utime" => "n", - "mtime" => "n", - "lptime" => "n", - "disc_number" => "n", - "genre" => "s", - "isrc_number" => "s", - "label" => "s", - "language" => "s", - "length" => "n", - "lyricist" => "s", - "mood" => "s", - "name" => "s", - "orchestra" => "s", - "rating" => "n", - "sample_rate" => "n", - "track_title" => "s", - "track_number" => "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", - "items" => "items" - ); - // load type $out = CcBlockQuery::create()->findPk($p_blockId); if ($out->getDbType() == "static") { @@ -128,7 +127,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm if (isset($storedCrit["crit"])) { $criteriaKeys = array_keys($storedCrit["crit"]); } - $numElements = count($criteriaOptions); + $numElements = count($this->criteriaOptions); for ($i = 0; $i < $numElements; $i++) { $criteriaType = ""; @@ -155,13 +154,13 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $criteria->setAttrib('class', 'input_select sp_input_select'.$invisible) ->setValue('Select criteria') ->setDecorators(array('viewHelper')) - ->setMultiOptions($criteriaOptions); + ->setMultiOptions($this->criteriaOptions); if ($i != 0 && !isset($criteriaKeys[$i])) { $criteria->setAttrib('disabled', 'disabled'); } 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"]); } $this->addElement($criteria); @@ -176,9 +175,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm } if (isset($criteriaKeys[$i])) { if($criteriaType == "s"){ - $criteriaModifers->setMultiOptions($stringCriteriaOptions); + $criteriaModifers->setMultiOptions($this->stringCriteriaOptions); }else{ - $criteriaModifers->setMultiOptions($numericCriteriaOptions); + $criteriaModifers->setMultiOptions($this->numericCriteriaOptions); } $criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]); }else{ @@ -217,7 +216,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $limit = new Zend_Form_Element_Select('sp_limit_options'); $limit->setAttrib('class', 'sp_input_select') ->setDecorators(array('viewHelper')) - ->setMultiOptions($limitOptions); + ->setMultiOptions($this->limitOptions); if (isset($storedCrit["limit"])) { $limit->setValue($storedCrit["limit"]["modifier"]); } @@ -262,19 +261,117 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $this->setDecorators(array( 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){ - Logging::log("isvalid called"); - $isValid = true; - // reconstruct the params['criteria'] so we can populate the form - $formData = array(); - foreach ($params['data'] as $ele) { - $formData[$ele['name']] = $ele['value']; + function preValidation($params) { + $data = Application_Model_Block::organizeSmartPlyalistCriteria($params['data']); + // 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 + $formData = array(); + foreach ($params['data'] as $ele) { + $formData[$ele['name']] = $ele['value']; + } + $this->populate($formData); + return $data; + } + + function isValid($params){ + $isValid = true; + $data = $this->preValidation($params); $criteria2PeerMap = array( 0 => "Select criteria", "album_title" => "DbAlbumTitle", @@ -303,7 +400,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm "track_number" => "DbTrackNumber", "year" => "DbYear" ); - $data = Application_Model_Block::organizeSmartPlyalistCriteria($params['data']); + // things we need to check // 1. limit value shouldn't be empty and has upperbound of 24 hrs // 2. sp_criteria or sp_criteria_modifier shouldn't be 0 diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index 38c2719d8..2559d20f6 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -57,6 +57,13 @@ element->getElement('sp_limit_value')->getLabel() ?> element->getElement('sp_limit_value')?> element->getElement('sp_limit_options') ?> + element->getElement("sp_limit_value")->hasErrors()) : ?> + element->getElement("sp_limit_value")->getMessages() as $error): ?> + + + + +
diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index f9e48b1ef..f4931e1df 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -442,14 +442,12 @@ function getCriteriaOptionType(e) { } function callback(data, type) { - var form = $('#smart-playlist-form'), - json = $.parseJSON(data), + var json = $.parseJSON(data), dt = $('table[id="library_display"]').dataTable(); - form.find('span[class="errors sp-errors"]').remove(); if (type == 'shuffle' || type == 'generate') { AIRTIME.playlist.fnOpenPlaylist(json); - form = $('#smart-playlist-form'); + var form = $('#smart-playlist-form'); if (json.result == "0") { if (type == 'shuffle') { form.find('.success').text('Smart playlist shuffled'); @@ -463,6 +461,7 @@ function callback(data, type) { form.find('#smart_playlist_options').removeClass("closed"); } else { AIRTIME.playlist.fnOpenPlaylist(json); + var form = $('#smart-playlist-form'); if (json.result == "0") { $('#sp-success-saved').text('Smart playlist saved'); $('#sp-success-saved').show(); @@ -471,6 +470,7 @@ function callback(data, type) { var dt = $('table[id="library_display"]').dataTable(); dt.fnStandingRedraw(); } + form.find('#smart_playlist_options').removeClass("closed"); } setTimeout(removeSuccessMsg, 5000); } @@ -530,7 +530,7 @@ var criteriaTypes = { "album_title" : "s", "artist_name" : "s", "bit_rate" : "n", - "bpm" : "s", + "bpm" : "n", "comments" : "s", "composer" : "s", "conductor" : "s",