Move notification logic to separate function
And optimize database requests in notification
---
 web/lib/pkgfuncs.inc.php | 58 ++++++++++++++++++++++++++++--------------------
 1 file changed, 34 insertions(+), 24 deletions(-)

diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 0610617..5420c8f 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -200,24 +200,14 @@ function package_comments($pkgid, $dbh=NULL) {
        return $comments;
 }
 
-# Add a comment to a package page and send out appropriate notifications
-# TODO: Move notification logic to separate function where it belongs
-function add_package_comment($pkgid, $uid, $comment, $dbh=NULL) {
+function send_notifications($pkgid, $uid, $subject, $body, $dbh=NULL, 
$pkg_name="") {
        if(!$dbh) {
                $dbh = db_connect();
        }
 
-       $q = 'INSERT INTO PackageComments ';
-       $q.= '(PackageID, UsersID, Comments, CommentTS) VALUES (';
-       $q.= intval($pkgid) . ', ' . $uid . ', ';
-       $q.= "'" . db_escape_string($comment) . "', ";
-       $q.= 'UNIX_TIMESTAMP())';
-       db_query($q, $dbh);
-
        # Send email notifications
-       $q = 'SELECT CommentNotify.*, Users.Email ';
-       $q.= 'FROM CommentNotify, Users ';
-       $q.= 'WHERE Users.ID = CommentNotify.UserID ';
+       $q = 'SELECT Users.Email FROM Users ';
+       $q.= 'INNER JOIN CommentNotify ON Users.ID=CommentNotify.UserID';
        $q.= 'AND CommentNotify.UserID != ' . $uid . ' ';
        $q.= 'AND CommentNotify.PkgID = ' . intval($pkgid);
        $result = db_query($q, $dbh);
@@ -228,25 +218,45 @@ function add_package_comment($pkgid, $uid, $comment, 
$dbh=NULL) {
                        array_push($bcc, $row['Email']);
                }
 
-               $q = 'SELECT Packages.* ';
-               $q.= 'FROM Packages ';
-               $q.= 'WHERE Packages.ID = ' . intval($pkgid);
-               $result = db_query($q, $dbh);
-               $row = mysql_fetch_assoc($result);
+               if($pkg_name == "") {
+                       $q = 'SELECT Packages.Name ';
+                       $q.= 'FROM Packages ';
+                       $q.= 'WHERE Packages.ID = ' . intval($pkgid);
+                       $result = db_query($q, $dbh);
+                       $row = mysql_fetch_assoc($result);
+                       $pkg_name = $row['Name'];
+               }
 
                # TODO: native language emails for users, based on their prefs
                # Simply making these strings translatable won't work, users 
would be
                # getting emails in the language that the user who posted the 
comment was in
-               $body =
-               'from ' . $AUR_LOCATION . '/' . get_pkg_uri($row['Name']) . "\n"
-               . username_from_sid($_COOKIE['AURSID'], $dbh) . " wrote:\n\n"
-               . $comment
-               . "\n\n---\nIf you no longer wish to receive notifications 
about this package, please go the the above package page and click the UnNotify 
button.";
+               $body = 'from ' . $AUR_LOCATION . '/' . get_pkg_uri($pkg_name) 
. "\n" . $body;
+               $body.= "\n\n---\nIf you no longer wish to receive 
notifications about this package, please go the the above package page and 
click the UnNotify button.";
                $body = wordwrap($body, 70);
                $bcc = implode(', ', $bcc);
                $headers = "Bcc: $bcc\nReply-to: [email protected]\nFrom: 
[email protected]\nX-Mailer: AUR\n";
-               @mail('undisclosed-recipients: ;', "AUR Comment for " . 
$row['Name'], $body, $headers);
+               @mail('undisclosed-recipients: ;', $subject . " for " . 
$pkg_name, $body, $headers);
+       }
+}
+
+# Add a comment to a package page and send out appropriate notifications
+function add_package_comment($pkgid, $uid, $comment, $dbh=NULL) {
+       if(!$dbh) {
+               $dbh = db_connect();
        }
+
+       $q = 'INSERT INTO PackageComments ';
+       $q.= '(PackageID, UsersID, Comments, CommentTS) VALUES (';
+       $q.= intval($pkgid) . ', ' . $uid . ', ';
+       $q.= "'" . db_escape_string($comment) . "', ";
+       $q.= 'UNIX_TIMESTAMP())';
+       db_query($q, $dbh);
+
+       # Send notifications
+       $subject = "AUR Comment";
+       $body = username_from_sid($_COOKIE['AURSID'], $dbh) . " wrote:\n\n";
+       $body.= $comment;
+       send_notifications($pkgid, $uid, $subject, $body, $dbh);
 }
 
 # grab package sources
-- 
1.7.11.3

Reply via email to