diff --git a/administrator/components/com_actionlogs/src/Field/UserlogtypeField.php b/administrator/components/com_actionlogs/src/Field/UserlogtypeField.php new file mode 100644 index 0000000000000..985c81c7a5682 --- /dev/null +++ b/administrator/components/com_actionlogs/src/Field/UserlogtypeField.php @@ -0,0 +1,78 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Component\Actionlogs\Administrator\Field; + +use Joomla\CMS\Application\ApplicationHelper; +use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Factory; +use Joomla\CMS\Form\Field\ListField; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper; +use Joomla\Database\ParameterType; + +/** + * Field to load a list of all users that have logged actions + * + * @since __DEPLOY_VERSION__ + */ +class UserlogtypeField extends ListField +{ + /** + * The form field type. + * + * @var string + * @since __DEPLOY_VERSION__ + */ + protected $type = 'UserLogType'; + + /** + * Method to get the field options. + * + * @return array The field option objects. + * + * @since __DEPLOY_VERSION__ + */ + public function getOptions() + { + $db = $this->getDatabase(); + $user = Factory::getApplication()->getIdentity(); + $query = $db->getQuery(true) + ->select($db->quoteName('extensions')) + ->from($db->quoteName('#__action_logs_users')) + ->where($db->quoteName('user_id') . ' = :userid') + ->bind(':userid', $user->id, ParameterType::INTEGER); + + $extensions = $db->setQuery($query)->loadColumn(); + $userExt = []; + $params = ComponentHelper::getParams('com_actionlogs'); + $globalExt = $params->get('loggable_extensions', []); + + if (!empty($extensions)) { + $userExt = substr($extensions[0], 2); + $userExt = substr($userExt, 0, -2); + $userExt = explode('","', $userExt); + } + + $common = array_merge($globalExt, array_intersect($globalExt, $userExt)); + $options = []; + + foreach ($common as $extension) { + ActionlogsHelper::loadTranslationFiles($extension); + $extensionName = Text::_($extension); + $options[ApplicationHelper::stringURLSafe($extensionName) . '_' . $extension] = HTMLHelper::_('select.option', $extension, $extensionName); + } + + ksort($options); + + return array_merge(parent::getOptions(), array_values($options)); + } +} diff --git a/plugins/system/actionlogs/forms/actionlogs.xml b/plugins/system/actionlogs/forms/actionlogs.xml index 7309cf3081ced..07840b824ed05 100644 --- a/plugins/system/actionlogs/forms/actionlogs.xml +++ b/plugins/system/actionlogs/forms/actionlogs.xml @@ -16,7 +16,7 @@ name !== 'com_actionlogs') { + return; + } + + $params = ComponentHelper::getParams('com_actionlogs'); + $globalExt = (array) $params->get('loggable_extensions', []); + + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select($db->quoteName(['user_id', 'notify', 'extensions'])) + ->from($db->quoteName('#__action_logs_users')); + + try { + $values = $db->setQuery($query)->loadObjectList(); + } catch (ExecutionFailureException $e) { + return; + } + + foreach ($values as $item) { + $userExt = substr($item->extensions, 2); + $userExt = substr($userExt, 0, -2); + $user = explode('","', $userExt); + $common = array_intersect($globalExt, $user); + + $extension = json_encode(array_values($common)); + + $query->clear() + ->update($db->quoteName('#__action_logs_users')) + ->set($db->quoteName('extensions') . ' = :extension') + ->where($db->quoteName('user_id') . ' = :userid') + ->bind(':userid', $item->user_id, ParameterType::INTEGER) + ->bind(':extension', $extension); + + try { + $db->setQuery($query)->execute(); + } catch (ExecutionFailureException $e) { + // Do nothing. + } + } + } }