[aur-dev] [PATCH 1/3] aurjson.class.php: Style fixes

Lukas Fleischer archlinux at cryptocrack.de
Mon Apr 28 12:56:22 EDT 2014


* Fix braces, indentation and comment style.
* Remove some superfluous comments.
* Reword some comments.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 web/lib/aurjson.class.php | 696 +++++++++++++++++++++++-----------------------
 1 file changed, 349 insertions(+), 347 deletions(-)

diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index 2e5e06d..fe8044f 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -1,361 +1,363 @@
 <?php
-/**
- * AurJSON
- *
- * This file contains the AurRPC remote handling class
- **/
+
 include_once("aur.inc.php");
 
-/**
- * This class defines a remote interface for fetching data
- * from the AUR using JSON formatted elements.
+/*
+ * This class defines a remote interface for fetching data from the AUR using
+ * JSON formatted elements.
+ *
  * @package rpc
  * @subpackage classes
- **/
+ */
 class AurJSON {
-    private $dbh = false;
-    private static $exposed_methods = array(
-        'search', 'info', 'multiinfo', 'msearch', 'suggest'
-    );
-    private static $fields = array(
-        'Packages.ID', 'Packages.Name', 'PackageBases.Name AS PackageBase',
-        'Version', 'CategoryID', 'Description', 'URL', 'NumVotes',
-        'OutOfDateTS AS OutOfDate', 'Users.UserName AS Maintainer',
-        'SubmittedTS AS FirstSubmitted', 'ModifiedTS AS LastModified'
-    );
-    private static $numeric_fields = array(
-        'ID', 'CategoryID', 'NumVotes', 'OutOfDate', 'FirstSubmitted',
-        'LastModified'
-    );
-
-    /**
-     * Handles post data, and routes the request.
-     * @param string $post_data The post data to parse and handle.
-     * @return string The JSON formatted response data.
-     **/
-    public function handle($http_data) {
-		// unset global aur headers from aur.inc
-		// leave expires header to enforce validation
-		// header_remove('Expires');
-		// unset global aur.inc pragma header. We want to allow caching of data
-		// in proxies, but require validation of data (if-none-match) if
-		// possible
+	private $dbh = false;
+	private static $exposed_methods = array(
+		'search', 'info', 'multiinfo', 'msearch', 'suggest'
+	);
+	private static $fields = array(
+		'Packages.ID', 'Packages.Name',
+		'PackageBases.Name AS PackageBase', 'Version', 'CategoryID',
+		'Description', 'URL', 'NumVotes', 'OutOfDateTS AS OutOfDate',
+		'Users.UserName AS Maintainer',
+		'SubmittedTS AS FirstSubmitted', 'ModifiedTS AS LastModified'
+	);
+	private static $numeric_fields = array(
+		'ID', 'CategoryID', 'NumVotes', 'OutOfDate', 'FirstSubmitted',
+		'LastModified'
+	);
+
+	/*
+	 * Handles post data, and routes the request.
+	 *
+	 * @param string $post_data The post data to parse and handle.
+	 *
+	 * @return string The JSON formatted response data.
+	 */
+	public function handle($http_data) {
+		/*
+		 * Unset global aur.inc.php Pragma header. We want to allow
+		 * caching of data in proxies, but require validation of data
+		 * (if-none-match) if possible.
+		 */
 		header_remove('Pragma');
-		// overwrite cache-control header set in aur.inc to allow caching, but
-		// require validation
+		/*
+		 * Overwrite cache-control header set in aur.inc.php to allow
+		 * caching, but require validation.
+		 */
 		header('Cache-Control: public, must-revalidate, max-age=0');
 		header('Content-Type: application/json, charset=utf-8');
 
-        // handle error states
-        if ( !isset($http_data['type']) || !isset($http_data['arg']) ) {
-            return $this->json_error('No request type/data specified.');
-        }
-
-        // do the routing
-        if ( in_array($http_data['type'], self::$exposed_methods) ) {
-            // set up db connection.
-            $this->dbh = DB::connect();
-
-            // ugh. this works. I hate you php.
-            $json = call_user_func(array(&$this, $http_data['type']),
-                $http_data['arg']);
-
-			// calculate etag as an md5 based on the json result
-			// this could be optimized by calculating the etag on the 
-			// query result object before converting to json (step into
-			// the above function call) and adding the 'type' to the response,
-			// but having all this code here is cleaner and 'good enough'
-			$etag = md5($json);
-			header("Etag: \"$etag\"");
-			// make sure to strip a few things off the if-none-match
-			// header. stripping whitespace may not be required, but 
-			// removing the quote on the incoming header is required 
-			// to make the equality test
-			$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
-				trim($_SERVER['HTTP_IF_NONE_MATCH'], "\t\n\r\" ") : false;
-			if ($if_none_match && $if_none_match == $etag) {
-				header('HTTP/1.1 304 Not Modified');
-				return;
+		if (!isset($http_data['type']) || !isset($http_data['arg'])) {
+			return $this->json_error('No request type/data specified.');
+		}
+		if (!in_array($http_data['type'], self::$exposed_methods)) {
+			return $this->json_error('Incorrect request type specified.');
+		}
+
+		$this->dbh = DB::connect();
+
+		$json = call_user_func(array(&$this, $http_data['type']), $http_data['arg']);
+
+		$etag = md5($json);
+		header("Etag: \"$etag\"");
+		/*
+		 * Make sure to strip a few things off the
+		 * if-none-match header. Stripping whitespace may not
+		 * be required, but removing the quote on the incoming
+		 * header is required to make the equality test.
+		 */
+		$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
+			trim($_SERVER['HTTP_IF_NONE_MATCH'], "\t\n\r\" ") : false;
+		if ($if_none_match && $if_none_match == $etag) {
+			header('HTTP/1.1 304 Not Modified');
+			return;
+		}
+
+		if (isset($http_data['callback'])) {
+			header('content-type: text/javascript');
+			return $http_data['callback'] . "({$json})";
+		} else {
+			header('content-type: application/json');
+			return $json;
+		}
+	}
+
+	/*
+	 * Returns a JSON formatted error string.
+	 *
+	 * @param $msg The error string to return
+	 *
+	 * @return mixed A json formatted error response.
+	 */
+	private function json_error($msg) {
+		header('content-type: application/json');
+		return $this->json_results('error', 0, $msg);
+	}
+
+	/*
+	 * Returns a JSON formatted result data.
+	 *
+	 * @param $type The response method type.
+	 * @param $data The result data to return
+	 *
+	 * @return mixed A json formatted result response.
+	 */
+	private function json_results($type, $count, $data) {
+		return json_encode(array(
+			'version' => 2,
+			'type' => $type,
+			'resultcount' => $count,
+			'results' => $data
+		));
+	}
+
+	private function get_extended_fields($pkgid) {
+		$query = "SELECT DependencyTypes.Name AS Type, " .
+			"PackageDepends.DepName AS Name, " .
+			"PackageDepends.DepCondition AS Cond " .
+			"FROM PackageDepends " .
+			"LEFT JOIN DependencyTypes " .
+			"ON DependencyTypes.ID = PackageDepends.DepTypeID " .
+			"WHERE PackageDepends.PackageID = " . $pkgid . " " .
+			"UNION SELECT RelationTypes.Name AS Type, " .
+			"PackageRelations.RelName AS Name, " .
+			"PackageRelations.RelCondition AS Cond " .
+			"FROM PackageRelations " .
+			"LEFT JOIN RelationTypes " .
+			"ON RelationTypes.ID = PackageRelations.RelTypeID " .
+			"WHERE PackageRelations.PackageID = " . $pkgid . " " .
+			"UNION SELECT 'groups' AS Type, Groups.Name, '' AS Cond " .
+			"FROM Groups INNER JOIN PackageGroups " .
+			"ON PackageGroups.PackageID = " . $pkgid . " " .
+			"AND PackageGroups.GroupID = Groups.ID " .
+			"UNION SELECT 'license' AS Type, Licenses.Name, '' AS Cond " .
+			"FROM Licenses INNER JOIN PackageLicenses " .
+			"ON PackageLicenses.PackageID = " . $pkgid . " " .
+			"AND PackageLicenses.LicenseID = Licenses.ID";
+		$result = $this->dbh->query($query);
+
+		if (!$result) {
+			return null;
+		}
+
+		$type_map = array(
+			'depends' => 'Depends',
+			'makedepends' => 'MakeDepends',
+			'checkdepends' => 'CheckDepends',
+			'optdepends' => 'OptDepends',
+			'conflicts' => 'Conflicts',
+			'provides' => 'Provides',
+			'replaces' => 'Replaces',
+			'groups' => 'Groups',
+			'license' => 'License',
+		);
+		$data = array();
+		while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
+			$type = $type_map[$row['Type']];
+			$data[$type][] = $row['Name'] . $row['Cond'];
+		}
+
+		return $data;
+	}
+
+	private function process_query($type, $where_condition) {
+		global $MAX_RPC_RESULTS;
+		$fields = implode(',', self::$fields);
+		$query = "SELECT {$fields} " .
+			"FROM Packages LEFT JOIN PackageBases " .
+			"ON PackageBases.ID = Packages.PackageBaseID " .
+			"LEFT JOIN Users ON PackageBases.MaintainerUID = Users.ID " .
+			"WHERE ${where_condition}";
+		$result = $this->dbh->query($query);
+
+		if ($result) {
+			$resultcount = 0;
+			$search_data = array();
+			while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
+				$resultcount++;
+				$pkgbase_name = $row['PackageBase'];
+				$row['URLPath'] = URL_DIR . substr($pkgbase_name, 0, 2) . "/" . $pkgbase_name . "/" . $pkgbase_name . ".tar.gz";
+
+				/*
+				 * Unfortunately, mysql_fetch_assoc() returns
+				 * all fields as strings. We need to coerce
+				 * numeric values into integers to provide
+				 * proper data types in the JSON response.
+				 */
+				foreach (self::$numeric_fields as $field) {
+					$row[$field] = intval($row[$field]);
+				}
+
+				if ($type == 'info' || $type == 'multiinfo') {
+					$row = array_merge($row, $this->get_extended_fields($row['ID']));
+				}
+
+				if ($type == 'info') {
+					$search_data = $row;
+					break;
+				} else {
+					array_push($search_data, $row);
+				}
 			}
 
-            // allow rpc callback for XDomainAjax
-            if ( isset($http_data['callback']) ) {
-                // it is more correct to send text/javascript
-                // content-type for jsonp-callback
-                header('content-type: text/javascript');
-                return $http_data['callback'] . "({$json})";
-            }
-            else {
-                // set content type header to app/json
-                header('content-type: application/json');
-                return $json;
-            }
-        }
-        else {
-            return $this->json_error('Incorrect request type specified.');
-        }
-    }
-
-    /**
-     * Returns a JSON formatted error string.
-     *
-     * @param $msg The error string to return
-     * @return mixed A json formatted error response.
-     **/
-    private function json_error($msg) {
-        // set content type header to app/json
-        header('content-type: application/json');
-        return $this->json_results('error', 0, $msg);
-    }
-
-    /**
-     * Returns a JSON formatted result data.
-     * @param $type The response method type.
-     * @param $data The result data to return
-     * @return mixed A json formatted result response.
-     **/
-    private function json_results($type, $count, $data) {
-        return json_encode(array(
-            'version' => 2,
-            'type' => $type,
-            'resultcount' => $count,
-            'results' => $data
-        ));
-    }
-
-    private function get_extended_fields($pkgid) {
-        $query = "SELECT DependencyTypes.Name AS Type, " .
-            "PackageDepends.DepName AS Name, " .
-            "PackageDepends.DepCondition AS Cond " .
-            "FROM PackageDepends " .
-            "LEFT JOIN DependencyTypes " .
-            "ON DependencyTypes.ID = PackageDepends.DepTypeID " .
-            "WHERE PackageDepends.PackageID = " . $pkgid . " " .
-            "UNION SELECT RelationTypes.Name AS Type, " .
-            "PackageRelations.RelName AS Name, " .
-            "PackageRelations.RelCondition AS Cond " .
-            "FROM PackageRelations " .
-            "LEFT JOIN RelationTypes " .
-            "ON RelationTypes.ID = PackageRelations.RelTypeID " .
-            "WHERE PackageRelations.PackageID = " . $pkgid . " " .
-            "UNION SELECT 'groups' AS Type, Groups.Name, '' AS Cond " .
-            "FROM Groups INNER JOIN PackageGroups " .
-            "ON PackageGroups.PackageID = " . $pkgid . " " .
-            "AND PackageGroups.GroupID = Groups.ID " .
-            "UNION SELECT 'license' AS Type, Licenses.Name, '' AS Cond " .
-            "FROM Licenses INNER JOIN PackageLicenses " .
-            "ON PackageLicenses.PackageID = " . $pkgid . " " .
-            "AND PackageLicenses.LicenseID = Licenses.ID";
-        $result = $this->dbh->query($query);
-
-        if (!$result) {
-            return null;
-        }
-
-        $type_map = array(
-            'depends' => 'Depends',
-            'makedepends' => 'MakeDepends',
-            'checkdepends' => 'CheckDepends',
-            'optdepends' => 'OptDepends',
-            'conflicts' => 'Conflicts',
-            'provides' => 'Provides',
-            'replaces' => 'Replaces',
-            'groups' => 'Groups',
-            'license' => 'License',
-        );
-        $data = array();
-        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
-            $type = $type_map[$row['Type']];
-            $data[$type][] = $row['Name'] . $row['Cond'];
-        }
-
-        return $data;
-    }
-
-    private function process_query($type, $where_condition) {
-        global $MAX_RPC_RESULTS;
-        $fields = implode(',', self::$fields);
-        $query = "SELECT {$fields} " .
-            "FROM Packages LEFT JOIN PackageBases " .
-            "ON PackageBases.ID = Packages.PackageBaseID " .
-            "LEFT JOIN Users ON PackageBases.MaintainerUID = Users.ID " .
-            "WHERE ${where_condition}";
-        $result = $this->dbh->query($query);
-
-        if ($result) {
-            $resultcount = 0;
-            $search_data = array();
-            while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
-                $resultcount++;
-                $pkgbase_name = $row['PackageBase'];
-                $row['URLPath'] = URL_DIR . substr($pkgbase_name, 0, 2) . "/" . $pkgbase_name . "/" . $pkgbase_name . ".tar.gz";
-
-                /* Unfortunately, mysql_fetch_assoc() returns all fields as
-                 * strings. We need to coerce numeric values into integers to
-                 * provide proper data types in the JSON response.
-                 */
-                foreach (self::$numeric_fields as $field) {
-                    $row[$field] = intval($row[$field]);
-                }
-
-                if ($type == 'info' || $type == 'multiinfo') {
-                    $row = array_merge($row, $this->get_extended_fields($row['ID']));
-                }
-
-                if ($type == 'info') {
-                    $search_data = $row;
-                    break;
-                }
-                else {
-                    array_push($search_data, $row);
-                }
-            }
-
-           if ($resultcount === $MAX_RPC_RESULTS) {
-               return $this->json_error('Too many package results.');
-           }
-
-            return $this->json_results($type, $resultcount, $search_data);
-        }
-        else {
-            return $this->json_results($type, 0, array());
-        }
-    }
-
-    /**
-     * Parse the args to the multiinfo function. We may have a string or an 
-     * array, so do the appropriate thing. Within the elements, both * package 
-     * IDs and package names are valid; sort them into the relevant arrays and
-     * escape/quote the names.
-     * @param $args the arg string or array to parse.
-     * @return mixed An array containing 'ids' and 'names'.
-     **/
-    private function parse_multiinfo_args($args) {
-        if (!is_array($args)) {
-            $args = array($args);
-        }
-
-        $id_args = array();
-        $name_args = array();
-        foreach ($args as $arg) {
-            if (!$arg) {
-                continue;
-            }
-            if (is_numeric($arg)) {
-                $id_args[] = intval($arg);
-            } else {
-                $name_args[] = $this->dbh->quote($arg);
-            }
-        }
-
-        return array('ids' => $id_args, 'names' => $name_args);
-    }
-
-    /**
-     * Performs a fulltext mysql search of the package database.
-     * @param $keyword_string A string of keywords to search with.
-     * @return mixed Returns an array of package matches.
-     **/
-    private function search($keyword_string) {
-        global $MAX_RPC_RESULTS;
-        if (strlen($keyword_string) < 2) {
-            return $this->json_error('Query arg too small');
-        }
-
-        $keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%");
-
-        $where_condition = "(Packages.Name LIKE {$keyword_string} OR ";
-        $where_condition.= "Description LIKE {$keyword_string}) ";
-        $where_condition.= "LIMIT {$MAX_RPC_RESULTS}";
-
-        return $this->process_query('search', $where_condition);
-    }
-
-    /**
-     * Returns the info on a specific package.
-     * @param $pqdata The ID or name of the package. Package Query Data.
-     * @return mixed Returns an array of value data containing the package data
-     **/
-    private function info($pqdata) {
-        if ( is_numeric($pqdata) ) {
-            // just using sprintf to coerce the pqd to an int
-            // should handle sql injection issues, since sprintf will
-            // bork if not an int, or convert the string to a number 0
-            $where_condition = "Packages.ID={$pqdata}";
-        }
-        else {
-            $where_condition = sprintf("Packages.Name=%s", $this->dbh->quote($pqdata));
-        }
-        return $this->process_query('info', $where_condition);
-    }
-
-    /**
-     * Returns the info on multiple packages.
-     * @param $pqdata A comma-separated list of IDs or names of the packages.
-     * @return mixed Returns an array of results containing the package data
-     **/
-    private function multiinfo($pqdata) {
-        global $MAX_RPC_RESULTS;
-        $args = $this->parse_multiinfo_args($pqdata);
-        $ids = $args['ids'];
-        $names = $args['names'];
-
-        if (!$ids && !$names) {
-            return $this->json_error('Invalid query arguments');
-        }
-
-        $where_condition = "";
-        if ($ids) {
-            $ids_value = implode(',', $args['ids']);
-            $where_condition .= "ID IN ({$ids_value}) ";
-        }
-        if ($ids && $names) {
-            $where_condition .= "OR ";
-        }
-        if ($names) {
-            // individual names were quoted in parse_multiinfo_args()
-            $names_value = implode(',', $args['names']);
-            $where_condition .= "Packages.Name IN ({$names_value}) ";
-        }
-
-        $where_condition .= "LIMIT {$MAX_RPC_RESULTS}";
-
-        return $this->process_query('multiinfo', $where_condition);
-    }
-
-    /**
-     * Returns all the packages for a specific maintainer.
-     * @param $maintainer The name of the maintainer.
-     * @return mixed Returns an array of value data containing the package data
-     **/
-    private function msearch($maintainer) {
-        global $MAX_RPC_RESULTS;
-        $maintainer = $this->dbh->quote($maintainer);
-
-        $where_condition = "Users.Username = {$maintainer} ";
-        $where_condition .= "LIMIT {$MAX_RPC_RESULTS}";
-
-        return $this->process_query('msearch', $where_condition);
-    }
-
-    /**
-     * Get all package names that start with $search.
-     * @param string $search Search string.
-     * @return string The JSON formatted response data.
-     **/
-    private function suggest($search) {
-        $query = 'SELECT Name FROM Packages WHERE Name LIKE ' .
-            $this->dbh->quote(addcslashes($search, '%_') . '%') .
-            ' ORDER BY Name ASC LIMIT 20';
-
-        $result = $this->dbh->query($query);
-        $result_array = array();
-
-        if ($result) {
-            $result_array = $result->fetchAll(PDO::FETCH_COLUMN, 0);
-        }
-
-        return json_encode($result_array);
-    }
+			if ($resultcount === $MAX_RPC_RESULTS) {
+				return $this->json_error('Too many package results.');
+			}
+
+			return $this->json_results($type, $resultcount, $search_data);
+		} else {
+			return $this->json_results($type, 0, array());
+		}
+	}
+
+	/*
+	 * Parse the args to the multiinfo function. We may have a string or an
+	 * array, so do the appropriate thing. Within the elements, both * package
+	 * IDs and package names are valid; sort them into the relevant arrays and
+	 * escape/quote the names.
+	 *
+	 * @param $args the arg string or array to parse.
+	 *
+	 * @return mixed An array containing 'ids' and 'names'.
+	 */
+	private function parse_multiinfo_args($args) {
+		if (!is_array($args)) {
+			$args = array($args);
+		}
+
+		$id_args = array();
+		$name_args = array();
+		foreach ($args as $arg) {
+			if (!$arg) {
+				continue;
+			}
+			if (is_numeric($arg)) {
+				$id_args[] = intval($arg);
+			} else {
+				$name_args[] = $this->dbh->quote($arg);
+			}
+		}
+
+		return array('ids' => $id_args, 'names' => $name_args);
+	}
+
+	/*
+	 * Performs a fulltext mysql search of the package database.
+	 *
+	 * @param $keyword_string A string of keywords to search with.
+	 *
+	 * @return mixed Returns an array of package matches.
+	 */
+	private function search($keyword_string) {
+		global $MAX_RPC_RESULTS;
+
+		if (strlen($keyword_string) < 2) {
+			return $this->json_error('Query arg too small');
+		}
+
+		$keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%");
+
+		$where_condition = "(Packages.Name LIKE $keyword_string OR ";
+		$where_condition .= "Description LIKE $keyword_string) ";
+		$where_condition .= "LIMIT $MAX_RPC_RESULTS";
+
+		return $this->process_query('search', $where_condition);
+	}
+
+	/*
+	 * Returns the info on a specific package.
+	 *
+	 * @param $pqdata The ID or name of the package. Package Query Data.
+	 *
+	 * @return mixed Returns an array of value data containing the package data
+	 */
+	private function info($pqdata) {
+		if (is_numeric($pqdata)) {
+			$where_condition = "Packages.ID = $pqdata";
+		} else {
+			$where_condition = "Packages.Name = " . $this->dbh->quote($pqdata);
+		}
+
+		return $this->process_query('info', $where_condition);
+	}
+
+	/*
+	 * Returns the info on multiple packages.
+	 *
+	 * @param $pqdata A comma-separated list of IDs or names of the packages.
+	 *
+	 * @return mixed Returns an array of results containing the package data
+	 */
+	private function multiinfo($pqdata) {
+		global $MAX_RPC_RESULTS;
+
+		$args = $this->parse_multiinfo_args($pqdata);
+		$ids = $args['ids'];
+		$names = $args['names'];
+
+		if (!$ids && !$names) {
+			return $this->json_error('Invalid query arguments');
+		}
+
+		$where_condition = "";
+		if ($ids) {
+			$ids_value = implode(',', $args['ids']);
+			$where_condition .= "ID IN ($ids_value) ";
+		}
+		if ($ids && $names) {
+			$where_condition .= "OR ";
+		}
+		if ($names) {
+			/*
+			 * Individual names were quoted in
+			 * parse_multiinfo_args().
+			 */
+			$names_value = implode(',', $args['names']);
+			$where_condition .= "Packages.Name IN ($names_value) ";
+		}
+		$where_condition .= "LIMIT $MAX_RPC_RESULTS";
+
+		return $this->process_query('multiinfo', $where_condition);
+	}
+
+	/*
+	 * Returns all the packages for a specific maintainer.
+	 *
+	 * @param $maintainer The name of the maintainer.
+	 *
+	 * @return mixed Returns an array of value data containing the package data
+	 */
+	private function msearch($maintainer) {
+		global $MAX_RPC_RESULTS;
+
+		$maintainer = $this->dbh->quote($maintainer);
+
+		$where_condition = "Users.Username = $maintainer ";
+		$where_condition .= "LIMIT $MAX_RPC_RESULTS";
+
+		return $this->process_query('msearch', $where_condition);
+	}
+
+	/*
+	 * Get all package names that start with $search.
+	 *
+	 * @param string $search Search string.
+	 *
+	 * @return string The JSON formatted response data.
+	 */
+	private function suggest($search) {
+		$query = 'SELECT Name FROM Packages WHERE Name LIKE ' .
+			$this->dbh->quote(addcslashes($search, '%_') . '%') .
+			' ORDER BY Name ASC LIMIT 20';
+
+		$result = $this->dbh->query($query);
+		$result_array = array();
+
+		if ($result) {
+			$result_array = $result->fetchAll(PDO::FETCH_COLUMN, 0);
+		}
+
+		return json_encode($result_array);
+	}
 }
 
-- 
1.9.2



More information about the aur-dev mailing list