diff --git a/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-09-24.sql b/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-09-24.sql new file mode 100644 index 0000000000000..44d3d133d2496 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-09-24.sql @@ -0,0 +1,6 @@ +-- +-- Add previousvisitDate to #__users +-- + +ALTER TABLE `#__users` + ADD COLUMN `previousvisitDate` datetime AFTER `lastvisitDate` /** CAN FAIL **/; diff --git a/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-09-24.sql b/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-09-24.sql new file mode 100644 index 0000000000000..f662b04d1c40f --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-09-24.sql @@ -0,0 +1,6 @@ +-- +-- Add previousvisitDate to #__users +-- + +ALTER TABLE "#__users" + ADD COLUMN "previousvisitDate" timestamp without time zone /** CAN FAIL **/; diff --git a/administrator/components/com_users/forms/filter_users.xml b/administrator/components/com_users/forms/filter_users.xml index b8222f240e19b..3939295c995c7 100644 --- a/administrator/components/com_users/forms/filter_users.xml +++ b/administrator/components/com_users/forms/filter_users.xml @@ -82,6 +82,8 @@ + + diff --git a/administrator/components/com_users/forms/user.xml b/administrator/components/com_users/forms/user.xml index 199662a2c8207..8b8e70faae4aa 100644 --- a/administrator/components/com_users/forms/user.xml +++ b/administrator/components/com_users/forms/user.xml @@ -71,6 +71,17 @@ filter="user_utc" /> + + + + + @@ -195,6 +198,13 @@ + + previousvisitDate !== null) : ?> + previousvisitDate, Text::_('DATE_FORMAT_LC6')); ?> + + + + registerDate, Text::_('DATE_FORMAT_LC6')); ?> diff --git a/administrator/language/en-GB/com_users.ini b/administrator/language/en-GB/com_users.ini index 1cd983eb0de7f..0ea23bef9879e 100644 --- a/administrator/language/en-GB/com_users.ini +++ b/administrator/language/en-GB/com_users.ini @@ -184,6 +184,9 @@ COM_USERS_HEADING_LFT_ASC="LFT ascending" COM_USERS_HEADING_LFT_DESC="LFT descending" COM_USERS_HEADING_MFA="MFA" COM_USERS_HEADING_NAME="Name" +COM_USERS_HEADING_PREVIOUS_VISIT_DATE="Previous Visit" +COM_USERS_HEADING_PREVIOUS_VISIT_DATE_ASC="Previous visit date ascending" +COM_USERS_HEADING_PREVIOUS_VISIT_DATE_DESC="Previous visit date descending" COM_USERS_HEADING_REGISTRATION_DATE="Registered" COM_USERS_HEADING_REGISTRATION_DATE_ASC="Registration date ascending" COM_USERS_HEADING_REGISTRATION_DATE_DESC="Registration date descending" @@ -424,6 +427,7 @@ COM_USERS_USER_FIELD_NAME_LABEL="Name" COM_USERS_USER_FIELD_NOCHANGE_USERNAME_DESC="If you want to change your Username, please contact a site administrator." COM_USERS_USER_FIELD_PASSWORD1_MESSAGE="The passwords you entered do not match. Please enter your desired password in the password field and confirm your entry by entering it in the confirm password field." COM_USERS_USER_FIELD_PASSWORD2_LABEL="Confirm Password" +COM_USERS_USER_FIELD_PREVIOUSVISIT_LABEL="Previous Visit Date" COM_USERS_USER_FIELD_REGISTERDATE_LABEL="Registration Date" COM_USERS_USER_FIELD_REQUIRERESET_LABEL="Require Password Reset" COM_USERS_USER_FIELD_RESETCOUNT_LABEL="Password Reset Count" diff --git a/installation/sql/mysql/base.sql b/installation/sql/mysql/base.sql index 61180d9da653b..4d1f72a18124c 100644 --- a/installation/sql/mysql/base.sql +++ b/installation/sql/mysql/base.sql @@ -1003,6 +1003,7 @@ CREATE TABLE IF NOT EXISTS `#__users` ( `sendEmail` tinyint DEFAULT 0, `registerDate` datetime NOT NULL, `lastvisitDate` datetime, + `previousvisitDate` datetime, `activation` varchar(100) NOT NULL DEFAULT '', `params` text NOT NULL, `lastResetTime` datetime COMMENT 'Date of last password reset', diff --git a/installation/sql/postgresql/base.sql b/installation/sql/postgresql/base.sql index 2916c3f99c7a1..e2fbc966d8ce4 100644 --- a/installation/sql/postgresql/base.sql +++ b/installation/sql/postgresql/base.sql @@ -1026,6 +1026,7 @@ CREATE TABLE IF NOT EXISTS "#__users" ( "sendEmail" smallint DEFAULT 0, "registerDate" timestamp without time zone NOT NULL, "lastvisitDate" timestamp without time zone, + "previousvisitDate" timestamp without time zone, "activation" varchar(100) DEFAULT '' NOT NULL, "params" text NOT NULL, "lastResetTime" timestamp without time zone, diff --git a/libraries/src/Table/User.php b/libraries/src/Table/User.php index 74796b681cb24..a3a020dd16f9c 100644 --- a/libraries/src/Table/User.php +++ b/libraries/src/Table/User.php @@ -247,6 +247,11 @@ public function check() $this->lastvisitDate = null; } + // Set the previousvisitDate timestamp + if (empty($this->previousvisitDate)) { + $this->previousvisitDate = null; + } + // Set the lastResetTime timestamp if (empty($this->lastResetTime)) { $this->lastResetTime = null; @@ -535,6 +540,7 @@ public function setLastVisit($timeStamp = null, $userId = null) $db = $this->getDatabase(); $query = $db->createQuery() ->update($db->quoteName($this->_tbl)) + ->set($db->quoteName('previousvisitDate') . ' = ' . $db->quoteName('lastvisitDate')) ->set($db->quoteName('lastvisitDate') . ' = :lastvisitDate') ->where($db->quoteName('id') . ' = :id') ->bind(':lastvisitDate', $lastVisit) diff --git a/libraries/src/User/User.php b/libraries/src/User/User.php index cef076750124b..2de0c8b90ca8a 100644 --- a/libraries/src/User/User.php +++ b/libraries/src/User/User.php @@ -127,6 +127,14 @@ class User */ public $lastvisitDate = null; + /** + * Date of previous visit + * + * @var string + * @since __DEPLOY_VERSION__ + */ + public $previousvisitDate = null; + /** * Activation hash *