[PATCH] aurjson: Allow searching package relations

Vladimir Panteleev archlinux at thecybershadow.net
Thu Oct 25 19:44:46 UTC 2018


---
On Thu, Oct 25, 2018 at 3:26 PM Guillaume Benoit <guillaume at manjaro.org> wrote:
> If you point me to the relevant code, I can try to provide a patch.

Not an aurweb developer, but since I looked at it recently and it was
fresh on my mind, here's a draft, only-cursorily-tested patch.

 web/lib/aurjson.class.php | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index c51e9c2..5de6533 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -18,11 +18,15 @@ class AurJSON {
 	);
 	private static $exposed_fields = array(
 		'name', 'name-desc', 'maintainer',
-		'depends', 'makedepends', 'checkdepends', 'optdepends'
+		'depends', 'makedepends', 'checkdepends', 'optdepends',
+		'conflicts', 'provides', 'replaces'
 	);
 	private static $exposed_depfields = array(
 		'depends', 'makedepends', 'checkdepends', 'optdepends'
 	);
+	private static $exposed_relfields = array(
+		'conflicts', 'provides', 'replaces'
+	);
 	private static $fields_v1 = array(
 		'Packages.ID', 'Packages.Name',
 		'PackageBases.ID AS PackageBaseID',
@@ -510,6 +514,19 @@ class AurJSON {
 				$subquery .= "AND DependencyTypes.Name = $search_by";
 				$where_condition = "$keyword_string IN ($subquery)";
 			}
+		} else if (in_array($search_by, self::$exposed_relfields)) {
+			if (empty($keyword_string)) {
+				return $this->json_error('Query arg is empty.');
+			} else {
+				$keyword_string = $this->dbh->quote($keyword_string);
+				$search_by = $this->dbh->quote($search_by);
+				$subquery = "SELECT PackageRelations.RelName FROM PackageRelations ";
+				$subquery .= "LEFT JOIN RelationTypes ";
+				$subquery .= "ON PackageRelations.RelTypeID = RelationTypes.ID ";
+				$subquery .= "WHERE PackageRelations.PackageID = Packages.ID ";
+				$subquery .= "AND RelationTypes.Name = $search_by";
+				$where_condition = "$keyword_string IN ($subquery)";
+			}
 		}
 
 		return $this->process_query('search', $where_condition);
-- 
2.19.1


More information about the aur-dev mailing list