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: nobody@archlinux.org\nFrom: aur-notify@archlinux.org\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