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/models/Block.php b/airtime_mvc/application/models/Block.php
index 617f53265..640389bbe 100644
--- a/airtime_mvc/application/models/Block.php
+++ b/airtime_mvc/application/models/Block.php
@@ -1148,7 +1148,7 @@ EOT;
// e.g 192kps is stored as 192000
$spCriteriaValue = $criteria['value']*1000;
} else {
- $spCriteriaValue = $criteria['value'];
+ $spCriteriaValue = addslashes($criteria['value']);
}
if ($spCriteriaModifier == "starts with") {
@@ -1158,8 +1158,9 @@ EOT;
} else if ($spCriteriaModifier == "contains" || $spCriteriaModifier == "does not contain") {
$spCriteriaValue = "%$spCriteriaValue%";
} else if ($spCriteriaModifier == "is in the range") {
- $spCriteriaValue = "$spCriteria > '$spCriteriaValue' AND $spCriteria < '$criteria[extra]'";
+ $spCriteriaValue = "$spCriteria > '$spCriteriaValue' AND $spCriteria <= '$criteria[extra]'";
}
+
$spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier];
try{
if ($i > 0) {
diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php
index 144cfef73..d0194b54c 100644
--- a/airtime_mvc/application/models/StoredFile.php
+++ b/airtime_mvc/application/models/StoredFile.php
@@ -634,7 +634,7 @@ class Application_Model_StoredFile
$streamSelect[] = "EXTRACT(YEAR FROM utime)::varchar AS ".$key;
}
//need to cast certain data as ints for the union to search on.
- else if (in_array($key, array("track_number", "bit_rate", "sample_rate"))) {
+ else if (in_array($key, array("track_number", "bit_rate", "sample_rate", "bpm"))) {
$plSelect[] = "NULL::int AS ".$key;
$blSelect[] = "NULL::int AS ".$key;
$fileSelect[] = $key;
diff --git a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
index 99d2ab18d..0f0707722 100644
--- a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
+++ b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php
@@ -64,7 +64,7 @@ class CcFilesTableMap extends TableMap {
$this->addColumn('TRACK_NUMBER', 'DbTrackNumber', 'INTEGER', false, null, null);
$this->addColumn('CHANNELS', 'DbChannels', 'INTEGER', false, null, null);
$this->addColumn('URL', 'DbUrl', 'VARCHAR', false, 1024, null);
- $this->addColumn('BPM', 'DbBpm', 'VARCHAR', false, 8, null);
+ $this->addColumn('BPM', 'DbBpm', 'INTEGER', false, null, null);
$this->addColumn('RATING', 'DbRating', 'VARCHAR', false, 8, null);
$this->addColumn('ENCODED_BY', 'DbEncodedBy', 'VARCHAR', false, 255, null);
$this->addColumn('DISC_NUMBER', 'DbDiscNumber', 'VARCHAR', false, 8, null);
diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
index 57228452f..3b8daf54f 100644
--- a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
+++ b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php
@@ -189,7 +189,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent
/**
* The value for the bpm field.
- * @var string
+ * @var int
*/
protected $bpm;
@@ -814,7 +814,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent
/**
* Get the [bpm] column value.
*
- * @return string
+ * @return int
*/
public function getDbBpm()
{
@@ -1822,13 +1822,13 @@ abstract class BaseCcFiles extends BaseObject implements Persistent
/**
* Set the value of [bpm] column.
*
- * @param string $v new value
+ * @param int $v new value
* @return CcFiles The current object (for fluent API support)
*/
public function setDbBpm($v)
{
if ($v !== null) {
- $v = (string) $v;
+ $v = (int) $v;
}
if ($this->bpm !== $v) {
@@ -2678,7 +2678,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent
$this->track_number = ($row[$startcol + 23] !== null) ? (int) $row[$startcol + 23] : null;
$this->channels = ($row[$startcol + 24] !== null) ? (int) $row[$startcol + 24] : null;
$this->url = ($row[$startcol + 25] !== null) ? (string) $row[$startcol + 25] : null;
- $this->bpm = ($row[$startcol + 26] !== null) ? (string) $row[$startcol + 26] : null;
+ $this->bpm = ($row[$startcol + 26] !== null) ? (int) $row[$startcol + 26] : null;
$this->rating = ($row[$startcol + 27] !== null) ? (string) $row[$startcol + 27] : null;
$this->encoded_by = ($row[$startcol + 28] !== null) ? (string) $row[$startcol + 28] : null;
$this->disc_number = ($row[$startcol + 29] !== null) ? (string) $row[$startcol + 29] : null;
diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php
index 42d2f42f2..1dce43d8d 100644
--- a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php
+++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php
@@ -191,7 +191,7 @@
* @method CcFiles findOneByDbTrackNumber(int $track_number) Return the first CcFiles filtered by the track_number column
* @method CcFiles findOneByDbChannels(int $channels) Return the first CcFiles filtered by the channels column
* @method CcFiles findOneByDbUrl(string $url) Return the first CcFiles filtered by the url column
- * @method CcFiles findOneByDbBpm(string $bpm) Return the first CcFiles filtered by the bpm column
+ * @method CcFiles findOneByDbBpm(int $bpm) Return the first CcFiles filtered by the bpm column
* @method CcFiles findOneByDbRating(string $rating) Return the first CcFiles filtered by the rating column
* @method CcFiles findOneByDbEncodedBy(string $encoded_by) Return the first CcFiles filtered by the encoded_by column
* @method CcFiles findOneByDbDiscNumber(string $disc_number) Return the first CcFiles filtered by the disc_number column
@@ -255,7 +255,7 @@
* @method array findByDbTrackNumber(int $track_number) Return CcFiles objects filtered by the track_number column
* @method array findByDbChannels(int $channels) Return CcFiles objects filtered by the channels column
* @method array findByDbUrl(string $url) Return CcFiles objects filtered by the url column
- * @method array findByDbBpm(string $bpm) Return CcFiles objects filtered by the bpm column
+ * @method array findByDbBpm(int $bpm) Return CcFiles objects filtered by the bpm column
* @method array findByDbRating(string $rating) Return CcFiles objects filtered by the rating column
* @method array findByDbEncodedBy(string $encoded_by) Return CcFiles objects filtered by the encoded_by column
* @method array findByDbDiscNumber(string $disc_number) Return CcFiles objects filtered by the disc_number column
@@ -1061,20 +1061,29 @@ abstract class BaseCcFilesQuery extends ModelCriteria
/**
* Filter the query on the bpm column
*
- * @param string $dbBpm The value to use as filter.
- * Accepts wildcards (* and % trigger a LIKE)
+ * @param int|array $dbBpm The value to use as filter.
+ * Accepts an associative array('min' => $minValue, 'max' => $maxValue)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return CcFilesQuery The current query, for fluid interface
*/
public function filterByDbBpm($dbBpm = null, $comparison = null)
{
- if (null === $comparison) {
- if (is_array($dbBpm)) {
+ if (is_array($dbBpm)) {
+ $useMinMax = false;
+ if (isset($dbBpm['min'])) {
+ $this->addUsingAlias(CcFilesPeer::BPM, $dbBpm['min'], Criteria::GREATER_EQUAL);
+ $useMinMax = true;
+ }
+ if (isset($dbBpm['max'])) {
+ $this->addUsingAlias(CcFilesPeer::BPM, $dbBpm['max'], Criteria::LESS_EQUAL);
+ $useMinMax = true;
+ }
+ if ($useMinMax) {
+ return $this;
+ }
+ if (null === $comparison) {
$comparison = Criteria::IN;
- } elseif (preg_match('/[\%\*]/', $dbBpm)) {
- $dbBpm = str_replace('*', '%', $dbBpm);
- $comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(CcFilesPeer::BPM, $dbBpm, $comparison);
diff --git a/airtime_mvc/application/models/formatters/BitrateFormatter.php b/airtime_mvc/application/models/formatters/BitrateFormatter.php
index 00828a672..db64a4048 100644
--- a/airtime_mvc/application/models/formatters/BitrateFormatter.php
+++ b/airtime_mvc/application/models/formatters/BitrateFormatter.php
@@ -19,6 +19,10 @@ class BitrateFormatter {
{
$Kbps = bcdiv($this->_bitrate, 1000, 0);
- return "{$Kbps} Kbps";
+ if($Kbps == 0) {
+ return "";
+ } else {
+ return "{$Kbps} Kbps";
+ }
}
-}
\ No newline at end of file
+}
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): ?>
+
+
+
+
+