[aur-dev] [PATCH] Move package notification into a function.

Loui Chang louipc.ist at gmail.com
Sun Nov 9 18:33:54 EST 2008


Here's a new patch for new notification behaviour.
Giv'er a spin!

-------------- next part --------------
>From 232550bf3ae244b0bb33e3e1c45c5a1b6d9bb6eb Mon Sep 17 00:00:00 2001
From: Loui Chang <louipc.ist at gmail.com>
Date: Sun, 9 Nov 2008 18:05:46 -0500
Subject: [PATCH] Move package notification into a function.

Also modify the way notification is done. Instead of toggling
notification, users can explicitly notify or unnotify.

Signed-off-by: Loui Chang <louipc.ist at gmail.com>
---
 web/html/packages.php |   53 +++++------------------------------
 web/lib/pkgfuncs.inc  |   72 ++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 74 insertions(+), 51 deletions(-)

diff --git a/web/html/packages.php b/web/html/packages.php
index 91b0e6e..a5718f3 100644
--- a/web/html/packages.php
+++ b/web/html/packages.php
@@ -68,6 +68,14 @@ if ($_POST['action'] == "do_Flag" || isset($_POST['do_Flag'])) {
 	print "<p>";
 	print pkg_vote($atype, $ids, False);
 	print "</p>";
+} elseif ($_POST['action'] == "do_Notify" || isset($_POST['do_Notify'])) {
+	print "<p>";
+	print pkg_notify($atype, $ids);
+	print "</p>";
+} elseif ($_POST['action'] == "do_UnNotify" || isset($_POST['do_UnNotify'])) {
+	print "<p>";
+	print pkg_notify($atype, $ids, False);
+	print "</p>";
 } elseif (isset($_GET["ID"])) {
 
 	if (!intval($_GET["ID"])) {
@@ -77,50 +85,6 @@ if ($_POST['action'] == "do_Flag" || isset($_POST['do_Flag'])) {
 		package_details($_GET["ID"], $_COOKIE["AURSID"]);
 	}
 
-} elseif ($_POST['action'] == "do_Notify" || isset($_POST['do_Notify'])) {
-	# I realize that the implementation here seems a bit convoluted, but we want to
-	# ensure that everything happens as it should, even if someone called this page
-	# without having clicked a button somewhere (naughty naughty). This also leaves
-	# room to someday expand and allow to add oneself to multiple lists at once. -SL
-	if (!$atype) {
-		print __("You must be logged in before you can get notifications on comments.");
-		print "<br />\n";
-	} else {
-		if (!empty($ids)) {
-			$dbh = db_connect();
-			$uid = uid_from_sid($_COOKIE["AURSID"]);
-			# There currently shouldn't be multiple requests here, but the format in which
-			# it's sent requires this
-			while (list($pid, $v) = each($ids)) {
-				$q = "SELECT Name FROM Packages WHERE ID = " . $pid;
-				$pkgname = mysql_result(db_query($q, $dbh), 0);
-
-				$q = "SELECT * FROM CommentNotify WHERE UserID = ".$uid;
-				$q.= " AND PkgID = ".$pid;
-
-				if (!mysql_num_rows(db_query($q, $dbh))) {
-					$q = "INSERT INTO CommentNotify (PkgID, UserID) VALUES (".$pid.', '.$uid.')';
-					db_query($q, $dbh);
-					print '<p>';
-					print __("You have been added to the comment notification list for %s.",
-						array("<b>" . $pkgname . "</b>"));
-					print '<br /></p>';
-				} else {
-					$q = "DELETE FROM CommentNotify WHERE PkgID = ".$pid;
-					$q.= " AND UserID = ".$uid;
-					db_query($q, $dbh);
-					print '<p>';
-					print __("You have been removed from the comment notification list for %s.",
-						array("<b>" . $pkgname . "</b>"));
-					print '<br /></p>';
-				}
-			}
-		} else {
-			print '<p>';
-			print __("Couldn't add to notification list.");
-			print '<br /></p>';
-		}
-	}			
 } else {
 	# just do a search
 	#
@@ -130,4 +94,3 @@ if ($_POST['action'] == "do_Flag" || isset($_POST['do_Flag'])) {
 
 html_footer(AUR_VERSION);
 
-?>
diff --git a/web/lib/pkgfuncs.inc b/web/lib/pkgfuncs.inc
index 7fe3f31..4fbe666 100644
--- a/web/lib/pkgfuncs.inc
+++ b/web/lib/pkgfuncs.inc
@@ -118,8 +118,6 @@ function package_dependencies($pkgid=0) {
 	return $deps;
 }
 
-# reverse deps by tardo
-#
 function package_required($pkgid=0) {
 	$deps = array();
 	if ($pkgid) {
@@ -395,7 +393,6 @@ function package_details($id=0, $SID="") {
 
       }
 
-			# reverse-deps by tardo - could use some beautification
 			$deps = package_required($row["ID"]);
 			if (count($deps) > 0) {
 			  
@@ -498,7 +495,7 @@ function package_details($id=0, $SID="") {
 					echo "<input type='submit' class='button' name='do_Notify'";
 					echo " value='".__("Notify")."' title='".__("New Comment Notification")."'>";
 				} else {
-					echo "<input type='submit' class='button' name='do_Notify'";
+					echo "<input type='submit' class='button' name='do_UnNotify'";
 					echo " value='".__("UnNotify")."' title='".__("No New Comment Notification")."'>";
 				}
 
@@ -639,7 +636,8 @@ function package_details($id=0, $SID="") {
  *                     do_Adopt  - Adopt
  *                     do_Disown - Disown
  *                     do_Delete - Delete
- *                     do_Notify - Toggle notification
+ *                     do_Notify - Enable notification
+ *                     do_UnNotify - Disable notification
  */
 function pkg_search_page($SID="") {
     // establish a db connection
@@ -915,7 +913,8 @@ function pkg_search_page($SID="") {
             if (account_from_sid($SID) == "Trusted User" || account_from_sid($SID) == "Developer") {
               print "<option value='do_Delete'>".__("Delete Packages")."</option>\n";
             }
-            print "<option value='do_Notify'>".__("Toggle Notify")."</option>\n";
+            print "<option value='do_Notify'>".__("Notify")."</option>\n";
+            print "<option value='do_UnNotify'>".__("UnNotify")."</option>\n";
             print "</select>";
             print "<input type='submit' class='button' style='width: 80px' value='" . __("Go") . "' />";
             print "</div>";
@@ -1266,3 +1265,64 @@ function pkg_vote ($atype, $ids, $action = True) {
 		return __("Your votes have been removed from the selected packages.");
 	}
 }
+
+function pkg_notify ($atype, $ids, $action = True) {
+	if (!$atype) {
+#		return __("You must be logged in before you can get notifications on comments.");
+		return;
+	}
+
+	if (empty($ids)) {
+		return __("Couldn't add to notification list.");
+	}
+
+	$dbh = db_connect();
+	$uid = uid_from_sid($_COOKIE["AURSID"]);
+
+	$output = "";
+
+	$first = True;
+
+	# There currently shouldn't be multiple requests here, but the
+	# format in which it's sent requires this.
+	foreach ($ids as $pid => $v) {
+		$q = "SELECT Name FROM Packages WHERE ID = $pid";
+		$pkgname = mysql_result(db_query($q, $dbh), 0);
+
+		if ($first)
+			$first = False;
+		else
+			$output .= ", ";
+
+
+		if ($action) {
+			$q = "SELECT * FROM CommentNotify WHERE UserID = $uid";
+			$q .= " AND PkgID = $pid";
+
+			# Notification already added. Don't add again.
+			if (!mysql_num_rows(db_query($q, $dbh))) {
+				$q = "INSERT INTO CommentNotify (PkgID, UserID) VALUES ($pid, $uid)";
+				db_query($q, $dbh);
+			}
+
+			$output .= $pkgname;
+		}
+		else {
+			$q = "DELETE FROM CommentNotify WHERE PkgID = $pid";
+			$q .= " AND UserID = $uid";
+			db_query($q, $dbh);
+
+			$output .= $pkgname;
+		}
+	}
+
+	if ($action) {
+		$output = __("You have been added to the comment notification list for %s.", $output);
+	}
+	else {
+		$output = __("You have been removed from the comment notification list for %s.", $output);
+	}
+
+	return $output;
+}
+
-- 
1.6.0.3



More information about the aur-dev mailing list