File "unitecreator_browser.class.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/unlimited-elements-for-elementor/inc_php/unitecreator_browser.class.php
File size: 32.03 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
class UniteCreatorBrowserWork extends HtmlOutputBaseUC
{
    private $selectedCatNum = "";
    private $isPages = false;
    private $browserID = "";
    private $addonType = "", $objAddonType;
    private $isMultipleAddonTypes = false;
    private $arrAddonTypes = array();
    private $webAPI, $prefix;
    private $arrIcons;
    private static $isPutOnce_catalogUpdate = false;
    private static $serial = 0;
    protected $hasCategories = true, $hasHeader = true, $isSelectMode = false, $putAddonTitle = false;
    protected $isFromWebOnly = false, $addEmptyItem = false;
    protected $textBuy, $textHoverProAddon, $urlBuy, $product;
    protected $urlPreviewTemplate;
    const STATE_INSTALLED = "installed";
    const STATE_FREE = "free";
    const STATE_PRO = "pro";
    public function __construct()
    {
        $this->webAPI = new UniteCreatorWebAPI();
        $this->textBuy = esc_html__("Buy PRO", "unlimited-elements-for-elementor");
        $this->textHoverProAddon = esc_html__("This addon is available<br>for Blox PRO users only.", "unlimited-elements-for-elementor");
        $this->urlBuy = GlobalsUC::URL_BUY;
        self::$serial++;
        $this->prefix = UniteFunctionsUC::getRandomString(5) . self::$serial;
    }
    public function setBrowserID($id)
    {
        $this->browserID = $id;
    }
    public function setProduct($product)
    {
        $this->product = $product;
    }
    private function a_INIT()
    {
    }
    protected function initSettingsByAddonType_shapeDivider()
    {
        $this->hasCategories = false;
        $this->hasHeader = false;
        $this->isSelectMode = true;
        $this->putAddonTitle = true;
        $this->addEmptyItem = true;
    }
    protected function initSettingsByAddonType_layout()
    {
        $this->isPages = true;
        if ($this->objAddonType->isBasicType == true) {
            $this->isFromWebOnly = true;
        }
    }
    protected function initByGeneralAddonType()
    {
        if ($this->objAddonType->browser_addEmptyItem == true) {
            $this->addEmptyItem = true;
        }
    }
    protected function initSettingsByAddonType()
    {
        if (empty($this->addonType)) {
            return false;
        }
        if ($this->objAddonType->isLayout == true) {
            $this->initSettingsByAddonType_layout();
            return false;
        }
        switch ($this->addonType) {
            case GlobalsUC::ADDON_TYPE_SHAPE_DEVIDER:
                $this->initSettingsByAddonType_shapeDivider();
                break;
            default:
                $this->initByGeneralAddonType();
                break;
        }
        if (!empty($this->objAddonType->browser_textBuy)) {
            $this->textBuy = $this->objAddonType->browser_textBuy;
        }
        if (!empty($this->objAddonType->browser_textHoverPro)) {
            $this->textHoverProAddon = $this->objAddonType->browser_textHoverPro;
        }
        if (!empty($this->objAddonType->browser_urlBuyPro)) {
            $this->urlBuy = $this->objAddonType->browser_urlBuyPro;
        }
        if (!empty($this->objAddonType->browser_urlPreview)) {
            $this->urlPreviewTemplate = $this->objAddonType->browser_urlPreview;
        }
    }
    public function initAddonType($addonType)
    {
        if (is_array($addonType)) {
            UniteFunctionsUC::validateNotEmpty($addonType, "multiple addon types");
            $this->isMultipleAddonTypes = true;
            foreach ($addonType as $type) {
                $objAddonType = UniteCreatorAddonType::getAddonTypeObject($type);
                $this->arrAddonTypes[$type] = $objAddonType;
                $this->addonType = $addonType;
                if ($type == GlobalsUC::ADDON_TYPE_REGULAR_ADDON) {
                    $this->objAddonType = $objAddonType;
                }
            }
            if (empty($this->objAddonType)) {
                $this->objAddonType = $objAddonType;
            }
        } else {
            $this->objAddonType = UniteCreatorAddonType::getAddonTypeObject($addonType);
        }
        $this->addonType = $this->objAddonType->typeNameDistinct;
        $this->initSettingsByAddonType();
    }
    private function a_________GETTERS_________()
    {
    }
    private function getArrIcons()
    {
        if (!empty($this->arrIcons)) {
            return $this->arrIcons;
        }
        $arrIcons = array();
        $arrIcons["search"] = "fas fa-search";
        $arrIcons["close"] = "fas fa-times";
        $arrIcons["download"] = "fas fa-download";
        $arrIcons["cloud_download"] = "fas fa-cloud-download";
        $arrIcons["lock"] = "fas fa-lock";
        $arrIcons["spinner"] = "fas fa-spinner";
        $this->arrIcons = $arrIcons;
        return $arrIcons;
    }
    private function getIcon($name)
    {
        if (empty($this->arrIcons)) {
            $this->getArrIcons();
        }
        $icon = UniteFontManagerUC::getIcon($name, $this->arrIcons);
        return $icon;
    }
    private function isProductActive()
    {
        $isProductActive = $this->webAPI->isProductActive($this->product);
        return $isProductActive;
    }
    private function getHtmlCatalogHeader()
    {
        $html = "";
        $textBlox = esc_html__("Blox", "unlimited-elements-for-elementor");
        $textShowAll = esc_html__("Show All", "unlimited-elements-for-elementor");
        $textInstalled = esc_html__("Installed", "unlimited-elements-for-elementor");
        $textFree = esc_html__("Free", "unlimited-elements-for-elementor");
        $textPro = esc_html__("Pro", "unlimited-elements-for-elementor");
        $textBuy = $this->textBuy;
        $textAlreadyBought = esc_html__("Already bought Blox PRO?", "unlimited-elements-for-elementor");
        $textTheProductActive = esc_html__("The product is Active!", "unlimited-elements-for-elementor");
        $textDeactivate = esc_html__("Deactivate", "unlimited-elements-for-elementor");
        $textCheckUpdate = esc_html__("Check Catalog Update", "unlimited-elements-for-elementor");
        $textClear = esc_html__("Clear", "unlimited-elements-for-elementor");
        $urlBuy = $this->urlBuy;
        $isProductActive = $this->isProductActive();
        $htmlAccount = "";
        if ($isProductActive == false) {
            $htmlAccount = "\r\n\t\t\t <div class='uc-header-gotopro'>\r\n\t\t\t      <a href='javascript:void(0)' class='uc-link-activate-pro'>{$textAlreadyBought}</a>\r\n\t\t\t      <a href='{$urlBuy}' target='_blank' class='uc-button-buy-pro'>{$textBuy}</a>\r\n\t\t\t </div>\r\n\t\t";
        } else {
            $htmlAccount = "\r\n\t\t\t<div class='uc-header-gotopro'>\r\n\t\t\t\t<span class='uc-catalog-active-text'>{$textTheProductActive}</span>\r\n\t\t\t\t<a href='javascript:void(0)' class='uc-link-deactivate'>{$textDeactivate}</a>\r\n\t\t\t</div>\r\n\t\t\t";
        }
        $iconSearch = $this->getIcon("search");
        $iconClose = $this->getIcon("close");
        $iconDownload = $this->getIcon("download");
        $html .= "<div class='uc-catalog-header unite-inputs unite-clearfix'>\r\n\r\n\t\t \t\t<div class='uc-catalog-logo'></div>\r\n\t    \t\t<div class='uc-catalog-search'>\r\n\t\t\t\t\t<i class='{$iconSearch}' aria-hidden='true'></i> &nbsp;\r\n\t    \t\t\t<input class='uc-catalog-search-input' type='text'>\r\n\t    \t\t\t<a href='javascript:void(0)' class='unite-button-secondary button-disabled uc-catalog-search-clear' style='display:none;'>{$textClear}</a>\r\n\t    \t\t</div>\r\n\t    \t\t\r\n\t    \t\t<div class='uc-catalog-header-menu'>\r\n\t     \t\t\t<a href='javascript:void(0)' class='uc-menu-active' onfocus='this.blur()' data-state='all'>{$textShowAll}</a>\r\n\t      \t  \t\t<a href='javascript:void(0)' onfocus='this.blur()' data-state='installed'>{$textInstalled}</a>\r\n\t      \t  \t\t<a href='javascript:void(0)' onfocus='this.blur()' data-state='free'>{$textFree}</a>\r\n\t       \t \t\t<a href='javascript:void(0)' onfocus='this.blur()' data-state='pro'>{$textPro}</a>\r\n\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\r\n\t\t   \t \t<a href='javascript:void(0)' onfocus='this.blur()' class='uc-catalog-button-close'>\r\n\t\t   \t \t\t<i class='{$iconClose}' aria-hidden='true'></i>\r\n\t\t\t \t</a>\r\n\t\t\t\t\r\n\t\t\t\t<a class='uc-link-update-catalog' title='{$textCheckUpdate}' href='javascript:void(0)' onfocus='this.blur()'><i class='{$iconDownload}' aria-hidden='true'></i></a>\r\n\t\t\t \t\r\n\t\t\t \t{$htmlAccount}\r\n\t\t\t \t\r\n\t\t</div>";
        return $html;
    }
    private function getHtmlTabs($arrCats)
    {
        $html = "";
        $numCats = count($arrCats);
        $addHtml = "";
        $isFirst = true;
        $counter = 0;
        $totalItems = 0;
        $htmlTabs = "";
        foreach ($arrCats as $catTitle => $cat) {
            if ($this->isPages == false) {
                $arrItems = UniteFunctionsUC::getVal($cat, "addons");
            } else {
                $arrItems = $cat;
            }
            $numItems = 0;
            if (!empty($arrItems)) {
                $numItems = count($arrItems);
                $totalItems += $numItems;
            }
            $counter++;
            if (empty($this->selectedCatNum) && $isFirst == true) {
                $isFirst = false;
                $this->selectedCatNum = $counter;
            }
            $isSelected = false;
            if ($this->selectedCatNum === $counter) {
                $isSelected = true;
            }
            if (empty($catTitle)) {
                $catTitle = UniteFunctionsUC::getVal($cat, "title");
            }
            if (empty($catTitle)) {
                $id = UniteFunctionsUC::getVal($cat, "id");
                if (empty($id)) {
                    $id = $counter;
                }
                $catTitle = esc_html__("Category", "unlimited-elements-for-elementor") . " {$id}";
            }
            $catShowTitle = $catTitle;
            if (!empty($numItems)) {
                $catShowTitle .= " ({$numItems})";
            }
            $catTitle = htmlspecialchars($catTitle);
            $catShowTitle = htmlspecialchars($catShowTitle);
            $addClass = "";
            if ($isSelected == true) {
                $addClass = " uc-tab-selected";
            }
            $htmlTabs .= self::TAB5 . "<div class='uc-tab-item' data-catid='{$counter}' data-title='{$catTitle}'><a href=\"javascript:void(0)\" onfocus=\"this.blur()\" class=\"uc-browser-tab{$addClass}\" data-catid=\"{$counter}\">{$catShowTitle}</a></div>" . self::BR;
        }
        $htmlTitleCategories = esc_html__("Categories", "unlimited-elements-for-elementor");
        if (!empty($totalItems)) {
            $htmlTitleCategories .= " ({$totalItems})";
        }
        $html .= self::TAB3 . "<div class=\"uc-browser-tabs-wrapper\" {$addHtml}>" . self::BR;
        $html .= self::TAB3 . "\t<div class='uc-browser-tabs-heading'>{$htmlTitleCategories}</div>" . self::BR;
        $html .= $htmlTabs;
        $html .= self::TAB3 . "<div class='unite-clear'></div>" . self::BR;
        $html .= self::TAB3 . "</div>" . self::BR;
        return $html;
    }
    private function getHtmlContent_cats($arrCats)
    {
        $html = "";
        $numCats = count($arrCats);
        $counter = 0;
        foreach ($arrCats as $catTitle => $cat) {
            $counter++;
            $title = UniteFunctionsUC::getVal($cat, "title");
            if ($this->isPages == true) {
                $title = $catTitle;
            }
            $title = htmlspecialchars($title);
            $style = " style=\"display:none\"";
            if ($counter === $this->selectedCatNum || $numCats <= 1) {
                $style = "";
            }
            if ($this->isPages == true) {
                $arrItems = $cat;
            } else {
                $arrItems = UniteFunctionsUC::getVal($cat, "addons");
            }
            $prefix = $this->prefix;
            $contentID = "uc_browser_content_{$prefix}_{$counter}";
            $html .= self::TAB3 . "<div id=\"{$contentID}\" class=\"uc-browser-content\" data-cattitle='{$title}' {$style} >" . self::BR;
            if (empty($arrItems)) {
                if ($this->isPages == false) {
                    $html .= esc_html__("No addons in this category", "unlimited-elements-for-elementor");
                } else {
                    $html .= esc_html__("No pages in this category", "unlimited-elements-for-elementor");
                }
            } else {
                if (is_array($arrItems) == false) {
                    UniteFunctionsUC::throwError("The cat addons array should be array");
                }
                foreach ($arrItems as $name => $item) {
                    if ($this->isPages == true) {
                        $item["name"] = $name;
                    }
                    $htmlItem = $this->getHtmlItem($item);
                    $html .= $htmlItem;
                }
            }
            $html .= self::TAB2 . "<div class='unite-clear'></div>" . self::BR;
            $html .= self::TAB3 . "</div>" . self::BR;
        }
        return $html;
    }
    private function getHtmlContent_addons($arrItems)
    {
        $html = "";
        $html .= self::TAB3 . "<div class=\"uc-browser-content uc-content-nocats\" >" . self::BR;
        if ($this->hasCategories == false && $this->addEmptyItem == true) {
            $htmlEmptyItem = $this->getHtmlEmptyItem();
            $html .= $htmlEmptyItem;
        }
        foreach ($arrItems as $name => $item) {
            if ($this->isPages == true) {
                $item["name"] = $name;
            }
            $htmlItem = $this->getHtmlItem($item);
            $html .= $htmlItem;
        }
        $html .= self::TAB3 . "</div>" . self::BR;
        $html .= self::TAB2 . "<div class='unite-clear'></div>" . self::BR;
        return $html;
    }
    private function getHtmlContent($arrCats)
    {
        $html = "";
        $html .= self::TAB2 . "<div class=\"uc-browser-content-wrapper\">" . self::BR;
        if ($this->hasCategories == true) {
            $html .= $this->getHtmlContent_cats($arrCats);
        } else {
            $html .= $this->getHtmlContent_addons($arrCats);
        }
        $html .= self::TAB2 . "</div>" . self::BR;
        return $html;
    }
    public function isWebAddonFree($addon)
    {
        $isActive = $this->isProductActive();
        if ($isActive == true) {
            return true;
        }
        $isFree = UniteFunctionsUC::getVal($addon, "isfree");
        $isFree = UniteFunctionsUC::strToBool($isFree);
        return $isFree;
    }
    private function getAddonUrlPreview($addon)
    {
        if (is_array($addon) == false) {
            return "";
        }
        $isWeb = UniteFunctionsUC::getVal($addon, "isweb");
        $previewPage = UniteFunctionsUC::getVal($addon, "preview");
        if (!empty($previewPage) && $isWeb == true) {
            $urlPreview = GlobalsUC::URL_PREVIEW_WIDGETS . $previewPage;
            return $urlPreview;
        }
        if (empty($this->urlPreviewTemplate)) {
            return "";
        }
        $urlPreview = $this->urlPreviewTemplate;
        $addonName = UniteFunctionsUC::getVal($addon, "name");
        $urlPreview = str_replace("[name]", $addonName, $urlPreview);
        $urlPreview = htmlspecialchars($urlPreview);
        return $urlPreview;
    }
    public function getCatalogAddonStateData($state, $isPage = false, $urlPreview = null, $addon = array(), $options = array())
    {
        $addonHref = "javascript:void(0)";
        $linkAddHtml = "";
        $htmlState = "";
        $isWebCatalogMode = UniteFunctionsUC::getVal($options, "web_catalog_mode");
        $isWebCatalogMode = UniteFunctionsUC::strToBool($isWebCatalogMode);
        $urlBuy = $this->urlBuy;
        $output = array();
        $output["html_state"] = "";
        $output["html_additions"] = "";
        $output["addon_href"] = "javascript:void(0)";
        $output["link_addhtml"] = "";
        $output["state"] = $state;
        $textItem = __("widget", "unlimited-elements-for-elementor");
        $textItemHigh = $this->objAddonType->textSingle;
        $textItemSmall = strtolower($textItemHigh);
        if ($isPage) {
            $textItem = "template";
        }
        $iconCloudDownload = $this->getIcon("cloud_download");
        $iconLock = $this->getIcon("lock");
        $actionPreview = __("Preview", "unlimited-elements-for-elementor");
        $showState = true;
        $showAdditions = true;
        $urlBuyAttributes = "target='_blank'";
        switch ($state) {
            case self::STATE_FREE:
                $label = 'free';
                $labelText = __('Free', "unlimited-elements-for-elementor");
                $hoverText = __("This ", "unlimited-elements-for-elementor") . $textItemHigh . __(" Is Free", "unlimited-elements-for-elementor") . "<br>" . __("To use it click install", "unlimited-elements-for-elementor");
                $hoverIcon = '<i class="' . $iconCloudDownload . '" aria-hidden="true"></i>';
                $action = "Install";
                if (GlobalsUC::$isProductActive) {
                    $labelText = __('Web', "unlimited-elements-for-elementor");
                    $hoverText = __("You can install this ", "unlimited-elements-for-elementor") . $textItem . "<br>" . __("To use it click install", "unlimited-elements-for-elementor");
                }
                break;
            case self::STATE_PRO:
                $isProNewPage = $this->objAddonType->browser_buyProNewPage;
                if ($isProNewPage == false) {
                    $urlBuyAttributes = "";
                }
                $label = 'pro';
                $labelText = __('Pro', "unlimited-elements-for-elementor");
                $hoverText = $this->textHoverProAddon;
                $hoverIcon = '<i class="' . $iconLock . '" aria-hidden="true"></i>';
                $action = $this->textBuy;
                $addonHref = $this->urlBuy;
                $linkAddHtml = " target='_blank'";
                break;
            default:
                return $output;
                break;
        }
        if ($isPage == true) {
            if (!empty($urlPreview)) {
                $urlPreview = htmlspecialchars($urlPreview);
                $hoverText .= " <br><a class='uc-hover-label-preview' href='{$urlPreview}' target='_blank' >View Page Demo</a>";
            }
            if (GlobalsUC::$isProductActive && $isWebCatalogMode == true) {
                $showState = false;
            }
            if ($isWebCatalogMode == true) {
                $showAdditions = false;
            }
        }
        if ($showState == true) {
            $addStateClass = "";
            if (UniteCreatorManagerAddons::$stateLabelCounter > 0) {
                $addStateClass = "uc-state-label" . UniteCreatorManagerAddons::$stateLabelCounter;
            }
            $htmlState = "<div class='uc-state-label uc-state-{$label} {$addStateClass}'>\r\n\t\t\t\t<div class='uc-state-label-text'>{$labelText}</div>\r\n\t\t\t</div>";
            UniteCreatorManagerAddons::$stateLabelCounter++;
        }
        if (empty($urlPreview)) {
            $urlPreview = $this->getAddonUrlPreview($addon);
        }
        $htmlAdditions = "";
        if ($showAdditions == true) {
            $htmlAdditions .= "<div class='uc-hover-label uc-hover-{$label} hidden'>\r\n\t\t\t\t\t\t{$hoverIcon}\r\n\t\t\t\t\t\t<div class='uc-hover-label-text'>{$hoverText}</div>\r\n\t\t\t\t\t\t<a href='{$urlBuy}' {$urlBuyAttributes} class=\"uc-addon-button uc-button-{$label}\">{$action}</a>\r\n\t\t\t\t\t\t<a href='{$urlPreview}' target='_blank' class=\"uc-addon-button uc-button-preview uc-button-preview-{$label}\">{$actionPreview}</a>\r\n\t\t\t\t\t</div>";
            $textInstalling = esc_html__("Installing", "unlimited-elements-for-elementor");
            $iconSpinner = $this->getIcon("spinner");
            $htmlAdditions .= "<div class='uc-installing' style='display:none'>\r\n\t\t\t\t\t\t   <div class='uc-bar'></div>\r\n\t\t\t\t\t\t   <i class='{$iconSpinner} fa-spin fa-3x fa-fw'></i>\r\n\t\t\t\t\t\t   <span>{$textInstalling}...</span>\r\n\t\t\t\t\t\t   <h3 style='display:none'></h3>\r\n\t\t\t\t\t  </div>";
        }
        if ($isPage) {
            $textInstalled = "Page installed successfully<br> refreshing...";
            $htmlAdditions .= "<div class='uc-installed-success' style='display:none'>\r\n\t\t\t\t\t\t   <span>{$textInstalled}...</span>\r\n\t\t\t\t\t  </div>";
        }
        $output["html_state"] = $htmlState;
        $output["html_additions"] = $htmlAdditions;
        $output["addon_href"] = $addonHref;
        $output["link_addhtml"] = $linkAddHtml;
        return $output;
    }
    private function getHtmlItem($arrItem)
    {
        $html = "";
        if ($this->isFromWebOnly == true) {
            $isFromWeb = true;
        } else {
            $isFromWeb = UniteFunctionsUC::getVal($arrItem, "isweb");
            $isFromWeb = UniteFunctionsUC::strToBool($isFromWeb);
        }
        if ($isFromWeb == true) {
            $isFree = $this->isWebAddonFree($arrItem);
        }
        $name = UniteFunctionsUC::getVal($arrItem, "name");
        $alias = UniteFunctionsUC::getVal($arrItem, "alias");
        $cat = UniteFunctionsUC::getVal($arrItem, "cat");
        if (!empty($alias) && $this->isPages == false && $isFromWeb == false) {
            $name = $alias;
        }
        $name = UniteFunctionsUC::sanitizeAttr($name);
        $title = UniteFunctionsUC::getVal($arrItem, "title");
        $title = UniteFunctionsUC::sanitizeAttr($title);
        $paramImage = "preview";
        if ($isFromWeb == true) {
            $paramImage = "image";
        }
        $urlPreviewImage = UniteFunctionsUC::getVal($arrItem, $paramImage);
        $urlPreviewImage = UniteFunctionsUC::sanitizeAttr($urlPreviewImage);
        $id = UniteFunctionsUC::getVal($arrItem, "id");
        $state = self::STATE_INSTALLED;
        if ($isFromWeb) {
            if ($isFree == true) {
                $state = self::STATE_FREE;
            } else {
                $state = self::STATE_PRO;
            }
        }
        $urlItemPreview = null;
        if ($this->isPages == true) {
            $urlItemPreview = UniteFunctionsUC::getVal($arrItem, "url");
        }
        $stateData = $this->getCatalogAddonStateData($state, $this->isPages, $urlItemPreview);
        $addonHref = $stateData["addon_href"];
        $linkAddHtml = $stateData["link_addhtml"];
        $classAdd = "";
        if ($isFromWeb == true) {
            $classAdd = "uc-web-addon";
        }
        if ($this->putAddonTitle == true) {
            $linkAddHtml .= " title='{$title}'";
        }
        $addParams = "";
        if ($this->hasCategories == false && !empty($cat)) {
            $cat = htmlspecialchars($cat);
            $addParams = " data-cattitle=\"{$cat}\"";
        }
        $html .= self::TAB4 . "<div class=\"uc-browser-addon uc-addon-thumbnail {$classAdd}\" href=\"{$addonHref}\" {$linkAddHtml} data-state=\"{$state}\" data-id=\"{$id}\" data-name=\"{$name}\" data-title=\"{$title}\" {$addParams}>" . self::BR;
        if ($state != self::STATE_INSTALLED) {
            $html .= $stateData["html_state"];
        }
        $bgImageStyle = "background-image:url('{$urlPreviewImage}')";
        $html .= self::TAB6 . "<div class=\"uc-browser-addon-image\" style=\"{$bgImageStyle}\"></div>" . self::BR;
        $html .= self::TAB6 . "<div class=\"uc-browser-addon-title\">{$title}</div>" . self::BR;
        if ($state != self::STATE_INSTALLED) {
            $html .= $stateData["html_additions"];
        }
        $html .= self::TAB4 . "</div>" . self::BR;
        return $html;
    }
    protected function getHtmlEmptyItem()
    {
        $state = self::STATE_INSTALLED;
        $title = esc_html__("Not Selected", "unlimited-elements-for-elementor");
        $html = "";
        $html .= self::TAB4 . "<div class=\"uc-browser-addon uc-addon-thumbnail\" href=\"javascript:void(0)\" data-state=\"{$state}\">" . self::BR;
        $html .= self::TAB6 . "<div class=\"uc-browser-addon-empty-title\">{$title}</div>" . self::BR;
        $html .= self::TAB4 . "</div>" . self::BR;
        return $html;
    }
    private function a__________OPERATIONS_________()
    {
    }
    public function sortCatalogItems($key1, $key2)
    {
        if (strtolower($key1) == "basic") {
            return -1;
        }
        if (strtolower($key2) == "basic") {
            return 1;
        }
        return strcmp($key1, $key2);
    }
    private function sortCatalog($arrCats)
    {
        uksort($arrCats, array($this, "sortCatalogItems"));
        return $arrCats;
    }
    private function removeEmptyCatalogCats($arrCats)
    {
        foreach ($arrCats as $key => $cat) {
            $addons = UniteFunctionsUC::getVal($cat, "addons");
            if (empty($addons)) {
                unset($arrCats[$key]);
            }
        }
        return $arrCats;
    }
    private function a_______DATA______()
    {
    }
    private function getArrCats_addons()
    {
        $objAddons = new UniteCreatorAddons();
        $arrCats = $objAddons->getAddonsWidthCategories(true, true, $this->addonType);
        if ($this->hasCategories == false) {
            $arrAddons = $objAddons->getCatAddons(null, true, true, $this->addonType, true);
            if (GlobalsUC::$enableWebCatalog == true) {
                $arrAddons = $this->webAPI->mergeAddonsWithCatalog($arrAddons, $this->objAddonType);
            }
            return $arrAddons;
        }
        if ($this->isMultipleAddonTypes == true) {
            $arrCats = array();
            foreach ($this->arrAddonTypes as $type => $objType) {
                $arrCatsType = $objAddons->getAddonsWidthCategories(true, true, $type);
                if (GlobalsUC::$enableWebCatalog == true) {
                    $arrCatsType = $this->webAPI->mergeCatsAndAddonsWithCatalog($arrCatsType, false, $objType);
                }
                if ($type = GlobalsUC::ADDON_TYPE_REGULAR_ADDON) {
                    $arrCats = $this->sortCatalog($arrCats);
                }
                $arrCats = array_merge($arrCats, $arrCatsType);
            }
        } else {
            $arrCats = $objAddons->getAddonsWidthCategories(true, true, $this->addonType);
            if (GlobalsUC::$enableWebCatalog == true) {
                $arrCats = $this->webAPI->mergeCatsAndAddonsWithCatalog($arrCats, false, $this->objAddonType);
            }
            $arrCats = $this->sortCatalog($arrCats);
        }
        $arrCats = $this->removeEmptyCatalogCats($arrCats);
        return $arrCats;
    }
    private function getArrCats_pages()
    {
        if ($this->isFromWebOnly == true) {
            $arrPagesCatalog = $this->webAPI->getCatalogArray_pages();
            if (empty($arrPagesCatalog)) {
                $arrPagesCatalog = array();
            }
            return $arrPagesCatalog;
        }
        $objLayouts = new UniteCreatorLayouts();
        $arrCats = $objLayouts->getLayoutsWithCategories($this->addonType, true);
        if (GlobalsUC::$enableWebCatalog == true) {
            $arrCats = $this->webAPI->mergeCatsAndLayoutsWithCatalog($arrCats, $this->objAddonType);
        }
        return $arrCats;
    }
    private function a________OUTPUT_______()
    {
    }
    private function getHtmlCatalog($putMode = false)
    {
        if ($this->isPages == false) {
            $arrCats = $this->getArrCats_addons();
        } else {
            $arrCats = $this->getArrCats_pages();
        }
        $addClass = "";
        if ($this->isPages == true) {
            $addClass = " uc-catalog-pages";
        }
        if ($this->hasCategories == false) {
            $addClass .= " uc-param-nocats";
        }
        if (!empty($this->addonType)) {
            $addClass .= " uc-addontype-" . $this->addonType;
        }
        if ($this->isSelectMode == true) {
            $addClass .= " uc-select-mode";
        }
        $html = "";
        $html .= self::BR . self::TAB2 . "<!-- start addon catalog -->" . self::BR;
        $html .= self::TAB2 . "<div class='uc-catalog{$addClass}'>" . self::BR;
        if ($this->hasHeader == true) {
            $html .= $this->getHtmlCatalogHeader();
        }
        $html .= self::TAB2 . "<div class='uc-browser-body unite-clearfix'>" . self::BR;
        if ($this->hasCategories == true) {
            $html .= $this->getHtmlTabs($arrCats);
        }
        $html .= $this->getHtmlContent($arrCats);
        $html .= self::TAB2 . "</div>" . self::BR;
        $html .= self::TAB2 . "</div>" . self::BR;
        $html .= self::BR . self::TAB2 . "<!-- end addon catalog -->" . self::BR;
        return $html;
    }
    private function initBrowserID()
    {
        if (!empty($this->browserID)) {
            return false;
        }
        $this->browserID = "uc_addon_browser_" . $this->objAddonType->typeNameDistinct;
        $addText = "";
        $this->browserID .= $addText;
    }
    private function getHtml($putMode = false)
    {
        $this->initBrowserID();
        $htmlCatalog = $this->getHtmlCatalog();
        $html = "";
        $html .= self::TAB . "<!-- start addon browser --> " . self::BR;
        $addHtml = "";
        if (!empty($this->inputIDForUpdate)) {
            $addHtml .= " data-inputupdate=\"" . $this->inputIDForUpdate . "\"";
        }
        $addHtml .= " data-prefix=\"" . $this->prefix . "\"";
        $addonType = $this->addonType;
        $addHtml .= " data-addontype='{$addonType}'";
        if ($this->isPages) {
            $addHtml .= " data-ispages='true'";
        }
        $addClass = "";
        if ($this->objAddonType->isSVG == true) {
            $addClass .= " uc-svg-thumbs";
        }
        $id = $this->browserID;
        $id = esc_attr($id);
        $html .= self::TAB . "<div id=\"{$id}\" class=\"uc-browser-wrapper{$addClass}\" {$addHtml} style='display:none'>" . self::BR;
        if ($putMode == true) {
            echo UniteProviderFunctionsUC::escCombinedHtml($html);
            $html = "";
        }
        $html .= $htmlCatalog;
        $html .= self::TAB . "</div>";
        if ($putMode == true) {
            echo UniteProviderFunctionsUC::escCombinedHtml($html);
        } else {
            return $html;
        }
    }
    private function putHtml()
    {
        $this->getHtml(true);
    }
    public function putScripts()
    {
        UniteCreatorAdmin::onAddScriptsBrowser();
    }
    public function putBrowser($putMode = true)
    {
        if (empty($this->objAddonType)) {
            $this->objAddonType = UniteCreatorAddonType::getAddonTypeObject(GlobalsUC::ADDON_TYPE_REGULAR_ADDON);
        }
        if ($putMode == false) {
            $html = $this->getHtml();
            return $html;
        }
        $this->putHtml();
        if (self::$isPutOnce_catalogUpdate == false) {
            $this->putActivateProDialog();
            $this->putCatalogUpdateDialog();
        }
        self::$isPutOnce_catalogUpdate = true;
    }
    public function putScriptsAndBrowser($getHTML = false)
    {
        try {
            $this->putScripts();
            $html = $this->putBrowser($getHTML);
            if ($getHTML == true) {
                return $html;
            } else {
                echo UniteProviderFunctionsUC::escCombinedHtml($html);
            }
        } catch (Exception $e) {
            $message = $e->getMessage();
            $trace = "";
            if (GlobalsUC::SHOW_TRACE == true) {
                $trace = $e->getTraceAsString();
            }
            $htmlError = HelperUC::getHtmlErrorMessage($message, $trace);
            return $htmlError;
        }
    }
    private function putActivateProDialog()
    {
        $path = HelperUC::getPathViewObject("activation_view.class");
        require_once $path;
        $objActivationView = new UniteCreatorActivationView();
        $objActivationView->putHtmlPopup();
    }
    private function putCatalogUpdateDialog()
    {
        ?>
		
			<div id="uc_dialog_catalog_update" title="<?php 
        esc_html_e("Check And Update Catalog");
        ?>" class="unite-inputs" style="display:none">
				<div class="unite-dialog-inside">
					
					<span id="uc_dialog_catalog_update_loader" class="loader_text">
						<?php 
        esc_html_e("Checking Update", "unlimited-elements-for-elementor");
        ?>...
					</span>
					
					<div id="uc_dialog_catalog_update_error" class="error-message"></div>
					
					<div id="uc_dialog_catalog_update_message" class="uc-catalog-update-message"></div>
					
				</div>
				
			</div>		
		<?php 
    }
}