File "provider_params_processor.class.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/unlimited-elements-for-elementor/provider/provider_params_processor.class.php
File size: 78.44 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 UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork
{
    private static $arrPostTypeTaxCache = array();
    protected function addOtherImageData($data, $name, $imageID)
    {
        if (empty($data)) {
            $data = array();
        }
        $imageID = trim($imageID);
        if (is_numeric($imageID) == false) {
            return $data;
        }
        $post = get_post($imageID);
        if (empty($post)) {
            return $data;
        }
        $title = UniteFunctionsWPUC::getAttachmentPostTitle($post);
        $caption = $post->post_excerpt;
        $description = $post->post_content;
        $alt = UniteFunctionsWPUC::getAttachmentPostAlt($imageID);
        if (empty($alt)) {
            $alt = $title;
        }
        $data["{$name}_title"] = $title;
        $data["{$name}_alt"] = $alt;
        $data["{$name}_description"] = $description;
        $data["{$name}_caption"] = $caption;
        $data["{$name}_imageid"] = $imageID;
        return $data;
    }
    protected function addOtherImageThumbs($data, $name, $imageID, $filterSizes = null)
    {
        if (empty($data)) {
            $data = array();
        }
        $imageID = trim($imageID);
        if (is_numeric($imageID) == false) {
            return $data;
        }
        $arrSizes = UniteFunctionsWPUC::getArrThumbSizes();
        $metaData = wp_get_attachment_metadata($imageID);
        $imageWidth = UniteFunctionsUC::getVal($metaData, "width");
        $imageHeight = UniteFunctionsUC::getVal($metaData, "height");
        $urlFull = UniteFunctionsWPUC::getUrlAttachmentImage($imageID);
        $data["{$name}_width"] = $imageWidth;
        $data["{$name}_height"] = $imageHeight;
        $metaSizes = UniteFunctionsUC::getVal($metaData, "sizes");
        foreach ($arrSizes as $size => $sizeTitle) {
            if (empty($size)) {
                continue;
            }
            if ($size == "full") {
                continue;
            }
            if (!empty($filterSizes) && array_search($size, $filterSizes) === false) {
                continue;
            }
            $thumbName = $name . "_thumb_" . $size;
            if ($size == "medium") {
                $thumbName = $name . "_thumb";
            }
            $thumbName = str_replace("-", "_", $thumbName);
            if (isset($data[$thumbName])) {
                continue;
            }
            $arrSize = UniteFunctionsUC::getVal($metaSizes, $size);
            $thumbWidth = UniteFunctionsUC::getVal($arrSize, "width");
            $thumbHeight = UniteFunctionsUC::getVal($arrSize, "height");
            $thumbWidth = trim($thumbWidth);
            $urlThumb = UniteFunctionsWPUC::getUrlAttachmentImage($imageID, $size);
            if (empty($urlThumb)) {
                $urlThumb = $urlFull;
            }
            if (empty($thumbWidth) && $urlThumb == $urlFull) {
                $thumbWidth = $imageWidth;
                $thumbHeight = $imageHeight;
            }
            $data[$thumbName] = $urlThumb;
            $data[$thumbName . "_width"] = $thumbWidth;
            $data[$thumbName . "_height"] = $thumbHeight;
        }
        return $data;
    }
    public function getPostData($postID, $arrPostAdditions = null)
    {
        if (empty($postID)) {
            return null;
        }
        $post = get_post($postID);
        if (empty($post)) {
            return null;
        }
        try {
            $arrData = $this->getPostDataByObj($post, $arrPostAdditions);
            return $arrData;
        } catch (Exception $e) {
            return null;
        }
    }
    private function addCustomFieldsToTermsArray($arrTermsOutput)
    {
        if (empty($arrTermsOutput)) {
            return $arrTermsOutput;
        }
        foreach ($arrTermsOutput as $index => $term) {
            $termID = $term["id"];
            $arrCustomFields = UniteFunctionsWPUC::getTermCustomFields($termID);
            if (empty($arrCustomFields)) {
                continue;
            }
            $term = array_merge($term, $arrCustomFields);
            $arrTermsOutput[$index] = $term;
        }
        return $arrTermsOutput;
    }
    public function modifyArrTermsForOutput($arrTerms, $taxonomy = "", $addCustomFields = false)
    {
        $isWooCat = false;
        if ($taxonomy == "product_cat" && UniteCreatorWooIntegrate::isWooActive()) {
            $isWooCat = true;
        }
        if (empty($arrTerms)) {
            return array();
        }
        $arrOutput = array();
        $index = 0;
        foreach ($arrTerms as $slug => $arrTerm) {
            $item = array();
            $item["index"] = $index;
            $item["id"] = UniteFunctionsUC::getVal($arrTerm, "term_id");
            $item["slug"] = UniteFunctionsUC::getVal($arrTerm, "slug");
            $item["name"] = UniteFunctionsUC::getVal($arrTerm, "name");
            $item["description"] = UniteFunctionsUC::getVal($arrTerm, "description");
            $item["link"] = UniteFunctionsUC::getVal($arrTerm, "link");
            $item["parent_id"] = UniteFunctionsUC::getVal($arrTerm, "parent_id");
            $index++;
            $current = UniteFunctionsUC::getVal($arrTerm, "iscurrent");
            $item["iscurrent"] = $current;
            $item["class_selected"] = "";
            if ($current == true) {
                $item["class_selected"] = "\tuc-selected";
            }
            if (isset($arrTerm["count"])) {
                if ($isWooCat == true) {
                    $item["num_posts"] = $arrTerm["count"];
                    $item["num_products"] = $arrTerm["count"];
                } else {
                    $item["num_posts"] = $arrTerm["count"];
                }
            }
            if ($isWooCat == true) {
                $thumbID = get_term_meta($item["id"], 'thumbnail_id', true);
                $hasImage = !empty($thumbID);
                $item["has_image"] = $hasImage;
                if (!empty($thumbID)) {
                    $item = $this->getProcessedParamsValue_image($item, $thumbID, array("name" => "image"));
                }
            }
            $arrOutput[] = $item;
        }
        if ($addCustomFields == true) {
            $arrOutput = $this->addCustomFieldsToTermsArray($arrOutput);
        }
        return $arrOutput;
    }
    protected function z_______________POSTS____________()
    {
    }
    private function getPostListData_getIDsFromPostMeta($value, $name, $showDebugQuery)
    {
        $postIDs = UniteFunctionsUC::getVal($value, $name . "_includeby_postmeta_postid");
        $metaName = UniteFunctionsUC::getVal($value, $name . "_includeby_postmeta_metafield");
        $errorMessagePrefix = "Get post ids from meta error: ";
        if (empty($metaName)) {
            if ($showDebugQuery == true) {
                dmp($errorMessagePrefix . " no meta field selected");
            }
            return null;
        }
        if (!empty($postIDs)) {
            if (is_array($postIDs)) {
                $postID = $postIDs[0];
            } else {
                $postID = $postIDs;
            }
        } else {
            $post = get_post();
            if (empty($post)) {
                if ($showDebugQuery == true) {
                    dmp($errorMessagePrefix . " no post found");
                }
                return null;
            }
            $postID = $post->ID;
        }
        if (empty($postID)) {
            if ($showDebugQuery == true) {
                dmp($errorMessagePrefix . " no post found");
            }
            return null;
        }
        if ($showDebugQuery == true) {
            $post = get_post($postID);
            $title = $post->post_title;
            $postType = $post->post_type;
            dmp("Getting post id's from meta fields from post: <b>{$postID} - {$title} ({$postType}) </b>");
        }
        $arrPostIDs = get_post_meta($postID, $metaName, true);
        if (is_array($arrPostIDs) == false) {
            $arrPostIDs = explode(",", $arrPostIDs);
        }
        $isValidIDs = UniteFunctionsUC::isValidIDsArray($arrPostIDs);
        if (empty($arrPostIDs) || $isValidIDs == false) {
            if ($showDebugQuery) {
                $metaKeys = UniteFunctionsWPUC::getPostMetaKeys($postID, null, true);
                if (empty($metaKeys)) {
                    $metaKeys = array();
                }
                dmp($errorMessagePrefix . " no post ids found");
                if (array_search($metaName, $metaKeys) === false) {
                    dmp("maybe you intent to use one of those meta keys:");
                    dmp($metaKeys);
                }
            }
            return null;
        }
        if ($showDebugQuery == true) {
            $strPosts = implode(",", $arrPostIDs);
            dmp("Found post ids : {$strPosts}");
        }
        return $arrPostIDs;
    }
    private function getPostListData_getIDsFromPHPFunction($value, $name, $showDebugQuery)
    {
        $functionName = UniteFunctionsUC::getVal($value, $name . "_includeby_function_name");
        $errorTextPrefix = "get post id's by PHP Function error: ";
        if (empty($functionName)) {
            if ($showDebugQuery) {
                dmp($errorTextPrefix . "no functon name given");
            }
            return null;
        }
        if (is_string($functionName) == false) {
            return false;
        }
        if (strpos($functionName, "get") !== 0) {
            if ($showDebugQuery) {
                dmp($errorTextPrefix . "function <b>{$functionName}</b> should start with 'get'. like getMyPersonalPosts()");
            }
            return null;
        }
        if (function_exists($functionName) == false) {
            if ($showDebugQuery) {
                dmp($errorTextPrefix . "function <b>{$functionName}</b> not exists.");
            }
            return null;
        }
        $argument = UniteFunctionsUC::getVal($value, $name . "_includeby_function_addparam");
        $arrIDs = call_user_func_array($functionName, array($argument));
        $isValid = UniteFunctionsUC::isValidIDsArray($arrIDs);
        if ($isValid == false) {
            if ($showDebugQuery) {
                dmp($errorTextPrefix . "function <b>{$functionName}</b> returns invalid id's array.");
            }
            return null;
        }
        if ($showDebugQuery == true) {
            dmp("php function <b>{$functionName}(\"{$argument}\")</b> output: ");
            dmp($arrIDs);
        }
        return $arrIDs;
    }
    private function getPostCategoryTaxonomy($postType)
    {
        if (isset(self::$arrPostTypeTaxCache[$postType])) {
            return self::$arrPostTypeTaxCache[$postType];
        }
        $taxonomy = "category";
        if ($postType == "post" || $postType == "page") {
            self::$arrPostTypeTaxCache[$postType] = $taxonomy;
            return $taxonomy;
        }
        if ($postType == "product") {
            $taxonomy = "product_cat";
            self::$arrPostTypeTaxCache[$postType] = $taxonomy;
            return $taxonomy;
        }
        $arrTax = UniteFunctionsWPUC::getPostTypeTaxomonies($postType);
        if (empty($arrTax)) {
            self::$arrPostTypeTaxCache[$postType] = $taxonomy;
            return $taxonomy;
        }
        $taxonomy = null;
        foreach ($arrTax as $key => $name) {
            $name = strtolower($name);
            if (empty($taxonomy)) {
                $taxonomy = $key;
            }
            if ($name == "category") {
                $taxonomy = $key;
            }
        }
        if (empty($taxonomy)) {
            $taxonomy = "category";
        }
        self::$arrPostTypeTaxCache[$postType] = $taxonomy;
        return $taxonomy;
    }
    private function getPostCategoryFields($postID, $post)
    {
        $postType = $post->post_type;
        $taxonomy = $this->getPostCategoryTaxonomy($postType);
        if (empty($postID)) {
            return array();
        }
        $arrTerms = UniteFunctionsWPUC::getPostSingleTerms($postID, $taxonomy);
        if (empty($arrTerms)) {
            return array();
        }
        $arrCatsOutput = $this->modifyArrTermsForOutput($arrTerms);
        if (count($arrTerms) == 1) {
            $arrTermData = UniteFunctionsUC::getArrFirstValue($arrTerms);
        } else {
            unset($arrTerms["uncategorized"]);
            $arrTermData = UniteFunctionsUC::getArrFirstValue($arrTerms);
        }
        $catID = UniteFunctionsUC::getVal($arrTermData, "term_id");
        $arrCategory = array();
        $arrCategory["category_id"] = $catID;
        $arrCategory["category_name"] = UniteFunctionsUC::getVal($arrTermData, "name");
        $arrCategory["category_slug"] = UniteFunctionsUC::getVal($arrTermData, "slug");
        $arrCategory["category_link"] = UniteFunctionsUC::getVal($arrTermData, "link");
        $arrCategory["categories"] = $arrCatsOutput;
        return $arrCategory;
    }
    private function getPostFeaturedImageID($postID, $content)
    {
        $featuredImageID = UniteFunctionsWPUC::getFeaturedImageID($postID);
        if (empty($featuredImageID)) {
            $imageID = UniteFunctionsWPUC::getFirstImageIDFromContent($content);
            if (!empty($imageID)) {
                $featuredImageID = $imageID;
            }
        }
        return $featuredImageID;
    }
    private function getPostDataByObj($post, $arrPostAdditions = array(), $arrImageSizes = null)
    {
        try {
            $arrPost = (array) $post;
            $arrData = array();
            $postID = UniteFunctionsUC::getVal($arrPost, "ID");
            $arrData["id"] = $postID;
            $arrData["title"] = UniteFunctionsUC::getVal($arrPost, "post_title");
            $arrData["alias"] = UniteFunctionsUC::getVal($arrPost, "post_name");
            $arrData["author_id"] = UniteFunctionsUC::getVal($arrPost, "post_author");
            $content = UniteFunctionsUC::getVal($arrPost, "post_content");
            $arrData["content"] = $content;
            $arrData["link"] = UniteFunctionsWPUC::getPermalink($post);
            $intro = UniteFunctionsUC::getVal($arrPost, "post_excerpt");
            $introFull = "";
            if (empty($intro)) {
                $intro = $arrData["content"];
            }
            if (!empty($intro)) {
                $intro = strip_tags($intro);
                $introFull = $intro;
                $intro = UniteFunctionsUC::truncateString($intro, 100);
            }
            $arrData["intro"] = $intro;
            $arrData["intro_full"] = $introFull;
            $strDate = UniteFunctionsUC::getVal($arrPost, "post_date");
            $arrData["date"] = !empty($strDate) ? strtotime($strDate) : "";
            $postType = UniteFunctionsUC::getVal($arrPost, "post_type");
            if ($postType == "product") {
                $arrWooData = UniteCreatorWooIntegrate::getWooDataByType($postType, $postID);
                if (!empty($arrWooData)) {
                    $arrData = $arrData + $arrWooData;
                }
            }
            $featuredImageID = $this->getPostFeaturedImageID($postID, $content);
            if (!empty($featuredImageID)) {
                $imageArgs = array();
                $imageArgs["name"] = "image";
                if (!empty($arrImageSizes)) {
                    $sizeDesktop = UniteFunctionsUC::getVal($arrImageSizes, "desktop");
                    if (!empty($sizeDesktop)) {
                        $imageArgs["add_image_sizes"] = true;
                        $imageArgs["value_size"] = $sizeDesktop;
                    }
                }
                $arrData = $this->getProcessedParamsValue_image($arrData, $featuredImageID, $imageArgs);
            }
            if (is_array($arrPostAdditions) == false) {
                $arrPostAdditions = array();
            }
            foreach ($arrPostAdditions as $addition) {
                switch ($addition) {
                    case GlobalsProviderUC::POST_ADDITION_CUSTOMFIELDS:
                        $arrCustomFields = UniteFunctionsWPUC::getPostCustomFields($postID);
                        $arrData = array_merge($arrData, $arrCustomFields);
                        break;
                    case GlobalsProviderUC::POST_ADDITION_CATEGORY:
                        $arrCategory = $this->getPostCategoryFields($postID, $post);
                        $arrData = array_merge($arrData, $arrCategory);
                        break;
                }
            }
        } catch (Exception $e) {
            $message = $e->getMessage();
            HelperUC::addDebug("Get Post Exception: ({$postID}) " . $message);
            return null;
        }
        return $arrData;
    }
    private function getPostListData_getCustomQueryFilters($args, $value, $name, $data)
    {
        if (GlobalsUC::$isProVersion == false) {
            return $args;
        }
        $queryID = UniteFunctionsUC::getVal($value, "{$name}_queryid");
        $queryID = trim($queryID);
        if (empty($queryID)) {
            return $args;
        }
        HelperUC::addDebug("applying custom args filter: {$queryID}");
        $widgetData = $data;
        unset($widgetData[$name]);
        $args = apply_filters($queryID, $args, $widgetData);
        HelperUC::addDebug("args after custom query", $args);
        return $args;
    }
    private function getSinglePageQueryCurrentPage()
    {
        if (is_archive() == true || is_front_page() == true) {
            return false;
        }
        $page = get_query_var("page", null);
        return $page;
    }
    private function getPostListData_getPostGetFilters_pagination($args, $value, $name, $data)
    {
        $paginationType = UniteFunctionsUC::getVal($value, $name . "_pagination_type");
        if (empty($paginationType)) {
            return $args;
        }
        if (is_archive() == true || is_home() == true) {
            return $args;
        }
        $page = get_query_var("page", null);
        if (empty($page)) {
            $page = get_query_var("paged", null);
        }
        if (empty($page)) {
            return $args;
        }
        $postsPerPage = UniteFunctionsUC::getVal($args, "posts_per_page");
        if (empty($postsPerPage)) {
            return $args;
        }
        $offset = ($page - 1) * $postsPerPage;
        $args["offset"] = $offset;
        GlobalsProviderUC::$lastPostQuery_page = $page;
        return $args;
    }
    private function getPostListData_addOrderBy($filters, $value, $name, $isArgs = false)
    {
        $keyOrderBy = "orderby";
        $keyOrderDir = "orderdir";
        $keyMeta = "meta_key";
        if ($isArgs == true) {
            $keyOrderDir = "order";
        }
        $orderBy = UniteFunctionsUC::getVal($value, "{$name}_orderby");
        if ($orderBy == "default") {
            $orderBy = null;
        }
        if (!empty($orderBy)) {
            $filters[$keyOrderBy] = $orderBy;
        }
        $orderDir = UniteFunctionsUC::getVal($value, "{$name}_orderdir1");
        if ($orderDir == "default") {
            $orderDir = "";
        }
        if (!empty($orderDir)) {
            $filters[$keyOrderDir] = $orderDir;
        }
        if ($orderBy == UniteFunctionsWPUC::SORTBY_META_VALUE || $orderBy == UniteFunctionsWPUC::SORTBY_META_VALUE_NUM) {
            $filters["meta_key"] = UniteFunctionsUC::getVal($value, "{$name}_orderby_meta_key1");
        }
        return $filters;
    }
    private function getPostListData_dateQuery($value, $name)
    {
        $dateString = UniteFunctionsUC::getVal($value, "{$name}_includeby_date");
        if ($dateString == "all") {
            return array();
        }
        $metaField = UniteFunctionsUC::getVal($value, "{$name}_include_date_meta");
        $metaField = trim($metaField);
        $arrDateQuery = array();
        $arrMetaQuery = array();
        $after = "";
        $before = "";
        $year = "";
        $month = "";
        $afterMeta = null;
        $beforeMeta = null;
        switch ($dateString) {
            case "today":
                $after = "-1 day";
                break;
            case "yesterday":
                $after = "-2 day";
                break;
            case "week":
                $after = '-1 week';
                break;
            case "month":
                $after = "-1 month";
                break;
            case "three_months":
                $after = "-3 months";
                break;
            case "year":
                $after = "-1 year";
                break;
            case "this_month":
                if (!empty($metaField)) {
                    $afterMeta = date('Ym01');
                    $beforeMeta = date('Ymt');
                } else {
                    $year = $date("Y");
                    $month = date("m");
                }
                break;
            case "next_month":
                if (!empty($metaField)) {
                    $afterMeta = date('Ymd', strtotime('first day of +1 month'));
                    $beforeMeta = date('Ymd', strtotime('last day of +1 month'));
                } else {
                    $time = strtotime('first day of +1 month');
                    $year = date("Y", $time);
                    $month = date("m", $time);
                }
                break;
            case "custom":
                $before = UniteFunctionsUC::getVal($value, "{$name}_include_date_before");
                $after = UniteFunctionsUC::getVal($value, "{$name}_include_date_after");
                if (!empty($before) || !empty($after)) {
                    $arrDateQuery['inclusive'] = true;
                }
                break;
        }
        if (!empty($metaField)) {
            if (!empty($after) && empty($afterMeta)) {
                $afterMeta = date("Ymd", strtotime($after));
            }
            if (!empty($afterMeta)) {
                $arrMetaQuery[] = array('key' => $metaField, 'compare' => '>=', 'value' => $afterMeta);
            }
            if (!empty($before) && empty($beforeMeta)) {
                $beforeMeta = date("Ymd", strtotime($before));
            }
            if (!empty($beforeMeta)) {
                $arrMetaQuery[] = array('key' => $metaField, 'compare' => '<=', 'value' => $beforeMeta);
            }
        } else {
            if (!empty($before)) {
                $arrDateQuery["before"] = $before;
            }
            if (!empty($after)) {
                $arrDateQuery["after"] = $after;
            }
            if (!empty($year)) {
                $arrDateQuery["year"] = $year;
            }
            if (!empty($month)) {
                $arrDateQuery["month"] = $month;
            }
        }
        $response = array();
        if (!empty($arrDateQuery)) {
            $response["date_query"] = $arrDateQuery;
        }
        if (!empty($arrMetaQuery)) {
            $response["meta_query"] = $arrMetaQuery;
        }
        return $response;
    }
    private function getPostListData_custom($value, $name, $processType, $param, $data)
    {
        if (empty($value)) {
            return array();
        }
        if (is_array($value) == false) {
            return array();
        }
        $filters = array();
        $showDebugQuery = UniteFunctionsUC::getVal($value, "{$name}_show_query_debug");
        $showDebugQuery = UniteFunctionsUC::strToBool($showDebugQuery);
        $debugType = null;
        if ($showDebugQuery == true) {
            $debugType = UniteFunctionsUC::getVal($value, "{$name}_query_debug_type");
        }
        $source = UniteFunctionsUC::getVal($value, "{$name}_source");
        $isForWoo = UniteFunctionsUC::getVal($param, "for_woocommerce_products");
        $isForWoo = UniteFunctionsUC::strToBool($isForWoo);
        $isFilterable = false;
        $filterableOption = UniteFunctionsUC::getVal($value, $name . "_filterable");
        if ($filterableOption == "using_widget") {
            $isFilterable = true;
        }
        $isRelatedPosts = $source == "related";
        if (is_single() == false) {
            $isRelatedPosts = false;
        }
        $arrMetaQuery = array();
        $getRelatedProducts = false;
        $postType = UniteFunctionsUC::getVal($value, "{$name}_posttype", "post");
        if ($isForWoo) {
            $postType = "product";
        }
        $filters["posttype"] = $postType;
        $post = null;
        if ($isRelatedPosts == true) {
            $post = get_post();
            $postType = $post->post_type;
            $filters["posttype"] = $postType;
            if ($postType == "product") {
                $getRelatedProducts = true;
                $productID = $post->ID;
            } else {
                if ($showDebugQuery == true) {
                    dmp("Related Posts Query");
                }
                $arrTerms = UniteFunctionsWPUC::getPostTerms($post);
                $strTerms = "";
                foreach ($arrTerms as $tax => $terms) {
                    if ($tax == "product_type") {
                        continue;
                    }
                    foreach ($terms as $term) {
                        $termID = UniteFunctionsUC::getVal($term, "term_id");
                        $strTerm = "{$tax}--{$termID}";
                        if (!empty($strTerms)) {
                            $strTerms .= ",";
                        }
                        $strTerms .= $strTerm;
                    }
                }
                if (!empty($strTerms)) {
                    $filters["category"] = $strTerms;
                    $filters["category_relation"] = "OR";
                }
                $filters["exclude_current_post"] = true;
            }
        } else {
            $category = UniteFunctionsUC::getVal($value, "{$name}_category");
            if (!empty($category)) {
                $filters["category"] = UniteFunctionsUC::getVal($value, "{$name}_category");
            }
            $relation = UniteFunctionsUC::getVal($value, "{$name}_category_relation");
            if (!empty($relation) && !empty($category)) {
                $filters["category_relation"] = $relation;
            }
            $termsIncludeChildren = UniteFunctionsUC::getVal($value, "{$name}_terms_include_children");
            $termsIncludeChildren = UniteFunctionsUC::strToBool($termsIncludeChildren);
            if ($termsIncludeChildren === true) {
                $filters["category_include_children"] = true;
            }
        }
        $limit = UniteFunctionsUC::getVal($value, "{$name}_maxitems");
        $limit = (int) $limit;
        if ($limit <= 0) {
            $limit = 100;
        }
        if ($limit > 1000) {
            $limit = 1000;
        }
        $arrExcludeBy = UniteFunctionsUC::getVal($value, "{$name}_excludeby", array());
        if (is_string($arrExcludeBy)) {
            $arrExcludeBy = array($arrExcludeBy);
        }
        if (is_array($arrExcludeBy) == false) {
            $arrExcludeBy = array();
        }
        $excludeProductsOnSale = false;
        $excludeSpecificPosts = false;
        $excludeByAuthors = false;
        $arrExcludeTerms = array();
        $offset = null;
        foreach ($arrExcludeBy as $excludeBy) {
            switch ($excludeBy) {
                case "current_post":
                    $filters["exclude_current_post"] = true;
                    break;
                case "out_of_stock":
                    $arrMetaQuery[] = array('key' => '_stock_status', 'value' => 'instock');
                    $arrMetaQuery[] = array('key' => '_backorders', 'value' => 'no');
                    break;
                case "terms":
                    $arrTerms = UniteFunctionsUC::getVal($value, "{$name}_exclude_terms");
                    $arrExcludeTerms = UniteFunctionsUC::mergeArraysUnique($arrExcludeTerms, $arrTerms);
                    $termsExcludeChildren = UniteFunctionsUC::getVal($value, "{$name}_terms_exclude_children");
                    $termsExcludeChildren = UniteFunctionsUC::strToBool($termsExcludeChildren);
                    $filters["category_exclude_children"] = $termsExcludeChildren;
                    break;
                case "products_on_sale":
                    $excludeProductsOnSale = true;
                    break;
                case "specific_posts":
                    $excludeSpecificPosts = true;
                    break;
                case "author":
                    $excludeByAuthors = true;
                    break;
                case "no_image":
                    $arrMetaQuery[] = array("key" => "_thumbnail_id", "compare" => "EXISTS");
                    break;
                case "current_category":
                    if (empty($post)) {
                        $post = get_post();
                    }
                    $arrCatIDs = UniteFunctionsWPUC::getPostCategoriesIDs($post);
                    $arrExcludeTerms = UniteFunctionsUC::mergeArraysUnique($arrExcludeTerms, $arrCatIDs);
                    break;
                case "current_tag":
                    if (empty($post)) {
                        $post = get_post();
                    }
                    $arrTagsIDs = UniteFunctionsWPUC::getPostTagsIDs($post);
                    $arrExcludeTerms = UniteFunctionsUC::mergeArraysUnique($arrExcludeTerms, $arrTagsIDs);
                    break;
                case "offset":
                    $offset = UniteFunctionsUC::getVal($value, $name . "_offset");
                    $offset = (int) $offset;
                    break;
            }
        }
        if (!empty($arrExcludeTerms)) {
            $filters["exclude_category"] = $arrExcludeTerms;
        }
        $filters["limit"] = $limit;
        $filters = $this->getPostListData_addOrderBy($filters, $value, $name);
        if (GlobalsUC::$inDev == true) {
            if ($isFilterable == true) {
                $filters = $this->getPostListData_getPostGetFilters_filters($filters);
            }
        }
        HelperUC::addDebug("Post Filters", $filters);
        $args = UniteFunctionsWPUC::getPostsArgs($filters);
        if ($excludeByAuthors == true) {
            $arrExcludeByAuthors = UniteFunctionsUC::getVal($value, "{$name}_excludeby_authors");
            if (!empty($arrExcludeByAuthors)) {
                $args["author__not_in"] = $arrExcludeByAuthors;
            }
        }
        $arrPostsNotIn = array();
        if ($excludeProductsOnSale == true) {
            $arrPostsNotIn = wc_get_product_ids_on_sale();
        }
        if ($excludeSpecificPosts == true) {
            $specificPostsToExclude = UniteFunctionsUC::getVal($value, "{$name}_exclude_specific_posts");
            if (!empty($specificPostsToExclude)) {
                if (empty($arrPostsNotIn)) {
                    $arrPostsNotIn = $specificPostsToExclude;
                } else {
                    $arrPostsNotIn = array_merge($arrPostsNotIn, $specificPostsToExclude);
                }
                $arrPostsNotIn = array_unique($arrPostsNotIn);
            }
        }
        $arrIncludeBy = UniteFunctionsUC::getVal($value, "{$name}_includeby");
        if (empty($arrIncludeBy)) {
            $arrIncludeBy = array();
        }
        $args["ignore_sticky_posts"] = true;
        $getOnlySticky = false;
        $product = null;
        $arrProductsUpSells = array();
        $arrProductsCrossSells = array();
        $arrIDsOnSale = array();
        $arrRecentProducts = array();
        $arrIDsPopular = array();
        $arrIDsPHPFunction = array();
        $arrIDsPostMeta = array();
        $makePostINOrder = false;
        foreach ($arrIncludeBy as $includeby) {
            switch ($includeby) {
                case "sticky_posts":
                    $args["ignore_sticky_posts"] = false;
                    break;
                case "sticky_posts_only":
                    $getOnlySticky = true;
                    break;
                case "products_on_sale":
                    $arrIDsOnSale = wc_get_product_ids_on_sale();
                    if (empty($arrIDsOnSale)) {
                        $arrIDsOnSale = array("0");
                    }
                    break;
                case "up_sells":
                    if (empty($product)) {
                        $product = wc_get_product();
                    }
                    if (!empty($product)) {
                        $arrProductsUpSells = $product->get_upsell_ids();
                        if (empty($arrProductsUpSells)) {
                            $arrProductsUpSells = array("0");
                        }
                    }
                    break;
                case "cross_sells":
                    if (empty($product)) {
                        $product = wc_get_product();
                    }
                    if (!empty($product)) {
                        $arrProductsCrossSells = $product->get_cross_sell_ids();
                        if (empty($arrProductsUpSells)) {
                            $arrProductsCrossSells = array("0");
                        }
                    }
                    break;
                case "out_of_stock":
                    $arrMetaQuery[] = array('key' => '_stock_status', 'value' => 'instock', 'compare' => '!=');
                    break;
                case "author":
                    $arrIncludeByAuthors = UniteFunctionsUC::getVal($value, "{$name}_includeby_authors");
                    if (!empty($arrIncludeByAuthors)) {
                        $args["author__in"] = $arrIncludeByAuthors;
                    }
                    break;
                case "date":
                    $response = $this->getPostListData_dateQuery($value, $name);
                    $arrDateQuery = UniteFunctionsUC::getVal($response, "date_query");
                    if (!empty($arrDateQuery)) {
                        $args["date_query"] = $arrDateQuery;
                    }
                    $arrDateMetaQuery = UniteFunctionsUC::getVal($response, "meta_query");
                    if (!empty($arrDateMetaQuery)) {
                        $arrMetaQuery = array_merge($arrMetaQuery, $arrDateMetaQuery);
                    }
                    break;
                case "parent":
                    $parent = UniteFunctionsUC::getVal($value, "{$name}_includeby_parent");
                    if (!empty($parent)) {
                        if (is_array($parent) && count($parent) == 1) {
                            $parent = $parent[0];
                        }
                        if (is_array($parent)) {
                            $args["post_parent__in"] = $parent;
                        } else {
                            $args["post_parent"] = $parent;
                        }
                    }
                    break;
                case "recent":
                    if (isset($_COOKIE["woocommerce_recently_viewed"])) {
                        $strRecentProducts = $_COOKIE["woocommerce_recently_viewed"];
                        $strRecentProducts = trim($strRecentProducts);
                        $arrRecentProducts = explode("|", $strRecentProducts);
                    }
                    break;
                case "meta":
                    $metaKey = UniteFunctionsUC::getVal($value, "{$name}_includeby_metakey");
                    $metaCompare = UniteFunctionsUC::getVal($value, "{$name}_includeby_metacompare");
                    $metaValue = UniteFunctionsUC::getVal($value, "{$name}_includeby_metavalue");
                    if (!empty($metaKey)) {
                        $arrMetaQuery[] = array('key' => $metaKey, 'value' => $metaValue, 'compare' => $metaCompare);
                    }
                    break;
                case "most_viewed":
                    $isWPPPluginExists = UniteCreatorPluginIntegrations::isWPPopularPostsExists();
                    if ($showDebugQuery == true && $isWPPPluginExists == false) {
                        dmp("Select Most Viewed posts posible only if you install 'WordPress Popular Posts' plugin. Please install it");
                    }
                    if ($isWPPPluginExists) {
                        $objIntegrations = new UniteCreatorPluginIntegrations();
                        $wppRange = UniteFunctionsUC::getVal($value, "{$name}_includeby_mostviewed_range");
                        $wpp_args = array("post_type" => $postType, "limit" => $limit, "range" => $wppRange);
                        if (!empty($category)) {
                            $wpp_args["cat"] = $category;
                        }
                        $response = $objIntegrations->WPP_getPopularPosts($wpp_args, $showDebugQuery);
                        $arrIDsPopular = UniteFunctionsUC::getVal($response, "post_ids");
                        $debugWPP = UniteFunctionsUC::getVal($response, "debug");
                        if ($showDebugQuery == true && !empty($debugWPP)) {
                            dmp("Pupular Posts Data: ");
                            dmp($debugWPP);
                        }
                    }
                    break;
                case "php_function":
                    $arrIDsPHPFunction = $this->getPostListData_getIDsFromPHPFunction($value, $name, $showDebugQuery);
                    break;
                case "ids_from_meta":
                    $arrIDsPostMeta = $this->getPostListData_getIDsFromPostMeta($value, $name, $showDebugQuery);
                    break;
            }
        }
        $arrPostInIDs = UniteFunctionsUC::mergeArraysUnique($arrProductsCrossSells, $arrProductsUpSells, $arrRecentProducts);
        if (!empty($arrIDsOnSale)) {
            if (!empty($arrPostInIDs)) {
                $arrPostInIDs = array_intersect($arrPostInIDs, $arrIDsOnSale);
            } else {
                $arrPostInIDs = $arrIDsOnSale;
            }
        }
        if (!empty($arrIDsPopular)) {
            $makePostINOrder = true;
            $arrPostInIDs = $arrIDsPopular;
        }
        if (!empty($arrIDsPHPFunction)) {
            $arrPostInIDs = $arrIDsPHPFunction;
            $makePostINOrder = true;
        }
        if (!empty($arrIDsPostMeta)) {
            $arrPostInIDs = $arrIDsPostMeta;
            $makePostINOrder = true;
        }
        if ($makePostINOrder == true) {
            $args["orderby"] = "post__in";
            $orderDir = UniteFunctionsUC::getVal($args, "order");
            if ($orderDir == "ASC") {
                $arrIDsPopular = array_reverse($arrIDsPopular);
            }
            unset($args["order"]);
        }
        if (!empty($arrPostInIDs)) {
            $args["post__in"] = $arrPostInIDs;
        }
        if ($getRelatedProducts == true) {
            if ($showDebugQuery == true) {
                $debugText = "Debug: Getting up to {$limit} related products";
                if (!empty($arrPostsNotIn)) {
                    $strPostsNotIn = implode(",", $arrPostsNotIn);
                    $debugText = " excluding {$strPostsNotIn}";
                }
                dmp($debugText);
            }
            $arrRelatedProductIDs = wc_get_related_products($productID, $limit, $arrPostsNotIn);
            if (empty($arrRelatedProductIDs)) {
                $arrRelatedProductIDs = array("0");
            }
            $args["post__in"] = $arrRelatedProductIDs;
        }
        if (!empty($arrMetaQuery)) {
            $args["meta_query"] = $arrMetaQuery;
        }
        if (!empty($arrPostsNotIn)) {
            $args["post__not_in"] = $arrPostsNotIn;
        }
        $isWpmlExists = UniteCreatorWpmlIntegrate::isWpmlExists();
        if ($isWpmlExists) {
            $args["suppress_filters"] = false;
        }
        $arrStatuses = UniteFunctionsUC::getVal($value, "{$name}_status");
        if (empty($arrStatuses)) {
            $arrStatuses = "publish";
        }
        if (!empty($offset)) {
            $args["offset"] = $offset;
        }
        if (is_array($arrStatuses) && count($arrStatuses) == 1) {
            $arrStatuses = $arrStatuses[0];
        }
        $args["post_status"] = $arrStatuses;
        $arrStickyPosts = array();
        if ($getOnlySticky == true) {
            $arrStickyPosts = get_option("sticky_posts");
            $args["ignore_sticky_posts"] = true;
            if (!empty($arrStickyPosts) && is_array($arrStickyPosts)) {
                $args["post__in"] = $arrStickyPosts;
            } else {
                $args["post__in"] = array("0");
            }
        }
        $args = $this->getPostListData_getPostGetFilters_pagination($args, $value, $name, $data);
        $args = $this->getPostListData_getCustomQueryFilters($args, $value, $name, $data);
        HelperUC::addDebug("Posts Query", $args);
        if ($showDebugQuery == true) {
            dmp("The Query Is:");
            dmp($args);
        }
        $query = new WP_Query($args);
        if ($showDebugQuery == true && $debugType == "show_query") {
            dmp("The Query Request Is:");
            dmp($query->request);
        }
        $arrPosts = $query->posts;
        if (!$arrPosts) {
            $arrPosts = array();
        }
        if ($getOnlySticky == true && !empty($arrStickyPosts)) {
            $orderby = UniteFunctionsUC::getVal($args, "orderby");
            if (empty($orderby)) {
                $arrPosts = UniteFunctionsWPUC::orderPostsByIDs($arrPosts, $arrStickyPosts);
            }
        }
        GlobalsProviderUC::$lastPostQuery = $query;
        HelperUC::addDebug("posts found: " . count($arrPosts));
        if ($showDebugQuery == true) {
            dmp("Found Posts: " . count($arrPosts));
        }
        return $arrPosts;
    }
    private function cleanQueryArgsForDebug($args)
    {
        $argsNew = array();
        foreach ($args as $name => $value) {
            switch ($name) {
                case "ignore_sticky_posts":
                case "suppress_filters":
                    $argsNew[$name] = $value;
                    continue 2;
                    break;
            }
            if (empty($value)) {
                continue;
            }
            $argsNew[$name] = $value;
        }
        return $argsNew;
    }
    private function getPostListData_currentPosts($value, $name, $data)
    {
        HelperUC::addDebug("Getting Current Posts");
        $orderBy = UniteFunctionsUC::getVal($value, $name . "_orderby");
        $orderDir = UniteFunctionsUC::getVal($value, $name . "_orderdir1");
        $orderByMetaKey = UniteFunctionsUC::getVal($value, $name . "_orderby_meta_key1");
        if ($orderBy == "default") {
            $orderBy = null;
        }
        if ($orderDir == "default") {
            $orderDir = null;
        }
        global $wp_query;
        $currentQueryVars = $wp_query->query_vars;
        if (!empty($orderBy)) {
            $currentQueryVars["orderby"] = $orderBy;
        }
        if ($orderBy == "meta_value" || $orderBy == "meta_value_num") {
            $currentQueryVars["meta_key"] = $orderByMetaKey;
        }
        if (!empty($orderDir)) {
            $currentQueryVars["order"] = $orderDir;
        }
        $currentQueryVars = apply_filters('elementor/theme/posts_archive/query_posts/query_vars', $currentQueryVars);
        $currentQueryVars = $this->getPostListData_getCustomQueryFilters($currentQueryVars, $value, $name, $data);
        $showDebugQuery = UniteFunctionsUC::getVal($value, "{$name}_show_query_debug");
        $showDebugQuery = UniteFunctionsUC::strToBool($showDebugQuery);
        if ($showDebugQuery == true) {
            dmp("Current Posts. The Query Is:");
            $argsForDebug = $this->cleanQueryArgsForDebug($currentQueryVars);
            dmp($argsForDebug);
        }
        $query = $wp_query;
        if ($currentQueryVars !== $wp_query->query_vars) {
            HelperUC::addDebug("New Query", $currentQueryVars);
            $query = new WP_Query($currentQueryVars);
        }
        HelperUC::addDebug("Query Vars", $currentQueryVars);
        GlobalsProviderUC::$lastPostQuery = $query;
        $arrPosts = $query->posts;
        if (empty($arrPosts)) {
            $arrPosts = array();
        }
        if ($showDebugQuery == true) {
            dmp("Found Posts: " . count($arrPosts));
        }
        HelperUC::addDebug("Posts Found: " . count($arrPosts));
        return $arrPosts;
    }
    private function getPostListData_manualSelection($value, $name, $data)
    {
        $args = array();
        $postIDs = UniteFunctionsUC::getVal($value, $name . "_manual_select_post_ids");
        $showDebugQuery = UniteFunctionsUC::getVal($value, "{$name}_show_query_debug");
        $showDebugQuery = UniteFunctionsUC::strToBool($showDebugQuery);
        if (empty($postIDs)) {
            if ($showDebugQuery == true) {
                dmp("Query Debug, Manual Selection: No Posts Selected");
                HelperUC::addDebug("No Posts Selected");
            }
            return array();
        }
        $args["post__in"] = $postIDs;
        $args["ignore_sticky_posts"] = true;
        $args["post_type"] = "any";
        $args["post_status"] = "publish, private";
        $args = $this->getPostListData_addOrderBy($args, $value, $name, true);
        if ($showDebugQuery == true) {
            dmp("Manual Selection. The Query Is:");
            dmp($args);
        }
        $query = new WP_Query($args);
        $arrPosts = $query->posts;
        if (empty($arrPosts)) {
            $arrPosts = array();
        }
        $orderby = UniteFunctionsUC::getVal($args, "orderby");
        if (empty($orderby)) {
            $arrPosts = UniteFunctionsWPUC::orderPostsByIDs($arrPosts, $postIDs);
        }
        GlobalsProviderUC::$lastPostQuery = $query;
        HelperUC::addDebug("posts found: " . count($arrPosts));
        if ($showDebugQuery == true) {
            dmp("Found Posts: " . count($arrPosts));
        }
        return $arrPosts;
    }
    protected function z_______________LISTING_GALLERY____________()
    {
    }
    private function getGalleryItem_title($source, $data, $name, $post)
    {
        switch ($source) {
            case "post_title":
                $title = $post->post_title;
                break;
            case "post_excerpt":
                $title = $post->post_excerpt;
                break;
            case "post_content":
                $title = $post->post_content;
                break;
            case "image_title":
                $title = UniteFunctionsUC::getVal($data, $name . "_title");
                break;
            case "image_alt":
                $title = UniteFunctionsUC::getVal($data, $name . "_alt");
                break;
            case "image_caption":
                $title = UniteFunctionsUC::getVal($data, $name . "_caption");
                break;
            case "image_description":
                $title = UniteFunctionsUC::getVal($data, $name . "_description");
                break;
            default:
            case "image_auto":
                $title = UniteFunctionsUC::getVal($data, $name . "_title");
                if (empty($title)) {
                    $title = UniteFunctionsUC::getVal($data, $name . "_caption");
                }
                if (empty($title)) {
                    $title = UniteFunctionsUC::getVal($data, $name . "_alt");
                }
                break;
        }
        return $title;
    }
    private function getGalleryItem($id, $url = null, $arrParams = null)
    {
        $data = array();
        $arrFilters = UniteFunctionsUC::getVal($arrParams, "size_filters");
        $thumbSize = UniteFunctionsUC::getVal($arrParams, "thumb_size");
        $imageSize = UniteFunctionsUC::getVal($arrParams, "image_size");
        $titleSource = UniteFunctionsUC::getVal($arrParams, "title_source");
        $descriptionSource = UniteFunctionsUC::getVal($arrParams, "description_source");
        $post = UniteFunctionsUC::getVal($arrParams, "post");
        $name = "image";
        $param = array();
        $param["name"] = $name;
        $param["size_filters"] = $arrFilters;
        $param["no_attributes"] = true;
        if (strpos($titleSource, "post_") !== false && strpos($descriptionSource, "pots_") !== false) {
            $param["no_image_data"] = true;
        }
        $value = $id;
        if (empty($value)) {
            $value = $url;
        }
        if (empty($value)) {
            return array();
        }
        $data = $this->getProcessedParamsValue_image($data, $value, $param);
        $arrItem = array();
        $keyThumb = "{$name}_thumb_{$thumbSize}";
        $keyImage = "{$name}_thumb_{$imageSize}";
        if (!isset($data[$keyThumb])) {
            $keyThumb = $name;
        }
        if (!isset($data[$keyImage])) {
            $keyImage = $name;
        }
        $item = array();
        $item["image"] = UniteFunctionsUC::getVal($data, $keyImage);
        $item["thumb"] = UniteFunctionsUC::getVal($data, $keyThumb);
        $item["image_width"] = UniteFunctionsUC::getVal($data, $keyImage . "_width");
        $item["image_height"] = UniteFunctionsUC::getVal($data, $keyImage . "_height");
        $item["thumb_width"] = UniteFunctionsUC::getVal($data, $keyThumb . "_width");
        $item["thumb_height"] = UniteFunctionsUC::getVal($data, $keyThumb . "_height");
        $title = $this->getGalleryItem_title($titleSource, $data, $name, $post);
        $description = $this->getGalleryItem_title($descriptionSource, $data, $name, $post);
        $item["title"] = $title;
        $item["description"] = $description;
        $item["imageid"] = $id;
        return $item;
    }
    private function getGroupedData_convertForGallery($arrItems, $source, $value, $param)
    {
        $name = UniteFunctionsUC::getVal($param, "name");
        $thumbSize = UniteFunctionsUC::getVal($value, $name . "_thumb_size");
        $imageSize = UniteFunctionsUC::getVal($value, $name . "_image_size");
        $arrFilters = array();
        if (!empty($thumbSize)) {
            $arrFilters[] = $thumbSize;
        }
        if (!empty($imageSize)) {
            $arrFilters[] = $imageSize;
        }
        $params = array();
        $params["thumb_size"] = $thumbSize;
        $params["image_size"] = $imageSize;
        $params["size_filters"] = $arrFilters;
        $titleSource = null;
        $descriptionSource = null;
        switch ($source) {
            case "posts":
                $titleSource = UniteFunctionsUC::getVal($value, $name . "_title_source_post");
                $descriptionSource = UniteFunctionsUC::getVal($value, $name . "_description_source_post");
                break;
            case "gallery":
                $titleSource = UniteFunctionsUC::getVal($value, $name . "_title_source_gallery");
                $descriptionSource = UniteFunctionsUC::getVal($value, $name . "_description_source_gallery");
                break;
        }
        $params["title_source"] = $titleSource;
        $params["description_source"] = $descriptionSource;
        $output = array();
        foreach ($arrItems as $item) {
            switch ($source) {
                case "posts":
                    $postID = $item->ID;
                    $content = $item->post_content;
                    $featuredImageID = $this->getPostFeaturedImageID($postID, $content);
                    $params["post"] = $item;
                    $galleryItem = $this->getGalleryItem($featuredImageID, null, $params);
                    $galleryItem["postid"] = $postID;
                    break;
                case "gallery":
                    $id = UniteFunctionsUC::getVal($item, "id");
                    $url = UniteFunctionsUC::getVal($item, "url");
                    $galleryItem = $this->getGalleryItem($id, $url, $params);
                    break;
                case "current_post_meta":
                    $galleryItem = $this->getGalleryItem($item, null, $params);
                    break;
                default:
                    UniteFunctionsUC::throwError("group gallery error: unknown type: {$source}");
                    break;
            }
            if (!empty($galleryItem)) {
                $output[] = $galleryItem;
            }
        }
        return $output;
    }
    private function getGroupedData_getArrImageIDsFromMeta($value, $name)
    {
        if (is_single() == false) {
            return array();
        }
        $post = get_post();
        if (empty($post)) {
            return array();
        }
        $postID = $post->ID;
        $isShowMeta = UniteFunctionsUC::getVal($value, $name . "_show_metafields");
        $isShowMeta = UniteFunctionsUC::strToBool($isShowMeta);
        $arrMeta = array();
        if ($isShowMeta == true) {
            $arrMeta = UniteFunctionsWPUC::getPostMeta($postID);
            $arrMetaDebug = UniteFunctionsUC::modifyDataArrayForShow($arrMeta);
            dmp("<b>Debug Post Meta</b>, please turn it off on release");
            dmp($arrMetaDebug);
        }
        $metaKey = UniteFunctionsUC::getVal($value, $name . "_current_metakey");
        if (empty($metaKey)) {
            if ($isShowMeta == true) {
                dmp("empty meta key, please set it");
            }
            return array();
        }
        $metaValues = get_post_meta($postID, $metaKey, true);
        if (empty($metaValues)) {
            if ($isShowMeta) {
                dmp("no value for this meta key: {$metaKey}");
            }
            return array();
        }
        if (is_array($metaValues)) {
            return false;
        }
        $arrValues = explode(",", $metaValues);
        $arrIDs = array();
        foreach ($arrValues as $value) {
            $value = trim($value);
            if (is_numeric($value) == false) {
                continue;
            }
            $arrIDs[] = $value;
        }
        return $arrIDs;
    }
    private function getListingData($value, $name, $processType, $param, $data)
    {
        if ($processType != self::PROCESS_TYPE_OUTPUT && $processType != self::PROCESS_TYPE_OUTPUT_BACK) {
            return $data;
        }
        $useFor = UniteFunctionsUC::getVal($param, "use_for");
        $isForGallery = $useFor == "gallery";
        $source = UniteFunctionsUC::getVal($value, $name . "_source");
        $templateID = UniteFunctionsUC::getVal($value, $name . "_template_templateid");
        $data[$name . "_source"] = $source;
        $data[$name . "_templateid"] = $templateID;
        unset($data[$name]);
        switch ($source) {
            case "posts":
                $paramPosts = $param;
                $paramPosts["name"] = $paramPosts["name"] . "_posts";
                $paramPosts["name_listing"] = $name;
                $paramPosts["use_for_listing"] = true;
                $data = $this->getPostListData($value, $paramPosts["name"], $processType, $paramPosts, $data);
                break;
            case "terms":
                dmp("get terms");
                $data[$name . "_items"] = array();
                break;
            case "gallery":
                $data[$name . "_items"] = UniteFunctionsUC::getVal($value, $name . "_gallery");
                break;
            case "current_post_meta":
                $data[$name . "_items"] = $this->getGroupedData_getArrImageIDsFromMeta($value, $name);
                break;
            default:
                UniteFunctionsUC::throwError("Wrong listing source: {$source}");
                break;
        }
        if ($isForGallery == true) {
            $arrItems = $data[$name . "_items"];
            $data[$name . "_items"] = $this->getGroupedData_convertForGallery($arrItems, $source, $value, $param);
            return $data;
        }
        $arrItems = UniteFunctionsUC::getVal($data, $name . "_items");
        if (empty($arrItems)) {
            $arrItems = array();
        }
        foreach ($arrItems as $index => $item) {
            $numItem = $index + 1;
            switch ($source) {
                case "posts":
                    $title = $item->post_title;
                    $newItem = array("index" => $numItem, "title" => $title, "object" => $item);
                    break;
                case "terms":
                    break;
                case "gallery":
                    continue 2;
                    break;
                default:
                    $key = $index++;
                    $title = "item_{$index}";
                    break;
            }
            $arrItems[$index] = $newItem;
        }
        $data[$name . "_items"] = $arrItems;
        return $data;
    }
    private function getPostListData($value, $name, $processType, $param, $data)
    {
        if ($processType != self::PROCESS_TYPE_OUTPUT && $processType != self::PROCESS_TYPE_OUTPUT_BACK) {
            return $data;
        }
        HelperUC::addDebug("getPostList values", $value);
        HelperUC::addDebug("getPostList param", $param);
        $source = UniteFunctionsUC::getVal($value, "{$name}_source");
        $arrPosts = array();
        switch ($source) {
            case "manual":
                $arrPosts = $this->getPostListData_manualSelection($value, $name, $data);
                break;
            case "current":
                $arrPosts = $this->getPostListData_currentPosts($value, $name, $data);
                break;
            default:
                $arrPosts = $this->getPostListData_custom($value, $name, $processType, $param, $data);
                $filters = array();
                $arrPostsFromFilter = UniteProviderFunctionsUC::applyFilters("uc_filter_posts_list", $arrPosts, $value, $filters);
                if (!empty($arrPostsFromFilter)) {
                    $arrPosts = $arrPostsFromFilter;
                }
                break;
        }
        if (empty($arrPosts)) {
            $arrPosts = array();
        }
        $useCustomFields = UniteFunctionsUC::getVal($param, "use_custom_fields");
        $useCustomFields = UniteFunctionsUC::strToBool($useCustomFields);
        $useCategory = UniteFunctionsUC::getVal($param, "use_category");
        $useCategory = UniteFunctionsUC::strToBool($useCategory);
        $arrPostAdditions = HelperProviderUC::getPostDataAdditions($useCustomFields, $useCategory);
        HelperUC::addDebug("post additions", $arrPostAdditions);
        $showImageSizes = UniteFunctionsUC::getVal($param, "show_image_sizes");
        $showImageSizes = UniteFunctionsUC::strToBool($showImageSizes);
        $arrImageSizes = null;
        if ($showImageSizes == true) {
            $imageSize = UniteFunctionsUC::getVal($value, "{$name}_imagesize", "medium_large");
            $arrImageSizes["desktop"] = $imageSize;
        }
        $isFilterable = UniteFunctionsUC::getVal($value, $name . "_filterable");
        $isFilterable = $isFilterable == "using_widget";
        if ($isFilterable == true) {
            $objFilters = new UniteCreatorFiltersProcess();
            $data = $objFilters->addWidgetFilterableVariables($data);
        }
        $useForListing = UniteFunctionsUC::getVal($param, "use_for_listing");
        $useForListing = UniteFunctionsUC::strToBool($useForListing);
        if ($useForListing == true) {
            $nameListing = UniteFunctionsUC::getVal($param, "name_listing");
            $data[$nameListing . "_items"] = $arrPosts;
            return $data;
        }
        $arrData = array();
        foreach ($arrPosts as $post) {
            $arrData[] = $this->getPostDataByObj($post, $arrPostAdditions, $arrImageSizes);
        }
        $data[$name] = $arrData;
        return $data;
    }
    protected function z_______________FILTERS____________()
    {
    }
    private function getPostListData_getPostGetFilters_filters($filters)
    {
        if (GlobalsUC::$inDev == false) {
            return $filters;
        }
        $objFiltersProcess = new UniteCreatorFiltersProcess();
        $requestFilters = $objFiltersProcess->getRequestFilters();
        if (isset($requestFilters["category"])) {
            $filters["category"] = $requestFilters["category"];
        }
        return $filters;
    }
    protected function z_______________TERMS____________()
    {
    }
    protected function getWooCatsData($value, $name, $processType, $param)
    {
        $selectionType = UniteFunctionsUC::getVal($value, $name . "_type");
        $params = array();
        $taxonomy = "product_cat";
        $showDebug = UniteFunctionsUC::getVal($value, $name . "_show_query_debug");
        $showDebug = UniteFunctionsUC::strToBool($showDebug);
        if ($selectionType == "manual") {
            $includeSlugs = UniteFunctionsUC::getVal($value, $name . "_include");
            $arrTerms = UniteFunctionsWPUC::getSpecificTerms($includeSlugs, $taxonomy);
        } else {
            $orderBy = UniteFunctionsUC::getVal($value, $name . "_orderby");
            $orderDir = UniteFunctionsUC::getVal($value, $name . "_orderdir");
            $hideEmpty = UniteFunctionsUC::getVal($value, $name . "_hideempty");
            $strExclude = UniteFunctionsUC::getVal($value, $name . "_exclude");
            $strExclude = trim($strExclude);
            $excludeUncategorized = UniteFunctionsUC::getVal($value, $name . "_excludeuncat");
            $parent = UniteFunctionsUC::getVal($value, $name . "_parent");
            $parent = trim($parent);
            $includeChildren = UniteFunctionsUC::getVal($value, $name . "_children");
            $parentID = 0;
            if (!empty($parent)) {
                $term = UniteFunctionsWPUC::getTermBySlug("product_cat", $parent);
                if (!empty($term)) {
                    $parentID = $term->term_id;
                }
            }
            $isHide = false;
            if ($hideEmpty == "hide") {
                $isHide = true;
            }
            $arrExcludeSlugs = null;
            if (!empty($strExclude)) {
                $arrExcludeSlugs = explode(",", $strExclude);
            }
            if ($excludeUncategorized == "exclude") {
                if (empty($arrExcludeSlugs)) {
                    $arrExcludeSlugs = array();
                }
                $arrExcludeSlugs[] = "uncategorized";
            }
            if ($includeChildren == "not_include") {
                $params["parent"] = $parentID;
            } else {
                $params["child_of"] = $parentID;
            }
            $isWpmlExists = UniteCreatorWpmlIntegrate::isWpmlExists();
            if ($isWpmlExists) {
                $params["suppress_filters"] = false;
            }
            if (!empty($orderBy)) {
                $metaKey = "";
                if ($orderBy == "meta_value" || $orderBy == "meta_value_num") {
                    $metaKey = UniteFunctionsUC::getVal($value, $name . "_orderby_meta_key");
                    $metaKey = trim($metaKey);
                    if (empty($metaKey)) {
                        $orderBy = null;
                    } else {
                        $params["meta_key"] = $metaKey;
                    }
                }
            }
            $arrTerms = UniteFunctionsWPUC::getTerms($taxonomy, $orderBy, $orderDir, $isHide, $arrExcludeSlugs, $params);
            if ($showDebug == true) {
                dmp("The terms query is:");
                dmp(UniteFunctionsWPUC::$arrLastTermsArgs);
                dmp("num terms found: " . count($arrTerms));
            }
        }
        $arrTerms = $this->modifyArrTermsForOutput($arrTerms, $taxonomy);
        return $arrTerms;
    }
    private function addMetaQueryItem($arrMetaQuery, $metaKey, $metaValue, $metaCompare = "=")
    {
        if (empty($metaKey)) {
            return $arrMetaQuery;
        }
        if (empty($metaCompare)) {
            $metaCompare = "=";
        }
        $isValueArray = false;
        switch ($metaCompare) {
            case "IN":
            case "NOT IN":
            case "BETWEEN":
            case "NOT BETWEEN":
                $isValueArray = true;
                break;
        }
        if ($isValueArray == true) {
            $arrValues = explode(",", $metaValue);
            foreach ($arrValues as $key => $value) {
                $arrValues[$key] = trim($value);
            }
            $value = $arrValues;
        }
        $arr = array();
        $arrItem = array('key' => $metaKey, 'value' => $metaValue, 'compare' => $metaCompare);
        $arrMetaQuery[] = $arrItem;
        return $arrMetaQuery;
    }
    protected function getWPTermsData($value, $name, $processType, $param)
    {
        $postType = UniteFunctionsUC::getVal($value, $name . "_posttype");
        $taxonomy = UniteFunctionsUC::getVal($value, $name . "_taxonomy");
        $orderBy = UniteFunctionsUC::getVal($value, $name . "_orderby");
        $orderDir = UniteFunctionsUC::getVal($value, $name . "_orderdir");
        $hideEmpty = UniteFunctionsUC::getVal($value, $name . "_hideempty");
        $strExclude = UniteFunctionsUC::getVal($value, $name . "_exclude");
        $excludeWithTree = UniteFunctionsUC::getVal($value, $name . "_exclude_tree");
        $excludeWithTree = UniteFunctionsUC::strToBool($excludeWithTree);
        $showDebug = UniteFunctionsUC::getVal($value, $name . "_show_query_debug");
        $showDebug = UniteFunctionsUC::strToBool($showDebug);
        $maxTerms = UniteFunctionsUC::getVal($value, $name . "_maxterms");
        $maxTerms = (int) $maxTerms;
        if (empty($maxTerms)) {
            $maxTerms = 100;
        }
        $arrIncludeBy = UniteFunctionsUC::getVal($value, $name . "_includeby");
        if (empty($arrIncludeBy)) {
            $arrIncludeBy = array();
        }
        $arrExcludeBy = UniteFunctionsUC::getVal($value, $name . "_excludeby");
        if (empty($arrExcludeBy)) {
            $arrExcludeBy = array();
        }
        $arrExcludeIDs = array();
        if (is_string($strExclude)) {
            $strExclude = trim($strExclude);
        } else {
            $arrExcludeIDs = $strExclude;
            $strExclude = null;
        }
        $useCustomFields = UniteFunctionsUC::getVal($param, "use_custom_fields");
        $useCustomFields = UniteFunctionsUC::strToBool($useCustomFields);
        $isHide = false;
        if ($hideEmpty == "hide") {
            $isHide = true;
        }
        if (empty($postType)) {
            $postType = "post";
            $taxonomy = "category";
        }
        $arrExcludeSlugs = null;
        if (!empty($strExclude)) {
            $arrExcludeSlugs = explode(",", $strExclude);
        }
        $arrIncludeTermIDs = array();
        $includeParentID = null;
        $isDirectParent = true;
        $args = array();
        $arrMetaQuery = array();
        foreach ($arrIncludeBy as $includeby) {
            switch ($includeby) {
                case "spacific_terms":
                    $arrIncludeTermIDs = UniteFunctionsUC::getVal($value, $name . "_include_specific");
                    break;
                case "parents":
                    $includeParentID = UniteFunctionsUC::getVal($value, $name . "_include_parent");
                    if (is_array($includeParentID)) {
                        $includeParentID = $includeParentID[0];
                    }
                    $isDirectParent = UniteFunctionsUC::getVal($value, $name . "_taxonomy_include_parent_isdirect");
                    $isDirectParent = UniteFunctionsUC::strToBool($isDirectParent);
                    break;
                case "search":
                    $search = UniteFunctionsUC::getVal($value, $name . "_include_search");
                    $search = trim($search);
                    if (!empty($search)) {
                        $args["search"] = $search;
                    }
                    break;
                case "childless":
                    $args["childless"] = true;
                    break;
                case "no_parent":
                    $args["parent"] = "0";
                    break;
                case "meta":
                    $metaKey = UniteFunctionsUC::getVal($value, $name . "_include_metakey");
                    $metaValue = UniteFunctionsUC::getVal($value, $name . "_include_metavalue");
                    $metaCompare = UniteFunctionsUC::getVal($value, $name . "_include_metacompare");
                    $arrMetaQuery = $this->addMetaQueryItem($arrMetaQuery, $metaKey, $metaValue, $metaCompare);
                    break;
                default:
                    dmp("wrong include by: {$includeby}");
                    break;
            }
        }
        foreach ($arrExcludeBy as $excludeBy) {
            switch ($excludeBy) {
                case "current_term":
                    $currentTermID = UniteFunctionsWPUC::getCurrentTermID();
                    if (!empty($currentTermID)) {
                        $arrExcludeIDs[] = $currentTermID;
                    }
                    break;
                case "hide_empty":
                    $isHide = true;
                    break;
            }
        }
        if (!empty($arrMetaQuery)) {
            $args["meta_query"] = $arrMetaQuery;
        }
        $args["hide_empty"] = $isHide;
        $args["taxonomy"] = $taxonomy;
        $args["count"] = true;
        $args["number"] = $maxTerms;
        if (!empty($orderBy)) {
            $metaKey = "";
            if ($orderBy == "meta_value" || $orderBy == "meta_value_num") {
                $metaKey = UniteFunctionsUC::getVal($value, $name . "_orderby_meta_key");
                $metaKey = trim($metaKey);
                if (empty($metaKey)) {
                    $orderBy = null;
                }
            }
            if (!empty($orderBy)) {
                $args["orderby"] = $orderBy;
                if (!empty($metaKey)) {
                    $args["meta_key"] = $metaKey;
                }
                if (empty($orderDir)) {
                    $orderDir = self::ORDER_DIRECTION_ASC;
                }
                $args["order"] = $orderDir;
            }
        }
        if (!empty($arrExcludeIDs)) {
            $key = "exclude";
            if ($excludeWithTree == true) {
                $key = "exclude_tree";
            }
            $args[$key] = $arrExcludeIDs;
        }
        if (!empty($arrIncludeTermIDs)) {
            $args["include"] = $arrIncludeTermIDs;
        }
        if (!empty($includeParentID)) {
            $parentKey = "parent";
            if ($isDirectParent == false) {
                $parentKey = "child_of";
            }
            $args[$parentKey] = $includeParentID;
        }
        $isWpmlExists = UniteCreatorWpmlIntegrate::isWpmlExists();
        if ($isWpmlExists) {
            $args["suppress_filters"] = false;
        }
        HelperUC::addDebug("Terms Query", $args);
        if ($showDebug == true) {
            dmp("The terms query is:");
            dmp($args);
        }
        $arrTermsObjects = get_terms($args);
        if (!empty($arrExcludeSlugs)) {
            HelperUC::addDebug("Terms Before Filter:", $arrTermsObjects);
            HelperUC::addDebug("Exclude by:", $arrExcludeSlugs);
        }
        if (!empty($arrExcludeSlugs) && is_array($arrExcludeSlugs)) {
            $arrTermsObjects = UniteFunctionsWPUC::getTerms_filterBySlugs($arrTermsObjects, $arrExcludeSlugs);
        }
        $arrTerms = UniteFunctionsWPUC::getTermsObjectsData($arrTermsObjects, $taxonomy);
        $arrTerms = $this->modifyArrTermsForOutput($arrTerms, $taxonomy, $useCustomFields);
        return $arrTerms;
    }
    protected function z_______________USERS____________()
    {
    }
    public function modifyArrUsersForOutput($arrUsers, $getMeta, $getAvatar, $arrMetaKeys = null)
    {
        if (empty($arrUsers)) {
            return array();
        }
        $arrUsersData = array();
        foreach ($arrUsers as $objUser) {
            $arrUser = UniteFunctionsWPUC::getUserData($objUser, $getMeta, $getAvatar, $arrMetaKeys);
            $arrUsersData[] = $arrUser;
        }
        return $arrUsersData;
    }
    protected function getWPUsersData($value, $name, $processType, $param)
    {
        $showDebug = UniteFunctionsUC::getVal($value, $name . "_show_query_debug");
        $showDebug = UniteFunctionsUC::strToBool($showDebug);
        $selectType = UniteFunctionsUC::getVal($value, $name . "_type");
        $args = array();
        if ($selectType == "manual") {
            $arrIncludeUsers = UniteFunctionsUC::getVal($value, $name . "_include_authors");
            if (empty($arrIncludeUsers)) {
                $arrIncludeUsers = array("0");
            }
            $args["include"] = $arrIncludeUsers;
        } else {
            $strRoles = UniteFunctionsUC::getVal($value, $name . "_role");
            if (is_array($strRoles)) {
                $arrRoles = $strRoles;
            } else {
                $arrRoles = explode(",", $strRoles);
            }
            $arrRoles = UniteFunctionsUC::arrayToAssoc($arrRoles);
            unset($arrRoles["__all__"]);
            if (!empty($arrRoles)) {
                $arrRoles = array_values($arrRoles);
                $args["role__in"] = $arrRoles;
            }
            $arrRolesExclude = UniteFunctionsUC::getVal($value, $name . "_role_exclude");
            if (!empty($strRolesExclude) && is_string($strRolesExclude)) {
                $arrRolesExclude = explode(",", $arrRolesExclude);
            }
            if (!empty($arrRolesExclude)) {
                $args["role__not_in"] = $arrRolesExclude;
            }
            $numUsers = UniteFunctionsUC::getVal($value, $name . "_maxusers");
            $numUsers = (int) $numUsers;
            if (!empty($numUsers)) {
                $args["number"] = $numUsers;
            }
            $arrExcludeAuthors = UniteFunctionsUC::getVal($value, $name . "_exclude_authors");
            if (!empty($arrExcludeAuthors)) {
                $args["exclude"] = $arrExcludeAuthors;
            }
        }
        $orderby = UniteFunctionsUC::getVal($value, $name . "_orderby");
        if ($orderby == "default") {
            $orderby = null;
        }
        if (!empty($orderby)) {
            $args["orderby"] = $orderby;
        }
        $orderdir = UniteFunctionsUC::getVal($value, $name . "_orderdir");
        if ($orderdir == "default") {
            $orderdir = null;
        }
        if (!empty($orderdir)) {
            $args["order"] = $orderdir;
        }
        if ($showDebug == true) {
            dmp("The users query is:");
            dmp($args);
        }
        HelperUC::addDebug("Get Users Args", $args);
        $arrUsers = get_users($args);
        HelperUC::addDebug("Num Users fetched: " . count($arrUsers));
        if ($showDebug == true) {
            dmp("Num Users fetched: " . count($arrUsers));
        }
        $getMeta = UniteFunctionsUC::getVal($param, "get_meta");
        $getMeta = UniteFunctionsUC::strToBool($getMeta);
        $getAvatar = UniteFunctionsUC::getVal($param, "get_avatar");
        $getAvatar = UniteFunctionsUC::strToBool($getAvatar);
        $strAddMetaKeys = UniteFunctionsUC::getVal($value, $name . "_add_meta_keys");
        $arrMetaKeys = null;
        if (!empty($strAddMetaKeys)) {
            $arrMetaKeys = explode(",", $strAddMetaKeys);
        }
        $arrUsers = $this->modifyArrUsersForOutput($arrUsers, $getMeta, $getAvatar, $arrMetaKeys);
        return $arrUsers;
    }
    protected function z_______________MENU____________()
    {
    }
    protected function getWPMenuData($value, $name, $param, $processType)
    {
        $menuID = UniteFunctionsUC::getVal($value, $name . "_id");
        if (empty($menuID)) {
            $htmlMenu = __("menu not selected", "unlimited-elements-for-elementor");
            return $htmlMenu;
        }
        $depth = UniteFunctionsUC::getVal($value, $name . "_depth");
        $depth = (int) $depth;
        $args = array();
        $args["echo"] = false;
        $args["container"] = "";
        if (!empty($depth) && is_numeric($depth)) {
            $args["depth"] = $depth;
        }
        $args["menu"] = $menuID;
        $arrKeysToAdd = array("menu_class", "before", "after");
        foreach ($arrKeysToAdd as $key) {
            $value = UniteFunctionsUC::getVal($param, $key);
            if (!empty($value)) {
                $args[$key] = $value;
            }
        }
        HelperUC::addDebug("menu arguments", $args);
        $htmlMenu = wp_nav_menu($args);
        return $htmlMenu;
    }
    private function getElementorTemplateData($value, $name, $processType, $param, $data)
    {
        $templateID = UniteFunctionsUC::getVal($value, $name . "_templateid");
        if (empty($templateID)) {
            return $data;
        }
        $shortcode = "[elementor-template id=\"{$templateID}\"]";
        $data[$name] = $shortcode;
        $data[$name . "_templateid"] = $templateID;
        return $data;
    }
    protected function z_______________GET_PARAMS____________()
    {
    }
    protected function getProcessedParamData($data, $value, $param, $processType)
    {
        $type = UniteFunctionsUC::getVal($param, "type");
        $name = UniteFunctionsUC::getVal($param, "name");
        switch ($type) {
            case UniteCreatorDialogParam::PARAM_POSTS_LIST:
                $data = $this->getPostListData($value, $name, $processType, $param, $data);
                break;
            case UniteCreatorDialogParam::PARAM_LISTING:
                $data = $this->getListingData($value, $name, $processType, $param, $data);
                break;
            case UniteCreatorDialogParam::PARAM_POST_TERMS:
                $data[$name] = $this->getWPTermsData($value, $name, $processType, $param);
                break;
            case UniteCreatorDialogParam::PARAM_WOO_CATS:
                $data[$name] = $this->getWooCatsData($value, $name, $processType, $param);
                break;
            case UniteCreatorDialogParam::PARAM_USERS:
                $data[$name] = $this->getWPUsersData($value, $name, $processType, $param);
                break;
            case UniteCreatorDialogParam::PARAM_TEMPLATE:
                $data = $this->getElementorTemplateData($value, $name, $processType, $param, $data);
                break;
            default:
                $data = parent::getProcessedParamData($data, $value, $param, $processType);
                break;
        }
        return $data;
    }
    public function setExtraParamsValues($paramType, $param, $name, $arrValues)
    {
        switch ($paramType) {
            case UniteCreatorDialogParam::PARAM_IMAGE:
                $isAddSizes = UniteFunctionsUC::getVal($param, "add_image_sizes");
                $isAddSizes = UniteFunctionsUC::strToBool($isAddSizes);
                if ($isAddSizes == true) {
                    $param["value_size"] = UniteFunctionsUC::getVal($arrValues, $name . "_size");
                }
                break;
        }
        return $param;
    }
    public function getSpecialParamValue($paramType, $paramName, $value, $arrValues)
    {
        switch ($paramType) {
            case UniteCreatorDialogParam::PARAM_POSTS_LIST:
            case UniteCreatorDialogParam::PARAM_LISTING:
            case UniteCreatorDialogParam::PARAM_POST_TERMS:
            case UniteCreatorDialogParam::PARAM_WOO_CATS:
            case UniteCreatorDialogParam::PARAM_USERS:
            case UniteCreatorDialogParam::PARAM_CONTENT:
            case UniteCreatorDialogParam::PARAM_BACKGROUND:
            case UniteCreatorDialogParam::PARAM_MENU:
            case UniteCreatorDialogParam::PARAM_INSTAGRAM:
            case UniteCreatorDialogParam::PARAM_TEMPLATE:
                $paramArrValues = array();
                $paramArrValues[$paramName] = $value;
                foreach ($arrValues as $key => $value) {
                    if (strpos($key, $paramName . "_") === 0) {
                        $paramArrValues[$key] = $value;
                    }
                }
                $value = $paramArrValues;
                break;
        }
        return $value;
    }
}