Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php declare(strict_types=1); namespace T3\Min\EventListener; /* | This extension is m..

Decoded Output download

<?php
declare(strict_types=1);

namespace T3\Min\EventListener;

/*  | This extension is made with  for TYPO3 CMS and is licensed
 *  | under GNU General Public License.
 *  |
 *  | (c) 2022-2023 Armin Vieweg <[email protected]>
 */
use T3\Min\Minifier;
use TYPO3\CMS\Core\Page\Event\AbstractBeforeAssetRenderingEvent;
use TYPO3\CMS\Core\Page\Event\BeforeJavaScriptsRenderingEvent;
use TYPO3\CMS\Core\Page\Event\BeforeStylesheetsRenderingEvent;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class AssetRendererEventListener
{
    private Minifier $minifier;
    private array $assetCollectorConf;

    public function __construct(Minifier $minifier)
    {
        $this->minifier = $minifier;
        $this->assetCollectorConf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_min.']['assetCollector.'] ?? [];
    }

    public function beforeStyleSheetsRendering(BeforeStylesheetsRenderingEvent $event): void
    {
        if ((!$event->isInline() && (!isset($this->assetCollectorConf['compressCss']) || !$this->assetCollectorConf['compressCss'])) ||
            ($event->isInline() && (!isset($this->assetCollectorConf['compressInlineCss']) || !$this->assetCollectorConf['compressInlineCss']))
        ) {
            return;
        }

        $sources = $event->isInline()
            ? $event->getAssetCollector()->getInlineStyleSheets()
            : $event->getAssetCollector()->getStyleSheets();

        $assets = $this->buildMinifierAssetsArray($sources, $event);

        if (!empty($assets)) {
            $result = $this->minifier->minifyFiles($assets, Minifier::TYPE_STYLESHEET, $event->isInline(), true);
            foreach ($result as $uniqueIdentifier => $compressedAsset) {
                if ($event->isInline()) {
                    $event->getAssetCollector()->removeInlineStyleSheet($uniqueIdentifier);
                    $event->getAssetCollector()->addInlineStyleSheet(
                        $uniqueIdentifier,
                        $compressedAsset['code'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                } else {
                    $event->getAssetCollector()->removeStyleSheet($uniqueIdentifier);
                    $event->getAssetCollector()->addStyleSheet(
                        $uniqueIdentifier,
                        $compressedAsset['file'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                }
            }
        }
    }

    public function beforeJavaScriptsRendering(BeforeJavaScriptsRenderingEvent $event): void
    {
        if ((!$event->isInline() && (!isset($this->assetCollectorConf['compressJs']) || !$this->assetCollectorConf['compressJs'])) ||
            ($event->isInline() && (!isset($this->assetCollectorConf['compressInlineJs']) || !$this->assetCollectorConf['compressInlineJs']))
        ) {
            return;
        }

        $sources = $event->isInline()
            ? $event->getAssetCollector()->getInlineJavaScripts()
            : $event->getAssetCollector()->getJavaScripts();

        $assets = $this->buildMinifierAssetsArray($sources, $event);

        if (!empty($assets)) {
            $result = $this->minifier->minifyFiles($assets, Minifier::TYPE_JAVASCRIPT, $event->isInline(), true);
            foreach ($result as $uniqueIdentifier => $compressedAsset) {
                if ($event->isInline()) {
                    $event->getAssetCollector()->removeInlineJavaScript($uniqueIdentifier);
                    $event->getAssetCollector()->addInlineJavaScript(
                        $uniqueIdentifier,
                        $compressedAsset['code'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                } else {
                    $event->getAssetCollector()->removeJavaScript($uniqueIdentifier);
                    $event->getAssetCollector()->addJavaScript(
                        $uniqueIdentifier,
                        $compressedAsset['file'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                }
            }
        }
    }

    /**
     * Converts given assets to Minifier array. Also removes file paths from instruction set, which are not existing.
     *
     * @param array $sources
     * @param AbstractBeforeAssetRenderingEvent $event
     * @return array
     */
    private function buildMinifierAssetsArray(array $sources, AbstractBeforeAssetRenderingEvent $event): array
    {
        $assets = [];
        foreach ($sources as $uniqueIdentifier => $asset) {
            if (($asset['options']['priority'] ?? false) !== $event->isPriority()) {
                continue;
            }

            if ($event->isInline()) {
                $assets[$uniqueIdentifier] = [
                    'compress' => true,
                    'code' => $asset['source']
                ];
            } else {
                $path = GeneralUtility::getFileAbsFileName($asset['source']);
                if ($path && file_exists($path)) {
                    $assets[$uniqueIdentifier] = [
                        'compress' => true,
                        'file' => $path
                    ];
                }
            }
        }

        return $assets;
    }
}
 ?>

Did this file decode correctly?

Original Code

<?php
declare(strict_types=1);

namespace T3\Min\EventListener;

/*  | This extension is made with  for TYPO3 CMS and is licensed
 *  | under GNU General Public License.
 *  |
 *  | (c) 2022-2023 Armin Vieweg <[email protected]>
 */
use T3\Min\Minifier;
use TYPO3\CMS\Core\Page\Event\AbstractBeforeAssetRenderingEvent;
use TYPO3\CMS\Core\Page\Event\BeforeJavaScriptsRenderingEvent;
use TYPO3\CMS\Core\Page\Event\BeforeStylesheetsRenderingEvent;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class AssetRendererEventListener
{
    private Minifier $minifier;
    private array $assetCollectorConf;

    public function __construct(Minifier $minifier)
    {
        $this->minifier = $minifier;
        $this->assetCollectorConf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_min.']['assetCollector.'] ?? [];
    }

    public function beforeStyleSheetsRendering(BeforeStylesheetsRenderingEvent $event): void
    {
        if ((!$event->isInline() && (!isset($this->assetCollectorConf['compressCss']) || !$this->assetCollectorConf['compressCss'])) ||
            ($event->isInline() && (!isset($this->assetCollectorConf['compressInlineCss']) || !$this->assetCollectorConf['compressInlineCss']))
        ) {
            return;
        }

        $sources = $event->isInline()
            ? $event->getAssetCollector()->getInlineStyleSheets()
            : $event->getAssetCollector()->getStyleSheets();

        $assets = $this->buildMinifierAssetsArray($sources, $event);

        if (!empty($assets)) {
            $result = $this->minifier->minifyFiles($assets, Minifier::TYPE_STYLESHEET, $event->isInline(), true);
            foreach ($result as $uniqueIdentifier => $compressedAsset) {
                if ($event->isInline()) {
                    $event->getAssetCollector()->removeInlineStyleSheet($uniqueIdentifier);
                    $event->getAssetCollector()->addInlineStyleSheet(
                        $uniqueIdentifier,
                        $compressedAsset['code'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                } else {
                    $event->getAssetCollector()->removeStyleSheet($uniqueIdentifier);
                    $event->getAssetCollector()->addStyleSheet(
                        $uniqueIdentifier,
                        $compressedAsset['file'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                }
            }
        }
    }

    public function beforeJavaScriptsRendering(BeforeJavaScriptsRenderingEvent $event): void
    {
        if ((!$event->isInline() && (!isset($this->assetCollectorConf['compressJs']) || !$this->assetCollectorConf['compressJs'])) ||
            ($event->isInline() && (!isset($this->assetCollectorConf['compressInlineJs']) || !$this->assetCollectorConf['compressInlineJs']))
        ) {
            return;
        }

        $sources = $event->isInline()
            ? $event->getAssetCollector()->getInlineJavaScripts()
            : $event->getAssetCollector()->getJavaScripts();

        $assets = $this->buildMinifierAssetsArray($sources, $event);

        if (!empty($assets)) {
            $result = $this->minifier->minifyFiles($assets, Minifier::TYPE_JAVASCRIPT, $event->isInline(), true);
            foreach ($result as $uniqueIdentifier => $compressedAsset) {
                if ($event->isInline()) {
                    $event->getAssetCollector()->removeInlineJavaScript($uniqueIdentifier);
                    $event->getAssetCollector()->addInlineJavaScript(
                        $uniqueIdentifier,
                        $compressedAsset['code'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                } else {
                    $event->getAssetCollector()->removeJavaScript($uniqueIdentifier);
                    $event->getAssetCollector()->addJavaScript(
                        $uniqueIdentifier,
                        $compressedAsset['file'],
                        $sources[$uniqueIdentifier]['attributes'],
                        $sources[$uniqueIdentifier]['options']
                    );
                }
            }
        }
    }

    /**
     * Converts given assets to Minifier array. Also removes file paths from instruction set, which are not existing.
     *
     * @param array $sources
     * @param AbstractBeforeAssetRenderingEvent $event
     * @return array
     */
    private function buildMinifierAssetsArray(array $sources, AbstractBeforeAssetRenderingEvent $event): array
    {
        $assets = [];
        foreach ($sources as $uniqueIdentifier => $asset) {
            if (($asset['options']['priority'] ?? false) !== $event->isPriority()) {
                continue;
            }

            if ($event->isInline()) {
                $assets[$uniqueIdentifier] = [
                    'compress' => true,
                    'code' => $asset['source']
                ];
            } else {
                $path = GeneralUtility::getFileAbsFileName($asset['source']);
                if ($path && file_exists($path)) {
                    $assets[$uniqueIdentifier] = [
                        'compress' => true,
                        'file' => $path
                    ];
                }
            }
        }

        return $assets;
    }
}

Function Calls

None

Variables

None

Stats

MD5 2e70c291a6b448e6820d190fdefafcfc
Eval Count 0
Decode Time 123 ms