403Webshell
Server IP : 54.36.91.62  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux webm021.cluster127.gra.hosting.ovh.net 6.18.39-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Tue Jul 21 12:03:15 CEST 2026 x86_64
User : uxhactp ( 169076)
PHP Version : 7.4.33
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/uxhactp/www/wp-content/plugins/visualcomposer/visualcomposer/Helpers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/uxhactp/www/wp-content/plugins/visualcomposer/visualcomposer/Helpers/Assets.php
<?php

namespace VisualComposer\Helpers;

if (!defined('ABSPATH')) {
    header('Status: 403 Forbidden');
    header('HTTP/1.1 403 Forbidden');
    exit;
}

use VisualComposer\Application;
use VisualComposer\Framework\Illuminate\Support\Helper;
use VisualComposer\Framework\Container;
use WP_Query;

class Assets extends Container implements Helper
{
    /**
     * Returns an array that includes current page/post template ids
     *
     * @param $sourceId
     *
     * @return array
     * @throws \VisualComposer\Framework\Illuminate\Container\BindingResolutionException
     */
    public function getTemplateIds($sourceId)
    {
        $idList = [];

        $headerId = get_post_meta(
            $sourceId,
            '_' . VCV_PREFIX . 'HeaderTemplateId',
            true
        );
        $footerId = get_post_meta(
            $sourceId,
            '_' . VCV_PREFIX . 'FooterTemplateId',
            true
        );

        if (empty($headerId) || $headerId === 'default') {
            $headerId = $this->getTemplatePartId('header');
        }
        if (empty($headerId) || $footerId === 'default') {
            $footerId = $this->getTemplatePartId('footer');
        }

        if ($headerId) {
            $idList[] = $headerId;
        }
        if ($footerId) {
            $idList[] = $footerId;
        }
        $idList[] = $sourceId;

        return $idList;
    }

    /**
     * Get id of template part.
     *
     * @param $templatePart
     *
     * @return int|void
     * @throws \VisualComposer\Framework\Illuminate\Container\BindingResolutionException
     */
    public function getTemplatePartId($templatePart)
    {
        $optionsHelper = vchelper('Options');

        $headerFooterSettings = $optionsHelper->get('headerFooterSettings');
        if ($headerFooterSettings === 'allSite') {
            return intval($this->allContent($templatePart));
        } elseif ($headerFooterSettings === 'customPostType') {
            $customTemplatePart = vcfilter(
                'vcv:themeEditor:layoutController:getTemplatePartId',
                ['pageFound' => false, 'replaceTemplate' => true, 'sourceId' => false],
                ['templatePart' => $templatePart]
            );
            if ($customTemplatePart && $customTemplatePart['replaceTemplate'] && $customTemplatePart['pageFound']) {
                return intval($customTemplatePart['sourceId']);
            }
        }
    }

    /**
     * @param $templatePart
     *
     * @return integer|bool
     */
    public function allContent($templatePart)
    {
        $optionsHelper = vchelper('Options');
        $templatePartId = $optionsHelper->get('headerFooterSettingsAll' . ucfirst($templatePart));

        if ($templatePart) {
            return $templatePartId;
        }

        return false;
    }

    /**
     * @param $filename
     *
     * @return string
     */
    public function getFilePath($filename = '')
    {
        $destinationDir = VCV_PLUGIN_ASSETS_DIR_PATH . '/assets-bundles/';
        vchelper('File')->checkDir($destinationDir);
        $path = $destinationDir . ltrim($filename, '/\\');

        return $path;
    }

    /**
     * @param $filePath
     *
     * @return string
     */
    public function getAssetUrl($filePath = '')
    {
        if (preg_match('/^http/', $filePath)) {
            return set_url_scheme($filePath);
        }
        if (strpos($filePath, VCV_PLUGIN_URL) !== false) {
            return $filePath;
        }
        $uploadDir = wp_upload_dir();
        $url = $uploadDir['baseurl'];
        if (strpos($filePath, $url) !== false) {
            return $filePath;
        }

        $uploadDir = wp_upload_dir();
        $url = set_url_scheme(
            $uploadDir['baseurl'] . '/' . VCV_PLUGIN_ASSETS_DIRNAME . '/' . ltrim($filePath, '/\\')
        );

        return $url;
    }

    /**
     * Create file with content in filesystem
     *
     * @param $content
     * @param $extension
     *
     * @return bool|string
     */
    public function updateBundleFile($content, $extension)
    {
        $fileHelper = vchelper('File');
        $content = $content ? $content : '';
        $concatenatedFilename = $extension;
        $bundle = $this->getFilePath($concatenatedFilename);
        $bundleUrl = '/assets-bundles/' . $concatenatedFilename;

        if (!$fileHelper->setContents($bundle, $content)) {
            return false;
        }

        return $bundleUrl;
    }

    /**
     * Remove all files by extension in asset-bundles directory.
     *
     * @param string $extension
     *
     * @return array
     * @throws \VisualComposer\Framework\Illuminate\Container\BindingResolutionException
     */
    public function deleteAssetsBundles($extension = '')
    {
        $files = [];
        if (!empty($extension)) {
            $assetsHelper = vchelper('Assets');
            $fileHelper = vchelper('File');
            $destinationDir = $assetsHelper->getFilePath();

            // BC remove stale
            $extensionFull = '.' . $extension;
            /** @var Application $app */
            $app = vcapp();
            $files = $app->glob(rtrim($destinationDir, '/\\') . '/*' . $extensionFull);
            if (is_array($files)) {
                foreach ($files as $file) {
                    $fileHelper->removeFile($file);
                }
                unset($file);
            }

            // BC remove exact file
            $files = $app->glob(rtrim($destinationDir, '/\\') . '/' . $extension);
            if (is_array($files)) {
                foreach ($files as $file) {
                    $fileHelper->removeFile($file);
                }
                unset($file);
            }
        }

        return $files;
    }

    /**
     * Get relative path from absolute url
     *
     * @param $path
     *
     * @return array|string|string[]
     */
    public function relative($path)
    {
        $bundleUrl = $path;

        if (preg_match('/' . VCV_PLUGIN_ASSETS_DIRNAME . '/', $path)) {
            $url = $this->getAssetUrl();
            $url = str_replace(['http://', 'https://'], '', $url);
            $contentUrl = content_url() . '/' . VCV_PLUGIN_ASSETS_DIRNAME . '/';
            $contentUrl = str_replace(['http://', 'https://'], '', $contentUrl);
            $path = str_replace(['http://', 'https://'], '', $path);

            if (strpos($path, $url) !== false) {
                $bundleUrl = str_replace($url, '', $path);
            } elseif (strpos($path, $contentUrl) !== false) {
                $bundleUrl = str_replace($contentUrl, '', $path);
            }
        }

        return $bundleUrl;
    }

    /**
     * Generate (save to fs and update db) post styles bundle.
     *
     * @param $response
     * @param $payload
     *
     * @return bool|string URL to generated bundle.
     * @throws \VisualComposer\Framework\Illuminate\Container\BindingResolutionException
     */
    public function generateSourceCssFile($response, $payload)
    {
        $assetsHelper = vchelper('Assets');
        $fileHelper = vchelper('File');
        $globalElementsBaseCss = [];
        $globalElementsMixinsCss = [];
        $sourceId = $payload['sourceId'];
        $sourceCss = get_post_meta($sourceId, 'vcvSourceCss', true);
        $globalElementsCssData = get_post_meta($sourceId, VCV_PREFIX . 'globalElementsCssData', true);

        $globalElementsAttributesCss = [];
        if (is_array($globalElementsCssData)) {
            foreach ($globalElementsCssData as $element) {
                if (!$element) {
                    continue;
                }

                $baseCssHash = wp_hash($element['baseCss']);
                $mixinsCssHash = wp_hash($element['mixinsCss']);
                $attributesCssHash = wp_hash($element['attributesCss']);
                $globalElementsBaseCss[ $baseCssHash ] = $element['baseCss'];
                $globalElementsMixinsCss[ $mixinsCssHash ] = $element['mixinsCss'];
                $globalElementsAttributesCss[ $attributesCssHash ] = $element['attributesCss'];
            }
        }

        $globalElementsAttributesCssContent = join('', array_values($globalElementsAttributesCss));
        $globalElementsBaseCssContent = join('', array_values($globalElementsBaseCss));
        $globalElementsMixinsCssContent = join('', array_values($globalElementsMixinsCss));
        $sourceCssContent = $globalElementsBaseCssContent . $globalElementsMixinsCssContent
            . $globalElementsAttributesCssContent . $sourceCss;

        $sourceChecksum = wp_hash($sourceCssContent);
        $oldSourceChecksum = get_post_meta($sourceId, '_' . VCV_PREFIX . 'sourceChecksum', true);

        $sourceCssName = $sourceChecksum . '.source.css';

        $bundleUrl = $assetsHelper->updateBundleFile(
            $sourceCssContent,
            $sourceCssName
        );

        if ($sourceChecksum !== $oldSourceChecksum) {
            $sourcePath = $assetsHelper->getFilePath($sourceCssName);
            if ($fileHelper->isFile($sourcePath)) {
                $this->deleteSourceAssetsFile($sourceId);
                update_post_meta($sourceId, '_' . VCV_PREFIX . 'sourceChecksum', $sourceChecksum);
                update_post_meta($sourceId, 'vcvSourceCssFileUrl', $bundleUrl);
                update_post_meta($sourceId, '_' . VCV_PREFIX . 'globalCssMigrated', 1);
            }
        }

        $response['sourceBundleCssFileUrl'] = $bundleUrl;

        return $response;
    }

    /**
     * Delete post styles bundle.
     *
     * @param int $sourceId
     *
     * @return bool
     * @throws \VisualComposer\Framework\Illuminate\Container\BindingResolutionException
     */
    public function deleteSourceAssetsFile($sourceId)
    {
        $assetsHelper = vchelper('Assets');
        $extension = $sourceId . '.source.css';
        $assetsHelper->deleteAssetsBundles($extension);

        $sourceChecksum = get_post_meta($sourceId, '_' . VCV_PREFIX . 'sourceChecksum', true);
        $checksumArgs = [
            'meta_key' => '_' . VCV_PREFIX . 'sourceChecksum',
            'meta_value' => $sourceChecksum,
            'post_type' => 'any',
            'post_status' => 'any',
        ];
        $checksumQuery = new WP_Query($checksumArgs);
        //@codingStandardsIgnoreLine
        $postCount = $checksumQuery->post_count;
        if ($postCount === 1) { // Do not remove if this post is not match with deleting id
            $post = $checksumQuery->post; // Fetch the post that is using that checksum
            $postID = $post->ID;
            if ($postID !== $sourceId) {
                return true;
            } else {
                $extension = $sourceChecksum . '.source.css';
                $assetsHelper->deleteAssetsBundles($extension);
            }
        } elseif ($postCount < 1) {
            $extension = $sourceChecksum . '.source.css';
            $assetsHelper->deleteAssetsBundles($extension);
        }

        return true;
    }

    /**
     * Replace assets url placeholder with real url.
     * We use placeholder in post content to differentiate VC assets.
     *
     * @param string $content
     * @param string $assetUrl
     * @param string $prefix we use it to differentiate some special cases placeholders
     *
     * @return array|string|string[]
     */
    public function replaceAssetsUrl($content, $assetUrl, $prefix = '')
    {
        if ($prefix) {
            $prefix .= '-';
        }

        return str_replace(
            [
                '[' . $prefix . 'vcvAssetsUploadUrl]',
                'http://|!|' . $prefix . 'vcvAssetsUploadUrl|!|',
                'https://|!|' . $prefix . 'vcvAssetsUploadUrl|!|',
                '|!|' . $prefix . 'vcvAssetsUploadUrl|!|',
            ],
            $assetUrl,
            $content
        );
    }

    /**
     * Replace uploads url placeholder with real url.
     * We use placeholder in post content to differentiate VC uploads.
     *
     * @param string $content
     * @param string $uploadUrl
     * @param string $prefix we use it to differentiate some special cases placeholders
     *
     * @return array|string|string[]
     */
    public function replaceUploadsUrl($content, $uploadUrl, $prefix = '')
    {
        if ($prefix) {
            $prefix .= '-';
        }

        return str_replace(
            [
                '[' . $prefix . 'vcvUploadUrl]',
                'http://|!|' . $prefix . 'vcvUploadUrl|!|',
                'https://|!|' . $prefix . 'vcvUploadUrl|!|',
                '|!|' . $prefix . 'vcvUploadUrl|!|',
            ],
            $uploadUrl,
            $content
        );
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit