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 <archli...@cryptocrack.de>
---
 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 |  5 +++++
 6 files changed, 46 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) {
        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..30b26fd 100644
--- a/web/template/account_edit_form.php
+++ b/web/template/account_edit_form.php
@@ -56,6 +56,11 @@
                <?php endif; ?>
 
                <p>
+                       <label for="id_inactive"><?= __("Inactive") ?>:</label>
+                       <input type="checkbox" name="J" id="id_inactive" <?= $J 
? 'checked="checked"' : '' ?> />
+               </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>
-- 
1.8.4.rc1.383.g13e9f3f

Reply via email to