feat(legacy): add filename block criteria (#3015)
### Description Adds filename block criteria because sometimes you just need the filename and the ID3 tags won't do. Closes #3014
This commit is contained in:
parent
7f3f318601
commit
4642b6c08e
|
@ -73,7 +73,7 @@
|
|||
"js/airtime/nowplaying/register.js": "7d1e5d38eee510c22e408077155ab672",
|
||||
"js/airtime/player/player.js": "76a78bfc1bac0c5479916d9d4641a5b1",
|
||||
"js/airtime/player/playerhtml5.js": "058b061891abf4b3ee827c8e83996611",
|
||||
"js/airtime/playlist/smart_blockbuilder.js": "36337e7e025d89976d754e34fc914887",
|
||||
"js/airtime/playlist/smart_blockbuilder.js": "9e6bbad77150a589a6efd3b7da80a03b",
|
||||
"js/airtime/playouthistory/configuretemplate.js": "44386f366d2baca3039f8c4cb9cd4422",
|
||||
"js/airtime/playouthistory/historytable.js": "7e84ee76011ecf8f21abdd483487a45e",
|
||||
"js/airtime/playouthistory/template.js": "742af1a411aef1745fa2ad3082499452",
|
||||
|
|
|
@ -2,149 +2,11 @@
|
|||
|
||||
class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||
{
|
||||
private $criteriaOptions;
|
||||
private $stringCriteriaOptions;
|
||||
private $numericCriteriaOptions;
|
||||
private $dateTimeCriteriaOptions;
|
||||
private $timePeriodCriteriaOptions;
|
||||
private $sortOptions;
|
||||
private $limitOptions;
|
||||
private $isOrNotCriteriaOptions;
|
||||
private $trackTypeOptions;
|
||||
|
||||
/* We need to know if the criteria value will be a string
|
||||
* or numeric value in order to populate the modifier
|
||||
* select list
|
||||
*/
|
||||
private $criteriaTypes = [
|
||||
0 => '',
|
||||
'album_title' => 's',
|
||||
'bit_rate' => 'n',
|
||||
'bpm' => 'n',
|
||||
'composer' => 's',
|
||||
'conductor' => 's',
|
||||
'copyright' => 's',
|
||||
'cuein' => 'n',
|
||||
'cueout' => 'n',
|
||||
'description' => 's',
|
||||
'artist_name' => 's',
|
||||
'encoded_by' => 's',
|
||||
'utime' => 'd',
|
||||
'mtime' => 'd',
|
||||
'lptime' => 'd',
|
||||
'genre' => 's',
|
||||
'isrc_number' => 's',
|
||||
'label' => 's',
|
||||
'language' => 's',
|
||||
'length' => 'n',
|
||||
'mime' => 's',
|
||||
'mood' => 's',
|
||||
'owner_id' => 's',
|
||||
'replay_gain' => 'n',
|
||||
'sample_rate' => 'n',
|
||||
'track_title' => 's',
|
||||
'track_number' => 'n',
|
||||
'info_url' => 's',
|
||||
'year' => 'n',
|
||||
'track_type_id' => 'tt',
|
||||
];
|
||||
|
||||
private function getCriteriaOptions($option = null)
|
||||
{
|
||||
if (!isset($this->criteriaOptions)) {
|
||||
$this->criteriaOptions = [
|
||||
0 => _('Select criteria'),
|
||||
'album_title' => _('Album'),
|
||||
'bit_rate' => _('Bit Rate (Kbps)'),
|
||||
'bpm' => _('BPM'),
|
||||
'composer' => _('Composer'),
|
||||
'conductor' => _('Conductor'),
|
||||
'copyright' => _('Copyright'),
|
||||
'cuein' => _('Cue In'),
|
||||
'cueout' => _('Cue Out'),
|
||||
'description' => _('Description'),
|
||||
'artist_name' => _('Creator'),
|
||||
'encoded_by' => _('Encoded By'),
|
||||
'genre' => _('Genre'),
|
||||
'isrc_number' => _('ISRC'),
|
||||
'label' => _('Label'),
|
||||
'language' => _('Language'),
|
||||
'mtime' => _('Last Modified'),
|
||||
'lptime' => _('Last Played'),
|
||||
'length' => _('Length'),
|
||||
'track_type_id' => _('Track Type'),
|
||||
'mime' => _('Mime'),
|
||||
'mood' => _('Mood'),
|
||||
'owner_id' => _('Owner'),
|
||||
'replay_gain' => _('Replay Gain'),
|
||||
'sample_rate' => _('Sample Rate (kHz)'),
|
||||
'track_title' => _('Title'),
|
||||
'track_number' => _('Track Number'),
|
||||
'utime' => _('Uploaded'),
|
||||
'info_url' => _('Website'),
|
||||
'year' => _('Year'),
|
||||
];
|
||||
}
|
||||
|
||||
if (is_null($option)) {
|
||||
return $this->criteriaOptions;
|
||||
}
|
||||
|
||||
return $this->criteriaOptions[$option];
|
||||
}
|
||||
|
||||
private function getStringCriteriaOptions()
|
||||
{
|
||||
if (!isset($this->stringCriteriaOptions)) {
|
||||
$this->stringCriteriaOptions = [
|
||||
'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'),
|
||||
];
|
||||
}
|
||||
|
||||
return $this->stringCriteriaOptions;
|
||||
}
|
||||
|
||||
private function getNumericCriteriaOptions()
|
||||
{
|
||||
if (!isset($this->numericCriteriaOptions)) {
|
||||
$this->numericCriteriaOptions = [
|
||||
'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'),
|
||||
];
|
||||
}
|
||||
|
||||
return $this->numericCriteriaOptions;
|
||||
}
|
||||
|
||||
private function getDateTimeCriteriaOptions()
|
||||
{
|
||||
if (!isset($this->dateTimeCriteriaOptions)) {
|
||||
$this->dateTimeCriteriaOptions = [
|
||||
'0' => _('Select modifier'),
|
||||
'before' => _('before'),
|
||||
'after' => _('after'),
|
||||
'between' => _('between'),
|
||||
'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'),
|
||||
];
|
||||
}
|
||||
|
||||
return $this->dateTimeCriteriaOptions;
|
||||
}
|
||||
|
||||
private function getTimePeriodCriteriaOptions()
|
||||
{
|
||||
if (!isset($this->timePeriodCriteriaOptions)) {
|
||||
|
@ -191,19 +53,6 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
return $this->sortOptions;
|
||||
}
|
||||
|
||||
private function getIsNotOptions()
|
||||
{
|
||||
if (!isset($this->isOrNotCriteriaOptions)) {
|
||||
$this->isOrNotCriteriaOptions = [
|
||||
'0' => _('Select modifier'),
|
||||
'is' => _('is'),
|
||||
'is not' => _('is not'),
|
||||
];
|
||||
}
|
||||
|
||||
return $this->isOrNotCriteriaOptions;
|
||||
}
|
||||
|
||||
private function getTracktypeOptions()
|
||||
{
|
||||
if (!isset($this->trackTypeOptions)) {
|
||||
|
@ -297,7 +146,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
}
|
||||
// the way the everything is currently built it setups 25 smartblock criteria forms and then disables them
|
||||
// but this creates 29 elements
|
||||
$numElements = count($this->getCriteriaOptions());
|
||||
$numElements = count(BlockCriteria::displayCriteria());
|
||||
// loop through once for each potential criteria option ie album, composer, track
|
||||
// criteria from different groups are separated already by the getCriteriaGrouped call
|
||||
|
||||
|
@ -335,7 +184,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
$criteria->setAttrib('class', 'input_select sp_input_select' . $invisible)
|
||||
->setValue('Select criteria')
|
||||
->setDecorators(['viewHelper'])
|
||||
->setMultiOptions($this->getCriteriaOptions());
|
||||
->setMultiOptions(BlockCriteria::displayCriteria());
|
||||
// if this isn't the first criteria and there isn't an entry for it already disable it
|
||||
if ($i != 0 && !isset($criteriaKeys[$i])) {
|
||||
$criteria->setAttrib('disabled', 'disabled');
|
||||
|
@ -344,8 +193,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
// the j loop starts at 0 and grows for each item matching the same criteria
|
||||
// look up the criteria type using the criteriaTypes function from above based upon the criteria value
|
||||
if (isset($criteriaKeys[$i])) {
|
||||
$criteriaType = $this->criteriaTypes[$storedCrit['crit'][$criteriaKeys[$i]][$j]['criteria']];
|
||||
$criteria->setValue($storedCrit['crit'][$criteriaKeys[$i]][$j]['criteria']);
|
||||
$bCriteria = BlockCriteria::get($storedCrit['crit'][$criteriaKeys[$i]][$j]['criteria']);
|
||||
$criteriaType = $bCriteria->type;
|
||||
$criteria->setValue($bCriteria->key);
|
||||
}
|
||||
$this->addElement($criteria);
|
||||
|
||||
|
@ -361,18 +211,10 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
}
|
||||
// determine the modifier based upon criteria type which is looked up based upon an array
|
||||
if (isset($criteriaKeys[$i])) {
|
||||
if ($criteriaType == 's') {
|
||||
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
||||
} elseif ($criteriaType == 'd') {
|
||||
$criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||
} elseif ($criteriaType == 'tt') {
|
||||
$criteriaModifers->setMultiOptions($this->getIsNotOptions());
|
||||
} else {
|
||||
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
||||
}
|
||||
$criteriaModifers->setMultiOptions($bCriteria->displayModifiers());
|
||||
$criteriaModifers->setValue($storedCrit['crit'][$criteriaKeys[$i]][$j]['modifier']);
|
||||
} else {
|
||||
$criteriaModifers->setMultiOptions(['0' => _('Select modifier')]);
|
||||
$criteriaModifers->setMultiOptions(CriteriaModifier::mapToDisplay([]));
|
||||
}
|
||||
$this->addElement($criteriaModifers);
|
||||
|
||||
|
@ -381,7 +223,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
if (isset($criteriaKeys[$i])) {
|
||||
$modifierTest = (string) $storedCrit['crit'][$criteriaKeys[$i]][$j]['modifier'];
|
||||
if (
|
||||
isset($criteriaType) && $criteriaType == 'tt'
|
||||
isset($criteriaType) && $criteriaType == ModifierType::TRACK_TYPE
|
||||
&& preg_match('/is|is not/', $modifierTest) == 1
|
||||
) {
|
||||
$criteriaValue = new Zend_Form_Element_Select('sp_criteria_value_' . $i . '_' . $j);
|
||||
|
@ -412,14 +254,14 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
$relativeDateTime = false;
|
||||
$modifierTest = (string) $storedCrit['crit'][$criteriaKeys[$i]][$j]['modifier'];
|
||||
if (
|
||||
isset($criteriaType) && $criteriaType == 'd'
|
||||
isset($criteriaType) && $criteriaType == ModifierType::DATE
|
||||
&& preg_match('/before|after|between/', $modifierTest) == 1
|
||||
) {
|
||||
// set relativeDatetime boolean to true so that the datetime select is displayed below
|
||||
$relativeDateTime = true;
|
||||
$criteriaValue->setValue(filter_var($storedCrit['crit'][$criteriaKeys[$i]][$j]['value'], FILTER_SANITIZE_NUMBER_INT));
|
||||
} elseif (
|
||||
isset($criteriaType) && $criteriaType == 'tt'
|
||||
isset($criteriaType) && $criteriaType == ModifierType::TRACK_TYPE
|
||||
&& preg_match('/is|is not/', $modifierTest) == 1
|
||||
) {
|
||||
// set relativeDatetime boolean to true so that the datetime select is displayed below
|
||||
|
@ -455,7 +297,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
// check if the value is stored and it is a relative datetime field
|
||||
if (
|
||||
isset($criteriaKeys[$i], $storedCrit['crit'][$criteriaKeys[$i]][$j]['value'], $criteriaType)
|
||||
&& $criteriaType == 'd'
|
||||
&& $criteriaType == ModifierType::DATE
|
||||
&& preg_match('/before|after|between/', $modifierTest) == 1
|
||||
) {
|
||||
// need to remove any leading numbers stored in the database
|
||||
|
@ -478,7 +320,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
->setDecorators(['viewHelper']);
|
||||
if (isset($criteriaKeys[$i], $storedCrit['crit'][$criteriaKeys[$i]][$j]['extra'])) {
|
||||
// need to check if this is a relative date time value
|
||||
if (isset($criteriaType) && $criteriaType == 'd' && $modifierTest == 'between') {
|
||||
if (isset($criteriaType) && $criteriaType == ModifierType::DATE && $modifierTest == 'between') {
|
||||
// the criteria value will be a number followed by time unit and ago so set input to number part
|
||||
$criteriaExtra->setValue(filter_var($storedCrit['crit'][$criteriaKeys[$i]][$j]['extra'], FILTER_SANITIZE_NUMBER_INT));
|
||||
} else {
|
||||
|
@ -610,28 +452,21 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
foreach ($data['criteria'] as $critKey => $d) {
|
||||
$count = 1;
|
||||
foreach ($d as $modKey => $modInfo) {
|
||||
$critMod = $critKey . '_' . $modKey;
|
||||
$blockCriteria = BlockCriteria::get($modInfo['sp_criteria_field']);
|
||||
if ($modKey == 0) {
|
||||
$eleCrit = $this->getElement('sp_criteria_field_' . $critKey . '_' . $modKey);
|
||||
$eleCrit->setValue($this->getCriteriaOptions($modInfo['sp_criteria_field']));
|
||||
$eleCrit = $this->getElement('sp_criteria_field_' . $critMod);
|
||||
$eleCrit->setValue($blockCriteria->display);
|
||||
$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->getStringCriteriaOptions());
|
||||
} elseif ($criteriaType == 'n') {
|
||||
$eleMod->setMultiOptions($this->getNumericCriteriaOptions());
|
||||
} elseif ($criteriaType == 'd') {
|
||||
$eleMod->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||
} elseif ($criteriaType == 'tt') {
|
||||
$eleMod->setMultiOptions($this->getIsNotOptions());
|
||||
} else {
|
||||
$eleMod->setMultiOptions(['0' => _('Select modifier')]);
|
||||
}
|
||||
$eleMod = $this->getElement('sp_criteria_modifier_' . $critMod);
|
||||
|
||||
$eleMod->setMultiOptions($blockCriteria->displayModifiers());
|
||||
|
||||
$eleMod->setValue($modInfo['sp_criteria_modifier']);
|
||||
$eleMod->setAttrib('disabled', null);
|
||||
|
||||
$eleDatetime = $this->getElement('sp_criteria_datetime_select_' . $critKey . '_' . $modKey);
|
||||
$eleDatetime = $this->getElement('sp_criteria_datetime_select_' . $critMod);
|
||||
if ($this->enableDateTimeUnit($eleMod->getValue())) {
|
||||
$eleDatetime->setAttrib('enabled', 'enabled');
|
||||
$eleDatetime->setValue($modInfo['sp_criteria_datetime_select']);
|
||||
|
@ -639,17 +474,17 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
} else {
|
||||
$eleDatetime->setAttrib('disabled', 'disabled');
|
||||
}
|
||||
$eleValue = $this->getElement('sp_criteria_value_' . $critKey . '_' . $modKey);
|
||||
$eleValue = $this->getElement('sp_criteria_value_' . $critMod);
|
||||
$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 = $this->getElement('sp_criteria_extra_' . $critMod);
|
||||
$eleExtra->setValue($modInfo['sp_criteria_extra']);
|
||||
$eleValue->setAttrib('class', 'input_text sp_extra_input_text');
|
||||
$eleExtra->setAttrib('disabled', null);
|
||||
}
|
||||
$eleExtraDatetime = $this->getElement('sp_criteria_extra_datetime_select_' . $critKey . '_' . $modKey);
|
||||
$eleExtraDatetime = $this->getElement('sp_criteria_extra_datetime_select_' . $critMod);
|
||||
if ($eleMod->getValue() == 'between') {
|
||||
$eleExtraDatetime->setAttrib('enabled', 'enabled');
|
||||
$eleExtraDatetime->setValue($modInfo['sp_criteria_extra_datetime_select']);
|
||||
|
@ -658,45 +493,34 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
$eleExtraDatetime->setAttrib('disabled', 'disabled');
|
||||
}
|
||||
} else {
|
||||
$criteria = new Zend_Form_Element_Select('sp_criteria_field_' . $critKey . '_' . $modKey);
|
||||
$criteria = new Zend_Form_Element_Select('sp_criteria_field_' . $critMod);
|
||||
$criteria->setAttrib('class', 'input_select sp_input_select sp-invisible')
|
||||
->setValue('Select criteria')
|
||||
->setDecorators(['viewHelper'])
|
||||
->setMultiOptions($this->getCriteriaOptions());
|
||||
->setMultiOptions(BlockCriteria::displayCriteria());
|
||||
|
||||
$criteriaType = $this->criteriaTypes[$modInfo['sp_criteria_field']];
|
||||
$criteria->setValue($this->getCriteriaOptions($modInfo['sp_criteria_field']));
|
||||
$criteria->setValue($blockCriteria->display);
|
||||
$this->addElement($criteria);
|
||||
|
||||
// MODIFIER
|
||||
$criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_' . $critKey . '_' . $modKey);
|
||||
$criteriaModifers = new Zend_Form_Element_Select('sp_criteria_modifier_' . $critMod);
|
||||
$criteriaModifers->setValue('Select modifier')
|
||||
->setAttrib('class', 'input_select sp_input_select')
|
||||
->setDecorators(['viewHelper']);
|
||||
|
||||
if ($criteriaType == 's') {
|
||||
$criteriaModifers->setMultiOptions($this->getStringCriteriaOptions());
|
||||
} elseif ($criteriaType == 'n') {
|
||||
$criteriaModifers->setMultiOptions($this->getNumericCriteriaOptions());
|
||||
} elseif ($criteriaType == 'd') {
|
||||
$criteriaModifers->setMultiOptions($this->getDateTimeCriteriaOptions());
|
||||
} elseif ($criteriaType == 'tt') {
|
||||
$criteriaModifers->setMultiOptions($this->getIsNotOptions());
|
||||
} else {
|
||||
$criteriaModifers->setMultiOptions(['0' => _('Select modifier')]);
|
||||
}
|
||||
$criteriaModifers->setMultiOptions($blockCriteria->displayModifiers());
|
||||
$criteriaModifers->setValue($modInfo['sp_criteria_modifier']);
|
||||
$this->addElement($criteriaModifers);
|
||||
|
||||
// VALUE
|
||||
$criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_' . $critKey . '_' . $modKey);
|
||||
$criteriaValue = new Zend_Form_Element_Text('sp_criteria_value_' . $critMod);
|
||||
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
|
||||
->setDecorators(['viewHelper']);
|
||||
$criteriaValue->setValue($modInfo['sp_criteria_value']);
|
||||
$this->addElement($criteriaValue);
|
||||
// DATETIME UNIT SELECT
|
||||
|
||||
$criteriaDatetimeSelect = new Zend_Form_Element_Select('sp_criteria_datetime_select_' . $critKey . '_' . $modKey);
|
||||
$criteriaDatetimeSelect = new Zend_Form_Element_Select('sp_criteria_datetime_select_' . $critMod);
|
||||
$criteriaDatetimeSelect->setAttrib('class', 'input_select sp_input_select')
|
||||
->setDecorators(['viewHelper']);
|
||||
if ($this->enableDateTimeUnit($criteriaValue->getValue())) {
|
||||
|
@ -708,7 +532,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
$criteriaDatetimeSelect->setAttrib('disabled', 'disabled');
|
||||
}
|
||||
// EXTRA
|
||||
$criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_' . $critKey . '_' . $modKey);
|
||||
$criteriaExtra = new Zend_Form_Element_Text('sp_criteria_extra_' . $critMod);
|
||||
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
|
||||
->setDecorators(['viewHelper']);
|
||||
if (isset($modInfo['sp_criteria_extra'])) {
|
||||
|
@ -721,7 +545,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
|
||||
// EXTRA DATETIME UNIT SELECT
|
||||
|
||||
$criteriaExtraDatetimeSelect = new Zend_Form_Element_Select('sp_criteria_extra_datetime_select_' . $critKey . '_' . $modKey);
|
||||
$criteriaExtraDatetimeSelect = new Zend_Form_Element_Select('sp_criteria_extra_datetime_select_' . $critMod);
|
||||
$criteriaExtraDatetimeSelect->setAttrib('class', 'input_select sp_input_select')
|
||||
->setDecorators(['viewHelper']);
|
||||
if ($criteriaValue->getValue() == 'between') {
|
||||
|
@ -761,45 +585,13 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
{
|
||||
$isValid = true;
|
||||
$data = $this->preValidation($params);
|
||||
$criteria2PeerMap = [
|
||||
0 => 'Select criteria',
|
||||
'album_title' => 'DbAlbumTitle',
|
||||
'artist_name' => 'DbArtistName',
|
||||
'bit_rate' => 'DbBitRate',
|
||||
'bpm' => 'DbBpm',
|
||||
'composer' => 'DbComposer',
|
||||
'conductor' => 'DbConductor',
|
||||
'copyright' => 'DbCopyright',
|
||||
'cuein' => 'DbCuein',
|
||||
'cueout' => 'DbCueout',
|
||||
'description' => 'DbDescription',
|
||||
'encoded_by' => 'DbEncodedBy',
|
||||
'utime' => 'DbUtime',
|
||||
'mtime' => 'DbMtime',
|
||||
'lptime' => 'DbLPtime',
|
||||
'genre' => 'DbGenre',
|
||||
'info_url' => 'DbInfoUrl',
|
||||
'isrc_number' => 'DbIsrcNumber',
|
||||
'label' => 'DbLabel',
|
||||
'language' => 'DbLanguage',
|
||||
'length' => 'DbLength',
|
||||
'mime' => 'DbMime',
|
||||
'mood' => 'DbMood',
|
||||
'owner_id' => 'DbOwnerId',
|
||||
'replay_gain' => 'DbReplayGain',
|
||||
'sample_rate' => 'DbSampleRate',
|
||||
'track_title' => 'DbTrackTitle',
|
||||
'track_number' => 'DbTrackNumber',
|
||||
'year' => 'DbYear',
|
||||
'track_type_id' => 'DbTrackTypeId',
|
||||
];
|
||||
$allCriteria = BlockCriteria::criteriaMap();
|
||||
|
||||
// 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
|
||||
// 3. validate formate according to DB column type
|
||||
$multiplier = 1;
|
||||
$result = 0;
|
||||
|
||||
// validation start
|
||||
if ($data['etc']['sp_limit_options'] == 'hours') {
|
||||
|
@ -840,7 +632,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
$element->addError(_('You must select Criteria and Modifier'));
|
||||
$isValid = false;
|
||||
} else {
|
||||
$column = CcFilesPeer::getTableMap()->getColumnByPhpName($criteria2PeerMap[$d['sp_criteria_field']]);
|
||||
$column = CcFilesPeer::getTableMap()->getColumnByPhpName($allCriteria[$d['sp_criteria_field']]->peer);
|
||||
// validation on type of column
|
||||
if (in_array($d['sp_criteria_field'], ['length', 'cuein', 'cueout'])) {
|
||||
if (!preg_match('/^(\d{2}):(\d{2}):(\d{2})/', $d['sp_criteria_value'])) {
|
||||
|
|
|
@ -41,51 +41,18 @@ class Application_Model_Block implements Application_Model_LibraryEditable
|
|||
];
|
||||
|
||||
private static $modifier2CriteriaMap = [
|
||||
'contains' => Criteria::ILIKE,
|
||||
'does not contain' => Criteria::NOT_ILIKE,
|
||||
'is' => Criteria::EQUAL,
|
||||
'is not' => Criteria::NOT_EQUAL,
|
||||
'starts with' => Criteria::ILIKE,
|
||||
'ends with' => Criteria::ILIKE,
|
||||
'is greater than' => Criteria::GREATER_THAN,
|
||||
'is less than' => Criteria::LESS_THAN,
|
||||
'is in the range' => Criteria::CUSTOM,
|
||||
'before' => Criteria::CUSTOM,
|
||||
'after' => Criteria::CUSTOM,
|
||||
'between' => Criteria::CUSTOM,
|
||||
];
|
||||
|
||||
private static $criteria2PeerMap = [
|
||||
0 => 'Select criteria',
|
||||
'album_title' => 'DbAlbumTitle',
|
||||
'artist_name' => 'DbArtistName',
|
||||
'bit_rate' => 'DbBitRate',
|
||||
'bpm' => 'DbBpm',
|
||||
'composer' => 'DbComposer',
|
||||
'conductor' => 'DbConductor',
|
||||
'copyright' => 'DbCopyright',
|
||||
'cuein' => 'DbCuein',
|
||||
'cueout' => 'DbCueout',
|
||||
'description' => 'DbDescription',
|
||||
'encoded_by' => 'DbEncodedBy',
|
||||
'utime' => 'DbUtime',
|
||||
'mtime' => 'DbMtime',
|
||||
'lptime' => 'DbLPtime',
|
||||
'genre' => 'DbGenre',
|
||||
'info_url' => 'DbInfoUrl',
|
||||
'isrc_number' => 'DbIsrcNumber',
|
||||
'label' => 'DbLabel',
|
||||
'language' => 'DbLanguage',
|
||||
'length' => 'DbLength',
|
||||
'mime' => 'DbMime',
|
||||
'mood' => 'DbMood',
|
||||
'owner_id' => 'DbOwnerId',
|
||||
'replay_gain' => 'DbReplayGain',
|
||||
'sample_rate' => 'DbSampleRate',
|
||||
'track_title' => 'DbTrackTitle',
|
||||
'track_number' => 'DbTrackNumber',
|
||||
'year' => 'DbYear',
|
||||
'track_type_id' => 'DbTrackTypeId',
|
||||
CriteriaModifier::CONTAINS => Criteria::ILIKE,
|
||||
CriteriaModifier::DOES_NOT_CONTAIN => Criteria::NOT_ILIKE,
|
||||
CriteriaModifier::IS => Criteria::EQUAL,
|
||||
CriteriaModifier::IS_NOT => Criteria::NOT_EQUAL,
|
||||
CriteriaModifier::STARTS_WITH => Criteria::ILIKE,
|
||||
CriteriaModifier::ENDS_WITH => Criteria::ILIKE,
|
||||
CriteriaModifier::IS_GREATER_THAN => Criteria::GREATER_THAN,
|
||||
CriteriaModifier::IS_LESS_THAN => Criteria::LESS_THAN,
|
||||
CriteriaModifier::IS_IN_THE_RANGE => Criteria::CUSTOM,
|
||||
CriteriaModifier::BEFORE => Criteria::CUSTOM,
|
||||
CriteriaModifier::AFTER => Criteria::CUSTOM,
|
||||
CriteriaModifier::BETWEEN => Criteria::CUSTOM,
|
||||
];
|
||||
|
||||
public function __construct($id = null, $con = null)
|
||||
|
@ -1424,57 +1391,8 @@ SQL;
|
|||
*/
|
||||
public function getCriteria()
|
||||
{
|
||||
$criteriaOptions = [
|
||||
0 => _('Select criteria'),
|
||||
'album_title' => _('Album'),
|
||||
'bit_rate' => _('Bit Rate (Kbps)'),
|
||||
'bpm' => _('BPM'),
|
||||
'composer' => _('Composer'),
|
||||
'conductor' => _('Conductor'),
|
||||
'copyright' => _('Copyright'),
|
||||
'cuein' => _('Cue In'),
|
||||
'cueout' => _('Cue Out'),
|
||||
'description' => _('Description'),
|
||||
'artist_name' => _('Creator'),
|
||||
'encoded_by' => _('Encoded By'),
|
||||
'genre' => _('Genre'),
|
||||
'isrc_number' => _('ISRC'),
|
||||
'label' => _('Label'),
|
||||
'language' => _('Language'),
|
||||
'utime' => _('Upload Time'),
|
||||
'mtime' => _('Last Modified'),
|
||||
'lptime' => _('Last Played'),
|
||||
'length' => _('Length'),
|
||||
'track_type_id' => _('Track Type'),
|
||||
'mime' => _('Mime'),
|
||||
'mood' => _('Mood'),
|
||||
'owner_id' => _('Owner'),
|
||||
'replay_gain' => _('Replay Gain'),
|
||||
'sample_rate' => _('Sample Rate (kHz)'),
|
||||
'track_title' => _('Title'),
|
||||
'track_number' => _('Track Number'),
|
||||
'utime' => _('Uploaded'),
|
||||
'info_url' => _('Website'),
|
||||
'year' => _('Year'),
|
||||
];
|
||||
|
||||
$modifierOptions = [
|
||||
'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'),
|
||||
'before' => _('before'),
|
||||
'after' => _('after'),
|
||||
'between' => _('between'),
|
||||
'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'),
|
||||
];
|
||||
$allCriteria = BlockCriteria::criteriaMap();
|
||||
$allOptions = CriteriaModifier::mapToDisplay();
|
||||
|
||||
// Load criteria from db
|
||||
$out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($this->id);
|
||||
|
@ -1500,14 +1418,15 @@ SQL;
|
|||
} elseif ($criteria == 'sort') {
|
||||
$storedCrit['sort'] = ['value' => $value];
|
||||
} else {
|
||||
$c = $allCriteria[$criteria];
|
||||
$storedCrit['crit'][$criteria][] = [
|
||||
'criteria' => $criteria,
|
||||
'value' => $value,
|
||||
'modifier' => $modifier,
|
||||
'extra' => $extra,
|
||||
'criteria_group' => $criteriagroup,
|
||||
'display_name' => $criteriaOptions[$criteria],
|
||||
'display_modifier' => $modifierOptions[$modifier],
|
||||
'display_name' => $c->display,
|
||||
'display_modifier' => $allOptions[$modifier],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -1522,57 +1441,8 @@ SQL;
|
|||
*/
|
||||
public function getCriteriaGrouped()
|
||||
{
|
||||
$criteriaOptions = [
|
||||
0 => _('Select criteria'),
|
||||
'album_title' => _('Album'),
|
||||
'bit_rate' => _('Bit Rate (Kbps)'),
|
||||
'bpm' => _('BPM'),
|
||||
'composer' => _('Composer'),
|
||||
'conductor' => _('Conductor'),
|
||||
'copyright' => _('Copyright'),
|
||||
'cuein' => _('Cue In'),
|
||||
'cueout' => _('Cue Out'),
|
||||
'description' => _('Description'),
|
||||
'artist_name' => _('Creator'),
|
||||
'encoded_by' => _('Encoded By'),
|
||||
'genre' => _('Genre'),
|
||||
'isrc_number' => _('ISRC'),
|
||||
'label' => _('Label'),
|
||||
'language' => _('Language'),
|
||||
'utime' => _('Upload Time'),
|
||||
'mtime' => _('Last Modified'),
|
||||
'lptime' => _('Last Played'),
|
||||
'length' => _('Length'),
|
||||
'track_type_id' => _('Track Type'),
|
||||
'mime' => _('Mime'),
|
||||
'mood' => _('Mood'),
|
||||
'owner_id' => _('Owner'),
|
||||
'replay_gain' => _('Replay Gain'),
|
||||
'sample_rate' => _('Sample Rate (kHz)'),
|
||||
'track_title' => _('Title'),
|
||||
'track_number' => _('Track Number'),
|
||||
'utime' => _('Uploaded'),
|
||||
'info_url' => _('Website'),
|
||||
'year' => _('Year'),
|
||||
];
|
||||
|
||||
$modifierOptions = [
|
||||
'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'),
|
||||
'before' => _('before'),
|
||||
'after' => _('after'),
|
||||
'between' => _('between'),
|
||||
'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'),
|
||||
];
|
||||
$criteriaOptions = BlockCriteria::displayCriteria();
|
||||
$modifierOptions = CriteriaModifier::mapToDisplay();
|
||||
|
||||
// Load criteria from db
|
||||
$out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($this->id);
|
||||
|
@ -1633,6 +1503,8 @@ SQL;
|
|||
$qry = CcFilesQuery::create();
|
||||
$qry->useFkOwnerQuery('subj', 'left join');
|
||||
|
||||
$allCriteria = BlockCriteria::criteriaMap();
|
||||
|
||||
// Logging::info($storedCrit);
|
||||
if (isset($storedCrit['crit'])) {
|
||||
foreach ($storedCrit['crit'] as $crit) {
|
||||
|
@ -1649,7 +1521,7 @@ SQL;
|
|||
$spCriteria = $criteria['criteria'];
|
||||
$spCriteriaModifier = $criteria['modifier'];
|
||||
|
||||
$column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$spCriteria]);
|
||||
$column = CcFilesPeer::getTableMap()->getColumnByPhpName($allCriteria[$spCriteria]->peer);
|
||||
|
||||
// data should already be in UTC, do we have to do anything special here anymore?
|
||||
if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
|
||||
|
|
|
@ -0,0 +1,210 @@
|
|||
<?php
|
||||
|
||||
class ModifierType
|
||||
{
|
||||
public const STRING = 's';
|
||||
public const NUMBER = 'n';
|
||||
public const DATE = 'd';
|
||||
public const TRACK_TYPE = 'tt';
|
||||
}
|
||||
|
||||
class CriteriaModifier
|
||||
{
|
||||
public const CONTAINS = 'contains';
|
||||
public const DOES_NOT_CONTAIN = 'does not contain';
|
||||
public const IS = 'is';
|
||||
public const IS_NOT = 'is not';
|
||||
public const STARTS_WITH = 'starts with';
|
||||
public const ENDS_WITH = 'ends with';
|
||||
public const BEFORE = 'before';
|
||||
public const AFTER = 'after';
|
||||
public const BETWEEN = 'between';
|
||||
public const IS_GREATER_THAN = 'is greater than';
|
||||
public const IS_LESS_THAN = 'is less than';
|
||||
public const IS_IN_THE_RANGE = 'is in the range';
|
||||
|
||||
public static function mapToDisplay(array $modifiers = self::ALL): array
|
||||
{
|
||||
$arr = ['0' => _('Select modifier')];
|
||||
|
||||
foreach ($modifiers as $m) {
|
||||
$arr[$m] = _($m);
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public const ALL = [
|
||||
CriteriaModifier::CONTAINS,
|
||||
CriteriaModifier::DOES_NOT_CONTAIN,
|
||||
CriteriaModifier::IS,
|
||||
CriteriaModifier::IS_NOT,
|
||||
CriteriaModifier::STARTS_WITH,
|
||||
CriteriaModifier::ENDS_WITH,
|
||||
CriteriaModifier::BEFORE,
|
||||
CriteriaModifier::AFTER,
|
||||
CriteriaModifier::BETWEEN,
|
||||
CriteriaModifier::IS_GREATER_THAN,
|
||||
CriteriaModifier::IS_LESS_THAN,
|
||||
CriteriaModifier::IS_IN_THE_RANGE,
|
||||
];
|
||||
|
||||
public const FOR_STRING = [
|
||||
CriteriaModifier::CONTAINS,
|
||||
CriteriaModifier::DOES_NOT_CONTAIN,
|
||||
CriteriaModifier::IS,
|
||||
CriteriaModifier::IS_NOT,
|
||||
CriteriaModifier::STARTS_WITH,
|
||||
CriteriaModifier::ENDS_WITH,
|
||||
];
|
||||
|
||||
public const FOR_NUMBER = [
|
||||
CriteriaModifier::IS,
|
||||
CriteriaModifier::IS_NOT,
|
||||
CriteriaModifier::IS_GREATER_THAN,
|
||||
CriteriaModifier::IS_LESS_THAN,
|
||||
CriteriaModifier::IS_IN_THE_RANGE,
|
||||
];
|
||||
|
||||
public const FOR_DATE = [
|
||||
CriteriaModifier::BEFORE,
|
||||
CriteriaModifier::AFTER,
|
||||
CriteriaModifier::BETWEEN,
|
||||
CriteriaModifier::IS,
|
||||
CriteriaModifier::IS_NOT,
|
||||
CriteriaModifier::IS_GREATER_THAN,
|
||||
CriteriaModifier::IS_LESS_THAN,
|
||||
CriteriaModifier::IS_IN_THE_RANGE,
|
||||
];
|
||||
|
||||
public const FOR_TRACK_TYPE = [
|
||||
CriteriaModifier::IS,
|
||||
CriteriaModifier::IS_NOT,
|
||||
];
|
||||
}
|
||||
|
||||
class BlockCriteria
|
||||
{
|
||||
public string $key;
|
||||
public string $type;
|
||||
public string $peer;
|
||||
public string $display;
|
||||
|
||||
public function __construct(string $key, string $type, string $peer, string $display)
|
||||
{
|
||||
$this->key = $key;
|
||||
$this->type = $type;
|
||||
$this->peer = $peer;
|
||||
$this->display = $display;
|
||||
}
|
||||
|
||||
public function getModifiers(): array
|
||||
{
|
||||
$modifiers = [];
|
||||
|
||||
switch ($this->type) {
|
||||
case ModifierType::STRING:
|
||||
$modifiers = CriteriaModifier::FOR_STRING;
|
||||
|
||||
break;
|
||||
|
||||
case ModifierType::DATE:
|
||||
$modifiers = CriteriaModifier::FOR_DATE;
|
||||
|
||||
break;
|
||||
|
||||
case ModifierType::NUMBER:
|
||||
$modifiers = CriteriaModifier::FOR_NUMBER;
|
||||
|
||||
break;
|
||||
|
||||
case ModifierType::TRACK_TYPE:
|
||||
$modifiers = CriteriaModifier::FOR_TRACK_TYPE;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return $modifiers;
|
||||
}
|
||||
|
||||
public function displayModifiers(): array
|
||||
{
|
||||
return CriteriaModifier::mapToDisplay(self::getModifiers());
|
||||
}
|
||||
|
||||
private static array $allCriteria;
|
||||
|
||||
/**
|
||||
* After adding a new criteria don't forget to also add it into smart_blockbuilder.js.
|
||||
*
|
||||
* @return BlockCriteria[]
|
||||
*/
|
||||
public static function allCriteria(): array
|
||||
{
|
||||
if (!isset(BlockCriteria::$allCriteria)) {
|
||||
BlockCriteria::$allCriteria = [
|
||||
new BlockCriteria('album_title', ModifierType::STRING, 'DbAlbumTitle', _('Album')),
|
||||
new BlockCriteria('artist_name', ModifierType::STRING, 'DbArtistName', _('Creator')),
|
||||
new BlockCriteria('bit_rate', ModifierType::NUMBER, 'DbBitRate', _('Bit Rate (Kbps)')),
|
||||
new BlockCriteria('bpm', ModifierType::NUMBER, 'DbBpm', _('BPM')),
|
||||
new BlockCriteria('composer', ModifierType::STRING, 'DbComposer', _('Composer')),
|
||||
new BlockCriteria('conductor', ModifierType::STRING, 'DbConductor', _('Conductor')),
|
||||
new BlockCriteria('copyright', ModifierType::STRING, 'DbCopyright', _('Copyright')),
|
||||
new BlockCriteria('cuein', ModifierType::NUMBER, 'DbCuein', _('Cue In')),
|
||||
new BlockCriteria('cueout', ModifierType::NUMBER, 'DbCueout', _('Cue Out')),
|
||||
new BlockCriteria('description', ModifierType::STRING, 'DbDescription', _('Description')),
|
||||
new BlockCriteria('encoded_by', ModifierType::STRING, 'DbEncodedBy', _('Encoded By')),
|
||||
new BlockCriteria('utime', ModifierType::DATE, 'DbUtime', _('Uploaded')),
|
||||
new BlockCriteria('mtime', ModifierType::DATE, 'DbMtime', _('Last Modified')),
|
||||
new BlockCriteria('lptime', ModifierType::DATE, 'DbLPtime', _('Last Played')),
|
||||
new BlockCriteria('genre', ModifierType::STRING, 'DbGenre', _('Genre')),
|
||||
new BlockCriteria('info_url', ModifierType::STRING, 'DbInfoUrl', _('Website')),
|
||||
new BlockCriteria('isrc_number', ModifierType::STRING, 'DbIsrcNumber', _('ISRC')),
|
||||
new BlockCriteria('label', ModifierType::STRING, 'DbLabel', _('Label')),
|
||||
new BlockCriteria('language', ModifierType::STRING, 'DbLanguage', _('Language')),
|
||||
new BlockCriteria('length', ModifierType::NUMBER, 'DbLength', _('Length')),
|
||||
new BlockCriteria('mime', ModifierType::STRING, 'DbMime', _('Mime')),
|
||||
new BlockCriteria('mood', ModifierType::STRING, 'DbMood', _('Mood')),
|
||||
new BlockCriteria('owner_id', ModifierType::STRING, 'DbOwnerId', _('Owner')),
|
||||
new BlockCriteria('replay_gain', ModifierType::NUMBER, 'DbReplayGain', _('Replay Gain')),
|
||||
new BlockCriteria('sample_rate', ModifierType::NUMBER, 'DbSampleRate', _('Sample Rate (kHz)')),
|
||||
new BlockCriteria('track_title', ModifierType::STRING, 'DbTrackTitle', _('Title')),
|
||||
new BlockCriteria('track_number', ModifierType::NUMBER, 'DbTrackNumber', _('Track Number')),
|
||||
new BlockCriteria('year', ModifierType::NUMBER, 'DbYear', _('Year')),
|
||||
new BlockCriteria('track_type_id', ModifierType::TRACK_TYPE, 'DbTrackTypeId', _('Track Type')),
|
||||
new BlockCriteria('filepath', ModifierType::STRING, 'DbFilepath', _('File Name')),
|
||||
];
|
||||
}
|
||||
|
||||
return BlockCriteria::$allCriteria;
|
||||
}
|
||||
|
||||
public static function displayCriteria(): array
|
||||
{
|
||||
$arr = [0 => _('Select criteria')];
|
||||
|
||||
foreach (self::allCriteria() as $c) {
|
||||
$arr[$c->key] = $c->display;
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BlockCriteria[]
|
||||
*/
|
||||
public static function criteriaMap(): array
|
||||
{
|
||||
$arr = [];
|
||||
foreach (self::allCriteria() as $i) {
|
||||
$arr[$i->key] = $i;
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public static function get(string $key): BlockCriteria
|
||||
{
|
||||
return self::criteriaMap()[$key];
|
||||
}
|
||||
}
|
|
@ -1102,6 +1102,7 @@ var criteriaTypes = {
|
|||
info_url: "s",
|
||||
year: "n",
|
||||
track_type_id: "tt",
|
||||
filepath: "s",
|
||||
};
|
||||
|
||||
var stringCriteriaOptions = {
|
||||
|
|
Loading…
Reference in New Issue