From fd7f72373ccc886b791625022acab6bb14388ace Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:26:54 +0100 Subject: [PATCH 01/16] Update mod_users_latest.xml --- modules/mod_users_latest/mod_users_latest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mod_users_latest/mod_users_latest.xml b/modules/mod_users_latest/mod_users_latest.xml index ea02cef6197bd..45e175fbb52ea 100644 --- a/modules/mod_users_latest/mod_users_latest.xml +++ b/modules/mod_users_latest/mod_users_latest.xml @@ -11,7 +11,7 @@ MOD_USERS_LATEST_XML_DESCRIPTION Joomla\Module\UsersLatest - mod_users_latest.php + mod_users_latest.php src tmpl From 359a1d3172b28747757490b71296b0eb3b23ac1f Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:33:20 +0100 Subject: [PATCH 02/16] Update UsersLatestHelper.php --- .../src/Helper/UsersLatestHelper.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php index be582ef87bb7f..3472b924cd2f9 100644 --- a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php +++ b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php @@ -10,8 +10,12 @@ namespace Joomla\Module\UsersLatest\Site\Helper; +use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; +use Joomla\Database\DatabaseAwareInterface; +use Joomla\Database\DatabaseAwareTrait; +use Joomla\Registry\Registry; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -22,25 +26,28 @@ * * @since 1.6 */ -class UsersLatestHelper +class UsersLatestHelper implements DatabaseAwareInterface { + use DatabaseAwareTrait; + /** * Get users sorted by activation date * - * @param \Joomla\Registry\Registry $params module parameters + * @param Registry $params Object holding the models parameters + * @param SiteApplication $app The app * * @return array The array of users * - * @since 1.6 + * @since __DEPLOY_VERSION__ */ - public static function getUsers($params) + public function getUsers(Registry $params, SiteApplication $app): array { - $db = Factory::getDbo(); + $db = $this->getDatabase(); $query = $db->getQuery(true) ->select($db->quoteName(['a.id', 'a.name', 'a.username', 'a.registerDate'])) ->order($db->quoteName('a.registerDate') . ' DESC') ->from($db->quoteName('#__users', 'a')); - $user = Factory::getUser(); + $user = $app->getIdentity(); if (!$user->authorise('core.admin') && $params->get('filter_groups', 0) == 1) { $groups = $user->getAuthorisedGroups(); From a3a20087da55182174f1128d9afa24fa2f147d62 Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:37:25 +0100 Subject: [PATCH 03/16] Create Dispatcher.php --- .../Dispatcher/Dispatcher.php | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 modules/mod_users_latest/Dispatcher/Dispatcher.php diff --git a/modules/mod_users_latest/Dispatcher/Dispatcher.php b/modules/mod_users_latest/Dispatcher/Dispatcher.php new file mode 100644 index 0000000000000..a349fa84ed314 --- /dev/null +++ b/modules/mod_users_latest/Dispatcher/Dispatcher.php @@ -0,0 +1,45 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Module\UsersLatest\Site\Dispatcher; + +use Joomla\CMS\Dispatcher\AbstractModuleDispatcher; +use Joomla\CMS\Helper\HelperFactoryAwareInterface; +use Joomla\CMS\Helper\HelperFactoryAwareTrait; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Dispatcher class for mod_users_latest + * + * @since __DEPLOY_VERSION__ + */ +class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface +{ + use HelperFactoryAwareTrait; + + /** + * Returns the layout data. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + protected function getLayoutData(): array + { + $data = parent::getLayoutData(); + + $data['names'] = $this->getHelperFactory()->getHelper('UsersLatestHelper')->getUsers($data['params'], $this->getApplication()); + + return $data; + } +} From 3da64f38aef5e9186b19b643a4a62a368b1162c1 Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:39:16 +0100 Subject: [PATCH 04/16] Delete modules/mod_users_latest/Dispatcher directory --- .../Dispatcher/Dispatcher.php | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 modules/mod_users_latest/Dispatcher/Dispatcher.php diff --git a/modules/mod_users_latest/Dispatcher/Dispatcher.php b/modules/mod_users_latest/Dispatcher/Dispatcher.php deleted file mode 100644 index a349fa84ed314..0000000000000 --- a/modules/mod_users_latest/Dispatcher/Dispatcher.php +++ /dev/null @@ -1,45 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -namespace Joomla\Module\UsersLatest\Site\Dispatcher; - -use Joomla\CMS\Dispatcher\AbstractModuleDispatcher; -use Joomla\CMS\Helper\HelperFactoryAwareInterface; -use Joomla\CMS\Helper\HelperFactoryAwareTrait; - -// phpcs:disable PSR1.Files.SideEffects -\defined('_JEXEC') or die; -// phpcs:enable PSR1.Files.SideEffects - -/** - * Dispatcher class for mod_users_latest - * - * @since __DEPLOY_VERSION__ - */ -class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface -{ - use HelperFactoryAwareTrait; - - /** - * Returns the layout data. - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - protected function getLayoutData(): array - { - $data = parent::getLayoutData(); - - $data['names'] = $this->getHelperFactory()->getHelper('UsersLatestHelper')->getUsers($data['params'], $this->getApplication()); - - return $data; - } -} From 2635a341c3fd95e957499c15290b85a1a706ffed Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:40:03 +0100 Subject: [PATCH 05/16] Create provider.php --- .../mod_users_latest/services/provider.php | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 modules/mod_users_latest/services/provider.php diff --git a/modules/mod_users_latest/services/provider.php b/modules/mod_users_latest/services/provider.php new file mode 100644 index 0000000000000..5f25766b1b754 --- /dev/null +++ b/modules/mod_users_latest/services/provider.php @@ -0,0 +1,41 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Extension\Service\Provider\HelperFactory; +use Joomla\CMS\Extension\Service\Provider\Module; +use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory; +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; + +/** + * The users latest module service provider. + * + * @since __DEPLOY_VERSION__ + */ +return new class () implements ServiceProviderInterface { + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function register(Container $container): void + { + $container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\UsersLatest')); + $container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\UsersLatest\\Site\\Helper')); + + $container->registerServiceProvider(new Module()); + } +}; From a11eed6f75dbc88e9cb36ec698a63b97ebf17679 Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:41:09 +0100 Subject: [PATCH 06/16] Create Dispatcher.php --- .../src/Dispatcher/Dispatcher.php | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 modules/mod_users_latest/src/Dispatcher/Dispatcher.php diff --git a/modules/mod_users_latest/src/Dispatcher/Dispatcher.php b/modules/mod_users_latest/src/Dispatcher/Dispatcher.php new file mode 100644 index 0000000000000..a349fa84ed314 --- /dev/null +++ b/modules/mod_users_latest/src/Dispatcher/Dispatcher.php @@ -0,0 +1,45 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Module\UsersLatest\Site\Dispatcher; + +use Joomla\CMS\Dispatcher\AbstractModuleDispatcher; +use Joomla\CMS\Helper\HelperFactoryAwareInterface; +use Joomla\CMS\Helper\HelperFactoryAwareTrait; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Dispatcher class for mod_users_latest + * + * @since __DEPLOY_VERSION__ + */ +class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface +{ + use HelperFactoryAwareTrait; + + /** + * Returns the layout data. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + protected function getLayoutData(): array + { + $data = parent::getLayoutData(); + + $data['names'] = $this->getHelperFactory()->getHelper('UsersLatestHelper')->getUsers($data['params'], $this->getApplication()); + + return $data; + } +} From 3775d605de2e93dd0d40a878e3d5dc28817b4091 Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 08:41:33 +0100 Subject: [PATCH 07/16] Delete mod_users_latest.php --- modules/mod_users_latest/mod_users_latest.php | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 modules/mod_users_latest/mod_users_latest.php diff --git a/modules/mod_users_latest/mod_users_latest.php b/modules/mod_users_latest/mod_users_latest.php deleted file mode 100644 index a15c7b3f92dcd..0000000000000 --- a/modules/mod_users_latest/mod_users_latest.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Helper\ModuleHelper; -use Joomla\Module\UsersLatest\Site\Helper\UsersLatestHelper; - -$shownumber = $params->get('shownumber', 5); -$names = UsersLatestHelper::getUsers($params); - -require ModuleHelper::getLayoutPath('mod_users_latest', $params->get('layout', 'default')); From bd7d66a2963dc4e4d0ae5a9a62bb39db066ad67f Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 09:39:56 +0100 Subject: [PATCH 08/16] Delete Factory class Delete Factory class --- modules/mod_users_latest/src/Helper/UsersLatestHelper.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php index 3472b924cd2f9..1a0e719aec375 100644 --- a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php +++ b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php @@ -11,7 +11,6 @@ namespace Joomla\Module\UsersLatest\Site\Helper; use Joomla\CMS\Application\SiteApplication; -use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\Database\DatabaseAwareInterface; use Joomla\Database\DatabaseAwareTrait; @@ -68,7 +67,7 @@ public function getUsers(Registry $params, SiteApplication $app): array try { return (array) $db->loadObjectList(); } catch (\RuntimeException $e) { - Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error'); + $app->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error'); return []; } From 12e174a1078253df269a765faf89304f1fe8fc2d Mon Sep 17 00:00:00 2001 From: jsanders Date: Mon, 13 Mar 2023 14:30:57 +0100 Subject: [PATCH 09/16] services `folder module="mod_users_latest">mod_users_latest.php` becomes `services` --- modules/mod_users_latest/mod_users_latest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mod_users_latest/mod_users_latest.xml b/modules/mod_users_latest/mod_users_latest.xml index 45e175fbb52ea..d4b1fd442e10e 100644 --- a/modules/mod_users_latest/mod_users_latest.xml +++ b/modules/mod_users_latest/mod_users_latest.xml @@ -11,7 +11,7 @@ MOD_USERS_LATEST_XML_DESCRIPTION Joomla\Module\UsersLatest - mod_users_latest.php + services src tmpl From ae75c3a109adad4a962091f70f82cbd1c2a5345b Mon Sep 17 00:00:00 2001 From: jsanders Date: Tue, 14 Mar 2023 07:57:25 +0100 Subject: [PATCH 10/16] cleaner code replace $user = $app->getIdentity(); --- modules/mod_users_latest/src/Helper/UsersLatestHelper.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php index 1a0e719aec375..bd47aac698daa 100644 --- a/modules/mod_users_latest/src/Helper/UsersLatestHelper.php +++ b/modules/mod_users_latest/src/Helper/UsersLatestHelper.php @@ -41,12 +41,14 @@ class UsersLatestHelper implements DatabaseAwareInterface */ public function getUsers(Registry $params, SiteApplication $app): array { - $db = $this->getDatabase(); + // Get the Dbo and User object + $db = $this->getDatabase(); + $user = $app->getIdentity(); + $query = $db->getQuery(true) ->select($db->quoteName(['a.id', 'a.name', 'a.username', 'a.registerDate'])) ->order($db->quoteName('a.registerDate') . ' DESC') ->from($db->quoteName('#__users', 'a')); - $user = $app->getIdentity(); if (!$user->authorise('core.admin') && $params->get('filter_groups', 0) == 1) { $groups = $user->getAuthorisedGroups(); From a2d195ef16573697df51dfd0ab3d2ed698a8124f Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 08:13:16 +0100 Subject: [PATCH 11/16] Add mod_users_latest system test mod_users_latest system test --- .../site/modules/mod_users_latest/Default.cy.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js diff --git a/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js new file mode 100644 index 0000000000000..19b2cf6836ea7 --- /dev/null +++ b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js @@ -0,0 +1,9 @@ +describe('Test that the users latest module', () => { + it('can load in frontend and displays the latest registered users', () => { + cy.db_createModule({ module: 'mod_users_latest' }).then(() => { + cy.visit('/'); + + cy.contains(Latest Registered Users'); + }); + }); +}); From 4bf20a6479623212b34180f5b45d2105f5513098 Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 08:41:47 +0100 Subject: [PATCH 12/16] correction syntax error --- .../integration/site/modules/mod_users_latest/Default.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js index 19b2cf6836ea7..a049cd7cc96b5 100644 --- a/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js +++ b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js @@ -3,7 +3,7 @@ describe('Test that the users latest module', () => { cy.db_createModule({ module: 'mod_users_latest' }).then(() => { cy.visit('/'); - cy.contains(Latest Registered Users'); + cy.contains('Latest Registered Users'); }); }); }); From ef5d5a08fb9a920418459ff63316cc2f0d515a0a Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 12:19:24 +0100 Subject: [PATCH 13/16] replace code --- .../site/modules/mod_users_latest/Default.cy.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js index a049cd7cc96b5..1d2083edf870d 100644 --- a/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js +++ b/tests/cypress/integration/site/modules/mod_users_latest/Default.cy.js @@ -1,9 +1,11 @@ describe('Test that the users latest module', () => { it('can load in frontend and displays the latest registered users', () => { - cy.db_createModule({ module: 'mod_users_latest' }).then(() => { - cy.visit('/'); + cy.db_createUser({ username: 'automatedtestuser' }) + .then(() => cy.db_createModule({ module: 'mod_users_latest' })) + .then(() => { + cy.visit('/'); - cy.contains('Latest Registered Users'); - }); + cy.contains('automatedtestuser'); + }); }); }); From 529c764759f5d7c83771b63c1b677a44c438ad5c Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 12:27:54 +0100 Subject: [PATCH 14/16] create a user create a user for the test --- tests/cypress/support/commands/db.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/cypress/support/commands/db.js b/tests/cypress/support/commands/db.js index fe7a870343006..3d745063b28d2 100644 --- a/tests/cypress/support/commands/db.js +++ b/tests/cypress/support/commands/db.js @@ -60,6 +60,24 @@ Cypress.Commands.add('db_createModule', (module) => { ); }); +Cypress.Commands.add('db_createUser', (user) => { + const defaultUserOptions = { + name: 'test user', + username: 'test', + email: 'test@example.com', + password: '098f6bcd4621d373cade4e832627b4f6', // Is the md5 of the word 'test' + block: 0 + }; + user = { ...defaultUserOptions, ...user }; + + const groupId = user.group_id ?? 2; // Default the group id to registered + delete user.group_id; + + return cy.task('queryDB', createInsertQuery('users', user)).then((info) => { + cy.task('queryDB', "INSERT INTO #__user_usergroup_map (user_id, group_id) VALUES ('" + info.insertId + "', '" + groupId + "')").then(() => info); + }); +}); + /** * Returns an insert query for the given database and fields. * From f3c31cf535a63f4739145a2c72bf97d89f628ab6 Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 12:45:30 +0100 Subject: [PATCH 15/16] add registerDate registerDate: '2023-03-01 20:00:00' --- tests/cypress/support/commands/db.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/cypress/support/commands/db.js b/tests/cypress/support/commands/db.js index 3d745063b28d2..c30604a2c9fc9 100644 --- a/tests/cypress/support/commands/db.js +++ b/tests/cypress/support/commands/db.js @@ -66,7 +66,8 @@ Cypress.Commands.add('db_createUser', (user) => { username: 'test', email: 'test@example.com', password: '098f6bcd4621d373cade4e832627b4f6', // Is the md5 of the word 'test' - block: 0 + block: 0, + registerDate: '2023-03-01 20:00:00' }; user = { ...defaultUserOptions, ...user }; From 8164600983e3c468cc31c089f143300530ff5145 Mon Sep 17 00:00:00 2001 From: jsanders Date: Wed, 15 Mar 2023 13:01:40 +0100 Subject: [PATCH 16/16] add params params: '' --- tests/cypress/support/commands/db.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/cypress/support/commands/db.js b/tests/cypress/support/commands/db.js index c30604a2c9fc9..efc24c5f985ba 100644 --- a/tests/cypress/support/commands/db.js +++ b/tests/cypress/support/commands/db.js @@ -67,7 +67,8 @@ Cypress.Commands.add('db_createUser', (user) => { email: 'test@example.com', password: '098f6bcd4621d373cade4e832627b4f6', // Is the md5 of the word 'test' block: 0, - registerDate: '2023-03-01 20:00:00' + registerDate: '2023-03-01 20:00:00', + params: '' }; user = { ...defaultUserOptions, ...user };