[aur-dev] [PATCH] Add user set timestamps
Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Implements: FS#48729
Signed-off-by: Mark Weiman Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Implements: FS#48729
Signed-off-by: Mark Weiman On Tue, 15 Nov 2016 at 06:19:26, Mark Weiman wrote: Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone. Implements: FS#48729 Signed-off-by: Mark Weiman First of all, thanks for taking the time to implement all this! I added
some inline comments below. diff --git a/conf/config.proto b/conf/config.proto
index 96fad80..b6a414d 100644
--- a/conf/config.proto
+++ b/conf/config.proto
@@ -11,6 +11,7 @@ username_min_len = 3
username_max_len = 16
passwd_min_len = 4
default_lang = en
+deafult_timezone = UTC Typo? sql_debug = 0
max_sessions_per_user = 8
login_timeout = 7200
diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 30209bd..95a4373 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -32,6 +32,7 @@ CREATE TABLE Users (
ResetKey CHAR(32) NOT NULL DEFAULT '',
RealName VARCHAR(64) NOT NULL DEFAULT '',
LangPreference VARCHAR(6) NOT NULL DEFAULT 'en',
+ Timezone VARCHAR(50) NOT NULL DEFAULT 'UTC', Out of curiosity: How did you choose the length of 50 characters? Is it
large enough according to some standard? Homepage TEXT NULL DEFAULT NULL,
IRCNick VARCHAR(32) NOT NULL DEFAULT '',
PGPKey VARCHAR(40) NULL DEFAULT NULL,
diff --git a/upgrading/4.5.0.txt b/upgrading/4.5.0.txt
new file mode 100644
index 0000000..a9c0220
--- /dev/null
+++ b/upgrading/4.5.0.txt
@@ -0,0 +1,5 @@
+1. Add Timezone column to Users This is really nitpicky but we usually add colons after these lines. +
+---
+ALTER TABLE Users ADD COLUMN Timezone VARCHAR(50) NOT NULL DEFAULT 'UTC';
+---
\ No newline at end of file
diff --git a/web/html/account.php b/web/html/account.php
index 2892f04..91e5703 100644
--- a/web/html/account.php
+++ b/web/html/account.php
@@ -34,6 +34,7 @@ if ($action == "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("TZ"), Okay. Looks a bit weird but I agree that doing this is better than
reformatting the whole list in every patch that adds or removes a
parameter. Maybe we should change the formatting to "one parameter per
line" here. Not in the scope of this patch, though. [...]
@@ -64,7 +66,7 @@ if (in_request("Action") == "NewAccount") {
}
} else {
print '<p>' . __("Use this form to create an account.") . '</p>';
- display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG);
+ display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG, "UTC"); Should this refer to the default timezone from the configuration file
instead? [...]
@@ -359,6 +362,9 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="" $ssh_key_result = account_set_ssh_keys($UID, $ssh_keys, $ssh_fingerprints); + error_log($result ? "t" : "f");
+ error_log($ssh_key_result ? "t" : "f");
+ error_log($q); Huh? Leftover debug statements? I think these should go... [...]
+function set_tz() {
[...]
+ if (!array_key_exists($TZ, $timezones)) {
+ error_log("Am I Here?"); And another one... [...]
+ * Add the selected timezone's offset to a timestamp.
+ *
+ * @param $timestamp int Timestamp to be manipulated
+ *
+ * @return int Manipulated timestamp
+ */
+function tz_timestamp($timestamp) {
+ global $TZ;
+ $offset = isset($TZ) ? timezone_offset_get(new DateTimeZone($TZ), new DateTime()) : 0;
+ return $timestamp + $offset;
+}
[...] I do not know about timezone handling in PHP, so this question might be
naive: Is there any reason you chose this implementation instead of
calling something like date_default_timezone_set() in set_tz() and using
the default date/time functions without any wrappers?
Regards,
Lukas
P.S.: Not a big issue but if you resubmit a patch several times, it is
usually a good idea to add a comment on what changed between the "---"
marker and the diff stat. Just to make it easier for reviewers to pick a
version to review and to know about previously addressed stuff. On 15/11, Lukas Fleischer wrote: On Tue, 15 Nov 2016 at 06:19:26, Mark Weiman wrote: + Timezone VARCHAR(50) NOT NULL DEFAULT 'UTC', Out of curiosity: How did you choose the length of 50 characters? Is it
large enough according to some standard? The zoneinfo has a limit of 14 characters[0], though there are some
legacy names that are still supported, the longest of which seems to be
33 characters.
[0]: https://github.com/eggert/tz/blob/365460cfe7f7404030f33dffe489ba66a2dcbcdd/T...
--
Sincerely,
Johannes Löthberg
PGP Key ID: 0x50FB9B273A9D0BB5
https://theos.kyriasis.com/~kyrias/ On Tue, 2016-11-15 at 07:42 +0100, Lukas Fleischer wrote: First of all, thanks for taking the time to implement all this! I added
some inline comments below. +deafult_timezone = UTC Typo? Yes. Out of curiosity: How did you choose the length of 50 characters? Is it
large enough according to some standard? Yeah, I chose something that was most likely long enough to hold anything that I
needed to put in there. It looks like Johannes found it to be a maximum of 33
characters, and after looking, the current maximum length is 30, so should I use
33 or 30? This is really nitpicky but we usually add colons after these lines. Okay, I will fix this. Okay. Looks a bit weird but I agree that doing this is better than
reformatting the whole list in every patch that adds or removes a
parameter. Maybe we should change the formatting to "one parameter per
line" here. Not in the scope of this patch, though. Yeah, I really wasn't sure how to do this properly. Should this refer to the default timezone from the configuration file
instead? Probably a good idea. Huh? Leftover debug statements? I think these should go... Yikes! I would have to agree. I do not know about timezone handling in PHP, so this question might be
naive: Is there any reason you chose this implementation instead of
calling something like date_default_timezone_set() in set_tz() and using
the default date/time functions without any wrappers? When reading the timestamp in gmdate(), PHP doesn't care what timezone the
default is set to and it just displays what the time is based on the how many
seconds past the Unix epoch. Because of this, you have to get the timezone's
offset (which is in UTC from the database) and do the math to make sure it's
correct. I have verified this in a PHP shell. Changing the default doesn't make
sense to me also because the application is only displaying other timezones, not
working in them, only UTC. Regards,
Lukas P.S.: Not a big issue but if you resubmit a patch several times, it is
usually a good idea to add a comment on what changed between the "---"
marker and the diff stat. Just to make it easier for reviewers to pick a
version to review and to know about previously addressed stuff. Mark Weiman On Wed, 16 Nov 2016 at 04:04:08, Mark Weiman wrote: Yeah, I chose something that was most likely long enough to hold anything that I
needed to put in there. It looks like Johannes found it to be a maximum of 33
characters, and after looking, the current maximum length is 30, so should I use
33 or 30? It seems like 32 is a good value:
$ backward=https://raw.githubusercontent.com/eggert/tz/master/backward
$ curl -s "$backward" | sed '/^#/d' | cut -f3 | wc -L
32
Johannes, where did you find a legacy name of length 33? When reading the timestamp in gmdate(), PHP doesn't care what timezone the
default is set to and it just displays what the time is based on the how many
seconds past the Unix epoch. Because of this, you have to get the timezone's
offset (which is in UTC from the database) and do the math to make sure it's
correct. I have verified this in a PHP shell. Changing the default doesn't make
sense to me also because the application is only displaying other timezones, not
working in them, only UTC. We would have to use date() instead of gmdate() in combination with
date_default_timezone_set(), of course.
Regards,
Lukas On 16/11, Lukas Fleischer wrote: On Wed, 16 Nov 2016 at 04:04:08, Mark Weiman wrote: Yeah, I chose something that was most likely long enough to hold anything that I
needed to put in there. It looks like Johannes found it to be a maximum of 33
characters, and after looking, the current maximum length is 30, so should I use
33 or 30? It seems like 32 is a good value: $ backward=https://raw.githubusercontent.com/eggert/tz/master/backward
$ curl -s "$backward" | sed '/^#/d' | cut -f3 | wc -L
32 Johannes, where did you find a legacy name of length 33? Was looking at the actual zoneinfo files on Arch, though it seems that
the longer ones are under the right/ and posix/ namespaces under
/usr/share/zoneinfo. Though I don't think those are actually useful to
support though.
right/ seems[0] to be for systems that don't implement leap second
support, where the system time includes the leap seconds (based on TAI),
and posix/ follows the POSIX standard and are based on UTC, so I think
we can just ignore those zones.
[0]: http://www.ucolick.org/~sla/leapsecs/right+gps.html
--
Sincerely,
Johannes Löthberg
PGP Key ID: 0x50FB9B273A9D0BB5
https://theos.kyriasis.com/~kyrias/ On 17/11, Johannes Löthberg via aur-dev wrote: On 16/11, Lukas Fleischer wrote: On Wed, 16 Nov 2016 at 04:04:08, Mark Weiman wrote: Yeah, I chose something that was most likely long enough to hold anything that I
needed to put in there. It looks like Johannes found it to be a maximum of 33
characters, and after looking, the current maximum length is 30, so should I use
33 or 30? It seems like 32 is a good value: $ backward=https://raw.githubusercontent.com/eggert/tz/master/backward
$ curl -s "$backward" | sed '/^#/d' | cut -f3 | wc -L
32 Johannes, where did you find a legacy name of length 33? Was looking at the actual zoneinfo files on Arch, though it seems that
the longer ones are under the right/ and posix/ namespaces under
/usr/share/zoneinfo. Though I don't think those are actually useful
to support though. right/ seems[0] to be for systems that don't implement leap second
support, where the system time includes the leap seconds (based on
TAI), and posix/ follows the POSIX standard and are based on UTC, so I
think we can just ignore those zones. Though it seems that right/ and posix/ are no longer subdirectories in
the current upstream zoneinfo database structure, instead being separate
directories in /usr/share/zoneinfe. (Called zoneinfo, zoneinfo-posix,
and zoneinfo-leapse.) Though some distros, like Arch, still uses the
old structure.
Essentially what you're supposed to do is to configure a system to use
either the "posix" or the "right" database (now zoneinfo-leaps) by
copying their files to /usr/share/zoneinfo, so you shouldn't actually
use the full posix/ or real/ files. (hwclock(8))
--
Sincerely,
Johannes Löthberg
PGP Key ID: 0x50FB9B273A9D0BB5
https://theos.kyriasis.com/~kyrias/ Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Implements: FS#48729
Signed-off-by: Mark Weiman Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Implements: FS#48729
Signed-off-by: Mark Weiman On Thu, 29 Dec 2016 at 04:10:00, Mark Weiman wrote: [...]
@@ -64,7 +66,7 @@ if (in_request("Action") == "NewAccount") {
}
} else {
print '<p>' . __("Use this form to create an account.") . '</p>';
- display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG);
+ display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG, config_get("options", "default_timezone")); I know I explicitly asked you to add this when reviewing a previous
version of this patch. Looking at it again, it seems better to leave
this line untouched and handle the default case in the function itself,
though. [...]
diff --git a/web/lib/timezone.inc.php b/web/lib/timezone.inc.php
new file mode 100644
index 0000000..363d6a6
--- /dev/null
+++ b/web/lib/timezone.inc.php
@@ -0,0 +1,61 @@
+ Displayed Description
+ */
+function generate_timezone_list() {
+ $php_timezones = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
+
+ $offsets = array();
+ foreach ($php_timezones as $timezone) {
+ $tz = new DateTimeZone($timezone);
+ $offset = $tz->getOffset(new DateTime());
+ $offsets[$timezone] = "(UTC" . ($offset < 0 ? "-" : "+") . gmdate("H:i", abs($offset)) .
+ ") " . $timezone;
+ }
+
+ asort($offsets);
+ return $offsets;
+}
+
+/**
+ * Set the $TZ global variable.
+ *
+ * @global string $TZ Timezone set for session.
+ *
+ * @return null
+ */
+function set_tz() {
+ global $TZ;
+
+ $timezones = generate_timezone_list();
+
+ if (isset($_COOKIE['AURSID'])) {
+ $dbh = DB::connect();
+ $q = "SELECT Timezone FROM Users, Sessions ";
+ $q .= "WHERE Users.ID = Sessions.UsersID ";
+ $q .= "AND Sessions.SessionID = ";
+ $q .= $dbh->quote($_COOKIE['AURSID']);
+ $result = $dbh->query($q); I wonder whether it is better to store the timezone in a cookie.
The set_tz() function could query the database the first time a user
logs in only, set the cookie and become a no-op for any subsequent
calls. By doing that, we could also get rid of the global variable and
the patch could be extended easily such that unregistered users can
specify a timezone. +
+ if ($result) {
+ $row = $result->fetchAll();
+ $TZ = $row[0][0];
+ } else {
+ $TZ = config_get("options", "default_timezone");
+ }
+
+ if (!array_key_exists($TZ, $timezones)) {
+ $TZ = config_get("options", "default_timezone");
+ }
+ }
+
+ if (isset($TZ) && $TZ != "") {
+ date_default_timezone_set($TZ);
+ } else {
+ date_default_timezone_set(config_get("options", "default_timezone"));
+ }
+} This part can be simplified as follows (untested and assuming that we
replace the global variable by a local variable as suggested above):
unset($timezone);
if ($result) {
$timezone = $result->fetchColumn(0);
}
if (!isset($timezone) || !array_key_exists($timezone, $timezones)) {
$timezone = config_get("options", "default_timezone");
}
date_default_timezone_set($timezone);
The rest looks fine to me, thanks! Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Signed-off-by: Mark Weiman Currently, when a user edits their language setting from the edit user form,
the changes aren't reflected until the user either lets the original cookie
expire, deletes the cookie manually, or changes the language a second time via
the dropdown menu on the top of the page. This patch makes the language cookie
get updated when it is changed from the edit user form.
Signed-off-by: Mark Weiman Modify the call to process_account_form() to only having one parameter per
line.
Signed-off-by: Mark Weiman Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Signed-off-by: Mark Weiman Currently, when a user edits their language setting from the edit user form,
the changes aren't reflected until the user either lets the original cookie
expire, deletes the cookie manually, or changes the language a second time via
the dropdown menu on the top of the page. This patch makes the language cookie
get updated when it is changed from the edit user form.
Signed-off-by: Mark Weiman Modify the call to process_account_form() to only having one parameter per
line.
Signed-off-by: Mark Weiman On Thu, 19 Jan 2017 at 04:23:37, Mark Weiman wrote: Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone. Signed-off-by: Mark Weiman Thanks, we're almost there. There are several minor issues left, though.
See below. diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php
index 9015ae8..8a0ed2b 100644
--- a/web/lib/aur.inc.php
+++ b/web/lib/aur.inc.php
[...]
@@ -356,7 +359,7 @@ function uid_from_sid($sid="") {
function html_header($title="", $details=array()) {
global $LANG;
global $SUPPORTED_LANGS;
-
+ Unrelated whitespace change? include('header.php');
return;
}
[...]
diff --git a/web/lib/timezone.inc.php b/web/lib/timezone.inc.php
new file mode 100644
index 0000000..f3b4c71
--- /dev/null
+++ b/web/lib/timezone.inc.php
@@ -0,0 +1,65 @@
[...]
+/**
+ * Set the $TZ global variable. The comment needs to be updated to reflect the changes in this reroll of
the patch series. + *
+ * @return null
+ */
+function set_tz() {
+ $timezones = generate_timezone_list();
+ $update_cookie = false;
+
+ if (isset($_COOKIE["AURTZ"])) {
+ $TZ = $_COOKIE["AURTZ"]; It is quite confusing to use an upper case variable name here enough
though this no longer is a global variable. Something like $timezone
might be more appropriate. + } elseif (isset($_COOKIE["AURSID"])) {
+ $dbh = DB::connect();
+ $q = "SELECT Timezone FROM Users, Sessions ";
+ $q .= "WHERE Users.ID = Sessions.UsersID ";
+ $q .= "AND Sessions.SessionID = ";
+ $q .= $dbh->quote($_COOKIE["AURSID"]);
+ $result = $dbh->query($q);
+
+ if ($result) {
+ $row = $result->fetchAll();
+ $TZ = $row[0][0]; As I mentioned in an earlier review, this can be simplified as
$timezone = $result->fetchColumn(0);
already assuming that $TZ becomes $timezone. + } else {
+ $TZ = config_get("options", "default_timezone"); This else-branch is not needed. The default case is already handled
below. + }
+
+ $update_cookie = true;
+ }
+
+ if (isset($TZ) && array_key_exists($TZ, $timezones)) {
+ date_default_timezone_set($TZ);
+ } else {
+ $TZ = config_get("options", "default_timezone");
+ date_default_timezone_set($TZ);
+ } As I also mentioned in an earlier review, this can be simplified as
follows (also assuming that $TZ is replaced by $timezone):
if (!isset($timezone) || !array_key_exists($timezone, $timezones)) {
$timezone = config_get("options", "default_timezone");
}
date_default_timezone_set($timezone); +
+ if ($update_cookie) {
+ $timeout = intval(config_get("options", "persistent_cookie_timeout"));
+ $cookie_time = time() + $timeout;
+ setcookie("AURTZ", $TZ, $cookie_time, "/");
+ }
+}
diff --git a/web/template/account_edit_form.php b/web/template/account_edit_form.php
index 19821a0..8b207e7 100644
--- a/web/template/account_edit_form.php
+++ b/web/template/account_edit_form.php
@@ -129,6 +129,24 @@
?>
</select>
</p>
+ <p>
+ <label for="id_timezone"><?= __("Timezone") ?></label>
+ <select name="TZ" id="id_timezone">
+
Broken indentation. I also think this if-block belongs to
display_account_form() and should be executed before
account_edit_form.php is included. + if ($TZ == $key) {
+ print " <fieldset>
[...] Looks good otherwise! Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone.
Signed-off-by: Mark Weiman Currently, when a user edits their language setting from the edit user form,
the changes aren't reflected until the user either lets the original cookie
expire, deletes the cookie manually, or changes the language a second time via
the dropdown menu on the top of the page. This patch makes the language cookie
get updated when it is changed from the edit user form.
Signed-off-by: Mark Weiman Modify the call to process_account_form() to only having one parameter per
line.
Signed-off-by: Mark Weiman On Fri, 20 Jan 2017 at 07:16:39, Mark Weiman wrote: Currently, aurweb displays all dates and times in UTC time. This patch
adds a capability for each logged in user to set their preferred
timezone. Signed-off-by: Mark Weiman This looks all good to me now. I added a reference to FS#48729 to the
commit message and merged the result to pu. There was a small merge
conflict but everything should be fine.
Thanks for working on this and thanks for all those rerolls!
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= gmdate("Y-m-d H:i", tz_timestamp(intval($row['RequestTS']))) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..2addf0a 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= gmdate("Y-m-d H:i", tz_timestamp(intval($row["ModifiedTS"]))); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..b0f77cd 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", tz_timestamp($row['Submitted'])), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= gmdate("Y-m-d H:i", tz_timestamp($row['End'])) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..707169b 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= gmdate("Y-m-d", tz_timestamp($row["Submitted"])) ?></td>
+ <td><?= gmdate("Y-m-d", tz_timestamp($row["End"])) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.10.2
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= gmdate("Y-m-d H:i", tz_timestamp(intval($row['RequestTS']))) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..2addf0a 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= gmdate("Y-m-d H:i", tz_timestamp(intval($row["ModifiedTS"]))); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..b0f77cd 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", tz_timestamp($row['Submitted'])), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= gmdate("Y-m-d H:i", tz_timestamp($row['End'])) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..707169b 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= gmdate("Y-m-d", tz_timestamp($row["Submitted"])) ?></td>
+ <td><?= gmdate("Y-m-d", tz_timestamp($row["End"])) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.10.2
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= date("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..b4c6215 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= date("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..d739060 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", date("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= date("Y-m-d H:i", $row['End']) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..b7253f9 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= date("Y-m-d", $row["Submitted"]) ?></td>
+ <td><?= date("Y-m-d", $row["End"]) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.11.0
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= date("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..b4c6215 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= date("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..d739060 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", date("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= date("Y-m-d H:i", $row['End']) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..b7253f9 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= date("Y-m-d", $row["Submitted"]) ?></td>
+ <td><?= date("Y-m-d", $row["End"]) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.11.0
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= date("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..b4c6215 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= date("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..d739060 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", date("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= date("Y-m-d H:i", $row['End']) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..b7253f9 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= date("Y-m-d", $row["Submitted"]) ?></td>
+ <td><?= date("Y-m-d", $row["End"]) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.11.0
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= date("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..b4c6215 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= date("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..d739060 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", date("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= date("Y-m-d H:i", $row['End']) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..b7253f9 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= date("Y-m-d", $row["Submitted"]) ?></td>
+ <td><?= date("Y-m-d", $row["End"]) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.11.0
<?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?= date("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
<?php if ($row['Open']): ?>
<td>
<?php if ($row['BaseID']): ?>
diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php
index 580583b..b4c6215 100644
--- a/web/template/stats/updates_table.php
+++ b/web/template/stats/updates_table.php
@@ -10,7 +10,7 @@
<?= htmlspecialchars($row["Name"]) . ' ' . htmlspecialchars($row["Version"]); ?></a>
</td>
<td class="pkg-date">
- <span><?= gmdate("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
+ <span><?= date("Y-m-d H:i", intval($row["ModifiedTS"])); ?></span>
</td>
</tr>
<?php endforeach; ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 38f6c0d..d739060 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -39,10 +39,10 @@ if ($yes > $active_tus / 2) {
<?php endif; ?>
</strong>
<br />
- <?= __("Submitted: %s by %s", gmdate("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
+ <?= __("Submitted: %s by %s", date("Y-m-d H:i", $row['Submitted']), html_format_username(username_from_id($row['SubmitterID']))) ?>
<br />
<?= __("End") ?>:
- <strong><?= gmdate("Y-m-d H:i", $row['End']) ?></strong>
+ <strong><?= date("Y-m-d H:i", $row['End']) ?></strong>
<?php if ($isrunning == 0): ?>
<br />
<?= __("Result") ?>:
diff --git a/web/template/tu_list.php b/web/template/tu_list.php
index b3e1073..b7253f9 100644
--- a/web/template/tu_list.php
+++ b/web/template/tu_list.php
@@ -38,8 +38,8 @@
<td><?php $row["Agenda"] = htmlspecialchars(substr($row["Agenda"], 0, $prev_Len)); ?>
<a href="<?= get_uri('/tu/'); ?>?id=<?= $row['ID'] ?>"><?= $row["Agenda"] ?></a>
</td>
- <td><?= gmdate("Y-m-d", $row["Submitted"]) ?></td>
- <td><?= gmdate("Y-m-d", $row["End"]) ?></td>
+ <td><?= date("Y-m-d", $row["Submitted"]) ?></td>
+ <td><?= date("Y-m-d", $row["End"]) ?></td>
<td>
<?php if (!empty($row['User'])): ?>
<a href="<?= get_uri('/packages/'); ?>?K=<?= $row['User'] ?>&SeB=m"><?= $row['User'] ?></a>
--
2.11.0
participants (3)