NexusLeads Webshell
NexusLeads


Server : LiteSpeed
System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64
User : alsaif ( 1057)
PHP Version : 7.4.33
Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/alsaif/public_html/plugins/system/advancedmodules/src/Helpers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/alsaif/public_html/plugins/system/advancedmodules/src/Helpers/advancedmodulehelper.php
<?php
/**
 * @package         Advanced Module Manager
 * @version         9.9.0
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2023 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

use Joomla\CMS\Factory as JFactory;
use Joomla\CMS\Language\Text as JText;
use Joomla\CMS\Log\Log as JLog;
use RegularLabs\Library\ArrayHelper as RL_Array;
use RegularLabs\Library\Conditions as RL_Conditions;
use RegularLabs\Library\Document as RL_Document;
use RegularLabs\Library\ParametersNew as RL_Parameters;
use RegularLabs\Library\PluginTag as RL_PluginTag;
use RegularLabs\Library\RegEx as RL_RegEx;
use RegularLabs\Plugin\System\AdvancedModules\Params;

jimport('joomla.filesystem.file');

/*
 * ModuleHelper methods
 */

class AdvancedModules
{
    static $current_module = null;

    public static function getCurrentModule()
    {
        return self::$current_module;
    }

    public static function setCurrentModule($module)
    {
        self::$current_module = $module;
    }
}

class PlgSystemAdvancedModuleHelper
{
    var $mirror_ids = [];

    public function onPrepareModuleList(&$modules)
    {
        // return if is not frontend
        if ( ! RL_Document::isClient('site'))
        {
            return;
        }

        jimport('joomla.filesystem.file');

        $modules = is_null($modules) ? $this->getModuleList() : $modules;

        if (is_array($modules) && empty($modules))
        {
            return;
        }


        $filtered_modules = [];

        foreach ($modules as $module)
        {
            if (empty($module->id))
            {
                continue;
            }


            $module->name = substr($module->module, 4);

            if (JFactory::getApplication()->input->get('option') == 'com_ajax')
            {
                $filtered_modules[] = $module;
                continue;
            }

            $this->setAdvancedParams($module);

            if ($module->advancedparams === 0)
            {
                if (isset($module->published) && ! $module->published)
                {
                    continue;
                }

                $filtered_modules[] = $module;

                continue;
            }


            $module->reverse = 0;

            $this->setMirrorParams($module);

            $this->removeDisabledAssignments($module->advancedparams);

            AdvancedModules::setCurrentModule($module);

            $assignments       = RL_Conditions::getConditionsFromParams($module->advancedparams);
            $module->published = RL_Conditions::pass(
                $assignments,
                $module->advancedparams->match_method,
                null,
                $module
            );

            if ($module->reverse)
            {
                $module->published = ! $module->published;
            }

            if (isset($module->published) && ! $module->published)
            {
                continue;
            }

            $filtered_modules[] = $module;
        }

        $modules = array_values($filtered_modules);
        unset($filtered_modules);
    }

    public function onRenderModule(&$module)
    {
        // Module already nulled
        if (is_null($module))
        {
            return;
        }

        // Do nothing if is not frontend
        if ( ! RL_Document::isClient('site'))
        {
            return;
        }

        // return true if module is empty (this will empty the content)
        if ($this->isEmpty($module))
        {
            $module = null;

            return;
        }

    }

    private function addHTML(&$module)
    {
    }

    private function getAdvancedParams($module)
    {
        if (empty($module->id))
        {
            return '{}';
        }

        if (isset($module->adv_params))
        {
            return $module->adv_params;
        }

        return $this->getAdvancedParamsById($module->id);
    }

    private function getAdvancedParamsById($id = 0)
    {
        if ( ! $id)
        {
            return '{}';
        }

        $db    = JFactory::getDbo();
        $query = $db->getQuery(true)
            ->select('a.params')
            ->from('#__advancedmodules AS a')
            ->where('a.moduleid = ' . (int) $id);
        $db->setQuery($query);

        $params = $db->loadResult();

        if (empty($params))
        {
            $params = '{}';
        }

        return $params;
    }

    private function getConfig()
    {
        static $instance;

        if (is_object($instance))
        {
            return $instance;
        }

        $instance = RL_Parameters::getComponent('advancedmodules');

        return $instance;
    }

    private function getMirrorModuleId($module)
    {
        if (isset($module->mirror_id))
        {
            return $module->mirror_id;
        }

        return $this->getMirrorModuleIdById($module->id);
    }

    private function getMirrorModuleIdById($id)
    {
        if (isset($this->mirror_ids[$id]))
        {
            return $this->mirror_ids[$id];
        }

        $db    = JFactory::getDbo();
        $query = $db->getQuery(true)
            ->select('a.mirror_id')
            ->from('#__advancedmodules AS a')
            ->where('a.moduleid = ' . (int) $id);
        $db->setQuery($query);

        $this->mirror_ids[$id] = $db->loadResult();

        return $this->mirror_ids[$id];
    }

    private function getModuleList()
    {
        $app      = JFactory::getApplication();
        $user     = JFactory::getApplication()->getIdentity() ?: JFactory::getUser();
        $groups   = implode(',', $user->getAuthorisedViewLevels());
        $lang     = JFactory::getLanguage()->getTag();
        $clientId = (int) $app->getClientId();

        $db = JFactory::getDbo();

        $query = $db->getQuery(true)
            ->select('m.id, m.title, m.module, m.position, m.content, m.showtitle, m.params')
            ->select('am.mirror_id, am.params AS advancedparams, 0 AS menuid, m.publish_up, m.publish_down')
            ->from('#__modules AS m')
            ->join('LEFT', '#__extensions AS e ON e.element = m.module AND e.client_id = m.client_id')
            ->join('LEFT', '#__advancedmodules as am ON am.moduleid = m.id')
            ->where('m.published = 1')
            ->where('e.enabled = 1')
            ->where('m.access IN (' . $groups . ')')
            ->where('m.client_id = ' . $clientId);

        // Filter by language
        if ($app->isClient('site') && $app->getLanguageFilter())
        {
            $query->where('m.language IN (' . $db->quote($lang) . ',' . $db->quote('*') . ')');
        }

        $query->order('m.position, m.ordering');

        // Set the query
        $db->setQuery($query);

        try
        {
            $modules = $db->loadObjectList();
        }
        catch (RuntimeException $e)
        {
            JLog::add(JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $e->getMessage()), JLog::WARNING, 'jerror');

            return [];
        }

        return array_values($modules);
    }

    private function getRemovePositionsAndModules()
    {
    }

    private function isEmpty(&$module)
    {
        if ( ! isset($module->content))
        {
            return true;
        }

        $this->setAdvancedParams($module);

        // return false if module params are not found
        if (empty($module->advancedparams))
        {
            return false;
        }

        $params = $module->advancedparams;

        // return false if hideempty is off in module params
        if (
            empty($params)
            || (( ! isset($params->hideempty) || ! $params->hideempty) && empty($params->if_empty_html))
        )
        {
            return false;
        }

        $config = $this->getConfig();

        // return false if use_hideempty is off in main config
        if ( ! $config->use_hideempty)
        {
            return false;
        }

        $content = trim($module->content);

        // remove empty tags to see if module can be considered as empty
        if ( ! empty($content))
        {
            // remove html and hidden whitespace
            $content = str_replace(chr(194) . chr(160), ' ', $content);
            $content = str_replace(['&nbsp;', '&#160;'], ' ', $content);
            // remove comment tags
            $content = RL_RegEx::replace('<\!--.*?-->', '', $content);
            // remove all closing tags
            $content = RL_RegEx::replace('</[^>]+>', '', $content);
            // remove tags to be ignored
            $tags   = 'p|div|span|strong|b|em|i|ul|font|br|h[0-9]|fieldset|label|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|form';
            $search = '<(?:' . $tags . ')(?:\s[^>]*)?>';

            if (RL_RegEx::match($search, $content))
            {
                $content = RL_RegEx::replace($search, '', $content);
            }

            $content = trim($content);
        }

        if ( ! empty($content))
        {
            return false;
        }


        return true;
    }

    private function removeDisabledAssignments(&$params)
    {
        $config = $this->getConfig();

        if ( ! $config->show_assignto_homepage)
        {
            $params->assignto_homepage = 0;
        }

        if ( ! $config->show_assignto_usergrouplevels)
        {
            $params->assignto_usergrouplevels = 0;
        }
        if ( ! $config->show_assignto_date)
        {
            $params->assignto_date = 0;
        }

        if ( ! $config->show_assignto_languages)
        {
            $params->assignto_languages = 0;
        }
        if ( ! $config->show_assignto_templates)
        {
            $params->assignto_templates = 0;
        }

        if ( ! $config->show_assignto_urls)
        {
            $params->assignto_urls = 0;
        }

        if ( ! $config->show_assignto_devices)
        {
            $params->assignto_devices = 0;
        }

        if ( ! $config->show_assignto_os)
        {
            $params->assignto_os = 0;
        }

        if ( ! $config->show_assignto_browsers)
        {
            $params->assignto_browsers = 0;
        }

        if ( ! $config->show_assignto_components)
        {
            $params->assignto_components = 0;
        }

        if ( ! $config->show_assignto_tags)
        {
            $params->show_assignto_tags = 0;
        }

        if ( ! $config->show_assignto_content)
        {
            $params->assignto_contentpagetypes = 0;
            $params->assignto_cats             = 0;
            $params->assignto_articles         = 0;
        }
    }

    private function setAdvancedParams(&$module)
    {
        if (empty($module->id))
        {
            return;
        }

        if (isset($module->advancedparams) && is_object($module->advancedparams))
        {
            return;
        }

        if ( ! isset($module->advancedparams))
        {
            $module->advancedparams = $this->getAdvancedParams($module);
        }

        $module->advancedparams = json_decode($module->advancedparams);

        if (is_null($module->advancedparams))
        {
            $module->advancedparams = (object) [];
        }

        if (
            ! isset($module->advancedparams->assignto_menuitems)
            || isset($module->advancedparams->assignto_urls_selection_sef)
            || (
                ! is_array($module->advancedparams->assignto_menuitems)
                && strpos($module->advancedparams->assignto_menuitems, '|') !== false
            )
        )
        {
            require_once JPATH_ADMINISTRATOR . '/components/com_advancedmodules/models/module.php';
            $model = new AdvancedModulesModelModule;

            $module->advancedparams = (object) $model->initAssignments($module->id, $module);
        }

        $xmlfile_assignments = JPATH_ADMINISTRATOR . '/components/com_advancedmodules/assignments.xml';

        $use_cache = $module->use_amm_cache ?? true;

        $module->advancedparams = RL_Parameters::getObjectFromRegistry($module->advancedparams, $xmlfile_assignments, '', $use_cache);
    }

    private function setExtraParams(&$module)
    {
    }

    private function setMirrorParams(&$module)
    {
        $module->mirror_id = $this->getMirrorModuleId($module);

        if (empty($module->mirror_id))
        {
            return;
        }

        $mirror_id = $module->mirror_id < 0 ? $module->mirror_id * -1 : $module->mirror_id;

        $count = 0;

        while ($count++ < 10)
        {
            if ( ! $test_mirrorid = $this->getMirrorModuleIdById($mirror_id))
            {
                break;
            }

            $mirror_id = $test_mirrorid;
        }

        if (empty($mirror_id))
        {
            return;
        }

        $xmlfile_assignments = JPATH_ADMINISTRATOR . '/components/com_advancedmodules/assignments.xml';

        $module->reverse = $module->mirror_id < 0;

        if ($mirror_id == $module->id)
        {
            $empty         = (object) [];
            $mirror_params = RL_Parameters::getObjectFromRegistry($empty, $xmlfile_assignments);
        }
        else
        {
            if (isset($modules[$mirror_id]))
            {
                if ( ! isset($modules[$mirror_id]->advancedparams))
                {
                    $modules[$mirror_id]->advancedparams = $this->getAdvancedParamsById($mirror_id);
                    $modules[$mirror_id]->advancedparams = RL_Parameters::getObjectFromRegistry($modules[$mirror_id]->advancedparams, $xmlfile_assignments);
                }

                $mirror_params = $modules[$mirror_id]->advancedparams;
            }
            else
            {
                $mirror_params = $this->getAdvancedParamsById($mirror_id);
                $mirror_params = RL_Parameters::getObjectFromRegistry($mirror_params, $xmlfile_assignments);
            }
        }

        // Keep the advanced settings that shouldn't be mirrored
        $settings_to_keep = [
            'hideempty', 'color',
        ];

        foreach ($settings_to_keep as $key)
        {
            if ( ! isset($module->advancedparams->{$key}))
            {
                continue;
            }

            $mirror_params->{$key} = $module->advancedparams->{$key};
        }

        $module->advancedparams = $mirror_params;
    }
}

NexusLeads