[aur-dev] [PATCH 2/3] pkgfuncs.inc.php: allow all DB funcs to take handle arg

Lukas Fleischer archlinux at cryptocrack.de
Thu Aug 11 09:24:31 EDT 2011


On Wed, Aug 10, 2011 at 06:20:06PM -0500, Dan McGee wrote:
> Allows handle reuse if one is available.
> 
> Signed-off-by: Dan McGee <dan at archlinux.org>
> ---
>  web/lib/pkgfuncs.inc.php |  164 ++++++++++++++++++++++++++++------------------
>  1 files changed, 101 insertions(+), 63 deletions(-)
> 

This one looks good to me, except for two lines you probably removed
unintentionally (see below). This also needs to be rebased on the
package merging patches in my working tree. I fixed the missing lines
issue and pushed a rebased version of this patch to my working branch.

> diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
> index 8cd1c61..65758c8 100644
> --- a/web/lib/pkgfuncs.inc.php
> +++ b/web/lib/pkgfuncs.inc.php
> @@ -4,12 +4,14 @@ include_once("config.inc.php");
>  # Make sure this visitor can delete the requested package comment
>  # They can delete if they were the comment submitter, or if they are a TU/Dev
>  #
> -function canDeleteComment($comment_id=0, $atype="", $uid=0) {
> +function canDeleteComment($comment_id=0, $atype="", $uid=0, $dbh=NULL) {
>  	if ($atype == "Trusted User" || $atype == "Developer") {
>  		# A TU/Dev can delete any comment
>  		return TRUE;
>  	}
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT COUNT(ID) AS CNT ";
>  	$q.= "FROM PackageComments ";
>  	$q.= "WHERE ID = " . intval($comment_id);
> @@ -74,9 +76,11 @@ function canSubmitBlacklisted($atype = "") {
>  
>  # grab the current list of PackageCategories
>  #
> -function pkgCategories() {
> +function pkgCategories($dbh=NULL) {
>  	$cats = array();
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT * FROM PackageCategories WHERE ID != 1 ";
>  	$q.= "ORDER BY Category ASC";
>  	$result = db_query($q, $dbh);
> @@ -90,9 +94,11 @@ function pkgCategories() {
>  
>  # check to see if the package name exists
>  #
> -function package_exists($name="") {
> +function package_exists($name="", $dbh=NULL) {
>  	if (!$name) {return NULL;}
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT ID FROM Packages ";
>  	$q.= "WHERE Name = '".mysql_real_escape_string($name)."' ";
>  	$result = db_query($q, $dbh);
> @@ -103,11 +109,13 @@ function package_exists($name="") {
>  
>  # grab package dependencies
>  #
> -function package_dependencies($pkgid=0) {
> +function package_dependencies($pkgid, $dbh=NULL) {
>  	$deps = array();
>  	$pkgid = intval($pkgid);
>  	if ($pkgid > 0) {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT pd.DepName, pd.DepCondition, p.ID FROM PackageDepends pd ";
>  		$q.= "LEFT JOIN Packages p ON pd.DepName = p.Name ";
>  		$q.= "WHERE pd.PackageID = ". $pkgid . " ";
> @@ -121,10 +129,12 @@ function package_dependencies($pkgid=0) {
>  	return $deps;
>  }
>  
> -function package_required($name="") {
> +function package_required($name="", $dbh=NULL) {
>  	$deps = array();
>  	if ($name != "") {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT p.Name, PackageID FROM PackageDepends pd ";
>  		$q.= "JOIN Packages p ON pd.PackageID = p.ID ";
>  		$q.= "WHERE DepName = '".mysql_real_escape_string($name)."' ";
> @@ -139,10 +149,12 @@ function package_required($name="") {
>  }
>  
>  # Return the number of comments for a specified package
> -function package_comments_count($pkgid = 0) {
> +function package_comments_count($pkgid, $dbh=NULL) {
>  	$pkgid = intval($pkgid);
>  	if ($pkgid > 0) {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT COUNT(*) FROM PackageComments ";
>  		$q.= "WHERE PackageID = " . $pkgid;
>  		$q.= " AND DelUsersID IS NULL";
> @@ -157,11 +169,13 @@ function package_comments_count($pkgid = 0) {
>  }
>  
>  # Return an array of package comments
> -function package_comments($pkgid = 0) {
> +function package_comments($pkgid, $dbh=NULL) {
>  	$comments = array();
>  	$pkgid = intval($pkgid);
>  	if ($pkgid > 0) {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT PackageComments.ID, UserName, UsersID, Comments, CommentTS ";
>  		$q.= "FROM PackageComments, Users ";
>  		$q.= "WHERE PackageComments.UsersID = Users.ID";
> @@ -188,11 +202,13 @@ function package_comments($pkgid = 0) {
>  
>  # grab package sources
>  #
> -function package_sources($pkgid=0) {
> +function package_sources($pkgid, $dbh=NULL) {
>  	$sources = array();
>  	$pkgid = intval($pkgid);
>  	if ($pkgid > 0) {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT Source FROM PackageSources ";
>  		$q.= "WHERE PackageID = " . $pkgid;
>  		$q.= " ORDER BY Source";
> @@ -208,10 +224,12 @@ function package_sources($pkgid=0) {
>  
>  # grab array of Package.IDs that I've voted for: $pkgs[1234] = 1, ...
>  #
> -function pkgvotes_from_sid($sid="") {
> +function pkgvotes_from_sid($sid="", $dbh=NULL) {
>  	$pkgs = array();
>  	if (!$sid) {return $pkgs;}
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT PackageID ";
>  	$q.= "FROM PackageVotes, Users, Sessions ";
>  	$q.= "WHERE Users.ID = Sessions.UsersID ";
> @@ -229,10 +247,12 @@ function pkgvotes_from_sid($sid="") {
>  # array of package ids that you're being notified for
>  # *yoink*
>  #
> -function pkgnotify_from_sid($sid="") {
> +function pkgnotify_from_sid($sid="", $dbh=NULL) {
>  	$pkgs = array();
>  	if (!$sid) {return $pkgs;}
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT PkgID ";
>  	$q.= "FROM CommentNotify, Users, Sessions ";
>  	$q.= "WHERE Users.ID = Sessions.UsersID ";
> @@ -249,11 +269,13 @@ function pkgnotify_from_sid($sid="") {
>  
>  # get name of package based on pkgid
>  #
> -function pkgname_from_id($pkgid=0) {
> +function pkgname_from_id($pkgid, $dbh=NULL) {
>  	$pkgid = intval($pkgid);
>  	$name = "";
>  	if ($pkgid > 0) {
> -		$dbh = db_connect();
> +		if(!$dbh) {
> +			$dbh = db_connect();
> +		}
>  		$q = "SELECT Name FROM Packages WHERE ID = " . $pkgid;
>  		$result = db_query($q, $dbh);
>  		if (mysql_num_rows($result) > 0) {
> @@ -265,8 +287,10 @@ function pkgname_from_id($pkgid=0) {
>  
>  # Check if a package name is blacklisted.
>  #
> -function pkgname_is_blacklisted($name) {
> -	$dbh = db_connect();
> +function pkgname_is_blacklisted($name, $dbh=NULL) {
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "SELECT COUNT(*) FROM PackageBlacklist WHERE Name = '" . mysql_real_escape_string($name) . "'";
>  	$result = db_query($q, $dbh);
>  
> @@ -276,15 +300,15 @@ function pkgname_is_blacklisted($name) {
>  
>  # display package details
>  #
> -function package_details($id=0, $SID="") {
> -	$atype = account_from_sid($SID);
> -	$uid = uid_from_sid($SID);

These two lines shouldn't be removed.

> +function package_details($id=0, $SID="", $dbh=NULL) {
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  
>  	$q = "SELECT Packages.*,Category ";
>  	$q.= "FROM Packages,PackageCategories ";
>  	$q.= "WHERE Packages.CategoryID = PackageCategories.ID ";
>  	$q.= "AND Packages.ID = " . intval($id);
> -	$dbh = db_connect();
>  	$results = db_query($q, $dbh);
>  
>  	if (!$results) {
> @@ -306,7 +330,7 @@ function package_details($id=0, $SID="") {
>  			}
>  
>  			# Print Comments
> -			$comments = package_comments($id);
> +			$comments = package_comments($id, $dbh);
>  			if (!empty($comments)) {
>  				include('pkg_comments.php');
>  			}
> @@ -360,17 +384,18 @@ function package_details($id=0, $SID="") {
>   *                     do_Notify - Enable notification
>   *                     do_UnNotify - Disable notification
>   */
> -function pkg_search_page($SID="") {
> -	// establish a db connection
> -	$dbh = db_connect();
> +function pkg_search_page($SID="", $dbh=NULL) {
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  
>  	// get commonly used variables...
>  	// TODO: REDUCE DB HITS.
>  	// grab info for user if they're logged in
>  	if ($SID)
> -		$myuid = uid_from_sid($SID);
> +		$myuid = uid_from_sid($SID, $dbh);
>  	// get a list of package categories
> -	$cats = pkgCategories(); //meow
> +	$cats = pkgCategories($dbh); //meow
>  
>  	// sanitize paging variables
>  	//
> @@ -440,7 +465,7 @@ function pkg_search_page($SID="") {
>  		}
>  		# Search by submitter
>  		elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "s") {
> -			$q_where .= "AND SubmitterUID = ".uid_from_username($_GET['K'])." ";
> +			$q_where .= "AND SubmitterUID = ".uid_from_username($_GET['K'], $dbh)." ";
>  		}
>  		# Search by name
>  		elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "n") {
> @@ -594,7 +619,7 @@ function sanitize_ids($ids) {
>   *
>   * @return string Translated success or error messages
>   */
> -function pkg_flag ($atype, $ids, $action = True) {
> +function pkg_flag ($atype, $ids, $action=True, $dbh=NULL) {
>  	if (!$atype) {
>  		if ($action) {
>  			return __("You must be logged in before you can flag packages.");
> @@ -612,7 +637,9 @@ function pkg_flag ($atype, $ids, $action = True) {
>  		}
>  	}
>  
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  
>  	$q = "UPDATE Packages SET";
>  	if ($action) {
> @@ -627,9 +654,9 @@ function pkg_flag ($atype, $ids, $action = True) {
>  
>  	if ($action) {
>  		# Notify of flagging by email
> -		$f_name = username_from_sid($_COOKIE['AURSID']);
> -		$f_email = email_from_sid($_COOKIE['AURSID']);
> -		$f_uid = uid_from_sid($_COOKIE['AURSID']);
> +		$f_name = username_from_sid($_COOKIE['AURSID'], $dbh);
> +		$f_email = email_from_sid($_COOKIE['AURSID'], $dbh);
> +		$f_uid = uid_from_sid($_COOKIE['AURSID'], $dbh);
>  		$q = "SELECT Packages.Name, Users.Email, Packages.ID ";
>  		$q.= "FROM Packages, Users ";
>  		$q.= "WHERE Packages.ID IN (" . implode(",", $ids) .") ";
> @@ -662,7 +689,7 @@ function pkg_flag ($atype, $ids, $action = True) {
>   *
>   * @return string Translated error or success message
>   */
> -function pkg_delete ($atype, $ids) {
> +function pkg_delete ($atype, $ids, $dbh=NULL) {
>  	if (!$atype) {
>  		return __("You must be logged in before you can delete packages.");
>  	}
> @@ -677,7 +704,9 @@ function pkg_delete ($atype, $ids) {
>  		return __("You did not select any packages to delete.");
>  	}
>  
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  	$q = "DELETE FROM Packages WHERE ID IN (" . implode(",", $ids) . ")";
>  	$result = db_query($q, $dbh);
>  
> @@ -693,7 +722,7 @@ function pkg_delete ($atype, $ids) {
>   *
>   * @return string Translated error or success message
>   */
> -function pkg_adopt ($atype, $ids, $action = True) {
> +function pkg_adopt ($atype, $ids, $action=True, $dbh=NULL) {
>  	if (!$atype) {
>  		if ($action) {
>  			return __("You must be logged in before you can adopt packages.");
> @@ -711,13 +740,15 @@ function pkg_adopt ($atype, $ids, $action = True) {
>  		}
>  	}
>  
> -	$dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
>  
>  	$field = "MaintainerUID";
>  	$q = "UPDATE Packages ";
>  
>  	if ($action) {
> -		$user = uid_from_sid($_COOKIE["AURSID"]);
> +		$user = uid_from_sid($_COOKIE["AURSID"], $dbh);
>  	} else {
>  		$user = 'NULL';
>  	}
> @@ -729,13 +760,13 @@ function pkg_adopt ($atype, $ids, $action = True) {
>  		# Regular users may only adopt orphan packages from unsupported
>  		$q.= "AND $field IS NULL ";
>  	} else if ($atype == "User") {
> -		$q.= "AND $field = " . uid_from_sid($_COOKIE["AURSID"]);
> +		$q.= "AND $field = " . uid_from_sid($_COOKIE["AURSID"], $dbh);
>  	}
>  
>  	db_query($q, $dbh);
>  
>  	if ($action) {
> -		pkg_notify(account_from_sid($_COOKIE["AURSID"]), $ids);
> +		pkg_notify(account_from_sid($_COOKIE["AURSID"], $dbh), $ids, $dbh);
>  		return __("The selected packages have been adopted.");
>  	} else {
>  		return __("The selected packages have been disowned.");
> @@ -751,7 +782,7 @@ function pkg_adopt ($atype, $ids, $action = True) {
>   *
>   * @return string Translated error or success message
>   */
> -function pkg_vote ($atype, $ids, $action = True) {
> +function pkg_vote ($atype, $ids, $action=True, $dbh=NULL) {
>  	if (!$atype) {
>  		if ($action) {
>  			return __("You must be logged in before you can vote for packages.");
> @@ -769,9 +800,11 @@ function pkg_vote ($atype, $ids, $action = True) {
>  		}
>  	}
>  
> -	$dbh = db_connect();
> -	$my_votes = pkgvotes_from_sid($_COOKIE["AURSID"]);
> -	$uid = uid_from_sid($_COOKIE["AURSID"]);
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
> +	$my_votes = pkgvotes_from_sid($_COOKIE["AURSID"], $dbh);
> +	$uid = uid_from_sid($_COOKIE["AURSID"], $dbh);
>  
>  	$first = 1;
>  	foreach ($ids as $pid) {
> @@ -836,7 +869,7 @@ function pkg_vote ($atype, $ids, $action = True) {
>   * @param array $ids Array of package IDs to toggle, formatted as $package_id
>   * @return string Translated error or success message
>   */
> -function pkg_notify ($atype, $ids, $action = True) {
> +function pkg_notify ($atype, $ids, $action=True, $dbh=NULL) {
>  	if (!$atype) {
>  #		return __("You must be logged in before you can get notifications on comments.");
>  		return;
> @@ -847,8 +880,10 @@ function pkg_notify ($atype, $ids, $action = True) {
>  		return __("Couldn't add to notification list.");
>  	}
>  
> -	$dbh = db_connect();
> -	$uid = uid_from_sid($_COOKIE["AURSID"]);
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
> +	$uid = uid_from_sid($_COOKIE["AURSID"], $dbh);
>  
>  	$output = "";
>  
> @@ -912,7 +947,7 @@ function pkg_notify ($atype, $ids, $action = True) {
>   * @param string $atype Account type, output of account_from_sid
>   * @return string Translated error or success message
>   */
> -function pkg_delete_comment($atype) {
> +function pkg_delete_comment($atype, $dbh=NULL) {
>  	if (!$atype) {
>  		return __("You must be logged in before you can edit package information.");
>  	}
> @@ -924,10 +959,11 @@ function pkg_delete_comment($atype) {
>  		return __("Missing comment ID.");
>  	}
>  
> -	$uid = uid_from_sid($_COOKIE["AURSID"]);
> -	if (canDeleteComment($comment_id, $atype, $uid)) {
> -
> -		   $dbh = db_connect();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
> +	$uid = uid_from_sid($_COOKIE["AURSID"], $dbh);
> +	if (canDeleteComment($comment_id, $atype, $uid, $dbh)) {
>  		   $q = "UPDATE PackageComments ";
>  		   $q.= "SET DelUsersID = ".$uid." ";
>  		   $q.= "WHERE ID = ".intval($comment_id);
> @@ -944,7 +980,7 @@ function pkg_delete_comment($atype) {
>   * @param string $atype Account type, output of account_from_sid
>   * @return string Translated error or success message
>   */
> -function pkg_change_category($atype) {
> +function pkg_change_category($atype, $dbh=NULL) {
>  	if (!$atype)  {
>  		return __("You must be logged in before you can edit package information.");
>  	}
> @@ -956,7 +992,10 @@ function pkg_change_category($atype) {
>  		return __("Missing category ID.");
>  	}
>  
> -	$catArray = pkgCategories();
> +	if(!$dbh) {
> +		$dbh = db_connect();
> +	}
> +	$catArray = pkgCategories($dbh);
>  	if (!array_key_exists($category_id, $catArray)) {
>  		return __("Invalid category ID.");
>  	}
> @@ -968,7 +1007,6 @@ function pkg_change_category($atype) {
>  	}
>  
>  	# Verify package ownership
> -	$dbh = db_connect();
>  	$q = "SELECT Packages.MaintainerUID ";
>  	$q.= "FROM Packages ";
>  	$q.= "WHERE Packages.ID = ".$pid;
> @@ -980,7 +1018,7 @@ function pkg_change_category($atype) {
>  		return __("You are not allowed to change this package category.");
>  	}
>  
> -	$uid = uid_from_sid($_COOKIE["AURSID"]);
> +	$uid = uid_from_sid($_COOKIE["AURSID"], $dbh);
>  	if ($uid == $pkg["MaintainerUID"] or
>  	($atype == "Developer" or $atype == "Trusted User")) {
>  		$q = "UPDATE Packages ";
> -- 
> 1.7.6


More information about the aur-dev mailing list