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/Hub/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

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

namespace VisualComposer\Helpers\Hub;

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

use VisualComposer\Framework\Illuminate\Support\Helper;

class Elements implements Helper
{
    protected $thirdPartyElements = [];

    protected $defaultElements = [];

    public function addElement($key, $data)
    {
        if (!array_key_exists($key, $this->thirdPartyElements)) {
            if (strpos($data['elementRealPath'], VCV_PLUGIN_DIR_PATH) === false) {
                $data['thirdParty'] = true;
                $this->thirdPartyElements[ $key ] = $data;
            } else {
                $this->defaultElements[ $key ] = $data;
            }

            return true;
        }

        return false;
    }

    public function getDefaultElements()
    {
        return $this->defaultElements;
    }

    public function getElements($raw = false, $outputElementRealPath = true)
    {
        $optionHelper = vchelper('Options');
        $dbElements = $optionHelper->get('hubElements', []);
        if (!is_array($dbElements)) {
            $dbElements = [];
        }

        /**
         * Default elements has maximum priority
         * Then Database elements
         * Last one is 3rd party elements
         */
        $elements = $dbElements;
        if (!$raw) {
            $elements = array_merge($this->thirdPartyElements, $dbElements, $this->defaultElements);
        }
        $usageCount = $optionHelper->get('usageCount', []);
        $outputElements = [];
        foreach ($elements as $tag => $element) {
            $data = $this->loopElement($tag, $element, $usageCount, $raw, $outputElementRealPath);

            $outputElements[ $tag ] = $data;
        }

        return $outputElements;
    }

    protected function loopElement($tag, $data, $usageCount, $raw, $outputElementRealPath)
    {
        if (array_key_exists($tag, $this->defaultElements)) {
            $data['metaIsDefaultElement'] = true;
        }
        if ($raw) {
            $elementRealPath = str_replace('[thirdPartyFullPath]', '', $data['elementRealPath']);
        } else {
            $elementRealPath = $this->getElementPath(
                $data['elementRealPath']
            );
        }
        $data = array_merge(
            $data,
            [
                'bundlePath' => $raw ? $data['bundlePath'] : $this->getElementUrl($data['bundlePath']),
                'elementPath' => $raw ? $data['elementPath'] : $this->getElementUrl($data['elementPath']),
                'elementRealPath' => $elementRealPath,
                'assetsPath' => $raw ? $data['assetsPath'] : $this->getElementUrl($data['assetsPath']),
            ]
        );

        if (!$outputElementRealPath) {
            unset($data['elementRealPath']);
            unset($data['phpFiles']);
        }

        $metaData = [];
        if (isset($data['settings']['metaThumbnailUrl'])) {
            if ($raw) {
                $metaData['metaThumbnailUrl'] = $data['settings']['metaThumbnailUrl'];
            } else {
                $metaData['metaThumbnailUrl'] = $this->getElementUrl(
                    $data['settings']['metaThumbnailUrl']
                );
            }
        }
        if (isset($data['settings']['metaPreviewUrl'])) {
            if ($raw) {
                $metaData['metaPreviewUrl'] = $data['settings']['metaPreviewUrl'];
            } else {
                $metaData['metaPreviewUrl'] = $this->getElementUrl(
                    $data['settings']['metaPreviewUrl']
                );
            }
        }

        if (!empty($metaData)) {
            $data['settings'] = array_merge(
                $data['settings'],
                $metaData
            );
        }

        $data['usageCount'] = isset($usageCount[ $tag ]) ? $usageCount[ $tag ] : 0;

        return $data;
    }

    public function setElements($elements = [])
    {
        $optionHelper = vchelper('Options');

        return $optionHelper->set('hubElements', $elements);
    }

    public function updateElement($key, $prev, $new, $merged)
    {
        $hubBundleHelper = vchelper('HubBundle');
        $hubBundleHelper->setTempBundleFolder(
            VCV_PLUGIN_ASSETS_DIR_PATH . '/temp-bundle-element-' . $key
        );
        $fileHelper = vchelper('File');
        $result = $fileHelper->copyDirectory(
            $hubBundleHelper->getTempBundleFolder('elements/' . $key),
            $this->getElementPath($key)
        );
        if (!is_wp_error($result)) {
            $merged = $this->updateElementData($key, $merged, $prev, $new);
        }

        return $merged;
    }

    protected function updateElementData($key, $merged, $prev, $new)
    {
        $merged['key'] = $key;
        // $this->getElementUrl($key . '/public/dist/element.bundle.js');
        $merged['bundlePath'] = $key . '/public/dist/element.bundle.js';
        // $this->getElementUrl($key . '/' . $key . '/');
        $merged['elementPath'] = $key . '/' . $key . '/';
        // $this->getElementPath($key . '/' . $key . '/');
        $merged['elementRealPath'] = $key . '/' . $key . '/';
        $merged['assetsPath'] = $merged['elementPath'] . 'public/';
        unset($merged['metaIsElementRemoved']);
        if (isset($merged['settings'])) {
            if (isset($merged['settings']['metaThumbnailUrl'])) {
                $merged['settings']['metaThumbnailUrl'] = str_replace(
                    '[publicPath]',
                    $merged['assetsPath'],
                    $merged['settings']['metaThumbnailUrl']
                );
            } else {
                $merged['settings']['metaThumbnailUrl'] = '';
            }
            if (isset($merged['settings']['metaPreviewUrl'])) {
                $merged['settings']['metaPreviewUrl'] = str_replace(
                    '[publicPath]',
                    $merged['assetsPath'],
                    $merged['settings']['metaPreviewUrl']
                );
            } else {
                $merged['settings']['metaPreviewUrl'] = '';
            }
        }
        if (vcvenv('VCV_ENV_ELEMENTS_FILES_NOGLOB')) {
            if (isset($merged['phpFiles'])) {
                $files = isset($new['phpFiles']) ? $new['phpFiles'] : [];
                $merged['phpFiles'] = [];
                foreach ($files as $index => $filePath) {
                    $merged['phpFiles'][ $index ] = rtrim($merged['elementRealPath'], '\\/') . '/' . $filePath;
                }
                unset($index, $filePath);
            }
        }
        array_walk_recursive($merged, [$this, 'fixDoubleSlash']);

        return $merged;
    }

    public function fixDoubleSlash(&$value)
    {
        $value = preg_replace('/([^:])(\/{2,})/', '$1/', $value);
    }

    public function getElementPath($path = '')
    {
        if ($this->isDevElements()) {
            if (preg_match('/devElements\//', $path)) {
                return $path;
            }
        }
        if (strpos($path, '[thirdPartyFullPath]') !== false) {
            return str_replace('[thirdPartyFullPath]', '', $path);
        }
        if (file_exists($path) || is_dir($path)) {
            return $path;
        }
        if (strpos($path, VCV_PLUGIN_ASSETS_DIRNAME) !== false) {
            return $path;
        }

        $elementPath = VCV_PLUGIN_ASSETS_DIR_PATH . '/elements/' . ltrim($path, '\\/');

        return apply_filters('vcv:helpers:hub:elements:getElementPath', $elementPath, $path);
    }

    public function getElementUrl($path = '')
    {
        if (preg_match('/^http/', $path)) {
            return $path;
        }

        if ($this->isDevElements()) {
            return VCV_PLUGIN_URL . 'devElements/' . $path;
        }

        if (strpos($path, VCV_PLUGIN_URL) !== false) {
            return $path;
        }
        $uploadDir = wp_upload_dir();
        $url = $uploadDir['baseurl'];
        if (strpos($path, $url) !== false) {
            return $path;
        }

        $assetsHelper = vchelper('Assets');
        $url = $assetsHelper->getAssetUrl('/elements/' . ltrim($path, '\\/'));

        return apply_filters('vcv:helpers:hub:elements:getElementUrl', $url, $path);
    }

    /**
     * @param $elementTag
     *
     * @return bool
     */
    public function isElementUsed($elementTag)
    {
        // Find
        // 1. check is element used
        /** @see \VisualComposer\Modules\Hub\Actions\PostUpdateAction::getUpdateablePosts */
        $vcvPosts = new \WP_Query(
            [
                'post_type' => get_post_types(['public' => true], 'names'),
                'post_status' => ['publish', 'pending', 'draft', 'auto-draft'],
                'posts_per_page' => 1, // we just need one page
                'meta_key' => VCV_PREFIX . 'pageContent',
                'meta_value' => rawurlencode('"tag":"' . $elementTag . '"'),
                'meta_compare' => 'LIKE',
                'suppress_filters' => true,
            ]
        );

        // @codingStandardsIgnoreLine
        return $vcvPosts->found_posts > 0;
    }

    /**
     * Conditional check if dev elements version is activated.
     *
     * @return bool
     */
    public function isDevElements()
    {
        $isDevElements = false;
        if (vcvenv('VCV_ENV_DEV_ELEMENTS')) {
            $isDevElements = true;
        }

        return apply_filters('vcv:helpers:hub:isDevElements', $isDevElements);
    }

    /**
     * Collect all element's data from their bundle manifests to the list.
     *
     * @param array $manifests
     * @param string $pathToElementFolder
     * @param string $urlToElementFolder
     *
     * @return array
     * @throws \Exception
     */
    public function readManifests(array $manifests, $pathToElementFolder, $urlToElementFolder)
    {
        $elements = [];
        $fileHelper = vchelper('File');
        foreach ($manifests as $manifestPath) {
            $manifest = json_decode($fileHelper->getContents($manifestPath), true);
            $dirname = dirname($manifestPath);
            $tag = basename($dirname);
            if (!isset($manifest['elements'], $manifest['elements'][ $tag ])) {
                throw new \Exception('Element manifest must SET "TAG":' . $manifestPath);
            }
            $element = $manifest['elements'][ $tag ];
            $element['bundlePath'] = $urlToElementFolder . $tag . '/public/dist/element.bundle.js';
            $element['elementPath'] = $urlToElementFolder . $tag . '/' . $tag . '/';
            $element['elementRealPath'] = $pathToElementFolder . '/' . $tag . '/' . $tag . '/';
            $element['assetsPath'] = $urlToElementFolder . $tag . '/' . $tag . '/public/';
            $element['phpFiles'] = [];
            if (isset($manifest['elements'], $manifest['elements'][ $tag ], $manifest['elements'][ $tag ]['phpFiles'])) {
                $files = $manifest['elements'][ $tag ]['phpFiles'];
                foreach ($files as $index => $filePath) {
                    $manifest['elements'][ $tag ]['phpFiles'][ $index ] = rtrim($element['elementRealPath'], '\\/') . '/' . $filePath;
                }
                unset($index, $filePath);
                $element['phpFiles'] = $manifest['elements'][ $tag ]['phpFiles'];
            }
            $element = json_decode(
                str_replace(
                    '[publicPath]',
                    $urlToElementFolder . $tag . '/' . $tag . '/public',
                    wp_json_encode($element)
                ),
                true
            );

            $elements[ $tag ] = $element;
        }
        unset($manifest, $manifestPath, $tag, $dirname);

        return $elements;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit