[aur-dev] [PATCH 2/3] Add global comment notification setting

Lukas Fleischer lfleischer at archlinux.org
Sun Feb 7 09:57:16 UTC 2016


Add a configuration option to the account edit page that allows for
globally enabling/disabling package base comment notifications.

Signed-off-by: Lukas Fleischer <lfleischer at archlinux.org>
---
 schema/aur-schema.sql              |  1 +
 scripts/notify.py                  | 12 +++++++++++-
 upgrading/4.2.0.txt                |  7 +++++++
 web/html/account.php               | 18 ++++++++++++------
 web/html/register.php              |  4 ++--
 web/lib/acctfuncs.inc.php          |  7 +++++--
 web/template/account_edit_form.php |  8 ++++++++
 7 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 543f025..13a052e 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -38,6 +38,7 @@ CREATE TABLE Users (
 	LastLoginIPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0,
 	InactivityTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
 	RegistrationTS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+	CommentNotify TINYINT(1) NOT NULL DEFAULT 1,
 	PRIMARY KEY (ID),
 	UNIQUE (Username),
 	UNIQUE (Email),
diff --git a/scripts/notify.py b/scripts/notify.py
index 08cdda8..6b10600 100755
--- a/scripts/notify.py
+++ b/scripts/notify.py
@@ -95,6 +95,16 @@ def get_recipients(cur, pkgbase_id, uid):
     return [row[0] for row in cur.fetchall()]
 
 
+def get_comment_recipients(cur, pkgbase_id, uid):
+    cur.execute('SELECT DISTINCT Users.Email FROM Users ' +
+                'INNER JOIN PackageNotifications ' +
+                'ON PackageNotifications.UserID = Users.ID WHERE ' +
+                'Users.CommentNotify = 1 AND ' +
+                'PackageNotifications.UserID != %s AND ' +
+                'PackageNotifications.PackageBaseID = %s', [uid, pkgbase_id])
+    return [row[0] for row in cur.fetchall()]
+
+
 def get_request_recipients(cur, pkgbase_id, uid):
     cur.execute('SELECT DISTINCT Users.Email FROM Users ' +
                 'INNER JOIN PackageBases ' +
@@ -159,7 +169,7 @@ def welcome(cur, uid):
 def comment(cur, uid, pkgbase_id, comment_id):
     user = username_from_id(cur, uid)
     pkgbase = pkgbase_from_id(cur, pkgbase_id)
-    to = get_recipients(cur, pkgbase_id, uid)
+    to = get_comment_recipients(cur, pkgbase_id, uid)
     text = get_comment(cur, comment_id)
 
     user_uri = aur_location + '/account/' + user + '/'
diff --git a/upgrading/4.2.0.txt b/upgrading/4.2.0.txt
index 7d404b3..ce76f49 100644
--- a/upgrading/4.2.0.txt
+++ b/upgrading/4.2.0.txt
@@ -47,3 +47,10 @@ ALTER TABLE PackageBases MODIFY COLUMN FlaggerComment TEXT NOT NULL DEFAULT '';
 ----
 ALTER TABLE CommentNotify RENAME TO PackageNotifications;
 ----
+
+8. Add new columns to store notification settings:
+
+----
+ALTER TABLE Users
+	ADD COLUMN CommentNotify TINYINT(1) NOT NULL DEFAULT 1;
+----
diff --git a/web/html/account.php b/web/html/account.php
index b2886fc..2f85a8a 100644
--- a/web/html/account.php
+++ b/web/html/account.php
@@ -35,7 +35,8 @@ if ($action == "UpdateAccount") {
 			in_request("E"), in_request("H"), in_request("P"),
 			in_request("C"), in_request("R"), in_request("L"),
 			in_request("I"), in_request("K"), in_request("PK"),
-			in_request("J"), in_request("ID"), $row["Username"]);
+			in_request("J"), in_request("CN"), in_request("ID"),
+			$row["Username"]);
 	}
 }
 
@@ -81,7 +82,8 @@ if (isset($_COOKIE["AURSID"])) {
 					$row["AccountTypeID"], $row["Suspended"], $row["Email"],
 					$row["HideEmail"], "", "", $row["RealName"],
 					$row["LangPreference"], $row["IRCNick"], $row["PGPKey"], $PK,
-					$row["InactivityTS"] ? 1 : 0, $row["ID"], $row["Username"]);
+					$row["InactivityTS"] ? 1 : 0, $row["CommentNotify"],
+					$row["ID"], $row["Username"]);
 			} else {
 				print __("You do not have permission to edit this account.");
 			}
@@ -114,10 +116,14 @@ if (isset($_COOKIE["AURSID"])) {
 		print $update_account_message;
 
 		if (!$success) {
-			display_account_form("UpdateAccount", in_request("U"), in_request("T"),
-				in_request("S"), in_request("E"), in_request("H"), in_request("P"),
-				in_request("C"), in_request("R"), in_request("L"), in_request("I"),
-				in_request("K"), in_request("PK"), in_request("J"), in_request("ID"),
+			display_account_form("UpdateAccount", in_request("U"),
+				in_request("T"), in_request("S"),
+				in_request("E"), in_request("H"),
+				in_request("P"), in_request("C"),
+				in_request("R"), in_request("L"),
+				in_request("I"), in_request("K"),
+				in_request("PK"), in_request("J"),
+				in_request("CN"), in_request("ID"),
 				$row["Username"]);
 		}
 
diff --git a/web/html/register.php b/web/html/register.php
index f8400a3..f58fb25 100644
--- a/web/html/register.php
+++ b/web/html/register.php
@@ -23,7 +23,7 @@ if (in_request("Action") == "NewAccount") {
 			"new", "NewAccount", in_request("U"), 1, 0,
 			in_request("E"), in_request("H"), '', '', in_request("R"),
 			in_request("L"), in_request("I"), in_request("K"),
-			in_request("PK"));
+			in_request("PK"), 0, in_request("CN"));
 
 	print $message;
 
@@ -31,7 +31,7 @@ if (in_request("Action") == "NewAccount") {
 		display_account_form("NewAccount", in_request("U"), 1, 0,
 			in_request("E"), in_request("H"), '', '', in_request("R"),
 			in_request("L"), in_request("I"), in_request("K"),
-			in_request("PK"));
+			in_request("PK"), 0, in_request("CN"));
 	}
 } else {
 	print '<p>' . __("Use this form to create an account.") . '</p>';
diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php
index 0c6388a..796b82b 100644
--- a/web/lib/acctfuncs.inc.php
+++ b/web/lib/acctfuncs.inc.php
@@ -56,13 +56,14 @@ function html_format_pgp_fingerprint($fingerprint) {
  * @param string $K The PGP key fingerprint of the displayed user
  * @param string $PK The list of SSH public keys
  * @param string $J The inactivity status of the displayed user
+ * @param string $CN Whether to notify of new comments
  * @param string $UID The user ID of the displayed user
  * @param string $N The username as present in the database
  *
  * @return void
  */
 function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R="",
-		$L="",$I="",$K="",$PK="",$J="",$UID=0,$N="") {
+		$L="",$I="",$K="",$PK="",$J="",$CN="",$UID=0,$N="") {
 	global $SUPPORTED_LANGS;
 
 	include("account_edit_form.php");
@@ -88,13 +89,14 @@ function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R=""
  * @param string $K The PGP fingerprint of the user
  * @param string $PK The list of public SSH keys
  * @param string $J The inactivity status of the user
+ * @param string $CN Whether to notify of new comments
  * @param string $UID The user ID of the modified account
  * @param string $N The username as present in the database
  *
  * @return array Boolean indicating success and message to be printed
  */
 function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",
-		$R="",$L="",$I="",$K="",$PK="",$J="",$UID=0,$N="") {
+		$R="",$L="",$I="",$K="",$PK="",$J="",$CN="",$UID=0,$N="") {
 	global $SUPPORTED_LANGS;
 
 	$error = '';
@@ -341,6 +343,7 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C=""
 		$q.= ", IRCNick = " . $dbh->quote($I);
 		$q.= ", PGPKey = " . $dbh->quote(str_replace(" ", "", $K));
 		$q.= ", InactivityTS = " . $inactivity_ts;
+		$q.= ", CommentNotify = " . ($CN ? "1" : "0");
 		$q.= " WHERE ID = ".intval($UID);
 		$result = $dbh->exec($q);
 
diff --git a/web/template/account_edit_form.php b/web/template/account_edit_form.php
index cb0fa33..4f92f69 100644
--- a/web/template/account_edit_form.php
+++ b/web/template/account_edit_form.php
@@ -134,6 +134,14 @@
 	</fieldset>
 
 	<fieldset>
+		<legend><?= __("Notification settings") ?>:</legend>
+		<p>
+			<label for="id_commentnotify"><?= __("Notify of new comments") ?>:</label>
+			<input type="checkbox" name="CN" id="id_commentnotify" <?= $CN ? 'checked="checked"' : '' ?> />
+		</p>
+	</fieldset>
+
+	<fieldset>
 		<p>
 			<label></label>
 			<?php if ($A == "UpdateAccount"): ?>
-- 
2.7.0


More information about the aur-dev mailing list