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

>From 232550bf3ae244b0bb33e3e1c45c5a1b6d9bb6eb Mon Sep 17 00:00:00 2001
From: Loui Chang <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
---
 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

Reply via email to