[aur-dev] [PATCH] Added license search

Alexander Rødseth rodseth at gmail.com
Fri Oct 21 09:38:02 EDT 2011


Signed-off-by: Alexander Rødseth <rodseth at gmail.com>
---
 web/lib/pkgfuncs.inc.php         |   49 ++++++++++++++++++++++++++++++++++++++
 web/template/pkg_search_form.php |   21 ++++++++++++++++
 2 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 3e89fa3..9a2074e 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -92,6 +92,40 @@ function pkgCategories($dbh=NULL) {
 	return $cats;
 }
 
+# grab the current list of distinct licenses
+#
+# "fromdb" is boolean and decides if the list of licenses
+# should be fetched from the available licenses in the database
+# or from a predefined list. Set to true or false here to make
+# either one the default. Set to false if the database load is too high.
+#
+function package_licenses($dbh=NULL, $fromdb=true) {
+	$lics = array();
+    if ($fromdb != false) {
+		if(!$dbh) {
+			$dbh = db_connect();
+		}
+		$q = "SELECT DISTINCT License FROM Packages WHERE License != '' ";
+		$q.= "ORDER BY License ASC";
+		$result = db_query($q, $dbh);
+		if ($result) {
+			while ($row = mysql_fetch_row($result)) {
+				$lics[] = $row[0];
+			}
+		}
+    } else {
+		// All possible licenses from
+		// https://wiki.archlinux.org/index.php/PKGBUILD#license
+		$lics = array("AGPL", "AGPL3", "APACHE", "Apache", "Artistic2.0",
+		              "BSD", "CCPL", "CDDL", "CPL", "custom", "EPL", "FDL",
+		              "FDL1.2", "FDL1.3", "GPL", "GPL2", "GPL3", "LGPL",
+		              "LGPL2.1", "LGPL3", "LPPL", "MIT", "MPL", "PHP", "PSF",
+		              "PerlArtistic", "Python", "RUBY", "ZLIB", "ZPL");
+		// sort($lics);
+	}
+	return $lics;
+}
+
 # check to see if the package name exists
 #
 function pkgid_from_name($name="", $dbh=NULL) {
@@ -370,6 +404,9 @@ function package_details($id=0, $SID="", $dbh=NULL) {
  *                  s  - package submitter's username
  *    do_Orphans    - boolean. whether to search packages
  *                     without a maintainer
+ *    outdated - if the package is flagged: "on" or "off"
+ *    license - the license ID, where 0 is "Any"
+ *              license ID may change at any time
  *
  *
  *    These two are actually handled in packages.php.
@@ -396,6 +433,8 @@ function pkg_search_page($SID="", $dbh=NULL) {
 		$myuid = uid_from_sid($SID, $dbh);
 	// get a list of package categories
 	$cats = pkgCategories($dbh); //meow
+	// get a list of licenses
+	$lics = package_licenses($dbh); // :-a
 
 	// sanitize paging variables
 	//
@@ -494,6 +533,16 @@ function pkg_search_page($SID="", $dbh=NULL) {
 			$q_where .= "AND OutOfDateTS IS NULL ";
 		}
 	}
+	
+	if (isset($_GET['license'])) {
+		// List ID ($lid) starts with 0 for "Any" and then enumerates the
+		// licenses from 1, which explains the "-1" below
+		$lid = intval($_GET["license"]);
+		if ($lid != 0) {
+			// Make the query select on licenses too
+			$q_where .= "AND Packages.License = '".$lics[$lid-1]."' ";
+		}
+	}
 
 	$order = (isset($_GET["SO"]) && $_GET["SO"] == 'd') ? 'DESC' : 'ASC';
 
diff --git a/web/template/pkg_search_form.php b/web/template/pkg_search_form.php
index 53d34fe..8c82859 100644
--- a/web/template/pkg_search_form.php
+++ b/web/template/pkg_search_form.php
@@ -119,6 +119,27 @@
 							?>
 						</select>
 					</li>
+					<li>
+						<label><?php print __("License"); ?></label>
+						<select name='license'>
+							<option value='0'><?php print __("Any"); ?></option>
+							<?php
+							$lics = package_licenses();
+							for($id = 0; $id < sizeof($lics); ++$id):
+								$lic = $lics[$id];
+								// "Any" occupies slot 0
+								$lid = $id+1;
+								if (isset($_REQUEST['license']) && $_REQUEST['license'] == $lid):
+							?>
+							<option value="<?php print $lid ?>" selected="selected"><?php print $lic; ?></option>
+							<?php else: ?>
+							<option value="<?php print $lid ?>"><?php print $lic; ?></option>
+							<?php
+								endif;
+							endfor;
+							?>
+						</select>
+					</li>
 				</ul>
 			</div>
 			<?php endif; ?>
-- 
1.7.7



More information about the aur-dev mailing list