AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.112
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/nice/plugins/system/modals/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/nice/plugins/system/modals/src/Document.php
<?php
/**
 * @package         Modals
 * @version         14.5.5
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Plugin\System\Modals;

defined('_JEXEC') or die;

use Joomla\CMS\Factory as JFactory;
use Joomla\CMS\Language\Text as JText;
use Joomla\CMS\Router\Route as JRoute;
use Joomla\Filesystem\File as JFile;
use Joomla\Filesystem\Folder as JFolder;
use RegularLabs\Library\Document as RL_Document;
use RegularLabs\Library\Input as RL_Input;
use RegularLabs\Library\Protect as RL_Protect;
use RegularLabs\Library\RegEx as RL_RegEx;

class Document
{
    static $all_themes;
    static $used_themes = [];

    public static function addPrint($url)
    {
        [$url, $hash] = explode('#', $url . '#', 2);

        $url .= ( ! str_contains($url, '?')) ? '?print=1' : '&amp;print=1';

        if ( ! empty($hash))
        {
            $url .= '#' . $hash;
        }

        return $url;
    }

    public static function addUrlAttributes($url, $fullpage = false, $print = false)
    {
        [$url, $hash] = explode('#', $url . '#', 2);

        if (
            ! str_starts_with($url, 'http')
            && str_starts_with($url, 'index.php')
            && ! str_contains($url, '/')
        )
        {
            $url = JRoute::link('site', $url);
        }

        $url = self::setUrlAttribute($url, 'ml');

        if ($fullpage)
        {
            $url = self::setUrlAttribute($url, 'fullpage');
        }

        if ($print)
        {
            $url = self::setUrlAttribute($url, 'print');
        }

        if ( ! empty($hash))
        {
            $url .= '#' . $hash;
        }

        return $url;
    }

    public static function loadStylesAndScripts()
    {
        // do not load scripts/styles on feeds or print pages
        if (RL_Document::isFeed() || RL_Input::getInt('print', 0))
        {
            return;
        }

        $params = Params::get();

        JText::script('MDL_MODALTXT_CLOSE', true);
        JText::script('MDL_MODALTXT_PREVIOUS', true);
        JText::script('MDL_MODALTXT_NEXT', true);

        $options = [
            'theme'                  => $params->theme ?: 'dark',
            'dimensionsIncludeTitle' => (int) $params->dimensions_include_title,
        ];

        RL_Document::scriptOptions($options, 'Modals');

        RL_Document::script('modals.script', ['type' => 'module']);
        self::loadStyles();

        if (RL_Input::getInt('ml', 0) && $params->add_redirect)
        {
            self::addRedirectScript();
        }
    }

    public static function removeHeadStuff(&$html)
    {
        // Remove all scripts and styles if data-modals attribute is not found
        if ( ! RL_RegEx::match('data-modals', $html))
        {
            self::removeAllScriptsAndStyles($html);

            return;
        }

        // Otherwise only remove the unused styles
        self::removeUnusedStyles($html);
    }

    public static function setTemplate()
    {
        $params = Params::get();

        RL_Input::set(
            'tmpl',
            RL_Input::getWord('tmpl', $params->sub_template)
        );

        RL_Document::style('modals.modal');
        RL_Document::script('modals.modal');
    }

    public static function setUrlAttribute($url, $key)
    {
        if (str_contains($url, $key . '=1'))
        {
            return $url;
        }

        return $url
            . (! str_contains($url, '?') ? '?' : '&amp;')
            . $key . '=1';
    }

    private static function addRedirectScript()
    {
        // Add redirect script
        $script =
            ";if( parent.location.href === window.location.href ) {
                loc = window.location.href.replace(/(\?|&)ml=1(&iframe=1(&fullpage=1)?)?(&|$)/, '$1');
                loc = loc.replace(/(\?|&)$/, '');

                if(parent.location.href !== loc) {
                    parent.location.href = loc;
                }
            }";

        RL_Document::scriptDeclaration($script);
    }

    private static function getThemes()
    {
        if ( ! is_null(self::$all_themes))
        {
            return self::$all_themes;
        }

        $folder = JPATH_SITE . '/media/modals/css';
        $files  = JFolder::files($folder, '^theme-[a-z0-9-_]+\.css$');

        $template = JFactory::getApplication()->getTemplate();
        $folder   = JPATH_SITE . '/media/templates/site/' . $template . '/css/modals';

        if (is_dir($folder))
        {
            $files_template = JFolder::files($folder, '^theme-[a-z0-9-_]+\.css$');
            $files_template = empty($files_template) ? [] : $files_template;
            $files          = [...$files, ...$files_template];
        }

        $files = array_unique($files);

        $themes = [];

        foreach ($files as $file)
        {
            $file_name = JFile::stripExt($file);
            $file_name = substr($file_name, 6);

            $themes[] = $file_name;
        }

        self::$all_themes = array_unique($themes);

        return self::$all_themes;
    }

    private static function getUsedThemes($html)
    {
        $params = Params::get();

        $themes = [$params->theme];

        if ( ! RL_RegEx::matchAll('data-modals-theme="([^"]*)"', $html, $matches, null, PREG_PATTERN_ORDER))
        {
            return $themes;
        }

        $themes = [...$themes, ...$matches[1]];
        $themes = array_unique($themes);

        return $themes;
    }

    private static function loadStyles()
    {
        $params = Params::get();

        if ( ! $params->load_stylesheet)
        {
            RL_Document::style('modals.theme-custom');

            return;
        }

        RL_Document::style('modals.style');

        $themes = self::getThemes();

        foreach ($themes as $theme)
        {
            RL_Document::style('modals.theme-' . $theme);
        }
    }

    private static function removeAllScriptsAndStyles(&$html)
    {
        // Prevent the modals.modal style and script from being removed
        RL_Protect::protectByRegex($html, '<link [^>]*href="[^"]*/(modals/css|css/modals)/modal\..*?>');
        RL_Protect::protectByRegex($html, '<script [^>]*src="[^"]*/(modals/js|js/modals)/modal\..*?>');
        // Prevent the modals.button and modals.popup script from being removed
        RL_Protect::protectByRegex($html, '<script [^>]*src="[^"]*/(modals/js|js/modals)/(button|popup)\..*?>');

        // remove style and script if no items are found
        RL_Document::removeScriptsStyles($html, 'Modals');
        RL_Document::removeScriptsOptions($html, 'Modals');

        RL_Protect::unprotect($html);
    }

    private static function removeUnusedStyles(&$html)
    {
        $all_themes    = self::getThemes();
        $used_themes   = self::getUsedThemes($html);
        $unused_themes = array_diff($all_themes, $used_themes);

        foreach ($unused_themes as $theme)
        {
            RL_Document::removeStyleTag($html, 'modals', 'theme-' . $theme);
        }
    }
}

Anon7 - 2022
AnonSec Team