[aur-dev] [PATCH 0/3] Automated TU vote participation calculation
The first idea is to allow for setting one's inactivity status using the AUR instead of having to consult several different sources (mailing lists, the Wiki, archweb, ...) This allows for doing an automated calculation of vote participation. Note that this currently doesn't really match the TU bylaws since the bylaws define active TUs as the number of active TUs at the *end* of the vote, whereas this patch counts TUs when the vote is started. We should come up with a proper solution before this is merged (some additional patches; amend the bylaws?) Comments welcome. Lukas Fleischer (3): Allow for setting an account's inactivity status Store the number of active TUs when starting a vote Show participation in vote details UPGRADING | 16 ++++++++++++++++ support/schema/aur-schema.sql | 2 ++ web/html/account.php | 5 +++-- web/lib/acctfuncs.inc.php | 39 ++++++++++++++++++++++++++++++-------- web/template/account_details.php | 6 ++++++ web/template/account_edit_form.php | 9 +++++++++ web/template/tu_details.php | 6 ++++++ 7 files changed, 73 insertions(+), 10 deletions(-) -- 1.8.4.rc1.383.g13e9f3f
This adds a field to the users table and corresponding fields to the
account edit and display forms that allow for setting an (in-)activity
status.
This might turn out to be useful if a user is on vacation and can not
respond to update/orphan/deletion requests. It will also be used for
automated participation calculation later.
Signed-off-by: Lukas Fleischer
On 04.08.2013 15:27, Lukas Fleischer wrote:
This adds a field to the users table and corresponding fields to the account edit and display forms that allow for setting an (in-)activity status.
This might turn out to be useful if a user is on vacation and can not respond to update/orphan/deletion requests. It will also be used for automated participation calculation later.
Signed-off-by: Lukas Fleischer
--- UPGRADING | 9 +++++++++ support/schema/aur-schema.sql | 1 + web/html/account.php | 5 +++-- web/lib/acctfuncs.inc.php | 28 ++++++++++++++++++++++------ web/template/account_details.php | 6 ++++++ web/template/account_edit_form.php | 9 +++++++++ 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/UPGRADING b/UPGRADING index a04471f..d8527e3 100644 --- a/UPGRADING +++ b/UPGRADING @@ -1,6 +1,15 @@ Upgrading =========
+From 2.2.0 to 2.3.0 +------------------- + +1. Add an inactivity time stamp to the "Users" table: + +---- +ALTER TABLE Users ADD COLUMN InactivityTS BIGINT NOT NULL DEFAULT 0; +---- + From 2.1.0 to 2.2.0 -------------------
diff --git a/support/schema/aur-schema.sql b/support/schema/aur-schema.sql index 0d04f12..68db93f 100644 --- a/support/schema/aur-schema.sql +++ b/support/schema/aur-schema.sql @@ -35,6 +35,7 @@ CREATE TABLE Users ( LastVoted BIGINT UNSIGNED NOT NULL DEFAULT 0, LastLogin BIGINT UNSIGNED NOT NULL DEFAULT 0, LastLoginIPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0, + InactivityTS BIGINT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (ID), UNIQUE (Username), UNIQUE (Email), diff --git a/web/html/account.php b/web/html/account.php index 4af3043..79b5eeb 100644 --- a/web/html/account.php +++ b/web/html/account.php @@ -52,7 +52,8 @@ if (isset($_COOKIE["AURSID"])) { display_account_form($atype, "UpdateAccount", $row["Username"], $row["AccountTypeID"], $row["Suspended"], $row["Email"], "", "", $row["RealName"], $row["LangPreference"], - $row["IRCNick"], $row["PGPKey"], $row["ID"]); + $row["IRCNick"], $row["PGPKey"], + $row["InactivityTS"] ? 1 : 0, $row["ID"]); } else { print __("You do not have permission to edit this account."); } @@ -81,7 +82,7 @@ if (isset($_COOKIE["AURSID"])) { in_request("U"), in_request("T"), in_request("S"), in_request("E"), in_request("P"), in_request("C"), in_request("R"), in_request("L"), in_request("I"), - in_request("K"), in_request("ID")); + in_request("K"), in_request("J"), in_request("ID")); } } else { if ($atype == "Trusted User" || $atype == "Developer") { diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php index 1deeac5..7602ec2 100644 --- a/web/lib/acctfuncs.inc.php +++ b/web/lib/acctfuncs.inc.php @@ -54,12 +54,13 @@ function html_format_pgp_fingerprint($fingerprint) { * @param string $L The language preference of the displayed user * @param string $I The IRC nickname of the displayed user * @param string $K The PGP key fingerprint of the displayed user + * @param string $J The inactivity status of the displayed user * @param string $UID The user ID of the displayed user * * @return void */ function display_account_form($UTYPE,$A,$U="",$T="",$S="", - $E="",$P="",$C="",$R="",$L="",$I="",$K="",$UID=0) { + $E="",$P="",$C="",$R="",$L="",$I="",$K="",$J="", $UID=0) {
That looks like you should use an array instead of dedicated variables/arguments. Default array + array_merge($defaults, $args). I know that's a rather large change and falls into refactoring, just saying in case you didn't think of it yet.
global $SUPPORTED_LANGS;
include("account_edit_form.php"); @@ -83,12 +84,13 @@ function display_account_form($UTYPE,$A,$U="",$T="",$S="", * @param string $L The language preference of the user * @param string $I The IRC nickname of the user * @param string $K The PGP fingerprint of the user + * @param string $J The inactivity status of the user * @param string $UID The user ID of the modified account * * @return string|void Return void if successful, otherwise return error */ function process_account_form($UTYPE,$TYPE,$A,$U="",$T="",$S="",$E="", - $P="",$C="",$R="",$L="",$I="",$K="",$UID=0) { + $P="",$C="",$R="",$L="",$I="",$K="",$J="",$UID=0) {
# error check and process request for a new/modified account global $SUPPORTED_LANGS, $AUR_LOCATION; @@ -185,7 +187,7 @@ function process_account_form($UTYPE,$TYPE,$A,$U="",$T="",$S="",$E="", if ($error) { print "<ul class='errorlist'><li>".$error."</li></ul>\n"; display_account_form($UTYPE, $A, $U, $T, $S, $E, "", "", - $R, $L, $I, $K, $UID); + $R, $L, $I, $K, $J, $UID); } else { if ($TYPE == "new") { # no errors, go ahead and create the unprivileged user @@ -206,9 +208,10 @@ function process_account_form($UTYPE,$TYPE,$A,$U="",$T="",$S="",$E="", $I = $dbh->quote($I); $K = $dbh->quote(str_replace(" ", "", $K)); $q = "INSERT INTO Users (AccountTypeID, Suspended, "; - $q.= "Username, Email, Passwd, Salt, RealName, "; - $q.= "LangPreference, IRCNick, PGPKey) VALUES (1, 0, "; - $q.= "$U, $E, $P, $salt, $R, $L, $I, $K)"; + $q.= "InactivityTS, Username, Email, Passwd, Salt, "; + $q.= "RealName, LangPreference, IRCNick, PGPKey) "; + $q.= "VALUES (1, 0, 0, $U, $E, $P, $salt, $R, $L, "; + $q.= "$I, $K)"; $result = $dbh->exec($q); if (!$result) { print __("Error trying to create account, %s%s%s.", @@ -240,6 +243,18 @@ function process_account_form($UTYPE,$TYPE,$A,$U="",$T="",$S="",$E="", } else { # no errors, go ahead and modify the user account
+ $q = "SELECT InactivityTS FROM Users WHERE "; + $q.= "ID = " . intval($UID); + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + if ($row[0] && $J) { + $inactivity_ts = $row[0]; + } elseif ($J) { + $inactivity_ts = time(); + } else { + $inactivity_ts = 0; + } + $q = "UPDATE Users SET "; $q.= "Username = " . $dbh->quote($U); if ($T) { @@ -262,6 +277,7 @@ function process_account_form($UTYPE,$TYPE,$A,$U="",$T="",$S="",$E="", $q.= ", LangPreference = " . $dbh->quote($L); $q.= ", IRCNick = " . $dbh->quote($I); $q.= ", PGPKey = " . $dbh->quote(str_replace(" ", "", $K)); + $q.= ", InactivityTS = " . $inactivity_ts; $q.= " WHERE ID = ".intval($UID); $result = $dbh->exec($q); if (!$result) { diff --git a/web/template/account_details.php b/web/template/account_details.php index fdebfb3..02ed32b 100644 --- a/web/template/account_details.php +++ b/web/template/account_details.php @@ -38,6 +38,12 @@ <td><?= html_format_pgp_fingerprint($row["PGPKey"]) ?></td> </tr> <tr> + <th><?= __("Status") . ":" ?></th> + <td> + <?= $row["InactivityTS"] ? __("Inactive since") . ' ' . date("Y-m-d H:i", $row["InactivityTS"]) : __("Active"); ?> + </td> + </tr> + <tr> <th><?= __("Last Voted") . ":" ?></th> <td> <?= $row["LastVoted"] ? date("Y-m-d", $row["LastVoted"]) : __("Never"); ?> diff --git a/web/template/account_edit_form.php b/web/template/account_edit_form.php index a0de2a3..fbab7eb 100644 --- a/web/template/account_edit_form.php +++ b/web/template/account_edit_form.php @@ -56,6 +56,15 @@ <?php endif; ?>
<p> + <label for="id_inactive"><?= __("Inactive") ?>:</label> + <?php if ($J): ?> + <input type="checkbox" name="J" id="id_inactive" checked="checked" /> + <?php else: ?> + <input type="checkbox" name="J" id="id_inactive" /> + <?php endif; ?>
<?php print($J ? 'checked="checked"' : ""); ?> (not 100% sure if the syntax is correct, but you get the idea). A single <input> tag is better because you can't break stuff partially if you ever change the field name.
+ </p> + + <p> <label for="id_email"><?= __("Email Address") ?>:</label> <input type="text" size="30" maxlength="64" name="E" id="id_email" value="<?= htmlspecialchars($E,ENT_QUOTES) ?>" /> (<?= __("required") ?>) </p>
This will be used for automated calculation of vote participation later.
Signed-off-by: Lukas Fleischer
This is calculated by dividing the sum of all votes by the number of
active TUs (where the number of active TUs is measured when the vote
starts).
Signed-off-by: Lukas Fleischer
participants (2)
-
Florian Pritz
-
Lukas Fleischer