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/libraries/regularlabs/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/alsaif/public_html/libraries/regularlabs/src/Document.php
<?php
/**
 * @package         Regular Labs Library
 * @version         23.9.3039
 * 
 * @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
 */

namespace RegularLabs\Library;

defined('_JEXEC') or die;

use Joomla\CMS\Document\Document as JDocument;
use Joomla\CMS\Factory as JFactory;
use Joomla\CMS\HTML\HTMLHelper as JHtml;
use Joomla\CMS\Language\Text as JText;
use RegularLabs\Library\CacheNew as Cache;

/**
 * Class Document
 *
 * @package RegularLabs\Library
 */
class Document
{
    /**
     * Enqueues an admin error
     *
     * @param string $message
     */
    public static function adminError($message)
    {
        self::adminMessage($message, 'error');
    }

    /**
     * Enqueues an admin message
     *
     * @param string $message
     * @param string $type
     */
    public static function adminMessage($message, $type = 'message')
    {
        if ( ! self::isAdmin())
        {
            return;
        }

        self::message($message, $type);
    }

    /**
     * Enqueues an error
     *
     * @param string $message
     */
    public static function error($message)
    {
        self::message($message, 'error');
    }

    /**
     * @return  JDocument  The document object
     */
    public static function get()
    {
        $document = JFactory::getApplication()->getDocument();

        if ( ! is_null($document))
        {
            return $document;
        }

        JFactory::getApplication()->loadDocument();

        return JFactory::getApplication()->getDocument();
    }

    /**
     * @return null|string
     *
     * @depecated Use getComponentBuffer
     */
    public static function getBuffer()
    {
        return self::getComponentBuffer();
    }

    /**
     * @return null|string
     */
    public static function getComponentBuffer()
    {
        $buffer = self::get()->getBuffer('component');

        if (empty($buffer) || ! is_string($buffer))
        {
            return null;
        }

        $buffer = trim($buffer);

        if (empty($buffer))
        {
            return null;
        }

        return $buffer;
    }

    /**
     * Check if page is an admin page
     *
     * @param bool $exclude_login
     *
     * @return bool
     */
    public static function isAdmin($exclude_login = false)
    {
        $cache = new Cache([__METHOD__, $exclude_login]);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $input = JFactory::getApplication()->input;
        $user  = JFactory::getApplication()->getIdentity() ?: JFactory::getUser();

        $is_admin = (
            self::isClient('administrator')
            && ( ! $exclude_login || ! $user->get('guest'))
            && $input->get('task') != 'preview'
            && ! (
                $input->get('option') == 'com_finder'
                && $input->get('format') == 'json'
            )
        );

        return $cache->set($is_admin);
    }

    /**
     * Checks if context/page is a category list
     *
     * @param string $context
     *
     * @return bool
     */
    public static function isCategoryList($context)
    {
        $cache = new Cache([__METHOD__, $context]);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $app   = JFactory::getApplication();
        $input = $app->input;

        // Return false if it is not a category page
        if ($context != 'com_content.category' || $input->get('view') != 'category')
        {
            return $cache->set(false);
        }

        // Return false if layout is set and it is not a list layout
        if ($input->get('layout') && $input->get('layout') != 'list')
        {
            return $cache->set(false);
        }

        // Return false if default layout is set to blog
        if ($app->getParams()->get('category_layout') == '_:blog')
        {
            return $cache->set(false);
        }

        // Return true if it IS a list layout
        return $cache->set(true);
    }

    /**
     * Check if page is an edit page
     *
     * @return bool
     */
    public static function isClient($identifier)
    {
        $identifier = $identifier == 'admin' ? 'administrator' : $identifier;

        $cache = new Cache([__METHOD__, $identifier]);

        if ($cache->exists())
        {
            return $cache->get();
        }

        return $cache->set(JFactory::getApplication()->isClient($identifier));
    }

    /**
     * Check if page is an edit page
     *
     * @return bool
     */
    public static function isEditPage()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $input = JFactory::getApplication()->input;

        $option = $input->get('option');

        // always return false for these components
        if (in_array($option, ['com_rsevents', 'com_rseventspro']))
        {
            return $cache->set(false);
        }

        $task = $input->get('task');

        if (strpos($task, '.') !== false)
        {
            $task = explode('.', $task);
            $task = array_pop($task);
        }

        $view = $input->get('view');

        if (strpos($view, '.') !== false)
        {
            $view = explode('.', $view);
            $view = array_pop($view);
        }

        $is_edit_page = (
            in_array($option, ['com_config', 'com_contentsubmit', 'com_cckjseblod'])
            || ($option == 'com_comprofiler' && in_array($task, ['', 'userdetails']))
            || in_array($task, ['edit', 'form', 'submission'])
            || in_array($view, ['edit', 'form'])
            || in_array($input->get('do'), ['edit', 'form'])
            || in_array($input->get('layout'), ['edit', 'form', 'write'])
            || self::isAdmin()
        );

        return $cache->set($is_edit_page);
    }

    /**
     * Checks if current page is a feed
     *
     * @return bool
     */
    public static function isFeed()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $input = JFactory::getApplication()->input;

        $is_feed = (
            self::get()->getType() == 'feed'
            || in_array($input->getWord('format'), ['feed', 'xml'])
            || in_array($input->getWord('type'), ['rss', 'atom'])
        );

        return $cache->set($is_feed);
    }

    /**
     * Checks if current page is a html page
     *
     * @return bool
     */
    public static function isHtml()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $is_html = (self::get()->getType() == 'html');

        return $cache->set($is_html);
    }

    /**
     * Checks if current page is a https (ssl) page
     *
     * @return bool
     */
    public static function isHttps()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $is_https = (
            ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off')
            || (isset($_SERVER['SSL_PROTOCOL']))
            || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443)
            || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https')
        );

        return $cache->set($is_https);
    }

    /**
     * Checks if current page is a JSON format fle
     *
     * @return bool
     */
    public static function isJSON()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $is_json = JFactory::getApplication()->input->get('format') == 'json';

        return $cache->set($is_json);
    }

    /**
     * Check if the current setup matches the given main version number
     *
     * @param int    $version
     * @param string $title
     *
     * @return bool
     */
    public static function isJoomlaVersion($version, $title = '')
    {
        if ((int) JVERSION == $version)
        {
            return true;
        }

        if ($title && self::isAdmin())
        {
            Language::load('plg_system_regularlabs');

            JFactory::getApplication()->enqueueMessage(
                JText::sprintf('RL_NOT_COMPATIBLE_WITH_JOOMLA_VERSION', JText::_($title), (int) JVERSION),
                'error'
            );
        }

        return false;
    }

    /**
     * Checks if current page is a pdf
     *
     * @return bool
     */
    public static function isPDF()
    {
        $cache = new Cache(__METHOD__);

        if ($cache->exists())
        {
            return $cache->get();
        }

        $input = JFactory::getApplication()->input;

        $is_pdf = (
            self::get()->getType() == 'pdf'
            || $input->getWord('format') == 'pdf'
            || $input->getWord('cAction') == 'pdf'
        );

        return $cache->set($is_pdf);
    }

    /**
     * Loads the required scripts and styles used in forms
     */
    public static function loadEditorButtonDependencies()
    {
        self::loadMainDependencies();

        JHtml::_('bootstrap.popover');
    }

    /**
     * Loads the required scripts and styles used in forms
     */
    public static function loadFormDependencies()
    {
        if ((int) JVERSION != 3)
        {
            return;
        }

        JHtml::_('jquery.framework');
        JHtml::_('behavior.tooltip');
        JHtml::_('behavior.formvalidator');
        JHtml::_('behavior.combobox');
        JHtml::_('behavior.keepalive');
        JHtml::_('behavior.tabstate');

        JHtml::_('formbehavior.chosen', '#jform_position', null, ['disable_search_threshold' => 0]);
        JHtml::_('formbehavior.chosen', '.multipleCategories', null, ['placeholder_text_multiple' => JText::_('JOPTION_SELECT_CATEGORY')]);
        JHtml::_('formbehavior.chosen', '.multipleTags', null, ['placeholder_text_multiple' => JText::_('JOPTION_SELECT_TAG')]);
        JHtml::_('formbehavior.chosen', 'select');

        self::script('regularlabs/form.min.js');
        self::style('regularlabs/form.min.css');
    }

    /**
     * Loads the required scripts and styles used in forms
     */
    public static function loadMainDependencies()
    {
        JHtml::_('jquery.framework');

        self::script('regularlabs/script.min.js');
        self::style('regularlabs/style.min.css');
    }

    public static function loadPopupDependencies()
    {
        self::loadMainDependencies();
        self::loadFormDependencies();

        self::style('regularlabs/popup.min.css');
    }

    /**
     * Enqueues a message
     *
     * @param string $message
     * @param string $type
     */
    public static function message($message, $type = 'message')
    {
        Language::load('plg_system_regularlabs');

        JFactory::getApplication()->enqueueMessage($message, $type);
    }

    /**
     * Minify the given string
     *
     * @param string $string
     *
     * @return string
     */
    public static function minify($string)
    {
        // place new lines around string to make regex searching easier
        $string = "\n" . $string . "\n";

        // Remove comment lines
        $string = RegEx::replace('\n\s*//.*?\n', '', $string);
        // Remove comment blocks
        $string = RegEx::replace('/\*.*?\*/', '', $string);
        // Remove enters
        $string = RegEx::replace('\n\s*', ' ', $string);

        // Remove surrounding whitespace
        $string = trim($string);

        return $string;
    }

    /**
     * Remove joomla script options
     *
     * @param string $string
     * @param string $name
     * @param string $alias
     */
    public static function removeScriptsOptions(&$string, $name, $alias = '')
    {
        RegEx::match(
            '(<script type="application/json" class="joomla-script-options new">)(.*?)(</script>)',
            $string,
            $match
        );

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

        $alias = $alias ?: Extension::getAliasByName($name);

        $scripts = json_decode($match[2]);

        if ( ! isset($scripts->{'rl_' . $alias}))
        {
            return;
        }

        unset($scripts->{'rl_' . $alias});

        $string = str_replace(
            $match[0],
            $match[1] . json_encode($scripts) . $match[3],
            $string
        );
    }

    /**
     * Remove style/css blocks from html string
     *
     * @param string $string
     * @param string $name
     * @param string $alias
     */
    public static function removeScriptsStyles(&$string, $name, $alias = '')
    {
        [$start, $end] = Protect::getInlineCommentTags($name, null, true);
        $alias = $alias ?: Extension::getAliasByName($name);

        $string = RegEx::replace('((?:;\s*)?)(;?)' . $start . '.*?' . $end . '\s*', '\1', $string);
        $string = RegEx::replace('\s*<link [^>]*href="[^"]*/(' . $alias . '/css|css/' . $alias . ')/[^"]*\.css[^"]*"[^>]*( /)?>', '', $string);
        $string = RegEx::replace('\s*<script [^>]*src="[^"]*/(' . $alias . '/js|js/' . $alias . ')/[^"]*\.js[^"]*"[^>]*></script>', '', $string);
    }

    /**
     * Adds a script file to the page (with optional versioning)
     *
     * @param string $file
     * @param string $version
     * @param array  $options
     * @param array  $attribs
     * @param bool   $load_jquery
     */
    public static function script($file, $version = '', $options = [], $attribs = [], $load_jquery = true)
    {
        if ( ! $url = File::getMediaFile('js', $file))
        {
            return;
        }

        if ($load_jquery)
        {
            JHtml::_('jquery.framework');
        }

        if (
            strpos($file, 'regularlabs/') !== false
            && strpos($file, 'regular.') === false
        )
        {
            JHtml::_('behavior.core');
            JHtml::_('script', 'jui/cms.js', ['version' => 'auto', 'relative' => true]);
            $version = '23.9.3039';
        }

        if ( ! empty($version))
        {
            $url .= '?v=' . $version;
        }

        self::get()->addScript($url, $options, $attribs);
    }

    /**
     * Adds a javascript declaration to the page
     *
     * @param string $content
     * @param string $name
     * @param bool   $minify
     * @param string $type
     */
    public static function scriptDeclaration($content = '', $name = '', $minify = true, $type = 'text/javascript')
    {
        if ($minify)
        {
            $content = self::minify($content);
        }

        if ( ! empty($name))
        {
            $content = Protect::wrapScriptDeclaration($content, $name, $minify);
        }

        self::get()->addScriptDeclaration($content, $type);
    }

    /**
     * Adds extension options to the page
     *
     * @param array  $options
     * @param string $name
     */
    public static function scriptOptions($options = [], $name = '')
    {
        $key = 'rl_' . Extension::getAliasByName($name);
        JHtml::_('behavior.core');

        self::get()->addScriptOptions($key, $options);
    }

    /**
     * @param string $buffer
     *
     * @depecated Use setComponentBuffer
     */
    public static function setBuffer($buffer = '')
    {
        self::setComponentBuffer($buffer);
    }

    /**
     * @param string $buffer
     */
    public static function setComponentBuffer($buffer = '')
    {
        self::get()->setBuffer($buffer, 'component');
    }

    /**
     * Adds a stylesheet file to the page(with optional versioning)
     *
     * @param string $file
     * @param string $version
     * @param array  $options
     * @param array  $attribs
     */
    public static function style($file, $version = '', $options = [], $attribs = [])
    {
        if (strpos($file, 'regularlabs/') === 0)
        {
            $version = '23.9.3039';
        }

        $file = File::getMediaFile('css', $file);

        if ( ! $file)
        {
            return;
        }

        if ( ! empty($version))
        {
            $file .= '?v=' . $version;
        }

        self::get()->addStylesheet($file, $options, $attribs);
    }

    /**
     * Adds a stylesheet declaration to the page
     *
     * @param string $content
     * @param string $name
     * @param bool   $minify
     * @param string $type
     */
    public static function styleDeclaration($content = '', $name = '', $minify = true, $type = 'text/css')
    {
        if ($minify)
        {
            $content = self::minify($content);
        }

        if ( ! empty($name))
        {
            $content = Protect::wrapStyleDeclaration($content, $name, $minify);
        }

        self::get()->addStyleDeclaration($content, $type);
    }

    /**
     * Alias of \RegularLabs\Library\Document::style()
     *
     * @param string $file
     * @param string $version
     */
    public static function stylesheet($file, $version = '')
    {
        self::style($file, $version);
    }
}

NexusLeads