diff --git a/airtime_mvc/application/forms/SmartPlaylistCriteria.php b/airtime_mvc/application/forms/SmartPlaylistCriteria.php
index 47d918e59..7e59ea577 100644
--- a/airtime_mvc/application/forms/SmartPlaylistCriteria.php
+++ b/airtime_mvc/application/forms/SmartPlaylistCriteria.php
@@ -129,7 +129,7 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
for ($i = 0; $i < $numElements; $i++) {
$criteriaType = "";
$criteria = new Zend_Form_Element_Select('sp_criteria_field_'.$i);
- $criteria->setAttrib('class', 'input_select')
+ $criteria->setAttrib('class', 'input_select sp_input_select')
->setValue('Select criteria')
->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions);
@@ -144,7 +144,7 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_'.$i);
$criteriaModifers->setValue('Select modifier')
- ->setAttrib('class', 'input_select')
+ ->setAttrib('class', 'input_select sp_input_select')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteriaModifers->setAttrib('disabled', 'disabled');
@@ -162,7 +162,7 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$this->addElement($criteriaModifers);
$criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_'.$i);
- $criteriaValue->setAttrib('class', 'input_text')
+ $criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteriaValue->setAttrib('disabled', 'disabled');
@@ -172,14 +172,15 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
}
$this->addElement($criteriaValue);
- $criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_'.$i);
- $criteriaExtra->setAttrib('class', 'input_text')
+ $criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_'.$i);
+ $criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
if (isset($storedCrit["crit"][$i]["extra"])) {
- $criteriaExtra->setValue($storedCrit["crit"][$i]["extra"]);
+ $criteriaExtra->setValue($storedCrit["crit"][$i]["extra"]);
+ $criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
- }
+ }
$this->addElement($criteriaExtra);
}
@@ -189,8 +190,6 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$limit->setMultiOptions($limitOptions);
if (isset($storedCrit["limit"])) {
$limit->setValue($storedCrit["limit"]["modifier"]);
- }else{
- $limit->setAttrib('disabled', 'disabled');
}
$this->addElement($limit);
@@ -201,8 +200,6 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$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');
@@ -212,29 +209,5 @@ class Application_Form_SmartPlaylistCriteria extends Zend_Form_SubForm
$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"){
- Zend_Form::getElement("sp_limit_options")->setValue($modifier);
- Zend_Form::getElement("sp_limit_value")->setValue($value);
- }else{
- 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++;
- }
- }
- }
+
}
\ No newline at end of file
diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php
index e959d5130..e752ff2c3 100644
--- a/airtime_mvc/application/models/Playlist.php
+++ b/airtime_mvc/application/models/Playlist.php
@@ -870,11 +870,11 @@ class Application_Model_Playlist {
}
if ($data['etc']['sp_limit_options'] == 'hours' || $data['etc']['sp_limit_options'] == 'mins') {
if ( $data['etc']['sp_limit_value'] == "" || intval($data['etc']['sp_limit_value']) == 0) {
- $error[] = "Litmit cannot be empty or 0";
+ $error[] = "Limit cannot be empty or 0";
} else {
$mins = $data['etc']['sp_limit_value'] * $multiplier;
if ($mins > 14400) {
- $error[] = "Litmit cannot be more than 24 hrs";
+ $error[] = "Limit cannot be more than 24 hrs";
}
}
if (count($error) > 0){
@@ -886,11 +886,11 @@ class Application_Model_Playlist {
foreach ($data['criteria'] as $key=>$d){
$error = array();
// check for not selected select box
- if ($d['sp_criteria'] == "0" || $d['sp_criteria_modifier'] == "0"){
+ if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){
$error[] = "You must select Criteria and Modifier";
} else {
// we need to take care 'length' specially since the column type is varchar
- if ($d['sp_criteria'] == 'length') {
+ if ($d['sp_criteria_field'] == 'length') {
if (!preg_match("/(\d{2}):(\d{2}):(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "'Length' should be in '00:00:00' format";
}
@@ -976,7 +976,7 @@ class Application_Model_Playlist {
$c = new Criteria();
foreach ($p_data as $criteria) {
- $spCriteria = self::$criteria2PeerMap[$criteria['sp_criteria']];
+ $spCriteria = self::$criteria2PeerMap[$criteria['sp_criteria_field']];
$spCriteriaModifier = $criteria['sp_criteria_modifier'];
$spCriteriaValue = $criteria['sp_criteria_value'];
if ($spCriteriaModifier == "starts with") {
diff --git a/airtime_mvc/application/views/scripts/form/smart-playlist-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-playlist-criteria.phtml
index 673b78a5c..66a606848 100644
--- a/airtime_mvc/application/views/scripts/form/smart-playlist-criteria.phtml
+++ b/airtime_mvc/application/views/scripts/form/smart-playlist-criteria.phtml
@@ -27,8 +27,6 @@
element->getElement('sp_criteria_value_'.$i) ?>
Remove
-
- Add
diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css
index 1d819ab87..8e43d9e75 100644
--- a/airtime_mvc/public/css/styles.css
+++ b/airtime_mvc/public/css/styles.css
@@ -416,6 +416,18 @@ input[type="text"]:focus, input[type="password"]:focus, textarea:focus, .input_t
padding: 2px 2px 2px 0;
vertical-align: top;
}
+.sp_input_select{
+ width: 130px;
+}
+
+input.input_text.sp_input_text{
+ width: 200px !important;
+}
+
+input.input_text.sp_extra_input_text{
+ width: 85px !important;
+}
+
label {
font-size:13px;
color:#5b5b5b;
@@ -1409,7 +1421,7 @@ div.success{
border:1px solid #488214;
}
-div.errors{
+div.errors, span.errors{
color:#902d2d;
font-size:11px;
padding:2px 4px;
@@ -1418,14 +1430,9 @@ div.errors{
border:1px solid #c83f3f;
}
-span.sp-errors{
- color:#902d2d;
- font-size:11px;
- padding:2px 4px;
- background:#c6b4b4;
- margin-bottom:2px;
- border:1px solid #c83f3f;
- width: 400px;
+span.errors.sp-errors{
+ width: 400px;
+ display: block;
}
.collapsible-header, .collapsible-header-disabled {
diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js
index 99d5265b0..6b3b8f7c2 100644
--- a/airtime_mvc/public/js/airtime/library/spl.js
+++ b/airtime_mvc/public/js/airtime/library/spl.js
@@ -318,8 +318,10 @@ var AIRTIME = (function(AIRTIME){
$("#side_playlist")
.empty()
.append(json.html);
-
+
setUpPlaylist();
+ var form = $('#smart-playlist-form');
+ appendAddButton(form);
}
//sets events dynamically for playlist entries (each row in the playlist)
diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js
index ced19c661..3bed8f86c 100644
--- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js
+++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js
@@ -1,10 +1,12 @@
$(document).ready(function() {
setSmartPlaylistEvents();
+ var form = $('#smart-playlist-form');
+ appendAddButton(form);
});
function setSmartPlaylistEvents() {
var form = $('#smart-playlist-form');
-
+
form.find('a[id="criteria_add"]').live("click", function(){
var div = $('dd[id="sp_criteria-element"]').children('div:visible:last').next(),
add_button = $(this);
@@ -26,6 +28,7 @@ function setSmartPlaylistEvents() {
var count = list_length - curr_pos;
var next = curr.next();
var add_button = form.find('a[id="criteria_add"]');
+ var item_to_hide;
//remove error message from current row, if any
var error_element = curr.find('span[class="errors sp-errors"]');
@@ -60,9 +63,6 @@ function setSmartPlaylistEvents() {
var criteria_extra = next.find('[name^="sp_criteria_extra"]').val();
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
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
@@ -70,8 +70,6 @@ function setSmartPlaylistEvents() {
} 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
@@ -80,10 +78,6 @@ function setSmartPlaylistEvents() {
} 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($('')
- .attr('id', 'sp_criteria_extra_'+index_num)
- .attr('name', 'sp_criteria_extra_'+index_num)).after('');*/
curr.find('[name^="sp_criteria_extra"]').val(criteria_extra);
}
@@ -91,27 +85,27 @@ function setSmartPlaylistEvents() {
next = curr.next();
}
- list.find('div:visible:last').children().attr('disabled', 'disabled');
- list.find('div:visible:last')
- .find('[name^="sp_criteria"]').val(0).end()
- .find('[name^="sp_criteria_modifier"]').val(0).end()
- .find('[name^="sp_criteria_value"]').val('');
+ /* Disable the last visible row since it holds the values the user removed
+ * Reset the values to empty and resize the criteria value textbox
+ * in case the row had the extra criteria textbox
+ */
+ item_to_hide = list.find('div:visible:last');
+ item_to_hide.children().attr('disabled', 'disabled');
+ item_to_hide.find('[name^="sp_criteria_field"]').val(0).end()
+ .find('[name^="sp_criteria_modifier"]').val(0).end()
+ .find('[name^="sp_criteria_value"]').val('');
- if (list.find('div:visible:last').children().hasClass('criteria_add')) {
- list.find('div:visible:last').find('.criteria_add').remove();
+ if (item_to_hide.children().hasClass('criteria_add')) {
+ item_to_hide.find('.criteria_add').remove();
}
- list.find('div:visible:last').hide();
+
+ sizeTextBoxes(item_to_hide.find('[name^="sp_criteria_value"]'), 'sp_extra_input_text', 'sp_input_text');
+ item_to_hide.hide();
list.next().show();
// always put 'add' button on the last row
- if (list.find('div:visible').length > 1) {
- list.find('div:visible:last').find('a[id^="criteria_remove"]')
- .after("Add");
- } else {
- list.find('div:visible:last').find('[name^="sp_criteria_value"]')
- .after("Add");
- }
+ appendAddButton(list);
});
form.find('button[id="save_button"]').live("click", function(event){
@@ -148,12 +142,8 @@ function setSmartPlaylistEvents() {
var index_name = $(this).attr('id'),
index_num = index_name.charAt(index_name.length-1);
- // disalbe extra field and hide the span
+ // disable 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);
});
@@ -164,16 +154,8 @@ function setSmartPlaylistEvents() {
if ($(this).val() == 'is in the range') {
enableAndShowExtraField(criteria_value, index_num);
- /*after($('')
- .attr('id', 'sp_criteria_extra_'+index_num)
- .attr('name', 'sp_criteria_extra_'+index_num)).after('');*/
-
} else {
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();
- }*/
}
});
@@ -183,12 +165,26 @@ function enableAndShowExtraField(valEle, index) {
var spanExtra = valEle.nextAll("#extra_criteria");
spanExtra.children('#sp_criteria_extra_'+index).removeAttr("disabled");
spanExtra.show();
+
+ //make value input smaller since we have extra element now
+ var criteria_val = $('#sp_criteria_value_'+index);
+ sizeTextBoxes(criteria_val, 'sp_input_text', 'sp_extra_input_text');
}
function disableAndHideExtraField(valEle, index) {
var spanExtra = valEle.nextAll("#extra_criteria");
spanExtra.children('#sp_criteria_extra_'+index).val("").attr("disabled", "disabled");
spanExtra.hide();
+
+ //make value input larger because we don't have extra field now
+ var criteria_value = $('#sp_criteria_value_'+index);
+ sizeTextBoxes(criteria_value, 'sp_extra_input_text', 'sp_input_text');
+}
+
+function sizeTextBoxes(ele, classToRemove, classToAdd) {
+ if (ele.hasClass(classToRemove)) {
+ ele.removeClass(classToRemove).addClass(classToAdd);
+ }
}
function populateModifierSelect(e) {
@@ -239,6 +235,20 @@ function dynamicCallback(json) {
}
}
+function appendAddButton(rows) {
+ var add_button = "Add";
+
+ if (rows.find('select[name^="sp_criteria_field"]:enabled').length > 1) {
+ rows.find('select[name^="sp_criteria_field"]:enabled:last')
+ .siblings('a[id^="criteria_remove"]')
+ .after(add_button);
+ } else {
+ rows.find('select[name^="sp_criteria_field"]:enabled')
+ .siblings('[name^="sp_criteria_value"]')
+ .after(add_button);
+ }
+}
+
var criteriaTypes = {
0 : "",
"album_title" : "s",