mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Expose name-only search through the RPC interface
Fixes FS#37317. Signed-off-by: Johannes Löthberg <johannes@kyriasis.com> Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
94aeead4ec
commit
d8142abbbe
1 changed files with 17 additions and 2 deletions
|
@ -16,6 +16,9 @@ class AurJSON {
|
||||||
'search', 'info', 'multiinfo', 'msearch', 'suggest',
|
'search', 'info', 'multiinfo', 'msearch', 'suggest',
|
||||||
'suggest-pkgbase'
|
'suggest-pkgbase'
|
||||||
);
|
);
|
||||||
|
private static $exposed_fields = array(
|
||||||
|
'name', 'name-desc'
|
||||||
|
);
|
||||||
private static $fields_v1 = array(
|
private static $fields_v1 = array(
|
||||||
'Packages.ID', 'Packages.Name',
|
'Packages.ID', 'Packages.Name',
|
||||||
'PackageBases.ID AS PackageBaseID',
|
'PackageBases.ID AS PackageBaseID',
|
||||||
|
@ -83,6 +86,9 @@ class AurJSON {
|
||||||
if (!in_array($http_data['type'], self::$exposed_methods)) {
|
if (!in_array($http_data['type'], self::$exposed_methods)) {
|
||||||
return $this->json_error('Incorrect request type specified.');
|
return $this->json_error('Incorrect request type specified.');
|
||||||
}
|
}
|
||||||
|
if (isset($http_data['search_by']) && !in_array($http_data['search_by'], self::$exposed_fields)) {
|
||||||
|
return $this->json_error('Incorrect search_by field specified.');
|
||||||
|
}
|
||||||
|
|
||||||
$this->dbh = DB::connect();
|
$this->dbh = DB::connect();
|
||||||
|
|
||||||
|
@ -328,6 +334,11 @@ class AurJSON {
|
||||||
*/
|
*/
|
||||||
private function search($http_data) {
|
private function search($http_data) {
|
||||||
$keyword_string = $http_data['arg'];
|
$keyword_string = $http_data['arg'];
|
||||||
|
if (isset($http_data['search_by'])) {
|
||||||
|
$search_by = $http_data['search_by'];
|
||||||
|
} else {
|
||||||
|
$search_by = 'name-desc';
|
||||||
|
}
|
||||||
|
|
||||||
if (strlen($keyword_string) < 2) {
|
if (strlen($keyword_string) < 2) {
|
||||||
return $this->json_error('Query arg too small');
|
return $this->json_error('Query arg too small');
|
||||||
|
@ -335,8 +346,12 @@ class AurJSON {
|
||||||
|
|
||||||
$keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%");
|
$keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%");
|
||||||
|
|
||||||
$where_condition = "(Packages.Name LIKE $keyword_string OR ";
|
if ($search_by === 'name') {
|
||||||
$where_condition .= "Description LIKE $keyword_string)";
|
$where_condition = "(Packages.Name LIKE $keyword_string)";
|
||||||
|
} else if ($search_by === 'name-desc') {
|
||||||
|
$where_condition = "(Packages.Name LIKE $keyword_string OR ";
|
||||||
|
$where_condition .= "Description LIKE $keyword_string)";
|
||||||
|
}
|
||||||
|
|
||||||
return $this->process_query('search', $where_condition);
|
return $this->process_query('search', $where_condition);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue