[aur-dev] [PATCH] Added license search

Lukas Fleischer archlinux at cryptocrack.de
Mon Oct 24 11:39:18 EDT 2011


On Fri, Oct 21, 2011 at 03:38:02PM +0200, Alexander Rødseth wrote:
> 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(-)

I'm not sure about the rationale behind this one. Is there any use case
for this? Any other opinions?

> 
> 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) {

Indentation.. :)

> +		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);

I don't think we really need that choice here... Either fetch licenses
from the database or hardcode them.

> +	}
> +	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];

We usually use foreach loops to iterate over arrays :)

> +								// "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>

Please use htmlspecialchars() to escape the license description here.
Printing the description shouldn't cause any issues yet but it's cleaner
to do it right in the first place...

> +							<?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