From 6d2e8ec2a87581d51421d0f1e44d7fcb0e737651 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Sat, 14 Jan 2023 19:29:55 -0500 Subject: [PATCH 01/22] add the js to the build --- .../media_source/com_users/joomla.asset.json | 41 ++++++++----------- .../com_users/js/active-user-send-mail.es6.js | 8 ++++ 2 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 build/media_source/com_users/js/active-user-send-mail.es6.js diff --git a/build/media_source/com_users/joomla.asset.json b/build/media_source/com_users/joomla.asset.json index d313d57c9f722..d19e77bceb999 100644 --- a/build/media_source/com_users/joomla.asset.json +++ b/build/media_source/com_users/joomla.asset.json @@ -9,9 +9,7 @@ "name": "com_users.admin-users-groups.es5", "type": "script", "uri": "com_users/admin-users-groups-es5.min.js", - "dependencies": [ - "core" - ], + "dependencies": ["core"], "attributes": { "nomodule": true, "defer": true @@ -21,9 +19,7 @@ "name": "com_users.admin-users-groups", "type": "script", "uri": "com_users/admin-users-groups.min.js", - "dependencies": [ - "core" - ], + "dependencies": ["core"], "attributes": { "type": "module" } @@ -32,9 +28,7 @@ "name": "com_users.admin-users-mail.es5", "type": "script", "uri": "com_users/admin-users-mail-es5.min.js", - "dependencies": [ - "core" - ], + "dependencies": ["core"], "attributes": { "nomodule": true, "defer": true @@ -44,9 +38,7 @@ "name": "com_users.admin-users-mail", "type": "script", "uri": "com_users/admin-users-mail.min.js", - "dependencies": [ - "com_users.admin-users-mail.es5" - ], + "dependencies": ["com_users.admin-users-mail.es5"], "attributes": { "type": "module" } @@ -55,9 +47,7 @@ "name": "com_users.two-factor-focus.es5", "type": "script", "uri": "com_users/two-factor-focus-es5.min.js", - "dependencies": [ - "core" - ], + "dependencies": ["core"], "attributes": { "nomodule": true, "defer": true @@ -67,9 +57,7 @@ "name": "com_users.two-factor-focus", "type": "script", "uri": "com_users/two-factor-focus.min.js", - "dependencies": [ - "com_users.two-factor-focus.es5" - ], + "dependencies": ["com_users.two-factor-focus.es5"], "attributes": { "type": "module" } @@ -78,9 +66,7 @@ "name": "com_users.two-factor-list.es5", "type": "script", "uri": "com_users/two-factor-list-es5.min.js", - "dependencies": [ - "core" - ], + "dependencies": ["core"], "attributes": { "nomodule": true, "defer": true @@ -90,9 +76,16 @@ "name": "com_users.two-factor-list", "type": "script", "uri": "com_users/two-factor-list.min.js", - "dependencies": [ - "com_users.two-factor-list.es5" - ], + "dependencies": ["com_users.two-factor-list.es5"], + "attributes": { + "type": "module" + } + }, + { + "name": "com_users.active-user-send-mail", + "type": "script", + "uri": "com_users/active-user-send-mail", + "dependencies": ["core"], "attributes": { "type": "module" } diff --git a/build/media_source/com_users/js/active-user-send-mail.es6.js b/build/media_source/com_users/js/active-user-send-mail.es6.js new file mode 100644 index 0000000000000..921a5ce38df40 --- /dev/null +++ b/build/media_source/com_users/js/active-user-send-mail.es6.js @@ -0,0 +1,8 @@ +/** + * @copyright (C) 2019 Open Source Matters, Inc. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +if (!Joomla) { + throw new Error("Joomla API was not properly initialized"); +} From 4a9039591180dc39676588ad2b305460201cb2f2 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 13:20:02 -0500 Subject: [PATCH 02/22] activate the user and send a notification --- .../src/Controller/UserController.php | 32 ++++++ .../com_users/src/Model/UserModel.php | 106 +++++++++++++----- .../com_users/src/View/User/HtmlView.php | 21 ++++ .../components/com_users/tmpl/user/edit.php | 4 +- administrator/language/en-GB/com_users.ini | 2 + .../media_source/com_users/joomla.asset.json | 2 +- .../com_users/js/active-user-send-mail.es6.js | 46 ++++++++ 7 files changed, 181 insertions(+), 32 deletions(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index c319bf693dbf9..e910a2b34c68b 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -11,8 +11,10 @@ namespace Joomla\Component\Users\Administrator\Controller; use Joomla\CMS\Access\Access; +use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\FormController; use Joomla\CMS\MVC\Model\BaseDatabaseModel; +use Joomla\CMS\Response\JsonResponse; use Joomla\CMS\Router\Route; use Joomla\CMS\Uri\Uri; @@ -160,4 +162,34 @@ public function batch($model = null) protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) { } + + /** + * Get the XHR request for active a user + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function active(): void + { + // Get the ID of the user sended trought media/com_users/js/active-user-send-mail + $userId = $this->input->getString('userid', ''); + + // Prepare the default response + $responseError = false; + $responseData = [$userId]; + $responseMessage = null; + + // Set the model + $model = $this->getModel('User', 'Administrator', []); + + // Active the user and send the email + $responseError = $model->activate($userId); + + if (!$responseError) { + $responseMessage = $model->getError(); + } + + echo new JsonResponse($responseData, $responseMessage, $responseError); + } } diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index 50abcaf313db8..e60c0e78c997d 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -221,10 +221,10 @@ protected function preprocessForm(Form $form, $data, $group = 'user') */ public function save($data) { - $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('user.id'); - $user = User::getInstance($pk); + $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('user.id'); + $user = User::getInstance($pk); - $my = $this->getCurrentUser(); + $my = $this->getCurrentUser(); $iAmSuperAdmin = $my->authorise('core.admin'); // User cannot modify own user groups @@ -252,7 +252,7 @@ public function save($data) if ($iAmSuperAdmin && $my->get('id') == $pk) { // Check that at least one of our new groups is Super Admin $stillSuperAdmin = false; - $myNewGroups = $data['groups']; + $myNewGroups = $data['groups']; foreach ($myNewGroups as $group) { $stillSuperAdmin = $stillSuperAdmin ?: Access::checkGroup($group, 'core.admin'); @@ -301,9 +301,9 @@ public function save($data) */ public function delete(&$pks) { - $user = $this->getCurrentUser(); - $table = $this->getTable(); - $pks = (array) $pks; + $user = $this->getCurrentUser(); + $table = $this->getTable(); + $pks = (array) $pks; // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); @@ -368,8 +368,8 @@ public function delete(&$pks) */ public function block(&$pks, $value = 1) { - $app = Factory::getApplication(); - $user = $this->getCurrentUser(); + $app = Factory::getApplication(); + $user = $this->getCurrentUser(); // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); @@ -467,31 +467,74 @@ public function block(&$pks, $value = 1) * * @return boolean True on success. * - * @since 1.6 + * @since __DEPLOY_VERSION__ * @throws \Exception */ public function activate(&$pks) { - $user = $this->getCurrentUser(); + $app = Factory::getApplication(); + $user = $app->getIdentity(); - // Check if I am a Super Admin + // Check if I am a super admin $iAmSuperAdmin = $user->authorise('core.admin'); + + // Load user table $table = $this->getTable(); $pks = (array) $pks; + // Compile the user activated notification mail values. + $sendMailTo = function ($userMail) use ($app) + { + $mailData = []; + $mailData['fromname'] = $app->get('fromname'); + $mailData['mailfrom'] = $app->get('mailfrom'); + $mailData['sitename'] = $app->get('sitename'); + $mailData['siteurl'] = \Joomla\CMS\Uri\Uri::base(); + + $mailer = new \Joomla\CMS\Mail\MailTemplate('com_users.registration.user.admin_activated', $app->getLanguage()->getTag()); + $mailer->addTemplateData($mailData); + $mailer->addRecipient($userMail); + + try { + $return = $mailer->send(); + } catch (\Exception $exception) { + try { + \Joomla\CMS\Log\Log::add(Text::_($exception->getMessage()), \Joomla\CMS\Log\Log::WARNING, 'jerror'); + + $return = false; + } catch (\RuntimeException $exception) { + $app->enqueueMessage(Text::_($exception->errorMessage()), 'warning'); + + $return = false; + } + } + + // Check for an error. + if ($return !== true) { + $this->setError(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); + + return false; + } + }; + PluginHelper::importPlugin($this->events_map['save']); - // Access checks. + // Activate and send the notification email foreach ($pks as $i => $pk) { if ($table->load($pk)) { - $old = $table->getProperties(); - $allow = $user->authorise('core.edit.state', 'com_users'); + $prevUserData = $table->getProperties(); + $allow = $user->authorise('core.edit.state', 'com_users'); - // Don't allow non-super-admin to delete a super admin - $allow = (!$iAmSuperAdmin && Access::check($pk, 'core.admin')) ? false : $allow; + // Don't allow non-super-admin to edit the active status of a super admin + $allow = (!$iAmSuperAdmin && Access::check($pk, 'core.admin')) ? false : $allow; + // Ignore activated accounts but check if we can still + // resend the notification email if (empty($table->activation)) { - // Ignore activated accounts. + if (\is_null($table->lastvisitDate)) { + $sendMailTo($prevUserData['email']); + } + unset($pks[$i]); } elseif ($allow) { $table->block = 0; @@ -506,7 +549,7 @@ public function activate(&$pks) } // Trigger the before save event. - $result = Factory::getApplication()->triggerEvent($this->event_before_save, array($old, false, $table->getProperties())); + $result = Factory::getApplication()->triggerEvent($this->event_before_save, array($prevUserData, false, $table->getProperties())); if (in_array(false, $result, true)) { // Plugin will have to raise it's own error or throw an exception. @@ -522,6 +565,9 @@ public function activate(&$pks) // Fire the after save event Factory::getApplication()->triggerEvent($this->event_after_save, [$table->getProperties(), false, true, null]); + + // Send the email + $sendMailTo($prevUserData['email']); } catch (\Exception $e) { $this->setError($e->getMessage()); @@ -530,7 +576,7 @@ public function activate(&$pks) } else { // Prune items that you can't change. unset($pks[$i]); - Factory::getApplication()->enqueueMessage(Text::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 'error'); + $app->enqueueMessage(Text::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 'error'); } } } @@ -610,7 +656,7 @@ public function batch($commands, $pks, $contexts) */ public function batchReset($userIds, $action) { - $userIds = ArrayHelper::toInteger($userIds); + $userIds = ArrayHelper::toInteger($userIds); // Check if I am a Super Admin $iAmSuperAdmin = $this->getCurrentUser()->authorise('core.admin'); @@ -639,11 +685,11 @@ public function batchReset($userIds, $action) } // Get the DB object - $db = $this->getDatabase(); + $db = $this->getDatabase(); $userIds = ArrayHelper::toInteger($userIds); - $query = $db->getQuery(true); + $query = $db->getQuery(true); // Update the reset flag $query->update($db->quoteName('#__users')) @@ -677,7 +723,7 @@ public function batchReset($userIds, $action) */ public function batchUser($groupId, $userIds, $action) { - $userIds = ArrayHelper::toInteger($userIds); + $userIds = ArrayHelper::toInteger($userIds); // Check if I am a Super Admin $iAmSuperAdmin = $this->getCurrentUser()->authorise('core.admin'); @@ -721,10 +767,10 @@ public function batchUser($groupId, $userIds, $action) // Remove the users from the group if requested. if (isset($doDelete)) { /* - * First we need to check that the user is part of more than one group - * otherwise we will end up with a user that is not part of any group - * unless we are moving the user to a new group. - */ + * First we need to check that the user is part of more than one group + * otherwise we will end up with a user that is not part of any group + * unless we are moving the user to a new group. + */ if ($doDelete === 'group') { $query = $db->getQuery(true); $query->select($db->quoteName('user_id')) @@ -865,8 +911,8 @@ public function getAssignedGroups($userId = null) $userId = (!empty($userId)) ? $userId : (int) $this->getState('user.id'); if (empty($userId)) { - $result = array(); - $form = $this->getForm(); + $result = array(); + $form = $this->getForm(); if ($form) { $groupsIDs = $form->getValue('groups'); diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index ea559e1f30fb2..4214d8948c326 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -17,6 +17,7 @@ use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Object\CMSObject; use Joomla\CMS\Toolbar\ToolbarHelper; +use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\User\User; use Joomla\CMS\User\UserFactoryInterface; use Joomla\Component\Users\Administrator\Helper\Mfa; @@ -150,6 +151,7 @@ protected function addToolbar() $canDo = ContentHelper::getActions('com_users'); $isNew = ($this->item->id == 0); $isProfile = $this->item->id == $user->id; + $toolbar = Toolbar::getInstance(); ToolbarHelper::title( Text::_( @@ -180,6 +182,25 @@ protected function addToolbar() ToolbarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); } + $userIsActived = empty($this->item->activation); + + if (!$userIsActived || \is_null($this->item->lastvisitDate)) { + $buttonText = !$userIsActived + ? Text::_('COM_USERS_USER_ACTIVATE_AND_MAIL') + : Text::_('COM_USERS_USER_ACTIVATION_REMINDER'); + + $toolbar->standardButton('activate', $buttonText) + ->buttonClass('btn activate-send-mail') + ->attributes([ + 'data-option' => 'com_users', + 'data-task' => 'user.active', + 'data-format' => 'json', + 'data-userid' => $this->item->id, + ]) + ->icon('icon-mail') + ->onclick(''); + } + ToolbarHelper::divider(); ToolbarHelper::help('Users:_Edit_Profile'); } diff --git a/administrator/components/com_users/tmpl/user/edit.php b/administrator/components/com_users/tmpl/user/edit.php index 030840760ec8e..d747db2c5f940 100644 --- a/administrator/components/com_users/tmpl/user/edit.php +++ b/administrator/components/com_users/tmpl/user/edit.php @@ -19,9 +19,11 @@ /** @var Joomla\Component\Users\Administrator\View\User\HtmlView $this */ /** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ + $wa = $this->document->getWebAssetManager(); $wa->useScript('keepalive') - ->useScript('form.validate'); + ->useScript('form.validate') + ->useScript('com_users.active-user-send-mail'); $input = Factory::getApplication()->getInput(); diff --git a/administrator/language/en-GB/com_users.ini b/administrator/language/en-GB/com_users.ini index 4f28f20acfd94..55acce1115982 100644 --- a/administrator/language/en-GB/com_users.ini +++ b/administrator/language/en-GB/com_users.ini @@ -397,6 +397,8 @@ COM_USERS_USERS_N_ITEMS_DELETED="%d users deleted." COM_USERS_USERS_N_ITEMS_DELETED_1="User deleted." COM_USERS_USERS_TABLE_CAPTION="Users" COM_USERS_USER_ACCOUNT_DETAILS="Account Details" +COM_USERS_USER_ACTIVATE_AND_MAIL="Activate and send email" +COM_USERS_USER_ACTIVATION_REMINDER="Send activation reminder" COM_USERS_USER_BACKUPCODE="Backup Code" COM_USERS_USER_BACKUPCODES="Backup Codes" COM_USERS_USER_BACKUPCODES_CAPTIVE_PROMPT="If you do not have access to your usual Multi-factor Authentication method use any of your Backup Codes in the field below. Please remember that this emergency backup code cannot be reused." diff --git a/build/media_source/com_users/joomla.asset.json b/build/media_source/com_users/joomla.asset.json index d19e77bceb999..d7154fb82d122 100644 --- a/build/media_source/com_users/joomla.asset.json +++ b/build/media_source/com_users/joomla.asset.json @@ -84,7 +84,7 @@ { "name": "com_users.active-user-send-mail", "type": "script", - "uri": "com_users/active-user-send-mail", + "uri": "com_users/active-user-send-mail.min.js", "dependencies": ["core"], "attributes": { "type": "module" diff --git a/build/media_source/com_users/js/active-user-send-mail.es6.js b/build/media_source/com_users/js/active-user-send-mail.es6.js index 921a5ce38df40..1c6969f704d26 100644 --- a/build/media_source/com_users/js/active-user-send-mail.es6.js +++ b/build/media_source/com_users/js/active-user-send-mail.es6.js @@ -6,3 +6,49 @@ if (!Joomla) { throw new Error("Joomla API was not properly initialized"); } + +const button = document.querySelector(".activate-send-mail"); + +if (button && Object.keys(button.dataset).length !== 0) { + button.addEventListener("click", () => { + button.querySelector("span").className = "icon-spinner"; + button.disabled = true; + + const queryString = Object.keys(button.dataset) + .reduce((a, k) => { + a.push(`${k}=${encodeURIComponent(button.dataset[k])}`); + return a; + }, []) + .join("&"); + + const url = `index.php?${queryString}`; + + Joomla.request({ + url, + method: "GET", + + onSuccess: (resp) => { + let response; + try { + response = JSON.parse(resp); + } catch (error) { + button.classList.add("error"); + } + + button.querySelector("span").className = "icon-mail"; + button.disabled = false; + + if (response.messages) { + Joomla.renderMessages(response.messages); + } + }, + onError: (resp) => { + response = JSON.parse(resp); + button.classList.add("error"); + if (response.messages) { + Joomla.renderMessages(response.messages); + } + }, + }); + }); +} From 9818951349208e17aa621ffa14f2cba926cea5a8 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 14:32:29 -0500 Subject: [PATCH 03/22] reviewers changes --- administrator/components/com_users/tmpl/user/edit.php | 2 +- build/media_source/com_users/joomla.asset.json | 4 ++-- ...-user-send-mail.es6.js => activate-user-send-email.es6.js} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename build/media_source/com_users/js/{active-user-send-mail.es6.js => activate-user-send-email.es6.js} (95%) diff --git a/administrator/components/com_users/tmpl/user/edit.php b/administrator/components/com_users/tmpl/user/edit.php index d747db2c5f940..29945d0251df5 100644 --- a/administrator/components/com_users/tmpl/user/edit.php +++ b/administrator/components/com_users/tmpl/user/edit.php @@ -23,7 +23,7 @@ $wa = $this->document->getWebAssetManager(); $wa->useScript('keepalive') ->useScript('form.validate') - ->useScript('com_users.active-user-send-mail'); + ->useScript('com_users.activate-user-send-email'); $input = Factory::getApplication()->getInput(); diff --git a/build/media_source/com_users/joomla.asset.json b/build/media_source/com_users/joomla.asset.json index d7154fb82d122..c36cb61e3096c 100644 --- a/build/media_source/com_users/joomla.asset.json +++ b/build/media_source/com_users/joomla.asset.json @@ -82,9 +82,9 @@ } }, { - "name": "com_users.active-user-send-mail", + "name": "com_users.activate-user-send-email", "type": "script", - "uri": "com_users/active-user-send-mail.min.js", + "uri": "com_users/activate-user-send-email.min.js", "dependencies": ["core"], "attributes": { "type": "module" diff --git a/build/media_source/com_users/js/active-user-send-mail.es6.js b/build/media_source/com_users/js/activate-user-send-email.es6.js similarity index 95% rename from build/media_source/com_users/js/active-user-send-mail.es6.js rename to build/media_source/com_users/js/activate-user-send-email.es6.js index 1c6969f704d26..e4fbacbe2ed71 100644 --- a/build/media_source/com_users/js/active-user-send-mail.es6.js +++ b/build/media_source/com_users/js/activate-user-send-email.es6.js @@ -1,5 +1,5 @@ /** - * @copyright (C) 2019 Open Source Matters, Inc. + * @copyright (C) 2023 Open Source Matters, Inc. * @license GNU General Public License version 2 or later; see LICENSE.txt */ From 6a9d9a353ab0611772734970a1087232434de0df Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 14:35:56 -0500 Subject: [PATCH 04/22] Reviewers changes --- .../components/com_users/src/View/User/HtmlView.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index 4214d8948c326..31601f01c76d6 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -182,10 +182,10 @@ protected function addToolbar() ToolbarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); } - $userIsActived = empty($this->item->activation); + $userIsActive = empty($this->item->activation); - if (!$userIsActived || \is_null($this->item->lastvisitDate)) { - $buttonText = !$userIsActived + if (!$userIsActive || \is_null($this->item->lastvisitDate)) { + $buttonText = !$userIsActive ? Text::_('COM_USERS_USER_ACTIVATE_AND_MAIL') : Text::_('COM_USERS_USER_ACTIVATION_REMINDER'); From 25b54d024eb24bdb47571fa354b38bd42a182f5f Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 16 Jan 2023 14:37:01 -0500 Subject: [PATCH 05/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Brian Teeman --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index e910a2b34c68b..cf72cfb211ef8 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -183,7 +183,7 @@ public function active(): void // Set the model $model = $this->getModel('User', 'Administrator', []); - // Active the user and send the email + // Activate the user and send the email $responseError = $model->activate($userId); if (!$responseError) { From 8bc6db72cbc0731356d1970fe92b2e83c567a73f Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 16 Jan 2023 14:37:40 -0500 Subject: [PATCH 06/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Brian Teeman --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index cf72cfb211ef8..b780b7ff34fcb 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -172,7 +172,7 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) */ public function active(): void { - // Get the ID of the user sended trought media/com_users/js/active-user-send-mail + // Get the ID of the user to send through media/com_users/js/active-user-send-mail $userId = $this->input->getString('userid', ''); // Prepare the default response From fbde984bdeb52e4e3e05377f4ce158f714762375 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 16 Jan 2023 14:37:55 -0500 Subject: [PATCH 07/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Brian Teeman --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index b780b7ff34fcb..5ab2b32992964 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -164,7 +164,7 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) } /** - * Get the XHR request for active a user + * Get the XHR request to activate a user * * @return void * From 39b88074dcbae9838b9e39cc5af27a97e6ea2a96 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 14:44:05 -0500 Subject: [PATCH 08/22] fix phpcs --- administrator/components/com_users/src/Model/UserModel.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index e60c0e78c997d..3d808ed6bcfbe 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -483,8 +483,7 @@ public function activate(&$pks) $pks = (array) $pks; // Compile the user activated notification mail values. - $sendMailTo = function ($userMail) use ($app) - { + $sendMailTo = function ($userMail) use ($app) { $mailData = []; $mailData['fromname'] = $app->get('fromname'); $mailData['mailfrom'] = $app->get('mailfrom'); From 095a5045651750e1577272767e53b8927a83680d Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 14:56:50 -0500 Subject: [PATCH 09/22] js lint fixes --- .../js/activate-user-send-email.es6.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/build/media_source/com_users/js/activate-user-send-email.es6.js b/build/media_source/com_users/js/activate-user-send-email.es6.js index e4fbacbe2ed71..20df3121007f6 100644 --- a/build/media_source/com_users/js/activate-user-send-email.es6.js +++ b/build/media_source/com_users/js/activate-user-send-email.es6.js @@ -4,14 +4,14 @@ */ if (!Joomla) { - throw new Error("Joomla API was not properly initialized"); + throw new Error('Joomla API was not properly initialized'); } -const button = document.querySelector(".activate-send-mail"); +const button = document.querySelector('.activate-send-mail'); if (button && Object.keys(button.dataset).length !== 0) { - button.addEventListener("click", () => { - button.querySelector("span").className = "icon-spinner"; + button.addEventListener('click', () => { + button.querySelector('span').className = 'icon-spinner'; button.disabled = true; const queryString = Object.keys(button.dataset) @@ -19,23 +19,23 @@ if (button && Object.keys(button.dataset).length !== 0) { a.push(`${k}=${encodeURIComponent(button.dataset[k])}`); return a; }, []) - .join("&"); + .join('&'); const url = `index.php?${queryString}`; Joomla.request({ url, - method: "GET", + method: 'GET', onSuccess: (resp) => { let response; try { response = JSON.parse(resp); } catch (error) { - button.classList.add("error"); + button.classList.add('error'); } - button.querySelector("span").className = "icon-mail"; + button.querySelector('span').className = 'icon-mail'; button.disabled = false; if (response.messages) { @@ -43,8 +43,8 @@ if (button && Object.keys(button.dataset).length !== 0) { } }, onError: (resp) => { - response = JSON.parse(resp); - button.classList.add("error"); + const response = JSON.parse(resp); + button.classList.add('error'); if (response.messages) { Joomla.renderMessages(response.messages); } From 5da165318d22b102718ca7b018ea69a4035f7cb0 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Mon, 16 Jan 2023 17:23:39 -0500 Subject: [PATCH 10/22] reviewers changes --- administrator/components/com_users/src/Model/UserModel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index 3d808ed6bcfbe..21b5d3b689c1b 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -467,7 +467,7 @@ public function block(&$pks, $value = 1) * * @return boolean True on success. * - * @since __DEPLOY_VERSION__ + * @since 1.6 * @throws \Exception */ public function activate(&$pks) From 5c5c0189464a7245cf1357d296a913139658972c Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Tue, 17 Jan 2023 21:13:38 -0500 Subject: [PATCH 11/22] success message + reviewers changes + lenguages strings --- .../src/Controller/UserController.php | 14 +++--- .../com_users/src/Model/UserModel.php | 45 ++++++++++++------- .../com_users/src/View/User/HtmlView.php | 2 +- language/en-GB/com_users.ini | 1 + 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index 5ab2b32992964..7cf8d0cb2b9db 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -165,6 +165,7 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) /** * Get the XHR request to activate a user + * js: media/com_users/js/active-user-send-mail * * @return void * @@ -172,24 +173,23 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) */ public function active(): void { - // Get the ID of the user to send through media/com_users/js/active-user-send-mail + // Get the ID of the user $userId = $this->input->getString('userid', ''); // Prepare the default response $responseError = false; - $responseData = [$userId]; $responseMessage = null; // Set the model $model = $this->getModel('User', 'Administrator', []); // Activate the user and send the email - $responseError = $model->activate($userId); - - if (!$responseError) { - $responseMessage = $model->getError(); + if (!$model->activate($userId)) { + $responseError = true; } - echo new JsonResponse($responseData, $responseMessage, $responseError); + $responseMessage = \Joomla\CMS\Factory::getApplication()->getMessageQueue(); + + echo new JsonResponse(null, $responseMessage, $responseError); } } diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index 21b5d3b689c1b..bde62c91e91e0 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -472,27 +472,33 @@ public function block(&$pks, $value = 1) */ public function activate(&$pks) { - $app = Factory::getApplication(); - $user = $app->getIdentity(); + $app = Factory::getApplication(); + $user = $app->getIdentity(); // Check if I am a super admin - $iAmSuperAdmin = $user->authorise('core.admin'); + $iAmSuperAdmin = $user->authorise('core.admin'); // Load user table - $table = $this->getTable(); - $pks = (array) $pks; + $table = $this->getTable(); + $pks = (array) $pks; + + // Compile the user activated notification mail default values. + $mailData = []; + $mailData['siteurl'] = \Joomla\CMS\Uri\Uri::root(); + $mailData['fromname'] = $app->get('fromname'); + $mailData['mailfrom'] = $app->get('mailfrom'); + $mailData['sitename'] = $app->get('sitename'); - // Compile the user activated notification mail values. - $sendMailTo = function ($userMail) use ($app) { - $mailData = []; - $mailData['fromname'] = $app->get('fromname'); - $mailData['mailfrom'] = $app->get('mailfrom'); - $mailData['sitename'] = $app->get('sitename'); - $mailData['siteurl'] = \Joomla\CMS\Uri\Uri::base(); + // Load com_users site language strings, the mail template use it + $app->getLanguage()->load('com_users', JPATH_SITE); + + $sendMailTo = function ($userData) use ($app, $mailData) { + $mailData['name'] = $userData['name']; + $mailData['username'] = $userData['username']; $mailer = new \Joomla\CMS\Mail\MailTemplate('com_users.registration.user.admin_activated', $app->getLanguage()->getTag()); $mailer->addTemplateData($mailData); - $mailer->addRecipient($userMail); + $mailer->addRecipient($userData['email']); try { $return = $mailer->send(); @@ -502,7 +508,7 @@ public function activate(&$pks) $return = false; } catch (\RuntimeException $exception) { - $app->enqueueMessage(Text::_($exception->errorMessage()), 'warning'); + $app->enqueueMessage(Text::_($exception->errorMessage()), $app::MSG_WARNING); $return = false; } @@ -510,10 +516,13 @@ public function activate(&$pks) // Check for an error. if ($return !== true) { - $this->setError(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED')); + $app->enqueueMessage(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED'), $app::MSG_WARNING); return false; } + + $app->enqueueMessage(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_SUCCESS'), $app::MSG_INFO); + return true; }; PluginHelper::importPlugin($this->events_map['save']); @@ -531,7 +540,7 @@ public function activate(&$pks) // resend the notification email if (empty($table->activation)) { if (\is_null($table->lastvisitDate)) { - $sendMailTo($prevUserData['email']); + $sendMailTo($prevUserData); } unset($pks[$i]); @@ -566,7 +575,9 @@ public function activate(&$pks) Factory::getApplication()->triggerEvent($this->event_after_save, [$table->getProperties(), false, true, null]); // Send the email - $sendMailTo($prevUserData['email']); + if (!$sendMailTo($prevUserData)) { + return false; + } } catch (\Exception $e) { $this->setError($e->getMessage()); diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index 31601f01c76d6..7e10d2f9af22c 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -16,8 +16,8 @@ use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Object\CMSObject; -use Joomla\CMS\Toolbar\ToolbarHelper; use Joomla\CMS\Toolbar\Toolbar; +use Joomla\CMS\Toolbar\ToolbarHelper; use Joomla\CMS\User\User; use Joomla\CMS\User\UserFactoryInterface; use Joomla\Component\Users\Administrator\Helper\Mfa; diff --git a/language/en-GB/com_users.ini b/language/en-GB/com_users.ini index 2ba1cb2db2157..cc9b0a5844572 100644 --- a/language/en-GB/com_users.ini +++ b/language/en-GB/com_users.ini @@ -108,6 +108,7 @@ COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION="Please log in to confirm that you a COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION_PERMISSIONS="You are not authorised to activate new accounts, please log in with a privileged account." COM_USERS_REGISTRATION_ACTIVATE_SUCCESS="Your Account has been activated. You can now log in using the username and password you chose during the registration." COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED="An error was encountered while sending activation notification email" +COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_SUCCESS="The user has been notified about his account is activated." COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED="Failed to save activation data: %s" COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS="The user's account has been activated and the user has been notified about it." COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the email address you entered. Note that you must activate the account by selecting the activation link when you get the email before you can login." From 0b3ea909c67a7d657dc1297270775b90d727313c Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Wed, 18 Jan 2023 07:25:28 -0500 Subject: [PATCH 12/22] dont allow the button creating a user + reviewers changes --- .../components/com_users/src/View/User/HtmlView.php | 5 +++-- language/en-GB/com_users.ini | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index 7e10d2f9af22c..cbce35e8f5a00 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -182,9 +182,10 @@ protected function addToolbar() ToolbarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); } - $userIsActive = empty($this->item->activation); + // Check lastvisitDate for allow resend the activation email + $userIsActive = (empty($this->item->activation) || \is_null($this->item->lastvisitDate)); - if (!$userIsActive || \is_null($this->item->lastvisitDate)) { + if ($this->item->id > 0 && $userIsActive) { $buttonText = !$userIsActive ? Text::_('COM_USERS_USER_ACTIVATE_AND_MAIL') : Text::_('COM_USERS_USER_ACTIVATION_REMINDER'); diff --git a/language/en-GB/com_users.ini b/language/en-GB/com_users.ini index cc9b0a5844572..a11911dc4dcda 100644 --- a/language/en-GB/com_users.ini +++ b/language/en-GB/com_users.ini @@ -108,7 +108,7 @@ COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION="Please log in to confirm that you a COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION_PERMISSIONS="You are not authorised to activate new accounts, please log in with a privileged account." COM_USERS_REGISTRATION_ACTIVATE_SUCCESS="Your Account has been activated. You can now log in using the username and password you chose during the registration." COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED="An error was encountered while sending activation notification email" -COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_SUCCESS="The user has been notified about his account is activated." +COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_SUCCESS="The user has been notified that their account has been activated." COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED="Failed to save activation data: %s" COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS="The user's account has been activated and the user has been notified about it." COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the email address you entered. Note that you must activate the account by selecting the activation link when you get the email before you can login." From 8edcee8a552a37b9fca58bc862e712230c837d5c Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Wed, 18 Jan 2023 09:11:51 -0500 Subject: [PATCH 13/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Quy --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index 7cf8d0cb2b9db..dbdd4c9dc0114 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -165,7 +165,7 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = array()) /** * Get the XHR request to activate a user - * js: media/com_users/js/active-user-send-mail + * js: media/com_users/js/activate-user-send-email * * @return void * From 7ee0c864a38ce463497cf1b63f977d66fe83f864 Mon Sep 17 00:00:00 2001 From: Olivier Buisard Date: Thu, 19 Jan 2023 19:04:22 -0500 Subject: [PATCH 14/22] Update administrator/language/en-GB/com_users.ini Uppercasing of language translations Co-authored-by: Quy --- administrator/language/en-GB/com_users.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/language/en-GB/com_users.ini b/administrator/language/en-GB/com_users.ini index 55acce1115982..8a0c887725288 100644 --- a/administrator/language/en-GB/com_users.ini +++ b/administrator/language/en-GB/com_users.ini @@ -397,8 +397,8 @@ COM_USERS_USERS_N_ITEMS_DELETED="%d users deleted." COM_USERS_USERS_N_ITEMS_DELETED_1="User deleted." COM_USERS_USERS_TABLE_CAPTION="Users" COM_USERS_USER_ACCOUNT_DETAILS="Account Details" -COM_USERS_USER_ACTIVATE_AND_MAIL="Activate and send email" -COM_USERS_USER_ACTIVATION_REMINDER="Send activation reminder" +COM_USERS_USER_ACTIVATE_AND_MAIL="Activate & Send Email" +COM_USERS_USER_ACTIVATION_REMINDER="Send Activation Reminder" COM_USERS_USER_BACKUPCODE="Backup Code" COM_USERS_USER_BACKUPCODES="Backup Codes" COM_USERS_USER_BACKUPCODES_CAPTIVE_PROMPT="If you do not have access to your usual Multi-factor Authentication method use any of your Backup Codes in the field below. Please remember that this emergency backup code cannot be reused." From c50472da8240041ca3cb104b9b03e086e0848944 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Thu, 19 Jan 2023 22:15:19 -0500 Subject: [PATCH 15/22] wrong check if user is actived --- .../components/com_users/src/View/User/HtmlView.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index cbce35e8f5a00..01abfd392c34c 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -183,10 +183,10 @@ protected function addToolbar() } // Check lastvisitDate for allow resend the activation email - $userIsActive = (empty($this->item->activation) || \is_null($this->item->lastvisitDate)); + $userIsNotActive = !empty($this->item->activation) || \is_null($this->item->lastvisitDate); - if ($this->item->id > 0 && $userIsActive) { - $buttonText = !$userIsActive + if ($this->item->id > 0 && $userIsNotActive) { + $buttonText = !empty($this->item->activation) ? Text::_('COM_USERS_USER_ACTIVATE_AND_MAIL') : Text::_('COM_USERS_USER_ACTIVATION_REMINDER'); From d4375a8467bc0c22ed930f9fcc359a617e54c5eb Mon Sep 17 00:00:00 2001 From: Quy Date: Sat, 4 Feb 2023 11:31:50 -0800 Subject: [PATCH 16/22] Update administrator/components/com_users/src/View/User/HtmlView.php --- administrator/components/com_users/src/View/User/HtmlView.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/View/User/HtmlView.php b/administrator/components/com_users/src/View/User/HtmlView.php index 7b9a6543348fe..e8c8592dd6747 100644 --- a/administrator/components/com_users/src/View/User/HtmlView.php +++ b/administrator/components/com_users/src/View/User/HtmlView.php @@ -183,7 +183,7 @@ function (Toolbar $childBar) use ($canDo, $isProfile) { } else { $toolbar->cancel('user.cancel'); } - + // Check lastvisitDate for allow resend the activation email $userIsNotActive = !empty($this->item->activation) || \is_null($this->item->lastvisitDate); From f5cf34a9cc949f1a64f4c6737f00889acf55bd16 Mon Sep 17 00:00:00 2001 From: Quy Date: Wed, 3 Apr 2024 11:38:16 -0700 Subject: [PATCH 17/22] Remove unused import --- .../components/com_users/src/Controller/UserController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index 568fbf754f8d4..155ad448aa23e 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -11,7 +11,6 @@ namespace Joomla\Component\Users\Administrator\Controller; use Joomla\CMS\Access\Access; -use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\FormController; use Joomla\CMS\MVC\Model\BaseDatabaseModel; use Joomla\CMS\Response\JsonResponse; From b13a47aca77e4772e63a2c7758367a39d24c8d95 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Sun, 5 May 2024 00:13:14 -0400 Subject: [PATCH 18/22] use the administrator default language for Mail template --- .../com_users/src/Model/UserModel.php | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index 8172a8728a2ac..31279659df00b 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -16,6 +16,7 @@ use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\Language\Text; +use Joomla\CMS\Mail\MailTemplate; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\AdminModel; use Joomla\CMS\Plugin\PluginHelper; @@ -303,9 +304,9 @@ public function save($data) */ public function delete(&$pks) { - $user = $this->getCurrentUser(); - $table = $this->getTable(); - $pks = (array) $pks; + $user = $this->getCurrentUser(); + $table = $this->getTable(); + $pks = (array) $pks; // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); @@ -370,8 +371,8 @@ public function delete(&$pks) */ public function block(&$pks, $value = 1) { - $app = Factory::getApplication(); - $user = $this->getCurrentUser(); + $app = Factory::getApplication(); + $user = $this->getCurrentUser(); // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); @@ -474,15 +475,15 @@ public function block(&$pks, $value = 1) */ public function activate(&$pks) { - $app = Factory::getApplication(); - $user = $app->getIdentity(); + $app = Factory::getApplication(); + $user = $app->getIdentity(); // Check if I am a super admin - $iAmSuperAdmin = $user->authorise('core.admin'); + $iAmSuperAdmin = $user->authorise('core.admin'); // Load user table - $table = $this->getTable(); - $pks = (array) $pks; + $table = $this->getTable(); + $pks = (array) $pks; // Compile the user activated notification mail default values. $mailData = []; @@ -491,14 +492,14 @@ public function activate(&$pks) $mailData['mailfrom'] = $app->get('mailfrom'); $mailData['sitename'] = $app->get('sitename'); - // Load com_users site language strings, the mail template use it - $app->getLanguage()->load('com_users', JPATH_SITE); - $sendMailTo = function ($userData) use ($app, $mailData) { $mailData['name'] = $userData['name']; $mailData['username'] = $userData['username']; - $mailer = new \Joomla\CMS\Mail\MailTemplate('com_users.registration.user.admin_activated', $app->getLanguage()->getTag()); + // Use the default language + $langTag = ComponentHelper::getParams('com_languages')->get('administrator', 'en-GB'); + + $mailer = new MailTemplate('com_users.registration.user.admin_activated', $langTag); $mailer->addTemplateData($mailData); $mailer->addRecipient($userData['email']); @@ -536,7 +537,7 @@ public function activate(&$pks) $allow = $user->authorise('core.edit.state', 'com_users'); // Don't allow non-super-admin to edit the active status of a super admin - $allow = (!$iAmSuperAdmin && Access::check($pk, 'core.admin')) ? false : $allow; + $allow = (!$iAmSuperAdmin && Access::check($pk, 'core.admin')) ? false : $allow; // Ignore activated accounts but check if we can still // resend the notification email @@ -668,7 +669,7 @@ public function batch($commands, $pks, $contexts) */ public function batchReset($userIds, $action) { - $userIds = ArrayHelper::toInteger($userIds); + $userIds = ArrayHelper::toInteger($userIds); // Check if I am a Super Admin $iAmSuperAdmin = $this->getCurrentUser()->authorise('core.admin'); @@ -697,11 +698,11 @@ public function batchReset($userIds, $action) } // Get the DB object - $db = $this->getDatabase(); + $db = $this->getDatabase(); $userIds = ArrayHelper::toInteger($userIds); - $query = $db->getQuery(true); + $query = $db->getQuery(true); // Update the reset flag $query->update($db->quoteName('#__users')) @@ -735,7 +736,7 @@ public function batchReset($userIds, $action) */ public function batchUser($groupId, $userIds, $action) { - $userIds = ArrayHelper::toInteger($userIds); + $userIds = ArrayHelper::toInteger($userIds); // Check if I am a Super Admin $iAmSuperAdmin = $this->getCurrentUser()->authorise('core.admin'); @@ -923,8 +924,8 @@ public function getAssignedGroups($userId = null) $userId = (!empty($userId)) ? $userId : (int) $this->getState('user.id'); if (empty($userId)) { - $result = []; - $form = $this->getForm(); + $result = []; + $form = $this->getForm(); if ($form) { $groupsIDs = $form->getValue('groups'); From c3750307a0ede00bbcbf6fbc3ecf7dc5c4202303 Mon Sep 17 00:00:00 2001 From: carlitorweb Date: Sun, 5 May 2024 16:52:09 -0400 Subject: [PATCH 19/22] use the site default language for Mail template --- administrator/components/com_users/src/Model/UserModel.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Model/UserModel.php b/administrator/components/com_users/src/Model/UserModel.php index 31279659df00b..204c75961d3bb 100644 --- a/administrator/components/com_users/src/Model/UserModel.php +++ b/administrator/components/com_users/src/Model/UserModel.php @@ -492,12 +492,15 @@ public function activate(&$pks) $mailData['mailfrom'] = $app->get('mailfrom'); $mailData['sitename'] = $app->get('sitename'); + // Load com_users site language strings, the mail template use it + $app->getLanguage()->load('com_users', JPATH_SITE); + $sendMailTo = function ($userData) use ($app, $mailData) { $mailData['name'] = $userData['name']; $mailData['username'] = $userData['username']; // Use the default language - $langTag = ComponentHelper::getParams('com_languages')->get('administrator', 'en-GB'); + $langTag = ComponentHelper::getParams('com_languages')->get('site', 'en-GB'); $mailer = new MailTemplate('com_users.registration.user.admin_activated', $langTag); $mailer->addTemplateData($mailData); From 72c936f8a7b681b9efedb6ccf0d44b650eb24b47 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 16 Aug 2024 03:23:34 -0400 Subject: [PATCH 20/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Richard Fath --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index 155ad448aa23e..03bd2f3af333a 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -173,7 +173,7 @@ protected function postSaveHook(BaseDatabaseModel $model, $validData = []) public function active(): void { // Get the ID of the user - $userId = $this->input->getString('userid', ''); + $userId = $this->input->getString('userid', ''); // Prepare the default response $responseError = false; From 41c9c8490da8659dc669252a00c2f000cf6f577b Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 16 Aug 2024 03:24:20 -0400 Subject: [PATCH 21/22] Update administrator/components/com_users/src/Controller/UserController.php Co-authored-by: Richard Fath --- .../components/com_users/src/Controller/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/src/Controller/UserController.php b/administrator/components/com_users/src/Controller/UserController.php index 03bd2f3af333a..65a720fd322be 100644 --- a/administrator/components/com_users/src/Controller/UserController.php +++ b/administrator/components/com_users/src/Controller/UserController.php @@ -180,7 +180,7 @@ public function active(): void $responseMessage = null; // Set the model - $model = $this->getModel('User', 'Administrator', []); + $model = $this->getModel('User', 'Administrator', []); // Activate the user and send the email if (!$model->activate($userId)) { From 74f21d62b1d478c60205512c8d642cdcbb41df72 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Sun, 18 Aug 2024 09:32:21 -0400 Subject: [PATCH 22/22] Update joomla.asset.json --- build/media_source/com_users/joomla.asset.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/build/media_source/com_users/joomla.asset.json b/build/media_source/com_users/joomla.asset.json index 86bd4d1e54f5e..a89b882c82641 100644 --- a/build/media_source/com_users/joomla.asset.json +++ b/build/media_source/com_users/joomla.asset.json @@ -9,7 +9,9 @@ "name": "com_users.admin-users-groups", "type": "script", "uri": "com_users/admin-users-groups.min.js", - "dependencies": ["core"], + "dependencies": [ + "core" + ], "attributes": { "type": "module" } @@ -29,7 +31,9 @@ "name": "com_users.two-factor-list", "type": "script", "uri": "com_users/two-factor-list.min.js", - "dependencies": ["com_users.two-factor-list.es5"], + "dependencies": [ + "core" + ], "attributes": { "type": "module" } @@ -38,7 +42,9 @@ "name": "com_users.activate-user-send-email", "type": "script", "uri": "com_users/activate-user-send-email.min.js", - "dependencies": ["core"], + "dependencies": [ + "core" + ], "attributes": { "type": "module" }