uawdijnntqw1x1x1
IP : 216.73.216.10
Hostname : webm003.cluster107.gra.hosting.ovh.net
Kernel : Linux webm003.cluster107.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
opticamezl
/
www
/
newok
/
bin
/
..
/
tmp
/
.
/
..
/
language
/
es-ES
/
..
/
..
/
modules
/
mod_stats
/
..
/
..
/
joomla.tar
/
/
src/Extension/Joomla.php000064400000114120151666567750011270 0ustar00<?php /** * @package Joomla.Plugin * @subpackage Actionlog.joomla * * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Plugin\Actionlog\Joomla\Extension; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Installer\Installer; use Joomla\CMS\MVC\Factory\MVCFactoryServiceInterface; use Joomla\CMS\Table\Table; use Joomla\CMS\User\User; 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\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Joomla! Users Actions Logging Plugin. * * @since 3.9.0 */ final class Joomla extends ActionLogPlugin { use DatabaseAwareTrait; /** * Array of loggable extensions. * * @var array * @since 3.9.0 */ protected $loggableExtensions = []; /** * Context aliases * * @var array * @since 3.9.0 */ protected $contextAliases = ['com_content.form' => 'com_content.article']; /** * Flag for loggable Api. * * @var boolean * @since 4.0.0 */ protected $loggableApi = false; /** * Array of loggable verbs. * * @var array * @since 4.0.0 */ protected $loggableVerbs = []; /** * Constructor. * * @param DispatcherInterface $dispatcher The dispatcher * @param array $config An optional associative array of configuration settings * * @since 3.9.0 */ public function __construct(DispatcherInterface $dispatcher, array $config) { parent::__construct($dispatcher, $config); $params = ComponentHelper::getComponent('com_actionlogs')->getParams(); $this->loggableExtensions = $params->get('loggable_extensions', []); $this->loggableApi = $params->get('loggable_api', 0); $this->loggableVerbs = $params->get('loggable_verbs', []); } /** * 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 JTableContent object * @param boolean $isNew If the content is just about to be created * * @return void * * @since 3.9.0 */ public function onContentAfterSave($context, $article, $isNew): void { if (isset($this->contextAliases[$context])) { $context = $this->contextAliases[$context]; } $params = $this->getActionLogParams($context); // Not found a valid content type, don't process further if ($params === null) { return; } list($option, $contentType) = explode('.', $params->type_alias); if (!$this->checkLoggable($option)) { return; } if ($isNew) { $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_ADDED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ADDED'; } else { $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_UPDATED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UPDATED'; } // If the content type doesn't have its own language key, use default language key if (!$this->getApplication()->getLanguage()->hasKey($messageLanguageKey)) { $messageLanguageKey = $defaultLanguageKey; } $id = empty($params->id_holder) ? 0 : $article->get($params->id_holder); $message = [ 'action' => $isNew ? 'add' : 'update', 'type' => $params->text_prefix . '_TYPE_' . $params->type_title, 'id' => $id, 'title' => $article->get($params->title_holder), 'itemlink' => ActionlogsHelper::getContentTypeLink($option, $contentType, $id, $params->id_holder, $article), ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * After delete content logging method * 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 JTableContent object * * @return void * * @since 3.9.0 */ public function onContentAfterDelete($context, $article): void { $option = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($option)) { return; } $params = $this->getActionLogParams($context); // Not found a valid content type, don't process further if ($params === null) { return; } // If the content type has its own language key, use it, otherwise, use default language key if ($this->getApplication()->getLanguage()->hasKey(strtoupper($params->text_prefix . '_' . $params->type_title . '_DELETED'))) { $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_DELETED'; } else { $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_DELETED'; } $id = empty($params->id_holder) ? 0 : $article->get($params->id_holder); $message = [ 'action' => 'delete', 'type' => $params->text_prefix . '_TYPE_' . $params->type_title, 'id' => $id, 'title' => $article->get($params->title_holder), ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On content change status logging method * 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. * * @return void * * @since 3.9.0 */ public function onContentChangeState($context, $pks, $value) { $option = $this->getApplication()->getInput()->getCmd('option'); if (!$this->checkLoggable($option)) { return; } $params = $this->getActionLogParams($context); // Not found a valid content type, don't process further if ($params === null) { return; } list(, $contentType) = explode('.', $params->type_alias); switch ($value) { case 0: $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_UNPUBLISHED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UNPUBLISHED'; $action = 'unpublish'; break; case 1: $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_PUBLISHED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_PUBLISHED'; $action = 'publish'; break; case 2: $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_ARCHIVED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ARCHIVED'; $action = 'archive'; break; case -2: $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_TRASHED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_TRASHED'; $action = 'trash'; break; default: $messageLanguageKey = ''; $defaultLanguageKey = ''; $action = ''; break; } // If the content type doesn't have its own language key, use default language key if (!$this->getApplication()->getLanguage()->hasKey($messageLanguageKey)) { $messageLanguageKey = $defaultLanguageKey; } $db = $this->getDatabase(); $query = $db->getQuery(true) ->select($db->quoteName([$params->title_holder, $params->id_holder])) ->from($db->quoteName($params->table_name)) ->whereIn($db->quoteName($params->id_holder), ArrayHelper::toInteger($pks)); $db->setQuery($query); try { $items = $db->loadObjectList($params->id_holder); } catch (\RuntimeException $e) { $items = []; } $messages = []; foreach ($pks as $pk) { $message = [ 'action' => $action, 'type' => $params->text_prefix . '_TYPE_' . $params->type_title, 'id' => $pk, 'title' => $items[$pk]->{$params->title_holder}, 'itemlink' => ActionlogsHelper::getContentTypeLink($option, $contentType, $pk, $params->id_holder, null), ]; $messages[] = $message; } $this->addLog($messages, $messageLanguageKey, $context); } /** * 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 * * @return void * * @since 3.9.0 */ public function onApplicationAfterSave($config): void { $option = $this->getApplication()->getInput()->getCmd('option'); if (!$this->checkLoggable($option)) { return; } $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_APPLICATION_CONFIG_UPDATED'; $action = 'update'; $message = [ 'action' => $action, 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_APPLICATION_CONFIG', 'extension_name' => 'com_config.application', 'itemlink' => 'index.php?option=com_config', ]; $this->addLog([$message], $messageLanguageKey, 'com_config.application'); } /** * On installing extensions logging method * 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 * * @return void * * @since 3.9.0 */ public function onExtensionAfterInstall($installer, $eid) { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $manifest = $installer->get('manifest'); if ($manifest === null) { return; } $extensionType = $manifest->attributes()->type; // If the extension type has its own language key, use it, otherwise, use default language key if ($this->getApplication()->getLanguage()->hasKey(strtoupper('PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_INSTALLED'))) { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_INSTALLED'; } else { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_EXTENSION_INSTALLED'; } $message = [ 'action' => 'install', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_' . $extensionType, 'id' => $eid, 'name' => (string) $manifest->name, 'extension_name' => (string) $manifest->name, ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On uninstalling extensions logging method * 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 * * @return void * * @since 3.9.0 */ public function onExtensionAfterUninstall($installer, $eid, $result) { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } // If the process failed, we don't have manifest data, stop process to avoid fatal error if ($result === false) { return; } $manifest = $installer->get('manifest'); if ($manifest === null) { return; } $extensionType = $manifest->attributes()->type; // If the extension type has its own language key, use it, otherwise, use default language key if ($this->getApplication()->getLanguage()->hasKey(strtoupper('PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_UNINSTALLED'))) { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_UNINSTALLED'; } else { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_EXTENSION_UNINSTALLED'; } $message = [ 'action' => 'install', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_' . $extensionType, 'id' => $eid, 'name' => (string) $manifest->name, 'extension_name' => (string) $manifest->name, ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On updating extensions logging method * 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 * * @return void * * @since 3.9.0 */ public function onExtensionAfterUpdate($installer, $eid) { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $manifest = $installer->get('manifest'); if ($manifest === null) { return; } $extensionType = $manifest->attributes()->type; // If the extension type has its own language key, use it, otherwise, use default language key if ($this->getApplication()->getLanguage()->hasKey('PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_UPDATED')) { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_' . $extensionType . '_UPDATED'; } else { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_EXTENSION_UPDATED'; } $message = [ 'action' => 'update', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_' . $extensionType, 'id' => $eid, 'name' => (string) $manifest->name, 'extension_name' => (string) $manifest->name, ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * 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 * * @return void * * @since 3.9.0 */ public function onExtensionAfterSave($context, $table, $isNew): void { $option = $this->getApplication()->getInput()->getCmd('option'); if ($table->get('module') != null) { $option = 'com_modules'; } if (!$this->checkLoggable($option)) { return; } $params = $this->getActionLogParams($context); // Not found a valid content type, don't process further if ($params === null) { return; } list(, $contentType) = explode('.', $params->type_alias); if ($isNew) { $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_ADDED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ADDED'; } else { $messageLanguageKey = $params->text_prefix . '_' . $params->type_title . '_UPDATED'; $defaultLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UPDATED'; } // If the extension type doesn't have it own language key, use default language key if (!$this->getApplication()->getLanguage()->hasKey($messageLanguageKey)) { $messageLanguageKey = $defaultLanguageKey; } $message = [ 'action' => $isNew ? 'add' : 'update', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_' . $params->type_title, 'id' => $table->get($params->id_holder), 'title' => $table->get($params->title_holder), 'extension_name' => $table->get($params->title_holder), 'itemlink' => ActionlogsHelper::getContentTypeLink($option, $contentType, $table->get($params->id_holder), $params->id_holder), ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * 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 * * @return void * * @since 3.9.0 */ public function onExtensionAfterDelete($context, $table): void { if (!$this->checkLoggable($this->getApplication()->getInput()->get('option'))) { return; } $params = $this->getActionLogParams($context); // Not found a valid content type, don't process further if ($params === null) { return; } $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_DELETED'; $message = [ 'action' => 'delete', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_' . $params->type_title, 'title' => $table->get($params->title_holder), ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On saving user data logging method * * 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. * * @return void * * @since 3.9.0 */ public function onUserAfterSave($user, $isnew, $success, $msg): void { $context = $this->getApplication()->getInput()->get('option'); $task = $this->getApplication()->getInput()->get('task'); if (!$this->checkLoggable($context)) { return; } if ($task === 'request') { return; } if ($task === 'complete') { return; } $jUser = Factory::getUser(); if (!$jUser->id) { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_USER_REGISTERED'; $action = 'register'; // Registration Activation if ($task === 'activate') { $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_USER_REGISTRATION_ACTIVATE'; $action = 'activaterequest'; } } elseif ($isnew) { $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ADDED'; $action = 'add'; } else { $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UPDATED'; $action = 'update'; } $userId = $jUser->id ?: $user['id']; $username = $jUser->username ?: $user['username']; $message = [ 'action' => $action, 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user['id'], 'title' => $user['name'], 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user['id'], 'userid' => $userId, 'username' => $username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $userId, ]; $this->addLog([$message], $messageLanguageKey, $context, $userId); } /** * On deleting user data logging method * * 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 * * @return void * * @since 3.9.0 */ public function onUserAfterDelete($user, $success, $msg): void { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_DELETED'; $message = [ 'action' => 'delete', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user['id'], 'title' => $user['name'], ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On after save user group data logging method * * 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 * * @return void * * @since 3.9.0 */ public function onUserAfterSaveGroup($context, $table, $isNew): void { // Override context (com_users.group) with the component context (com_users) to pass the checkLoggable $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } if ($isNew) { $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ADDED'; $action = 'add'; } else { $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UPDATED'; $action = 'update'; } $message = [ 'action' => $action, 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER_GROUP', 'id' => $table->id, 'title' => $table->title, 'itemlink' => 'index.php?option=com_users&task=group.edit&id=' . $table->id, ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * On deleting user group data logging method * * 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 * * @return void * * @since 3.9.0 */ public function onUserAfterDeleteGroup($group, $success, $msg): void { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $messageLanguageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_DELETED'; $message = [ 'action' => 'delete', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER_GROUP', 'id' => $group['id'], 'title' => $group['title'], ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * Method to log user login success action * * @param array $options Array holding options (user, responseType) * * @return void * * @since 3.9.0 */ public function onUserAfterLogin($options) { if ($options['action'] === 'core.login.api') { return; } $context = 'com_users'; if (!$this->checkLoggable($context)) { return; } $loggedInUser = $options['user']; $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_USER_LOGGED_IN'; $message = [ 'action' => 'login', 'userid' => $loggedInUser->id, 'username' => $loggedInUser->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $loggedInUser->id, 'app' => 'PLG_ACTIONLOG_JOOMLA_APPLICATION_' . $this->getApplication()->getName(), ]; $this->addLog([$message], $messageLanguageKey, $context, $loggedInUser->id); } /** * Method to log user login failed action * * @param array $response Array of response data. * * @return void * * @since 3.9.0 */ public function onUserLoginFailure($response) { $context = 'com_users'; if (!$this->checkLoggable($context)) { return; } // Get the user id for the given username $db = $this->getDatabase(); $query = $db->getQuery(true) ->select($db->quoteName(['id', 'username'])) ->from($db->quoteName('#__users')) ->where($db->quoteName('username') . ' = :username') ->bind(':username', $response['username']); $db->setQuery($query); try { $loggedInUser = $db->loadObject(); } catch (ExecutionFailureException $e) { return; } // Not a valid user, return if (!isset($loggedInUser->id)) { return; } $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_USER_LOGIN_FAILED'; $message = [ 'action' => 'login', 'id' => $loggedInUser->id, 'userid' => $loggedInUser->id, 'username' => $loggedInUser->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $loggedInUser->id, 'app' => 'PLG_ACTIONLOG_JOOMLA_APPLICATION_' . $this->getApplication()->getName(), ]; $this->addLog([$message], $messageLanguageKey, $context, $loggedInUser->id); } /** * Method to log user's logout action * * @param array $user Holds the user data * @param array $options Array holding options (remember, autoregister, group) * * @return void * * @since 3.9.0 */ public function onUserLogout($user, $options = []) { $context = 'com_users'; if (!$this->checkLoggable($context)) { return; } $loggedOutUser = User::getInstance($user['id']); if ($loggedOutUser->block) { return; } $messageLanguageKey = 'PLG_ACTIONLOG_JOOMLA_USER_LOGGED_OUT'; $message = [ 'action' => 'logout', 'id' => $loggedOutUser->id, 'userid' => $loggedOutUser->id, 'username' => $loggedOutUser->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $loggedOutUser->id, 'app' => 'PLG_ACTIONLOG_JOOMLA_APPLICATION_' . $this->getApplication()->getName(), ]; $this->addLog([$message], $messageLanguageKey, $context); } /** * Function to check if a component is loggable or not * * @param string $extension The extension that triggered the event * * @return boolean * * @since 3.9.0 */ protected function checkLoggable($extension) { return in_array($extension, $this->loggableExtensions); } /** * On after Remind username request * * Method is called after user request to remind their username. * * @param array $user Holds the user data. * * @return void * * @since 3.9.0 */ public function onUserAfterRemind($user) { $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $message = [ 'action' => 'remind', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->name, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->name, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_REMIND', $context, $user->id); } /** * On after Check-in request * * Method is called after user request to check-in items. * * @param array $table Holds the table name. * * @return void * * @since 3.9.3 */ public function onAfterCheckin($table) { $context = 'com_checkin'; $user = Factory::getUser(); if (!$this->checkLoggable($context)) { return; } $message = [ 'action' => 'checkin', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->username, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'table' => str_replace($this->getDatabase()->getPrefix(), '#__', $table), ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_CHECKIN', $context, $user->id); } /** * On after log action purge * * Method is called after user request to clean action log items. * * @param array $group Holds the group name. * * @return void * * @since 3.9.4 */ public function onAfterLogPurge($group = '') { $context = $this->getApplication()->getInput()->get('option'); $user = Factory::getUser(); $message = [ 'action' => 'actionlogs', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->username, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_LOG', $context, $user->id); } /** * On after log export * * Method is called after user request to export action log items. * * @param array $group Holds the group name. * * @return void * * @since 3.9.4 */ public function onAfterLogExport($group = '') { $context = $this->getApplication()->getInput()->get('option'); $user = Factory::getUser(); $message = [ 'action' => 'actionlogs', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->username, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_LOGEXPORT', $context, $user->id); } /** * On after Cache purge * * Method is called after user request to clean cached items. * * @param string $group Holds the group name. * * @return void * * @since 3.9.4 */ public function onAfterPurge($group = 'all') { $context = $this->getApplication()->getInput()->get('option'); $user = Factory::getUser(); if (!$this->checkLoggable($context)) { return; } $message = [ 'action' => 'cache', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->username, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'group' => $group, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_CACHE', $context, $user->id); } /** * On after Api dispatched * * Method is called after user perform an API request better on onAfterDispatch. * * @return void * * @since 4.0.0 */ public function onAfterDispatch() { if (!$this->getApplication()->isClient('api')) { return; } if ($this->loggableApi === 0) { return; } $verb = $this->getApplication()->getInput()->getMethod(); if (!in_array($verb, $this->loggableVerbs)) { return; } $context = $this->getApplication()->getInput()->get('option'); if (!$this->checkLoggable($context)) { return; } $user = $this->getApplication()->getIdentity(); $message = [ 'action' => 'API', 'verb' => $verb, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'url' => htmlspecialchars(urldecode($this->getApplication()->get('uri.route')), ENT_QUOTES, 'UTF-8'), ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_API', $context, $user->id); } /** * On after CMS Update * * Method is called after user update the CMS. * * @param string $oldVersion The Joomla version before the update * * @return void * * @since 3.9.21 */ public function onJoomlaAfterUpdate($oldVersion = null) { $context = $this->getApplication()->getInput()->get('option'); $user = Factory::getUser(); if (empty($oldVersion)) { $oldVersion = $this->getApplication()->getLanguage()->_('JLIB_UNKNOWN'); } $message = [ 'action' => 'joomlaupdate', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->username, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->username, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'version' => JVERSION, 'oldversion' => $oldVersion, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_UPDATE', $context, $user->id); } /** * Returns the action log params for the given context. * * @param string $context The context of the action log * * @return \stdClass The params * * @since 4.2.0 */ private function getActionLogParams($context): ?\stdClass { $component = $this->getApplication()->bootComponent('actionlogs'); if (!$component instanceof MVCFactoryServiceInterface) { return null; } return $component->getMVCFactory()->createModel('ActionlogConfig', 'Administrator')->getLogContentTypeParams($context); } /** * On after Reset password request * * Method is called after user request to reset their password. * * @param array $user Holds the user data. * * @return void * * @since 4.2.9 */ public function onUserAfterResetRequest($user) { $context = $this->getApplication()->input->get('option'); if (!$this->checkLoggable($context)) { return; } $message = [ 'action' => 'reset', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->name, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->name, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_RESET_REQUEST', $context, $user->id); } /** * On after Completed reset request * * Method is called after user complete the reset of their password. * * @param array $user Holds the user data. * * @return void * * @since 4.2.9 */ public function onUserAfterResetComplete($user) { $context = $this->getApplication()->input->get('option'); if (!$this->checkLoggable($context)) { return; } $message = [ 'action' => 'complete', 'type' => 'PLG_ACTIONLOG_JOOMLA_TYPE_USER', 'id' => $user->id, 'title' => $user->name, 'itemlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, 'userid' => $user->id, 'username' => $user->name, 'accountlink' => 'index.php?option=com_users&task=user.edit&id=' . $user->id, ]; $this->addLog([$message], 'PLG_ACTIONLOG_JOOMLA_USER_RESET_COMPLETE', $context, $user->id); } } joomla.xml000060400000026741151666567750006605 0ustar00<?xml version="1.0" encoding="UTF-8"?> <extension type="plugin" group="osmap" method="upgrade"> <name>PLG_OSMAP_JOOMLA</name> <author>Joomlashack</author> <authorEmail>help@joomlashack.com</authorEmail> <authorUrl>https://www.joomlashack.com/</authorUrl> <copyright>Copyright 2016-2023 Joomlashack.com</copyright> <license>GNU GPL; see LICENSE file</license> <description>PLG_OSMAP_JOOMLA_PLUGIN_DESCRIPTION</description> <version>5.0.11</version> <creationDate>June 14 2023</creationDate> <variant>FREE</variant> <files> <folder>field</folder> <folder>language</folder> <filename plugin="joomla">joomla.php</filename> </files> <config> <fields name="params"> <fieldset name="basic"> <field name="expand_categories" type="list" default="1" label="PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES" description="PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_XML_ONLY</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY</option> </field> <field name="expand_featured" type="list" default="1" label="PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED" description="PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_XML_ONLY</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY</option> </field> <field name="max_category_level" type="list" default="all" label="PLG_OSMAP_JOOMLA_SETTING_MAX_CATEG_LEVEL_LABEL"> <option value="100">PLG_OSMAP_JOOMLA_OPTION_ALL</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </field> <field name="include_archived" type="list" default="2" label="PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED" description="PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_XML_ONLY</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY</option> </field> <field name="show_unauth" type="list" default="0" label="PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS" description="PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_XML_ONLY</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY</option> </field> <field name="add_pagebreaks" type="list" default="1" label="PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_XML_ONLY</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY</option> </field> <field name="max_art" type="text" default="0" label="PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT" description="PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT_DESC"/> <field name="article_order" type="list" default="0" label="PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_CREATED</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_MODIFIED</option> <option value="2">PLG_OSMAP_JOOMLA_OPTION_PUBLISH</option> <option value="3">PLG_OSMAP_JOOMLA_OPTION_HITS</option> <option value="4">PLG_OSMAP_JOOMLA_OPTION_TITLE</option> <option value="5">PLG_OSMAP_JOOMLA_OPTION_ORDERING</option> </field> <field name="article_orderdir" type="list" default="0" label="PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_DESC"> <option value="0">PLG_OSMAP_JOOMLA_OPTION_ASC</option> <option value="1">PLG_OSMAP_JOOMLA_OPTION_DESC</option> </field> <field name="prepare_content" type="shack.radio" label="PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_DESC" class="btn-group btn-group-yesno" default="1"> <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="xml"> <field name="add_images" type="list" default="1" label="PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_DESC"> <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="cat_priority" type="list" default="-1" label="PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY" description="PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY_DESC"> <option value="-1">PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU</option> <option value="0.0">0.0</option> <option value="0.1">0.1</option> <option value="0.2">0.2</option> <option value="0.3">0.3</option> <option value="0.4">0.4</option> <option value="0.5">0.5</option> <option value="0.6">0.6</option> <option value="0.7">0.7</option> <option value="0.8">0.8</option> <option value="0.9">0.9</option> <option value="1">1.0</option> </field> <field name="cat_changefreq" type="list" default="-1" label="PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ" description="PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ_DESC"> <option value="-1">PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU</option> <option value="always">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="hourly">PLG_OSMAP_JOOMLA_OPTION_HOURLY</option> <option value="daily">PLG_OSMAP_JOOMLA_OPTION_DAILY</option> <option value="weekly">PLG_OSMAP_JOOMLA_OPTION_WEEKLY</option> <option value="monthly">PLG_OSMAP_JOOMLA_OPTION_MONTHLY</option> <option value="yearly">PLG_OSMAP_JOOMLA_OPTION_YEARLY</option> <option value="never">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> </field> <field name="art_priority" type="list" default="-1" label="PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY" description="PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY_DESC"> <option value="-1">PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU</option> <option value="0.0">0.0</option> <option value="0.1">0.1</option> <option value="0.2">0.2</option> <option value="0.3">0.3</option> <option value="0.4">0.4</option> <option value="0.5">0.5</option> <option value="0.6">0.6</option> <option value="0.7">0.7</option> <option value="0.8">0.8</option> <option value="0.9">0.9</option> <option value="1">1.0</option> </field> <field name="art_changefreq" type="list" default="-1" label="PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ" description="PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ_DESC"> <option value="-1">PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU</option> <option value="always">PLG_OSMAP_JOOMLA_OPTION_ALWAYS</option> <option value="hourly">PLG_OSMAP_JOOMLA_OPTION_HOURLY</option> <option value="daily">PLG_OSMAP_JOOMLA_OPTION_DAILY</option> <option value="weekly">PLG_OSMAP_JOOMLA_OPTION_WEEKLY</option> <option value="monthly">PLG_OSMAP_JOOMLA_OPTION_MONTHLY</option> <option value="yearly">PLG_OSMAP_JOOMLA_OPTION_YEARLY</option> <option value="never">PLG_OSMAP_JOOMLA_OPTION_NEVER</option> </field> </fieldset> <fieldset name="news"> <field name="keywords" type="list" default="metakey" label="PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_LABEL" description="PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_DESC"> <option value="metakey">PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS</option> <option value="category">PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_CATTITLE</option> <option value="both">PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS_CATTITLE</option> <option value="none">PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_NONE</option> </field> </fieldset> </fields> </config> </extension> services/provider.php000064400000002561151666567750010766 0ustar00<?php /** * @package Joomla.Plugin * @subpackage Actionlog.joomla * * @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Extension\PluginInterface; use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; use Joomla\Database\DatabaseInterface; use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; use Joomla\Event\DispatcherInterface; use Joomla\Plugin\Actionlog\Joomla\Extension\Joomla; return new class () implements ServiceProviderInterface { /** * Registers the service provider with a DI container. * * @param Container $container The DI container. * * @return void * * @since 4.2.0 */ public function register(Container $container) { $container->set( PluginInterface::class, function (Container $container) { $plugin = new Joomla( $container->get(DispatcherInterface::class), (array) PluginHelper::getPlugin('actionlog', 'joomla') ); $plugin->setApplication(Factory::getApplication()); $plugin->setDatabase($container->get(DatabaseInterface::class)); return $plugin; } ); } }; field/TraitShack.php000060400000003364151676177460010423 0ustar00<?php /** * @package OSMap * @contact www.joomlashack.com, help@joomlashack.com * @copyright 2021-2023 Joomlashack.com. All rights reserved * @license https://www.gnu.org/licenses/gpl.html GNU/GPL * * This file is part of OSMap. * * OSMap is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * OSMap is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OSMap. If not, see <https://www.gnu.org/licenses/>. */ use Alledia\Framework\Factory; defined('_JEXEC') or die(); trait TraitShack { protected static $frameworkLoaded = null; /** * @return bool */ protected function isPro() { if ($this->isFrameworkLoaded()) { $license = Factory::getExtension('osmap', 'component'); return $license->isPro(); } return false; } /** * @return null */ protected function isFrameworkLoaded() { if (static::$frameworkLoaded === null) { if (!defined('ALLEDIA_FRAMEWORK_LOADED')) { $path = JPATH_SITE . '/libraries/allediaframework/include.php'; if (is_file($path)) { require_once $path; } } static::$frameworkLoaded = defined('ALLEDIA_FRAMEWORK_LOADED'); } return static::$frameworkLoaded; } } field/radio.php000060400000002347151676177460007464 0ustar00<?php /** * @package OSMap * @contact www.joomlashack.com, help@joomlashack.com * @copyright 2021-2023 Joomlashack.com. All rights reserved * @license https://www.gnu.org/licenses/gpl.html GNU/GPL * * This file is part of OSMap. * * OSMap is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * OSMap is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OSMap. If not, see <https://www.gnu.org/licenses/>. */ use Joomla\CMS\Form\FormHelper; defined('_JEXEC') or die(); require_once __DIR__ . '/TraitShack.php'; FormHelper::loadFieldClass('radio'); class ShackFormFieldRadio extends JFormFieldRadio { use TraitShack; public function setup(SimpleXMLElement $element, $value, $group = null) { return $this->isPro() && parent::setup($element, $value, $group); } } language/en-GB/en-GB.plg_osmap_joomla.ini000060400000012702151676177460014153 0ustar00; @package OSMap ; @contact www.joomlashack.com, help@joomlashack.com ; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved. ; @copyright 2016-2023 Joomlashack.com. All rights reserved. ; @license https://www.gnu.org/licenses/gpl.html GNU/GPL ; ; This file is part of OSMap. ; ; OSMap is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 2 of the License, or ; (at your option) any later version. ; ; OSMap is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with OSMap. If not, see <https://www.gnu.org/licenses/>. ; ; Note : All ini files need to be saved as UTF-8 - No BOM PLG_OSMAP_JOOMLA = "OSMap - Joomla Content" PLG_OSMAP_JOOMLA_PLUGIN_DESCRIPTION = "Add support for articles and categories" COM_PLUGINS_BASIC_FIELDSET_LABEL = "Basic Settings" COM_PLUGINS_NEWS_FIELDSET_LABEL = "News Sitemap Settings" COM_PLUGINS_XML_FIELDSET_LABEL = "XML Sitemap Settings" JGLOBAL_FIELDSET_NEWS = "News" JGLOBAL_FIELDSET_XML = "XML" PLG_OSMAP_JOOMLA_OPTION_ALL = "All" PLG_OSMAP_JOOMLA_OPTION_ALWAYS = "Always" PLG_OSMAP_JOOMLA_OPTION_ASC = "ASC" PLG_OSMAP_JOOMLA_OPTION_CREATED = "Creation Date" PLG_OSMAP_JOOMLA_OPTION_DAILY = "Daily" PLG_OSMAP_JOOMLA_OPTION_DESC = "DESC" PLG_OSMAP_JOOMLA_OPTION_HITS = "Visits" PLG_OSMAP_JOOMLA_OPTION_HOURLY = "Hourly" PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY = "In HTML Sitemap Only" PLG_OSMAP_JOOMLA_OPTION_MODIFIED = "Modification Date" PLG_OSMAP_JOOMLA_OPTION_MONTHLY = "Monthly" PLG_OSMAP_JOOMLA_OPTION_NEVER = "Never" PLG_OSMAP_JOOMLA_OPTION_ORDERING = "Ordering" PLG_OSMAP_JOOMLA_OPTION_PUBLISH = "Publish Date" PLG_OSMAP_JOOMLA_OPTION_TITLE = "Title" PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU = "Use Parent Menu Settings" PLG_OSMAP_JOOMLA_OPTION_WEEKLY = "Weekly" PLG_OSMAP_JOOMLA_OPTION_XML_ONLY = "In XML Sitemap Only" PLG_OSMAP_JOOMLA_OPTION_YEARLY = "Yearly" PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_DESC = "If yes, will parse the content of the article searching for images to add them to the site map. Valid Only for XML site map (Search engines Sitemap) " PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_LABEL = "Add images?" PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_DESC = "If yes, will include the sub-pages of the article into the sitemap." PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_LABEL = "Add Pagebreak" PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ = "Article Change frequency" PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ_DESC = "Set the chage frequency for articles" PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY = "Article Priority" PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY_DESC = "Set the priority for articles" PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DESC = "Specify how to sort the articles" PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_DESC = "Specify the direction for article's ordering" PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_LABEL = "Article ordering direction" PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_LABEL = "Article ordering" PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ = "Category Change frequency" PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ_DESC = "Set the chage frequency for the categories" PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY = "Category Priority" PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY_DESC = "Set the priority for the categories" PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES = "Expand Categories" PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES_DESC = "Set true if OSMap should include the articles within each category link" PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED = "Expand Featured" PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED_DESC = "Set true if OSMap should include the articles within each "Featured Articles" link (usually the frontpage menu item)" PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED = "Include Archived" PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED_DESC = "Select when should the archived articles be included in the sitemap" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_AGE = "Max. Article's Age in days" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_AGE_DESC = "The maximun number of days that an article must have to be included in the sitemap. (0 for no limit)" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT = "Max. Articles per Category" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT_DESC = "Maximum number of articles per category to include in the sitemap (0 for no limit)." PLG_OSMAP_JOOMLA_SETTING_MAX_CATEG_LEVEL_LABEL = "Max Subcategory Levels" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_CATTITLE = "Catetegory Title" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_DESC = "Which keywords should we use for Google News Sitemap?" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_LABEL = "Keywords" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS = "Article's Metakeys" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS_CATTITLE = "Article's Metakeys + Category Title" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_NONE = "None" PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_DESC = "Optionally prepare the content with the Joomla Content Plugins." PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_LABEL = "Prepare Content" PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS = "Show Unauthorized Links" PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS_DESC = "If yes, will show links to content to registered content even if you are not logged in. The user will need to login to see the item in full." language/en-GB/en-GB.plg_osmap_joomla.sys.ini000060400000002132151676177460014764 0ustar00; @package OSMap ; @contact www.joomlashack.com, help@joomlashack.com ; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved. ; @copyright 2016-2023 Joomlashack.com. All rights reserved. ; @license https://www.gnu.org/licenses/gpl.html GNU/GPL ; ; This file is part of OSMap. ; ; OSMap is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 2 of the License, or ; (at your option) any later version. ; ; OSMap is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with OSMap. If not, see <https://www.gnu.org/licenses/>. ; ; Note : All ini files need to be saved as UTF-8 - No BOM PLG_OSMAP_JOOMLA = "OSMap - Joomla Content" PLG_OSMAP_JOOMLA_PLUGIN_DESCRIPTION = "Add support for articles and categories" language/tr-TR/tr-TR.plg_osmap_joomla.ini000060400000013630151676177460014314 0ustar00; @package OSMap ; @contact www.joomlashack.com, help@joomlashack.com ; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved. ; @copyright 2016-2023 Joomlashack.com. All rights reserved. ; @license https://www.gnu.org/licenses/gpl.html GNU/GPL ; ; This file is part of OSMap. ; ; OSMap is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 2 of the License, or ; (at your option) any later version. ; ; OSMap is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with OSMap. If not, see <https://www.gnu.org/licenses/>. ; ; Note : All ini files need to be saved as UTF-8 - No BOM PLG_OSMAP_JOOMLA="OSMap - Joomla İçeriği" PLG_OSMAP_JOOMLA_PLUGIN_DESCRIPTION = "Makaleler ve kategoriler için destek eklenir." COM_PLUGINS_BASIC_FIELDSET_LABEL = "Temel Ayarlar" COM_PLUGINS_NEWS_FIELDSET_LABEL = "Haber Site Haritası Ayarları" COM_PLUGINS_XML_FIELDSET_LABEL = "XML Site Haritası Ayarları" JGLOBAL_FIELDSET_NEWS = "Haber" JGLOBAL_FIELDSET_XML = "XML" PLG_OSMAP_JOOMLA_OPTION_ALL = "Tümü" PLG_OSMAP_JOOMLA_OPTION_ALWAYS = "Her Zaman" PLG_OSMAP_JOOMLA_OPTION_ASC = "Artan" PLG_OSMAP_JOOMLA_OPTION_CREATED = "Oluşturma Tarihi" PLG_OSMAP_JOOMLA_OPTION_DAILY = "Günlük" PLG_OSMAP_JOOMLA_OPTION_DESC = "Azalan" PLG_OSMAP_JOOMLA_OPTION_HITS = "Ziyaretler" PLG_OSMAP_JOOMLA_OPTION_HOURLY = "Saatlik" PLG_OSMAP_JOOMLA_OPTION_HTML_ONLY = "Yalnız HTML Site Haritasında" PLG_OSMAP_JOOMLA_OPTION_MODIFIED = "Değişiklik Tarihi" PLG_OSMAP_JOOMLA_OPTION_MONTHLY = "Aylık" PLG_OSMAP_JOOMLA_OPTION_NEVER = "Asla" PLG_OSMAP_JOOMLA_OPTION_ORDERING = "Sıralama" PLG_OSMAP_JOOMLA_OPTION_PUBLISH = "Yayınlama Tarihi" PLG_OSMAP_JOOMLA_OPTION_TITLE = "Başlık" PLG_OSMAP_JOOMLA_OPTION_USE_PARENT_MENU = "Üst Menü Ayarları Kullanılsın" PLG_OSMAP_JOOMLA_OPTION_WEEKLY = "Haftalık" PLG_OSMAP_JOOMLA_OPTION_XML_ONLY = "Yalnız XML Site Haritasında" PLG_OSMAP_JOOMLA_OPTION_YEARLY = "Yıllık" PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_DESC = "Evetse, site haritasına eklemek için resim arayan makalenin içeriğini ayrıştırır. Yalnızca XML site haritası için geçerlidir (Arama Motorları Site Haritası)." PLG_OSMAP_JOOMLA_SETTING_ADD_IMAGES_LABEL = "Görüntüler Eklensin mi?" PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_DESC = "Evetse, makalenin alt sayfaları site haritasına eklenir." PLG_OSMAP_JOOMLA_SETTING_ADD_PAGEBREAKS_LABEL = "Sayfa Sonu Eklensin" PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ = "Makale Değişiklik Sıklığı" PLG_OSMAP_JOOMLA_SETTING_ART_CHANCE_FREQ_DESC = "Makaleler için değiştirme sıklığını ayarlayın." PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY = "Makale Önceliği" PLG_OSMAP_JOOMLA_SETTING_ART_PRIORITY_DESC = "Makaleler için önceliği ayarlayın." PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DESC = "Makalelerin nasıl sıralanacağını belirtin." PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_DESC = "Makalelerin sıralama yönünü belirtin." PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_DIR_LABEL = "Makale Sıralama Yönü" PLG_OSMAP_JOOMLA_SETTING_ARTICLE_ORDER_LABEL = "Makale Sıralaması" PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ = "Kategori Değişiklik Sıklığı" PLG_OSMAP_JOOMLA_SETTING_CAT_CHANCE_FREQ_DESC = "Kategoriler için değiştirme sıklığını ayarlayın." PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY = "Kategori Önceliği" PLG_OSMAP_JOOMLA_SETTING_CAT_PRIORITY_DESC = "Kategoriler için önceliği ayarlayın." PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES = "Kategoriler Genişletilsin" PLG_OSMAP_JOOMLA_SETTING_EXPAND_CATEGORIES_DESC = "OSMap'in her kategori bağlantısındaki makaleleri içermesi gerekiyorsa doğru olarak ayarlayın." PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED = "Öne Çıkanlar Genişletilsin" PLG_OSMAP_JOOMLA_SETTING_EXPAND_FEATURED_DESC = "OSMap'in "Öne Çıkan Makaleler" bağlantılarındaki (genellikle ön sayfa menü öğesi) makaleleri içermesi gerekiyorsa doğru olarak ayarlayın." PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED = "Arşivlenen Eklensin" PLG_OSMAP_JOOMLA_SETTING_INCLUDE_ARCHIVED_DESC = "Arşivlenen makalelerin site haritasına ne zaman dahil edileceğini seçin." PLG_OSMAP_JOOMLA_SETTING_MAX_ART_AGE = "Gün Içinde Makalenin Maksimum Ömrü" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_AGE_DESC = "Bir makalenin site haritasına eklenmesi gereken maksiumum gün sayısı. (sınırsız için 0)" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT = "Kategori Başına Maksimum Makale" PLG_OSMAP_JOOMLA_SETTING_MAX_ART_CAT_DESC = "Site haritasına dahil edilecek kategori başına maksimum makale sayısı (sınırsız için 0)." PLG_OSMAP_JOOMLA_SETTING_MAX_CATEG_LEVEL_LABEL = "Maksimum Alt Kategori Seviyesi" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_CATTITLE = "Kategori Başlığı" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_DESC = "Google Haberler Site Haritası için hangi anahtar kelimeler kullanılsın?" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_LABEL = "Anahtar Kelimeler" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS = "Makalenin Meta Anahtarları" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_METAKEYS_CATTITLE = "Makalenin Meta Anahtarları + Kategori Başlığı" PLG_OSMAP_JOOMLA_SETTING_NEWS_KEYWORDS_NONE = "Hiçbiri" PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_DESC = "İsteğe bağlı olarak Joomla İçerik Eklentileri ile içeriği hazırlayın." PLG_OSMAP_JOOMLA_SETTING_PREPARE_CONTENT_LABEL = "İçerik Hazırlama" PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS = "Yetkisiz Bağlantılar Gösterilsin" PLG_OSMAP_JOOMLA_SETTING_SHOW_UNAUTH_LINKS_DESC = "Evet ise, oturum açmamış olsanız bile kayıtlı içeriğe içerik bağlantıları gösterilir. Kullanıcının öğeyi tam olarak görebilmesi için giriş yapması gerekir." language/tr-TR/tr-TR.plg_osmap_joomla.sys.ini000060400000002136151676177460015130 0ustar00; @package OSMap ; @contact www.joomlashack.com, help@joomlashack.com ; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved. ; @copyright 2016-2023 Joomlashack.com. All rights reserved. ; @license https://www.gnu.org/licenses/gpl.html GNU/GPL ; ; This file is part of OSMap. ; ; OSMap is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 2 of the License, or ; (at your option) any later version. ; ; OSMap is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with OSMap. If not, see <https://www.gnu.org/licenses/>. ; ; Note : All ini files need to be saved as UTF-8 - No BOM PLG_OSMAP_JOOMLA="OSMap - Joomla İçerik" PLG_OSMAP_JOOMLA_PLUGIN_DESCRIPTION="Makaleler ve kategoriler için destek eklenir." joomla.php000060400000062546151676177460006573 0ustar00<?php /** * @package OSMap * @contact www.joomlashack.com, help@joomlashack.com * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved. * @copyright 2016-2023 Joomlashack.com. All rights reserved. * @license https://www.gnu.org/licenses/gpl.html GNU/GPL * * This file is part of OSMap. * * OSMap is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * OSMap is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OSMap. If not, see <https://www.gnu.org/licenses/>. */ use Alledia\OSMap\Factory; use Alledia\OSMap\Helper\General; use Alledia\OSMap\Plugin\Base; use Alledia\OSMap\Plugin\ContentInterface; use Alledia\OSMap\Sitemap\Collector; use Alledia\OSMap\Sitemap\Item; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Uri\Uri; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; defined('_JEXEC') or die(); JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php'); JLoader::register('ContentHelperQuery', JPATH_SITE . '/components/com_content/helpers/query.php'); /** * Handles standard Joomla's Content articles/categories * * This plugin is able to expand the categories keeping the right order of the * articles according to the menu settings and the user session data (user state). * * This is a very complex plugin, if you are trying to build your own plugin * for other component, I suggest you to take a look to another plugis as * they are usually most simple. ;) */ class PlgOSMapJoomla extends Base implements ContentInterface { /** * @var self */ protected static $instance = null; /** * @var bool */ protected static $prepareContent = null; /** * Returns the unique instance of the plugin * * @return self */ public static function getInstance() { if (empty(static::$instance)) { $dispatcher = Factory::getDispatcher(); static::$instance = new self($dispatcher); } return static::$instance; } /** * Returns the element of the component which this plugin supports. * * @return string */ public function getComponentElement() { return 'com_content'; } /** * This function is called before a menu item is used. We use it to set the * proper uniqueid for the item * * @param Item $node Menu item to be "prepared" * @param Registry $params The extension params * * @return bool * @throws Exception */ public static function prepareMenuItem($node, $params) { static::checkMemory(); $db = Factory::getDbo(); $container = Factory::getPimpleContainer(); $linkQuery = parse_url($node->link); if (!isset($linkQuery['query'])) { return false; } parse_str(html_entity_decode($linkQuery['query']), $linkVars); $view = ArrayHelper::getValue($linkVars, 'view', ''); $id = ArrayHelper::getValue($linkVars, 'id', 0); switch ($view) { case 'archive': $node->adapterName = 'JoomlaCategory'; $node->uid = 'joomla.archive.' . $node->id; $node->expandible = true; break; case 'featured': $node->adapterName = 'JoomlaCategory'; $node->uid = 'joomla.featured.' . $node->id; $node->expandible = true; break; case 'categories': case 'category': $node->adapterName = 'JoomlaCategory'; $node->uid = 'joomla.category.' . $id; $node->expandible = true; break; case 'article': $node->adapterName = 'JoomlaArticle'; $node->expandible = false; $paramAddPageBreaks = $params->get('add_pagebreaks', 1); $paramAddImages = $params->get('add_images', 1); $query = $db->getQuery(true) ->select([ $db->quoteName('created'), $db->quoteName('modified'), $db->quoteName('publish_up'), $db->quoteName('metadata'), $db->quoteName('attribs') ]) ->from($db->quoteName('#__content')) ->where($db->quoteName('id') . '=' . (int)$id); if ($paramAddPageBreaks || $paramAddImages) { $query->select([ $db->quoteName('introtext'), $db->quoteName('fulltext'), $db->quoteName('images') ]); } $db->setQuery($query); if (($item = $db->loadObject()) != null) { // Set the node UID $node->uid = 'joomla.article.' . $id; // Set dates $node->modified = $item->modified; $node->created = $item->created; $node->publishUp = $item->publish_up; $item->params = $item->attribs; $text = ''; if (isset($item->introtext) && isset($item->fulltext)) { $text = $item->introtext . $item->fulltext; } static::prepareContent($text, $params); if ($paramAddImages) { $maxImages = $params->get('max_images', 1000); $node->images = []; // Images from text $node->images = array_merge( $node->images, $container->imagesHelper->getImagesFromText($text, $maxImages) ); // Images from params if (!empty($item->images)) { $node->images = array_merge( $node->images, $container->imagesHelper->getImagesFromParams($item) ); } } if ($paramAddPageBreaks) { $node->subnodes = General::getPagebreaks($text, $node->link, $node->uid); $node->expandible = (count($node->subnodes) > 0); // This article has children } } else { return false; } break; } return true; } /** * Expands a com_content menu item * * @param Collector $collector * @param Item $parent * @param Registry $params * * @return void * @throws Exception */ public static function getTree($collector, $parent, $params) { $db = Factory::getDbo(); $linkQuery = parse_url($parent->link); if (!isset($linkQuery['query'])) { return; } parse_str(html_entity_decode($linkQuery['query']), $linkVars); $view = ArrayHelper::getValue($linkVars, 'view', ''); $id = intval(ArrayHelper::getValue($linkVars, 'id', '')); /* * Parameters Initialisation */ $paramExpandCategories = $params->get('expand_categories', 1) > 0; $paramExpandFeatured = $params->get('expand_featured', 1); $paramIncludeArchived = $params->get('include_archived', 2); $paramAddPageBreaks = $params->get('add_pagebreaks', 1); $paramCatPriority = $params->get('cat_priority', $parent->priority); $paramCatChangefreq = $params->get('cat_changefreq', $parent->changefreq); if ($paramCatPriority == '-1') { $paramCatPriority = $parent->priority; } if ($paramCatChangefreq == '-1') { $paramCatChangefreq = $parent->changefreq; } $params->set('cat_priority', $paramCatPriority); $params->set('cat_changefreq', $paramCatChangefreq); $paramArtPriority = $params->get('art_priority', $parent->priority); $paramArtChangefreq = $params->get('art_changefreq', $parent->changefreq); if ($paramArtPriority == '-1') { $paramArtPriority = $parent->priority; } if ($paramArtChangefreq == '-1') { $paramArtChangefreq = $parent->changefreq; } $params->set('art_priority', $paramArtPriority); $params->set('art_changefreq', $paramArtChangefreq); // If enabled, loads the page break language if ($paramAddPageBreaks && !defined('OSMAP_PLUGIN_JOOMLA_LOADED')) { // Load it just once define('OSMAP_PLUGIN_JOOMLA_LOADED', 1); Factory::getLanguage()->load('plg_content_pagebreak'); } switch ($view) { case 'category': if (empty($id)) { $id = intval($params->get('id', 0)); } if ($paramExpandCategories && $id) { static::expandCategory($collector, $parent, $id, $params, $parent->id); } break; case 'featured': if ($paramExpandFeatured) { static::includeCategoryContent($collector, $parent, 'featured', $params); } break; case 'categories': if ($paramExpandCategories) { if (empty($id)) { $id = 1; } static::expandCategory($collector, $parent, $id, $params, $parent->id); } break; case 'archive': if ($paramIncludeArchived) { static::includeCategoryContent($collector, $parent, 'archived', $params); } break; case 'article': // if it's an article menu item, we have to check if we have to expand the // article's page breaks if ($paramAddPageBreaks) { $query = $db->getQuery(true) ->select([ $db->quoteName('introtext'), $db->quoteName('fulltext'), $db->quoteName('alias'), $db->quoteName('catid'), $db->quoteName('attribs') . ' AS params', $db->quoteName('metadata'), $db->quoteName('created'), $db->quoteName('modified'), $db->quoteName('publish_up') ]) ->from($db->quoteName('#__content')) ->where($db->quoteName('id') . '=' . $id); $db->setQuery($query); $item = $db->loadObject(); $item->uid = 'joomla.article.' . $id; $parent->slug = $item->alias ? ($id . ':' . $item->alias) : $id; $parent->link = ContentHelperRoute::getArticleRoute($parent->slug, $item->catid); $parent->subnodes = General::getPagebreaks( $item->introtext . $item->fulltext, $parent->link, $item->uid ); static::printSubNodes($collector, $parent, $params, $parent->subnodes, $item); } } } /** * Get all content items within a content category. * Returns an array of all contained content items. * * @param Collector $collector * @param Item $parent the menu item * @param int $catid the id of the category to be expanded * @param Registry $params parameters for this plugin on Xmap * @param int $itemid the itemid to use for this category's children * @param int $curlevel * * @return void * @throws Exception */ protected static function expandCategory( $collector, $parent, $catid, $params, $itemid, $curlevel = 0 ) { static::checkMemory(); $db = Factory::getDbo(); $where = [ 'a.parent_id = ' . $catid, 'a.published = 1', 'a.extension=' . $db->quote('com_content') ]; if (!$params->get('show_unauth', 0)) { $where[] = 'a.access IN (' . General::getAuthorisedViewLevels() . ') '; } $query = $db->getQuery(true) ->select([ 'a.id', 'a.title', 'a.alias', 'a.access', 'a.path AS route', 'a.created_time AS created', 'a.modified_time AS modified', 'a.params', 'a.metadata', 'a.metakey' ]) ->from('#__categories AS a') ->where($where) ->order('a.lft'); $items = $db->setQuery($query)->loadObjectList(); $curlevel++; $maxLevel = $parent->params->get('max_category_level', 100); if ($curlevel <= $maxLevel) { if (count($items) > 0) { $collector->changeLevel(1); foreach ($items as $item) { $node = (object)[ 'id' => $item->id, 'uid' => 'joomla.category.' . $item->id, 'browserNav' => $parent->browserNav, 'priority' => $params->get('cat_priority'), 'changefreq' => $params->get('cat_changefreq'), 'name' => $item->title, 'expandible' => true, 'secure' => $parent->secure, 'newsItem' => 1, 'adapterName' => 'JoomlaCategory', 'pluginParams' => &$params, 'parentIsVisibleForRobots' => $parent->visibleForRobots, 'created' => $item->created, 'modified' => $item->modified, 'publishUp' => $item->created ]; // Keywords $paramKeywords = $params->get('keywords', 'metakey'); $keywords = null; if ($paramKeywords !== 'none') { $keywords = $item->metakey; } $node->keywords = $keywords; $node->slug = $item->route ? ($item->id . ':' . $item->route) : $item->id; $node->link = ContentHelperRoute::getCategoryRoute($node->slug); $node->itemid = $itemid; // Correct for an issue in Joomla core with occasional empty variables $linkUri = new Uri($node->link); $linkUri->setQuery(array_filter((array)$linkUri->getQuery(true))); $node->link = $linkUri->toString(); if ($collector->printNode($node)) { static::expandCategory($collector, $parent, $item->id, $params, $node->itemid, $curlevel); } } $collector->changeLevel(-1); } } // Include Category's content static::includeCategoryContent($collector, $parent, $catid, $params); } /** * Get all content items within a content category. * Returns an array of all contained content items. * * @param Collector $collector * @param Item $parent * @param int|string $catid * @param Registry $params * * @return void * @throws Exception * */ protected static function includeCategoryContent($collector, $parent, $catid, $params) { static::checkMemory(); $db = Factory::getDbo(); $container = Factory::getPimpleContainer(); $nullDate = $db->quote($db->getNullDate()); $nowDate = $db->quote(Factory::getDate()->toSql()); $selectFields = [ 'a.id', 'a.title', 'a.alias', 'a.catid', 'a.created', 'a.modified', 'a.publish_up', 'a.attribs AS params', 'a.metadata', 'a.language', 'a.metakey', 'a.images', 'c.title AS categMetakey' ]; if ($params->get('add_images', 1) || $params->get('add_pagebreaks', 1)) { $selectFields[] = 'a.introtext'; $selectFields[] = 'a.fulltext'; } if ($params->get('include_archived', 2)) { $where = ['(a.state = 1 or a.state = 2)']; } else { $where = ['a.state = 1']; } if ($catid == 'featured') { $where[] = 'a.featured=1'; } elseif ($catid == 'archived') { $where = ['a.state=2']; } elseif (is_numeric($catid)) { $where[] = 'a.catid=' . (int)$catid; } if (!$params->get('show_unauth', 0)) { $where[] = 'a.access IN (' . General::getAuthorisedViewLevels() . ') '; } $where[] = sprintf( '(ISNULL(a.publish_up) OR a.publish_up = %s OR a.publish_up <= %s)', $nullDate, $nowDate ); $where[] = sprintf( '(ISNULL(a.publish_down) OR a.publish_down = %s OR a.publish_down >= %s)', $nullDate, $nowDate ); //@todo: Do we need join for frontpage? $query = $db->getQuery(true) ->select($selectFields) ->from('#__content AS a') ->join('LEFT', '#__content_frontpage AS fp ON (a.id = fp.content_id)') ->join('LEFT', '#__categories AS c ON (a.catid = c.id)') ->where($where); // Ordering $orderOptions = [ 'a.created', 'a.modified', 'a.publish_up', 'a.hits', 'a.title', 'a.ordering' ]; $orderDirOptions = [ 'ASC', 'DESC' ]; $order = ArrayHelper::getValue($orderOptions, $params->get('article_order', 0), 0); $orderDir = ArrayHelper::getValue($orderDirOptions, $params->get('article_orderdir', 0), 0); $orderBy = ' ' . $order . ' ' . $orderDir; $query->order($orderBy); $maxArt = (int)$params->get('max_art'); $db->setQuery($query, 0, $maxArt); $items = $db->loadObjectList(); if (count($items) > 0) { $collector->changeLevel(1); $paramExpandCategories = $params->get('expand_categories', 1); $paramExpandFeatured = $params->get('expand_featured', 1); $paramIncludeArchived = $params->get('include_archived', 2); foreach ($items as $item) { $node = (object)[ 'id' => $item->id, 'uid' => 'joomla.article.' . $item->id, 'browserNav' => $parent->browserNav, 'priority' => $params->get('art_priority'), 'changefreq' => $params->get('art_changefreq'), 'name' => $item->title, 'created' => $item->created, 'modified' => $item->modified, 'publishUp' => $item->publish_up, 'expandible' => false, 'secure' => $parent->secure, 'newsItem' => 1, 'language' => $item->language, 'adapterName' => 'JoomlaArticle', 'parentIsVisibleForRobots' => $parent->visibleForRobots ]; $keywords = []; $paramKeywords = $params->get('keywords', 'metakey'); if ($paramKeywords !== 'none') { if (in_array($paramKeywords, ['metakey', 'both'])) { $keywords[] = $item->metakey; } if (in_array($paramKeywords, ['category', 'both'])) { $keywords[] = $item->categMetakey; } } $node->keywords = join(',', $keywords); $node->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; $node->catslug = $item->catid; $node->link = ContentHelperRoute::getArticleRoute($node->slug, $node->catslug); // Set the visibility for XML or HTML sitempas if ($catid == 'featured') { // Check if the item is visible in the XML or HTML sitemaps $node->visibleForXML = in_array($paramExpandFeatured, [1, 2]); $node->visibleForHTML = in_array($paramExpandFeatured, [1, 3]); } elseif ($catid == 'archived') { // Check if the item is visible in the XML or HTML sitemaps $node->visibleForXML = in_array($paramIncludeArchived, [1, 2]); $node->visibleForHTML = in_array($paramIncludeArchived, [1, 3]); } elseif (is_numeric($catid)) { // Check if the item is visible in the XML or HTML sitemaps $node->visibleForXML = in_array($paramExpandCategories, [1, 2]); $node->visibleForHTML = in_array($paramExpandCategories, [1, 3]); } // Add images to the article $text = ''; if (isset($item->introtext) && isset($item->fulltext)) { $text = $item->introtext . $item->fulltext; } if ($params->get('add_images', 1)) { $maxImages = $params->get('max_images', 1000); $node->images = []; // Images from text $node->images = array_merge( $node->images, $container->imagesHelper->getImagesFromText($text, $maxImages) ); // Images from params if (!empty($item->images)) { $node->images = array_merge( $node->images, $container->imagesHelper->getImagesFromParams($item) ); } } if ($params->get('add_pagebreaks', 1)) { $node->subnodes = General::getPagebreaks($text, $node->link, $node->uid); // This article has children $node->expandible = (count($node->subnodes) > 0); } if ($collector->printNode($node) && $node->expandible) { static::printSubNodes($collector, $parent, $params, $node->subnodes, $node); } } $collector->changeLevel(-1); } } /** * @param Collector $collector * @param Item $parent * @param Registry $params * @param array $subnodes * @param object $item * * @return void * @throws Exception */ protected static function printSubNodes($collector, $parent, $params, $subnodes, $item) { static::checkMemory(); $collector->changeLevel(1); $i = 0; foreach ($subnodes as $subnode) { $i++; $subnode->browserNav = $parent->browserNav; $subnode->priority = $params->get('art_priority'); $subnode->changefreq = $params->get('art_changefreq'); $subnode->secure = $parent->secure; $subnode->created = $item->created; $subnode->modified = $item->modified; $subnode->publishUp = $item->publish_up ?? $item->created; $collector->printNode($subnode); $subnode = null; unset($subnode); } $collector->changeLevel(-1); } /** * @param string $text * @param Registry $params */ protected static function prepareContent(&$text, Registry $params) { if (static::$prepareContent === null) { $isPro = Factory::getExtension('osmap', 'component')->isPro(); $isHtml = Factory::getDocument()->getType() == 'html'; $prepare = $params->get('prepare_content', true); static::$prepareContent = $isPro && $prepare && $isHtml; } if (static::$prepareContent) { $text = HTMLHelper::_('content.prepare', $text, null, 'com_content.article'); } } }
/home/opticamezl/www/newok/bin/../tmp/./../language/es-ES/../../modules/mod_stats/../../joomla.tar