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 <[email protected]> > --- > 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>
>
signature.asc
Description: OpenPGP digital signature
