mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-03 17:59:21 +02:00
Fix advanced search with jQuery and fix #34
This commit is contained in:
parent
deb8155b54
commit
24f8cf36c6
4 changed files with 65 additions and 47 deletions
|
@ -272,6 +272,15 @@ class Search extends playlist_object
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Config::get('show_played_times')) {
|
||||||
|
$this->types[] = array(
|
||||||
|
'name' => 'played_times',
|
||||||
|
'label' => T_('# Played'),
|
||||||
|
'type' => 'numeric',
|
||||||
|
'widget' => array('input', 'text')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$this->types[] = array(
|
$this->types[] = array(
|
||||||
'name' => 'bitrate',
|
'name' => 'bitrate',
|
||||||
|
@ -987,6 +996,11 @@ class Search extends playlist_object
|
||||||
case 'rating':
|
case 'rating':
|
||||||
$where[] = "COALESCE(`rating`.`rating`,0) $sql_match_operator '$input'";
|
$where[] = "COALESCE(`rating`.`rating`,0) $sql_match_operator '$input'";
|
||||||
$join['rating'] = true;
|
$join['rating'] = true;
|
||||||
|
case 'played_times':
|
||||||
|
$where[] = "`song`.`id` IN (SELECT `object_count`.`object_id` FROM `object_count` " .
|
||||||
|
"WHERE `object_count`.`object_type` = 'song'" .
|
||||||
|
"GROUP BY `object_count`.`object_id` HAVING COUNT(*) $sql_match_operator '$input')";
|
||||||
|
break;
|
||||||
break;
|
break;
|
||||||
case 'catalog':
|
case 'catalog':
|
||||||
$where[] = "`song`.`catalog` $sql_match_operator '$input'";
|
$where[] = "`song`.`catalog` $sql_match_operator '$input'";
|
||||||
|
@ -1019,7 +1033,7 @@ class Search extends playlist_object
|
||||||
} // switch on type
|
} // switch on type
|
||||||
} // foreach over rules
|
} // foreach over rules
|
||||||
|
|
||||||
$where_sql = implode(" $sql_logic_operator ", $where);
|
$where_sql = implode(" $sql_logic_operator ", $where) . $group;
|
||||||
|
|
||||||
// now that we know which things we want to JOIN...
|
// now that we know which things we want to JOIN...
|
||||||
if ($join['artist']) {
|
if ($join['artist']) {
|
||||||
|
|
|
@ -44,8 +44,8 @@ Header('content-type: application/x-javascript');
|
||||||
|
|
||||||
$search = new Search($_REQUEST['type']);
|
$search = new Search($_REQUEST['type']);
|
||||||
|
|
||||||
echo 'var types = $H(\'';
|
echo 'var types = ';
|
||||||
echo arrayToJSON($search->types) . "'.evalJSON());\n";
|
echo arrayToJSON($search->types) . ";\n";
|
||||||
echo 'var basetypes = $H(\'';
|
echo 'var basetypes = ';
|
||||||
echo arrayToJSON($search->basetypes) . "'.evalJSON());\n";
|
echo arrayToJSON($search->basetypes) . ";\n";
|
||||||
echo 'removeIcon = \'<a href="javascript: void(0)">' . UI::get_icon('disable', T_('Remove')) . '</a>\';';
|
echo 'removeIcon = \'<a href="javascript: void(0)">' . UI::get_icon('disable', T_('Remove')) . '</a>\';';
|
||||||
|
|
|
@ -26,10 +26,10 @@ var SearchRow = {
|
||||||
ruleType = 0;
|
ruleType = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
types.each(function(i) {
|
jQuery.each(types, function(i) {
|
||||||
if (i.value.name == ruleType) {
|
if (types[i].name == ruleType) {
|
||||||
ruleType = i.key;
|
ruleType = i;
|
||||||
throw $break;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,15 @@ var SearchRow = {
|
||||||
operator = 0;
|
operator = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$H(basetypes.get(types.get(ruleType).type)).each(function(i) {
|
if (ruleType != null) {
|
||||||
if (i.value.name == operator) {
|
var opts = basetypes[types[ruleType].type];
|
||||||
operator = i.key;
|
jQuery.each(opts, function(i) {
|
||||||
throw $break;
|
if (opts[i].name == operator) {
|
||||||
}
|
operator = i;
|
||||||
});
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var row = document.createElement('tr');
|
var row = document.createElement('tr');
|
||||||
|
@ -57,14 +60,14 @@ var SearchRow = {
|
||||||
cells[2].appendChild(SearchRow.constructInput(ruleType, rowIter, input));
|
cells[2].appendChild(SearchRow.constructInput(ruleType, rowIter, input));
|
||||||
cells[3].innerHTML = removeIcon;
|
cells[3].innerHTML = removeIcon;
|
||||||
|
|
||||||
cells.each(function(i) {
|
jQuery.each(cells, function(i) {
|
||||||
row.appendChild(i);
|
row.appendChild(cells[i]);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('searchtable').appendChild(row);
|
$('#searchtable').append(row);
|
||||||
rowCount++;
|
rowCount++;
|
||||||
|
|
||||||
$(cells[3]).on('click', function(){if(rowCount > 1) { Element.remove(this.parentNode); rowCount--; }});
|
$(cells[3]).on('click', function(){if(rowCount > 1) { this.parentNode.remove(); rowCount--; }});
|
||||||
|
|
||||||
rowIter++;
|
rowIter++;
|
||||||
},
|
},
|
||||||
|
@ -73,31 +76,31 @@ var SearchRow = {
|
||||||
input = '';
|
input = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
widget = $H(types.get(ruleType).widget);
|
widget = types[ruleType].widget;
|
||||||
|
|
||||||
var inputNode = document.createElement(widget.get('0'));
|
var inputNode = document.createElement(widget['0']);
|
||||||
inputNode.id = 'rule_' + ruleNumber + '_input';
|
inputNode.id = 'rule_' + ruleNumber + '_input';
|
||||||
inputNode.name = 'rule_' + ruleNumber + '_input';
|
inputNode.name = 'rule_' + ruleNumber + '_input';
|
||||||
|
|
||||||
switch(widget.get('0')) {
|
switch(widget['0']) {
|
||||||
case 'input':
|
case 'input':
|
||||||
inputNode.setAttribute('type', widget.get('1'));
|
inputNode.setAttribute('type', widget['1']);
|
||||||
inputNode.setAttribute('value', input);
|
inputNode.setAttribute('value', input);
|
||||||
break;
|
break;
|
||||||
case 'select':
|
case 'select':
|
||||||
$H(widget.get('1')).each(function(i) {
|
jQuery.each(widget['1'], function(i) {
|
||||||
var option = document.createElement('option');
|
var option = document.createElement('option');
|
||||||
if ( isNaN(parseInt(i.value)) ) {
|
if ( isNaN(parseInt(widget['1'][i])) ) {
|
||||||
realvalue = i.key;
|
realvalue = i;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
realvalue = parseInt(i.value);
|
realvalue = parseInt(widget['1'][i]);
|
||||||
}
|
}
|
||||||
if ( input == realvalue ) {
|
if ( input == realvalue ) {
|
||||||
option.selected = true;
|
option.selected = true;
|
||||||
}
|
}
|
||||||
option.value = realvalue;
|
option.value = realvalue;
|
||||||
option.innerHTML = i.value;
|
option.innerHTML = widget['1'][i];
|
||||||
inputNode.appendChild(option);
|
inputNode.appendChild(option);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -110,11 +113,11 @@ var SearchRow = {
|
||||||
optionsNode.id = 'rule_' + ruleNumber;
|
optionsNode.id = 'rule_' + ruleNumber;
|
||||||
optionsNode.name = 'rule_' + ruleNumber;
|
optionsNode.name = 'rule_' + ruleNumber;
|
||||||
|
|
||||||
types.each(function(i) {
|
jQuery.each(types, function(i) {
|
||||||
var option = document.createElement('option');
|
var option = document.createElement('option');
|
||||||
option.innerHTML = i.value.label;
|
option.innerHTML = types[i].label;
|
||||||
option.value = i.value.name;
|
option.value = types[i].name;
|
||||||
if ( i.key == ruleType ) {
|
if ( i == ruleType ) {
|
||||||
option.selected = true;
|
option.selected = true;
|
||||||
}
|
}
|
||||||
optionsNode.appendChild(option);
|
optionsNode.appendChild(option);
|
||||||
|
@ -129,14 +132,15 @@ var SearchRow = {
|
||||||
operatorNode.id = 'rule_' + ruleNumber + '_operator';
|
operatorNode.id = 'rule_' + ruleNumber + '_operator';
|
||||||
operatorNode.name = 'rule_' + ruleNumber + '_operator';
|
operatorNode.name = 'rule_' + ruleNumber + '_operator';
|
||||||
|
|
||||||
basetype = types.get(ruleType).type;
|
basetype = types[ruleType].type;
|
||||||
operatorNode.className = 'operator' + basetype;
|
operatorNode.className = 'operator' + basetype;
|
||||||
|
|
||||||
$H(basetypes.get(basetype)).each(function(i) {
|
var opts = basetypes[basetype];
|
||||||
|
jQuery.each(opts, function(i) {
|
||||||
var option = document.createElement('option');
|
var option = document.createElement('option');
|
||||||
option.innerHTML = i.value.description;
|
option.innerHTML = opts[i].description;
|
||||||
option.value = i.key;
|
option.value = i;
|
||||||
if (i.key == operator) {
|
if (i == operator) {
|
||||||
option.selected = true;
|
option.selected = true;
|
||||||
}
|
}
|
||||||
operatorNode.appendChild(option);
|
operatorNode.appendChild(option);
|
||||||
|
@ -148,21 +152,21 @@ var SearchRow = {
|
||||||
var r_findID = /rule_(\d+)/;
|
var r_findID = /rule_(\d+)/;
|
||||||
var targetID = r_findID.exec(this.id)[1];
|
var targetID = r_findID.exec(this.id)[1];
|
||||||
|
|
||||||
var operator = $('rule_' + targetID + '_operator');
|
var operator = $('#rule_' + targetID + '_operator');
|
||||||
if (operator.className != 'operator' + types.get(this.selectedIndex).type) {
|
if (operator.className != 'operator' + types[this.selectedIndex].type) {
|
||||||
var operator_cell = operator.parentNode;
|
var operator_cell = operator.parent();
|
||||||
Element.remove(operator);
|
operator.remove();
|
||||||
operator_cell.appendChild(SearchRow.constructOperators(this.selectedIndex, targetID));
|
operator_cell.append(SearchRow.constructOperators(this.selectedIndex, targetID));
|
||||||
}
|
}
|
||||||
|
|
||||||
var input = $('rule_' + targetID + '_input');
|
var input = $('#rule_' + targetID + '_input');
|
||||||
|
|
||||||
if (input.type == 'text') {
|
if (input.type == 'text') {
|
||||||
var oldinput = input.value;
|
var oldinput = input.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var input_cell = input.parentNode;
|
var input_cell = input.parent();
|
||||||
Element.remove(input);
|
input.remove();
|
||||||
input_cell.appendChild(SearchRow.constructInput(this.selectedIndex, targetID, oldinput));
|
input_cell.append(SearchRow.constructInput(this.selectedIndex, targetID, oldinput));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,7 +48,7 @@ $logic_operator = strtolower($logic_operator);
|
||||||
<?php echo UI::get_icon('add'); ?>
|
<?php echo UI::get_icon('add'); ?>
|
||||||
<?php echo T_('Add Another Rule'); ?>
|
<?php echo T_('Add Another Rule'); ?>
|
||||||
</a>
|
</a>
|
||||||
<script type="text/javascript">$('addrowbutton').click(SearchRow.add);</script>
|
<script type="text/javascript">$('#addrowbutton').on('click', SearchRow.add);</script>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue