From 7f489239253b43d11bb8e04fb74bf198fa2eb96b Mon Sep 17 00:00:00 2001 From: Christiane Maier-Stadtherr Date: Fri, 26 Jul 2024 15:25:17 +0200 Subject: [PATCH 1/2] Make toolbar for mail-template as other layouts (#43849) --- .../com_mails/src/View/Template/HtmlView.php | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/administrator/components/com_mails/src/View/Template/HtmlView.php b/administrator/components/com_mails/src/View/Template/HtmlView.php index b609a4ba563ad..6bca50e398c13 100644 --- a/administrator/components/com_mails/src/View/Template/HtmlView.php +++ b/administrator/components/com_mails/src/View/Template/HtmlView.php @@ -136,17 +136,11 @@ protected function addToolbar() 'pencil-2 article-add' ); - $saveGroup = $toolbar->dropdownButton('save-group'); - - $saveGroup->configure( - function (Toolbar $childBar) { - $childBar->apply('template.apply'); - $childBar->save('template.save'); - } - ); - + $toolbar->apply('template.apply'); + $toolbar->divider(); + $toolbar->save('template.save'); + $toolbar->divider(); $toolbar->cancel('template.cancel', 'JTOOLBAR_CLOSE'); - $toolbar->divider(); $toolbar->help('Mail_Template:_Edit'); } From 24d58940a4c200c65abbf5687bf8c54717937632 Mon Sep 17 00:00:00 2001 From: Fedir Zinchuk Date: Fri, 26 Jul 2024 17:18:21 +0300 Subject: [PATCH 2/2] [5.2][Events] Use event classes for Actionlog plugins (#43639) --- libraries/src/Event/CoreEventAware.php | 4 + .../src/Event/User/AbstractResetEvent.php | 58 +++++ .../Event/User/AfterResetCompleteEvent.php | 25 ++ .../src/Event/User/AfterResetRequestEvent.php | 25 ++ .../Event/User/BeforeResetCompleteEvent.php | 25 ++ .../Event/User/BeforeResetRequestEvent.php | 25 ++ .../actionlog/joomla/src/Extension/Joomla.php | 243 +++++++++++------- 7 files changed, 318 insertions(+), 87 deletions(-) create mode 100644 libraries/src/Event/User/AbstractResetEvent.php create mode 100644 libraries/src/Event/User/AfterResetCompleteEvent.php create mode 100644 libraries/src/Event/User/AfterResetRequestEvent.php create mode 100644 libraries/src/Event/User/BeforeResetCompleteEvent.php create mode 100644 libraries/src/Event/User/BeforeResetRequestEvent.php diff --git a/libraries/src/Event/CoreEventAware.php b/libraries/src/Event/CoreEventAware.php index f72cafcbbfbc8..22a2a74c2b0f2 100644 --- a/libraries/src/Event/CoreEventAware.php +++ b/libraries/src/Event/CoreEventAware.php @@ -124,6 +124,10 @@ trait CoreEventAware 'onUserBeforeDelete' => User\BeforeDeleteEvent::class, 'onUserAfterDelete' => User\AfterDeleteEvent::class, 'onUserAfterRemind' => User\AfterRemindEvent::class, + 'onUserBeforeResetRequest' => User\BeforeResetRequestEvent::class, + 'onUserAfterResetRequest' => User\AfterResetRequestEvent::class, + 'onUserBeforeResetComplete' => User\BeforeResetCompleteEvent::class, + 'onUserAfterResetComplete' => User\AfterResetCompleteEvent::class, // User Group 'onUserBeforeSaveGroup' => Model\BeforeSaveEvent::class, 'onUserAfterSaveGroup' => Model\AfterSaveEvent::class, diff --git a/libraries/src/Event/User/AbstractResetEvent.php b/libraries/src/Event/User/AbstractResetEvent.php new file mode 100644 index 0000000000000..5796e5194b29d --- /dev/null +++ b/libraries/src/Event/User/AbstractResetEvent.php @@ -0,0 +1,58 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\User; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for User reset event. + * + * @since __DEPLOY_VERSION__ + */ +abstract class AbstractResetEvent extends UserEvent +{ + /** + * The argument names, in order expected by legacy plugins. + * + * @var array + * + * @since __DEPLOY_VERSION__ + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 + */ + protected $legacyArgumentsOrder = ['subject']; + + /** + * Setter for the subject argument. + * + * @param object $value The value to set + * + * @return object + * + * @since __DEPLOY_VERSION__ + */ + protected function onSetSubject(object $value): object + { + return $value; + } + + /** + * Getter for the user. + * + * @return object + * + * @since __DEPLOY_VERSION__ + */ + public function getUser(): object + { + return $this->arguments['subject']; + } +} diff --git a/libraries/src/Event/User/AfterResetCompleteEvent.php b/libraries/src/Event/User/AfterResetCompleteEvent.php new file mode 100644 index 0000000000000..c094a14439359 --- /dev/null +++ b/libraries/src/Event/User/AfterResetCompleteEvent.php @@ -0,0 +1,25 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\User; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for User reset event. + * Example: + * new AfterResetCompleteEvent('onEventName', ['subject' => $user]); + * + * @since __DEPLOY_VERSION__ + */ +class AfterResetCompleteEvent extends AbstractResetEvent +{ +} diff --git a/libraries/src/Event/User/AfterResetRequestEvent.php b/libraries/src/Event/User/AfterResetRequestEvent.php new file mode 100644 index 0000000000000..2c4d816263cf1 --- /dev/null +++ b/libraries/src/Event/User/AfterResetRequestEvent.php @@ -0,0 +1,25 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\User; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for User reset event. + * Example: + * new AfterResetRequestEvent('onEventName', ['subject' => $user]); + * + * @since __DEPLOY_VERSION__ + */ +class AfterResetRequestEvent extends AbstractResetEvent +{ +} diff --git a/libraries/src/Event/User/BeforeResetCompleteEvent.php b/libraries/src/Event/User/BeforeResetCompleteEvent.php new file mode 100644 index 0000000000000..59a06177fedb4 --- /dev/null +++ b/libraries/src/Event/User/BeforeResetCompleteEvent.php @@ -0,0 +1,25 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\User; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for User reset event. + * Example: + * new BeforeResetCompleteEvent('onEventName', ['subject' => $user]); + * + * @since __DEPLOY_VERSION__ + */ +class BeforeResetCompleteEvent extends AbstractResetEvent +{ +} diff --git a/libraries/src/Event/User/BeforeResetRequestEvent.php b/libraries/src/Event/User/BeforeResetRequestEvent.php new file mode 100644 index 0000000000000..a1efd2f1b5e22 --- /dev/null +++ b/libraries/src/Event/User/BeforeResetRequestEvent.php @@ -0,0 +1,25 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\User; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for User reset event. + * Example: + * new BeforeResetRequestEvent('onEventName', ['subject' => $user]); + * + * @since __DEPLOY_VERSION__ + */ +class BeforeResetRequestEvent extends AbstractResetEvent +{ +} diff --git a/plugins/actionlog/joomla/src/Extension/Joomla.php b/plugins/actionlog/joomla/src/Extension/Joomla.php index ce833fd2f1696..97380d813b563 100644 --- a/plugins/actionlog/joomla/src/Extension/Joomla.php +++ b/plugins/actionlog/joomla/src/Extension/Joomla.php @@ -11,15 +11,21 @@ namespace Joomla\Plugin\Actionlog\Joomla\Extension; use Joomla\CMS\Component\ComponentHelper; -use Joomla\CMS\Installer\Installer; +use Joomla\CMS\Event\Application; +use Joomla\CMS\Event\Cache; +use Joomla\CMS\Event\Checkin; +use Joomla\CMS\Event\Extension; +use Joomla\CMS\Event\Model; +use Joomla\CMS\Event\User; use Joomla\CMS\MVC\Factory\MVCFactoryServiceInterface; -use Joomla\CMS\Table\Table; use Joomla\CMS\User\UserFactoryAwareTrait; use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper; use Joomla\Component\Actionlogs\Administrator\Plugin\ActionLogPlugin; use Joomla\Database\DatabaseAwareTrait; use Joomla\Database\Exception\ExecutionFailureException; use Joomla\Event\DispatcherInterface; +use Joomla\Event\Event; +use Joomla\Event\SubscriberInterface; use Joomla\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects @@ -31,7 +37,7 @@ * * @since 3.9.0 */ -final class Joomla extends ActionLogPlugin +final class Joomla extends ActionLogPlugin implements SubscriberInterface { use DatabaseAwareTrait; use UserFactoryAwareTrait; @@ -89,21 +95,62 @@ public function __construct(DispatcherInterface $dispatcher, array $config) $this->loggableVerbs = $params->get('loggable_verbs', []); } + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onContentAfterSave' => 'onContentAfterSave', + 'onContentAfterDelete' => 'onContentAfterDelete', + 'onContentChangeState' => 'onContentChangeState', + 'onApplicationAfterSave' => 'onApplicationAfterSave', + 'onExtensionAfterInstall' => 'onExtensionAfterInstall', + 'onExtensionAfterUninstall' => 'onExtensionAfterUninstall', + 'onExtensionAfterUpdate' => 'onExtensionAfterUpdate', + 'onExtensionAfterSave' => 'onExtensionAfterSave', + 'onExtensionAfterDelete' => 'onExtensionAfterDelete', + 'onUserAfterSave' => 'onUserAfterSave', + 'onUserAfterDelete' => 'onUserAfterDelete', + 'onUserAfterSaveGroup' => 'onUserAfterSaveGroup', + 'onUserAfterDeleteGroup' => 'onUserAfterDeleteGroup', + 'onUserAfterLogin' => 'onUserAfterLogin', + 'onUserLoginFailure' => 'onUserLoginFailure', + 'onUserLogout' => 'onUserLogout', + 'onUserAfterRemind' => 'onUserAfterRemind', + 'onAfterCheckin' => 'onAfterCheckin', + 'onAfterLogPurge' => 'onAfterLogPurge', + 'onAfterLogExport' => 'onAfterLogExport', + 'onAfterPurge' => 'onAfterPurge', + 'onAfterDispatch' => 'onAfterDispatch', + 'onJoomlaAfterUpdate' => 'onJoomlaAfterUpdate', + 'onUserAfterResetRequest' => 'onUserAfterResetRequest', + 'onUserAfterResetComplete' => 'onUserAfterResetComplete', + 'onUserBeforeSave' => 'onUserBeforeSave', + ]; + } + /** * After save content logging method * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called right after the content is saved * - * @param string $context The context of the content passed to the plugin - * @param object $article A \Joomla\CMS\Table\Table object - * @param boolean $isNew If the content is just about to be created + * @param Model\AfterSaveEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onContentAfterSave($context, $article, $isNew): void + public function onContentAfterSave(Model\AfterSaveEvent $event): void { + $context = $event->getContext(); + $article = $event->getItem(); + $isNew = $event->getIsNew(); + if (isset($this->contextAliases[$context])) { $context = $this->contextAliases[$context]; } @@ -152,16 +199,17 @@ public function onContentAfterSave($context, $article, $isNew): void * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called right after the content is deleted * - * @param string $context The context of the content passed to the plugin - * @param object $article A \Joomla\CMS\Table\Table object + * @param Model\AfterDeleteEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onContentAfterDelete($context, $article): void + public function onContentAfterDelete(Model\AfterDeleteEvent $event): void { - $option = $this->getApplication()->getInput()->get('option'); + $context = $event->getContext(); + $article = $event->getItem(); + $option = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($option)) { return; @@ -198,17 +246,18 @@ public function onContentAfterDelete($context, $article): void * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called when the status of the article is changed * - * @param string $context The context of the content passed to the plugin - * @param array $pks An array of primary key ids of the content that has changed state. - * @param integer $value The value of the state that the content has been changed to. + * @param Model\AfterChangeStateEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onContentChangeState($context, $pks, $value) + public function onContentChangeState(Model\AfterChangeStateEvent $event): void { - $option = $this->getApplication()->getInput()->getCmd('option'); + $context = $event->getContext(); + $pks = $event->getPks(); + $value = $event->getValue(); + $option = $this->getApplication()->getInput()->getCmd('option'); if (!$this->checkLoggable($option)) { return; @@ -287,16 +336,16 @@ public function onContentChangeState($context, $pks, $value) } /** - * On Saving application configuration logging method + * On Saving application configuration logging method. * Method is called when the application config is being saved * - * @param \Joomla\Registry\Registry $config Registry object with the new config + * @param Application\AfterSaveConfigurationEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onApplicationAfterSave($config): void + public function onApplicationAfterSave(Application\AfterSaveConfigurationEvent $event): void { $option = $this->getApplication()->getInput()->getCmd('option'); @@ -322,16 +371,17 @@ public function onApplicationAfterSave($config): void * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called when an extension is installed * - * @param Installer $installer Installer object - * @param integer $eid Extension Identifier + * @param Extension\AfterInstallEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onExtensionAfterInstall($installer, $eid) + public function onExtensionAfterInstall(Extension\AfterInstallEvent $event): void { - $context = $this->getApplication()->getInput()->get('option'); + $installer = $event->getInstaller(); + $eid = $event->getEid(); + $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; @@ -368,17 +418,18 @@ public function onExtensionAfterInstall($installer, $eid) * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called when an extension is uninstalled * - * @param Installer $installer Installer instance - * @param integer $eid Extension id - * @param integer $result Installation result + * @param Extension\AfterUninstallEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onExtensionAfterUninstall($installer, $eid, $result) + public function onExtensionAfterUninstall(Extension\AfterUninstallEvent $event): void { - $context = $this->getApplication()->getInput()->get('option'); + $installer = $event->getInstaller(); + $eid = $event->getEid(); + $result = $event->getRemoved(); + $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; @@ -420,16 +471,17 @@ public function onExtensionAfterUninstall($installer, $eid, $result) * This method adds a record to #__action_logs contains (message, date, context, user) * Method is called when an extension is updated * - * @param Installer $installer Installer instance - * @param integer $eid Extension id + * @param Extension\AfterUpdateEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onExtensionAfterUpdate($installer, $eid) + public function onExtensionAfterUpdate(Extension\AfterUpdateEvent $event): void { - $context = $this->getApplication()->getInput()->get('option'); + $installer = $event->getInstaller(); + $eid = $event->getEid(); + $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; @@ -462,19 +514,21 @@ public function onExtensionAfterUpdate($installer, $eid) } /** - * On Saving extensions logging method + * On Saving extensions logging method. * Method is called when an extension is being saved * - * @param string $context The extension - * @param Table $table DataBase Table object - * @param boolean $isNew If the extension is new or not + * @param Model\AfterSaveEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onExtensionAfterSave($context, $table, $isNew): void + public function onExtensionAfterSave(Model\AfterSaveEvent $event): void { + $context = $event->getContext(); + $table = $event->getItem(); + $isNew = $event->getIsNew(); + $option = $this->getApplication()->getInput()->getCmd('option'); if ($table->get('module') != null) { @@ -520,18 +574,20 @@ public function onExtensionAfterSave($context, $table, $isNew): void } /** - * On Deleting extensions logging method + * On Deleting extensions logging method. * Method is called when an extension is being deleted * - * @param string $context The extension - * @param Table $table DataBase Table object + * @param Model\AfterDeleteEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onExtensionAfterDelete($context, $table): void + public function onExtensionAfterDelete(Model\AfterDeleteEvent $event): void { + $context = $event->getContext(); + $table = $event->getItem(); + if (!$this->checkLoggable($this->getApplication()->getInput()->get('option'))) { return; } @@ -560,17 +616,17 @@ public function onExtensionAfterDelete($context, $table): void * Method is called after user data is stored in the database. * This method logs who created/edited any user's data * - * @param array $user Holds the new user data. - * @param boolean $isnew True if a new user is stored. - * @param boolean $success True if user was successfully stored in the database. - * @param string $msg Message. + * @param User\AfterSaveEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterSave($user, $isnew, $success, $msg): void + public function onUserAfterSave(User\AfterSaveEvent $event): void { + $user = $event->getUser(); + $isnew = $event->getIsNew(); + $context = $this->getApplication()->getInput()->get('option'); $task = $this->getApplication()->getInput()->get('task'); @@ -651,16 +707,15 @@ public function onUserAfterSave($user, $isnew, $success, $msg): void * * Method is called after user data is deleted from the database * - * @param array $user Holds the user data - * @param boolean $success True if user was successfully stored in the database - * @param string $msg Message + * @param User\AfterDeleteEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterDelete($user, $success, $msg): void + public function onUserAfterDelete(User\AfterDeleteEvent $event): void { + $user = $event->getUser(); $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { @@ -684,16 +739,17 @@ public function onUserAfterDelete($user, $success, $msg): void * * Method is called after user group is stored into the database * - * @param string $context The context - * @param Table $table DataBase Table object - * @param boolean $isNew Is new or not + * @param Model\AfterSaveEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterSaveGroup($context, $table, $isNew): void + public function onUserAfterSaveGroup(Model\AfterSaveEvent $event): void { + $table = $event->getItem(); + $isNew = $event->getIsNew(); + // Override context (com_users.group) with the component context (com_users) to pass the checkLoggable $context = $this->getApplication()->getInput()->get('option'); @@ -725,16 +781,15 @@ public function onUserAfterSaveGroup($context, $table, $isNew): void * * Method is called after user group is deleted from the database * - * @param array $group Holds the group data - * @param boolean $success True if user was successfully stored in the database - * @param string $msg Message + * @param Model\AfterDeleteEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterDeleteGroup($group, $success, $msg): void + public function onUserAfterDeleteGroup(Model\AfterDeleteEvent $event): void { + $group = $event->getItem(); $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { @@ -746,8 +801,8 @@ public function onUserAfterDeleteGroup($group, $success, $msg): void $message = [ 'action' => 'delete', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER_GROUP', - 'id' => $group['id'], - 'title' => $group['title'], + 'id' => $group->id, + 'title' => $group->title, ]; $this->addLog([$message], $messageLanguageKey, $context); @@ -756,14 +811,16 @@ public function onUserAfterDeleteGroup($group, $success, $msg): void /** * Method to log user login success action * - * @param array $options Array holding options (user, responseType) + * @param User\AfterLoginEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterLogin($options) + public function onUserAfterLogin(User\AfterLoginEvent $event): void { + $options = $event->getOptions(); + if ($options['action'] === 'core.login.api') { return; } @@ -791,15 +848,16 @@ public function onUserAfterLogin($options) /** * Method to log user login failed action * - * @param array $response Array of response data. + * @param User\LoginFailureEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserLoginFailure($response) + public function onUserLoginFailure(User\LoginFailureEvent $event): void { - $context = 'com_users'; + $response = $event->getAuthenticationResponse(); + $context = 'com_users'; if (!$this->checkLoggable($context)) { return; @@ -842,15 +900,15 @@ public function onUserLoginFailure($response) /** * Method to log user's logout action * - * @param array $user Holds the user data - * @param array $options Array holding options (remember, autoregister, group) + * @param User\LogoutEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserLogout($user, $options = []) + public function onUserLogout(User\LogoutEvent $event): void { + $user = $event->getParameters(); $context = 'com_users'; if (!$this->checkLoggable($context)) { @@ -896,14 +954,15 @@ protected function checkLoggable($extension) * * Method is called after user request to remind their username. * - * @param object $user Holds the user data. + * @param User\AfterRemindEvent $event The event instance. * * @return void * * @since 3.9.0 */ - public function onUserAfterRemind($user) + public function onUserAfterRemind(User\AfterRemindEvent $event): void { + $user = $event->getUser(); $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { @@ -929,14 +988,15 @@ public function onUserAfterRemind($user) * * Method is called after user request to check-in items. * - * @param array $table Holds the table name. + * @param Checkin\AfterCheckinEvent $event The event instance. * * @return void * * @since 3.9.3 */ - public function onAfterCheckin($table) + public function onAfterCheckin(Checkin\AfterCheckinEvent $event): void { + $table = $event->getTableName(); $context = 'com_checkin'; $user = $this->getApplication()->getIdentity(); @@ -968,7 +1028,7 @@ public function onAfterCheckin($table) * * @since 3.9.4 */ - public function onAfterLogPurge() + public function onAfterLogPurge(): void { $context = $this->getApplication()->getInput()->get('option'); $user = $this->getApplication()->getIdentity(); @@ -994,7 +1054,7 @@ public function onAfterLogPurge() * * @since 3.9.4 */ - public function onAfterLogExport() + public function onAfterLogExport(): void { $context = $this->getApplication()->getInput()->get('option'); $user = $this->getApplication()->getIdentity(); @@ -1016,14 +1076,15 @@ public function onAfterLogExport() * * Method is called after user request to clean cached items. * - * @param string $group Holds the group name. + * @param Cache\AfterPurgeEvent $event The event instance. * * @return void * * @since 3.9.4 */ - public function onAfterPurge($group = 'all') + public function onAfterPurge(Cache\AfterPurgeEvent $event): void { + $group = $event->getGroup() ?: 'all'; $context = $this->getApplication()->getInput()->get('option'); $user = $this->getApplication()->getIdentity(); @@ -1054,7 +1115,7 @@ public function onAfterPurge($group = 'all') * * @since 4.0.0 */ - public function onAfterDispatch() + public function onAfterDispatch(): void { if (!$this->getApplication()->isClient('api')) { return; @@ -1092,14 +1153,19 @@ public function onAfterDispatch() * * Method is called after user update the CMS. * - * @param string $oldVersion The Joomla version before the update + * @param Event $event The event instance. * * @return void * * @since 3.9.21 + * + * @TODO: Update to use a real event class */ - public function onJoomlaAfterUpdate($oldVersion = null) + public function onJoomlaAfterUpdate(Event $event): void { + $arguments = array_values($event->getArguments()); + $oldVersion = $arguments[0] ?? ''; + $context = $this->getApplication()->getInput()->get('option'); $user = $this->getApplication()->getIdentity(); @@ -1147,14 +1213,15 @@ private function getActionLogParams($context): ?\stdClass * * Method is called after user request to reset their password. * - * @param object $user Holds the user data. + * @param User\AfterResetRequestEvent $event The event instance. * * @return void * * @since 4.2.9 */ - public function onUserAfterResetRequest($user) + public function onUserAfterResetRequest(User\AfterResetRequestEvent $event): void { + $user = $event->getUser(); $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { @@ -1180,14 +1247,15 @@ public function onUserAfterResetRequest($user) * * Method is called after user complete the reset of their password. * - * @param object $user Holds the user data. + * @param User\AfterResetCompleteEvent $event The event instance. * * @return void * * @since 4.2.9 */ - public function onUserAfterResetComplete($user) + public function onUserAfterResetComplete(User\AfterResetCompleteEvent $event) { + $user = $event->getUser(); $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { @@ -1211,16 +1279,17 @@ public function onUserAfterResetComplete($user) /** * Method is called before user data is stored in the database * - * @param array $user Holds the old user data. - * @param boolean $isNew True if a new user is stored. - * @param array $data Holds the new user data. + * @param User\BeforeSaveEvent $event The event instance. * * @return void * * @since 5.0.0 */ - public function onUserBeforeSave($user, $isnew, $new): void + public function onUserBeforeSave(User\BeforeSaveEvent $event): void { + $user = $event->getUser(); + $new = $event->getData(); + $session = $this->getApplication()->getSession(); $session->set('block', null);