oont-contents/plugins/webappick-product-feed-for-woocommerce/V5/Common/DropDownOptions.php
2025-03-31 21:42:48 +02:00

1261 lines
41 KiB
PHP

<?php
namespace CTXFeed\V5\Common;
use CTXFeed\V5\API\RestController;
use CTXFeed\V5\Merchant\MerchantAttributesFactory;
use CTXFeed\V5\Merchant\TemplateConfig;
use CTXFeed\V5\Product\ProductAttributeFactory;
use CTXFeed\V5\Query\QueryFactory;
use CTXFeed\V5\Query\WCQuery;
use CTXFeed\V5\Query\WPQuery;
use CTXFeed\V5\Utility\Cache;
use CTXFeed\V5\Utility\Config;
use CTXFeed\V5\Utility\DropDown;
use WOOMC\DAO\Factory;
/**
* @package CTXFeed
* @subpackage CTXFeed\V5\Common\DropDownOptions
*/
//TODO: Most of the functions didn't applied filter. Need to apply filter.
class DropDownOptions {
/**
* Cache keys to save without html.
* @var array
*/
private static $cache_keys = [
'woo_feed_product_attribute_dropdown_array'
];
/**
* Product Category
*/
private static $cats = [];
/**
* The single instance of the class
*
* @var DropDownOptions
*
*/
protected static $_instance = null;
/**
* Main DropDownOptions Instance.
*
* Ensures only one instance of DropDownOptions is loaded or can be loaded.
*
* @return DropDownOptions Main instance
*/
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Country List
*
* @param bool $dropdown
* @param string $selected
*
* @return array
* @since 4.3.16
* @author Nazrul Islam Nayan
* @updated 15-07-2022
*/
public static function feed_country( $selected = '', $dropdown = true ) {
$countries = array(
'AF' => 'Afghanistan',
'AX' => 'Aland Islands',
'AL' => 'Albania',
'DZ' => 'Algeria',
'AS' => 'American Samoa',
'AD' => 'Andorra',
'AO' => 'Angola',
'AI' => 'Anguilla',
'AQ' => 'Antarctica',
'AG' => 'Antigua and Barbuda',
'AR' => 'Argentina',
'AM' => 'Armenia',
'AW' => 'Aruba',
'AU' => 'Australia',
'AT' => 'Austria',
'AZ' => 'Azerbaijan',
'BS' => 'Bahamas the',
'BH' => 'Bahrain',
'BD' => 'Bangladesh',
'BB' => 'Barbados',
'BY' => 'Belarus',
'BE' => 'Belgium',
'BZ' => 'Belize',
'BJ' => 'Benin',
'BM' => 'Bermuda',
'BT' => 'Bhutan',
'BO' => 'Bolivia',
'BA' => 'Bosnia and Herzegovina',
'BW' => 'Botswana',
'BV' => 'Bouvet Island (Bouvetoya)',
'BR' => 'Brazil',
'IO' => 'British Indian Ocean Territory (Chagos Archipelago)',
'VG' => 'British Virgin Islands',
'BN' => 'Brunei Darussalam',
'BG' => 'Bulgaria',
'BF' => 'Burkina Faso',
'BI' => 'Burundi',
'KH' => 'Cambodia',
'CM' => 'Cameroon',
'CA' => 'Canada',
'CV' => 'Cape Verde',
'KY' => 'Cayman Islands',
'CF' => 'Central African Republic',
'TD' => 'Chad',
'CL' => 'Chile',
'CN' => 'China',
'CX' => 'Christmas Island',
'CC' => 'Cocos (Keeling) Islands',
'CO' => 'Colombia',
'KM' => 'Comoros the',
'CD' => 'Congo',
'CG' => 'Congo the',
'CK' => 'Cook Islands',
'CR' => 'Costa Rica',
'CI' => 'Cote d\'Ivoire',
'HR' => 'Croatia',
'CU' => 'Cuba',
'CY' => 'Cyprus',
'CZ' => 'Czech Republic',
'DK' => 'Denmark',
'DJ' => 'Djibouti',
'DM' => 'Dominica',
'DO' => 'Dominican Republic',
'EC' => 'Ecuador',
'EG' => 'Egypt',
'SV' => 'El Salvador',
'GQ' => 'Equatorial Guinea',
'ER' => 'Eritrea',
'EE' => 'Estonia',
'ET' => 'Ethiopia',
'FO' => 'Faroe Islands',
'FK' => 'Falkland Islands (Malvinas)',
'FJ' => 'Fiji the Fiji Islands',
'FI' => 'Finland',
'FR' => 'France',
'GF' => 'French Guiana',
'PF' => 'French Polynesia',
'TF' => 'French Southern Territories',
'GA' => 'Gabon',
'GM' => 'Gambia the',
'GE' => 'Georgia',
'DE' => 'Germany',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
'GR' => 'Greece',
'GL' => 'Greenland',
'GD' => 'Grenada',
'GP' => 'Guadeloupe',
'GU' => 'Guam',
'GT' => 'Guatemala',
'GG' => 'Guernsey',
'GN' => 'Guinea',
'GW' => 'Guinea-Bissau',
'GY' => 'Guyana',
'HT' => 'Haiti',
'HM' => 'Heard Island and McDonald Islands',
'VA' => 'Holy See (Vatican City State)',
'HN' => 'Honduras',
'HK' => 'Hong Kong',
'HU' => 'Hungary',
'IS' => 'Iceland',
'IN' => 'India',
'ID' => 'Indonesia',
'IR' => 'Iran',
'IQ' => 'Iraq',
'IE' => 'Ireland',
'IM' => 'Isle of Man',
'IL' => 'Israel',
'IT' => 'Italy',
'JM' => 'Jamaica',
'JP' => 'Japan',
'JE' => 'Jersey',
'JO' => 'Jordan',
'KZ' => 'Kazakhstan',
'KE' => 'Kenya',
'KI' => 'Kiribati',
'KP' => 'Korea',
'KR' => 'Korea',
'KW' => 'Kuwait',
'KG' => 'Kyrgyz Republic',
'LA' => 'Lao',
'LV' => 'Latvia',
'LB' => 'Lebanon',
'LS' => 'Lesotho',
'LR' => 'Liberia',
'LY' => 'Libyan Arab Jamahiriya',
'LI' => 'Liechtenstein',
'LT' => 'Lithuania',
'LU' => 'Luxembourg',
'MO' => 'Macao',
'MK' => 'Macedonia',
'MG' => 'Madagascar',
'MW' => 'Malawi',
'MY' => 'Malaysia',
'MV' => 'Maldives',
'ML' => 'Mali',
'MT' => 'Malta',
'MH' => 'Marshall Islands',
'MQ' => 'Martinique',
'MR' => 'Mauritania',
'MU' => 'Mauritius',
'YT' => 'Mayotte',
'MX' => 'Mexico',
'FM' => 'Micronesia',
'MD' => 'Moldova',
'MC' => 'Monaco',
'MN' => 'Mongolia',
'ME' => 'Montenegro',
'MS' => 'Montserrat',
'MA' => 'Morocco',
'MZ' => 'Mozambique',
'MM' => 'Myanmar',
'NA' => 'Namibia',
'NR' => 'Nauru',
'NP' => 'Nepal',
'AN' => 'Netherlands Antilles',
'NL' => 'Netherlands',
'NC' => 'New Caledonia',
'NZ' => 'New Zealand',
'NI' => 'Nicaragua',
'NE' => 'Niger',
'NG' => 'Nigeria',
'NU' => 'Niue',
'NF' => 'Norfolk Island',
'MP' => 'Northern Mariana Islands',
'NO' => 'Norway',
'OM' => 'Oman',
'PK' => 'Pakistan',
'PW' => 'Palau',
'PS' => 'Palestinian Territory',
'PA' => 'Panama',
'PG' => 'Papua New Guinea',
'PY' => 'Paraguay',
'PE' => 'Peru',
'PH' => 'Philippines',
'PN' => 'Pitcairn Islands',
'PL' => 'Poland',
'PT' => 'Portugal, Portuguese Republic',
'PR' => 'Puerto Rico',
'QA' => 'Qatar',
'RE' => 'Reunion',
'RO' => 'Romania',
'RU' => 'Russian Federation',
'RW' => 'Rwanda',
'BL' => 'Saint Barthelemy',
'SH' => 'Saint Helena',
'KN' => 'Saint Kitts and Nevis',
'LC' => 'Saint Lucia',
'MF' => 'Saint Martin',
'PM' => 'Saint Pierre and Miquelon',
'VC' => 'Saint Vincent and the Grenadines',
'WS' => 'Samoa',
'SM' => 'San Marino',
'ST' => 'Sao Tome and Principe',
'SA' => 'Saudi Arabia',
'SN' => 'Senegal',
'RS' => 'Serbia',
'SC' => 'Seychelles',
'SL' => 'Sierra Leone',
'SG' => 'Singapore',
'SK' => 'Slovakia (Slovak Republic)',
'SI' => 'Slovenia',
'SB' => 'Solomon Islands',
'SO' => 'Somalia, Somali Republic',
'ZA' => 'South Africa',
'GS' => 'South Georgia and the South Sandwich Islands',
'ES' => 'Spain',
'LK' => 'Sri Lanka',
'SD' => 'Sudan',
'SR' => 'Suriname',
'SJ' => 'Svalbard & Jan Mayen Islands',
'SZ' => 'Swaziland',
'SE' => 'Sweden',
'CH' => 'Switzerland',
'SY' => 'Syrian Arab Republic',
'TW' => 'Taiwan',
'TJ' => 'Tajikistan',
'TZ' => 'Tanzania',
'TH' => 'Thailand',
'TL' => 'Timor-Leste',
'TG' => 'Togo',
'TK' => 'Tokelau',
'TO' => 'Tonga',
'TT' => 'Trinidad and Tobago',
'TN' => 'Tunisia',
'TR' => 'Turkey',
'TM' => 'Turkmenistan',
'TC' => 'Turks and Caicos Islands',
'TV' => 'Tuvalu',
'UG' => 'Uganda',
'UA' => 'Ukraine',
'AE' => 'United Arab Emirates',
'GB' => 'United Kingdom',
'US' => 'United States',
'UM' => 'United States Minor Outlying Islands',
'VI' => 'United States Virgin Islands',
'UY' => 'Uruguay, Eastern Republic of',
'UZ' => 'Uzbekistan',
'VU' => 'Vanuatu',
'VE' => 'Venezuela',
'VN' => 'Vietnam',
'WF' => 'Wallis and Futuna',
'EH' => 'Western Sahara',
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
);
return $countries;
//return self::Create_DropDown_IF_Needed( $countries, $dropdown, $selected );
}
/**
* Feed Template List.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function provider( $selected = '', $dropdown = true ) {
$merchant = [
1 => [
'optionGroup' => 'Custom Templates',
'options' => [
'custom' => esc_html__( 'Custom Template 1', 'woo-feed' ),
'custom2' => esc_html__( 'Custom Template 2 (XML)', 'woo-feed' ),
]
],
2 => [
'optionGroup' => 'Popular Templates',
'options' => [
'google' => esc_html__( 'Google Shopping', 'woo-feed' ),
'google_local' => esc_html__( 'Google Local Inventory Ads', 'woo-feed' ),
'google_local_inventory' => esc_html__( 'Google Local Product Inventory', 'woo-feed' ),
'googlereview' => esc_html__( 'Google Product Review', 'woo-feed' ),
'google_shopping_action' => esc_html__( 'Google Shopping Action', 'woo-feed' ),
'google_promotions' => esc_html__( 'Google Promotions', 'woo-feed' ),
'google_dynamic_ads' => esc_html__( 'Google Dynamic Search Ads', 'woo-feed' ),
'adwords' => esc_html__( 'Google Ads', 'woo-feed' ),
'adwords_local_product' => esc_html__( 'Google Ads Local Product', 'woo-feed' ),
'facebook' => esc_html__( 'Facebook Catalog / Instagram', 'woo-feed' ),
'pinterest' => esc_html__( 'Pinterest Catalog', 'woo-feed' ),
'pinterest_rss' => esc_html__( 'Pinterest RSS Board', 'woo-feed' ),
'bing' => esc_html__( 'Bing Shopping', 'woo-feed' ),
'bing_local_inventory' => esc_html__( 'Bing Local Inventory', 'woo-feed' ),
'snapchat' => esc_html__( 'Snapchat', 'woo-feed' ),
'tiktok' => esc_html__( 'TikTok Ads Manager', 'woo-feed' ),
'idealo' => esc_html__( 'Idealo', 'woo-feed' ),
'pricespy' => esc_html__( 'PriceSpy', 'woo-feed' ),
'pricerunner' => esc_html__( 'Price Runner', 'woo-feed' ),
'yandex_csv' => esc_html__( 'Yandex (CSV)', 'woo-feed' ),
'yandex_xml' => esc_html__( 'Yandex (XML)', 'woo-feed' ),
]
],
3 => [
'optionGroup' => 'Other Templates',
'options' => [
'adform' => esc_html__( 'AdForm', 'woo-feed' ),
'adroll' => esc_html__( 'AdRoll', 'woo-feed' ),
'avantlink' => esc_html__( 'Avantlink', 'woo-feed' ),
'become' => esc_html__( 'Become', 'woo-feed' ),
'beslist.nl' => esc_html__( 'Beslist.nl', 'woo-feed' ),
'bestprice' => esc_html__( 'Bestprice', 'woo-feed' ),
'billiger.de' => esc_html__( 'Billiger.de', 'woo-feed' ),
'bol' => esc_html__( 'Bol.com', 'woo-feed' ),
'bonanza' => esc_html__( 'Bonanza', 'woo-feed' ),
'catchdotcom' => esc_html__( 'Catch.com.au', 'woo-feed' ),
'cdiscount.fr' => esc_html__( 'CDiscount.fr', 'woo-feed' ),
'comparer.be' => esc_html__( 'Comparer.be', 'woo-feed' ),
'connexity' => esc_html__( 'Connexity', 'woo-feed' ),
'criteo' => esc_html__( 'Criteo', 'woo-feed' ),
'crowdfox' => esc_html__( 'Crowdfox', 'woo-feed' ),
'daisycon' => esc_html__( 'Daisycon Advertiser (General)', 'woo-feed' ),
'daisycon_automotive' => esc_html__( 'Daisycon Advertiser (Automotive)', 'woo-feed' ),
'daisycon_books' => esc_html__( 'Daisycon Advertiser (Books)', 'woo-feed' ),
'daisycon_cosmetics' => esc_html__( 'Daisycon Advertiser (Cosmetics)', 'woo-feed' ),
'daisycon_daily_offers' => esc_html__( 'Daisycon Advertiser (Daily Offers)', 'woo-feed' ),
'daisycon_electronics' => esc_html__( 'Daisycon Advertiser (Electronics)', 'woo-feed' ),
'daisycon_fashion' => esc_html__( 'Daisycon Advertiser (Fashion)', 'woo-feed' ),
'daisycon_food_drinks' => esc_html__( 'Daisycon Advertiser (Food & Drinks)', 'woo-feed' ),
'daisycon_holidays_accommodations_and_transport' => esc_html__( 'Daisycon Advertiser (Holidays: Accommodations and transport)', 'woo-feed' ),
'daisycon_holidays_accommodations' => esc_html__( 'Daisycon Advertiser (Holidays: Accommodations)', 'woo-feed' ),
'daisycon_holidays_trips' => esc_html__( 'Daisycon Advertiser (Holidays: Trips)', 'woo-feed' ),
'daisycon_home_garden' => esc_html__( 'Daisycon Advertiser (Home & Garden)', 'woo-feed' ),
'daisycon_housing' => esc_html__( 'Daisycon Advertiser (Housing)', 'woo-feed' ),
'daisycon_magazines' => esc_html__( 'Daisycon Advertiser (Magazines)', 'woo-feed' ),
'daisycon_studies_trainings' => esc_html__( 'Daisycon Advertiser (Studies & Trainings)', 'woo-feed' ),
'daisycon_telecom_accessories' => esc_html__( 'Daisycon Advertiser (Telecom: Accessories)', 'woo-feed' ),
'daisycon_telecom_all_in_one' => esc_html__( 'Daisycon Advertiser (Telecom: All-in-one)', 'woo-feed' ),
'daisycon_telecom_gsm_subscription' => esc_html__( 'Daisycon Advertiser (Telecom: GSM + Subscription)', 'woo-feed' ),
'daisycon_telecom_gsm' => esc_html__( 'Daisycon Advertiser (Telecom: GSM only)', 'woo-feed' ),
'daisycon_telecom_sim' => esc_html__( 'Daisycon Advertiser (Telecom: Sim only)', 'woo-feed' ),
'daisycon_work_jobs' => esc_html__( 'Daisycon Advertiser (Work & Jobs)', 'woo-feed' ),
'dooyoo' => esc_html__( 'Dooyoo', 'woo-feed' ),
'ecommerceit' => esc_html__( 'Ecommerce.it', 'woo-feed' ),
'etsy' => esc_html__( 'Etsy', 'woo-feed' ),
'fruugo' => esc_html__( 'Fruugo', 'woo-feed' ),
'fashionchick' => esc_html__( 'Fashionchick.nl', 'woo-feed' ),
'fruugo.au' => esc_html__( 'Fruugoaustralia.com', 'woo-feed' ),
'fyndiq.se' => esc_html__( 'Fyndiq.se', 'woo-feed' ),
'goedgeplaatst' => esc_html__( 'GoedGeplaatst.nl', 'woo-feed' ),
'heureka.sk' => esc_html__( 'Heureka.sk', 'woo-feed' ),
'hintaseuranta.fi' => esc_html__( 'Hintaseuranta.fi', 'woo-feed' ),
'incurvy' => esc_html__( 'Incurvy', 'woo-feed' ),
'jet' => esc_html__( 'Jet.com', 'woo-feed' ),
'kelkoo' => esc_html__( 'Kelkoo', 'woo-feed' ),
'kieskeurig.nl' => esc_html__( 'Kieskeurig.nl', 'woo-feed' ),
'kijiji.ca' => esc_html__( 'Kijiji.ca', 'woo-feed' ),
'leguide' => esc_html__( 'LeGuide', 'woo-feed' ),
'marktplaats.nl' => esc_html__( 'Marktplaats.nl', 'woo-feed' ),
'miinto.de' => esc_html__( 'Miinto.de', 'woo-feed' ),
'miinto.nl' => esc_html__( 'Miinto.nl', 'woo-feed' ),
'modalova' => esc_html__( 'Modalova', 'woo-feed' ),
'modina.de' => esc_html__( 'Modina.de', 'woo-feed' ),
'moebel.de' => esc_html__( 'Moebel.de', 'woo-feed' ),
'myshopping.com.au' => esc_html__( 'Myshopping.com.au', 'woo-feed' ),
'nextad' => esc_html__( 'TheNextAd', 'woo-feed' ),
'nextag' => esc_html__( 'Nextag', 'woo-feed' ),
'polyvore' => esc_html__( 'Polyvore', 'woo-feed' ),
'pricegrabber' => esc_html__( 'Price Grabber', 'woo-feed' ),
'prisjakt' => esc_html__( 'Prisjakt', 'woo-feed' ),
'profit_share' => esc_html__( 'Profit Share', 'woo-feed' ),
'rakuten.de' => esc_html__( 'Rakuten.de', 'woo-feed' ),
'real' => esc_html__( 'Real', 'woo-feed' ),
'shareasale' => esc_html__( 'ShareASale', 'woo-feed' ),
'shopalike.fr' => esc_html__( 'Shopalike.fr', 'woo-feed' ),
'shopbot' => esc_html__( 'Shopbot', 'woo-feed' ),
'shopmania' => esc_html__( 'Shopmania', 'woo-feed' ),
'shopping' => esc_html__( 'Shopping.com', 'woo-feed' ),
'shopflix' => esc_html__( 'Shopflix (WellComm)', 'woo-feed' ),
'shopzilla' => esc_html__( 'Shopzilla', 'woo-feed' ),
'skinflint.co.uk' => esc_html__( 'SkinFlint.co.uk', 'woo-feed' ),
'skroutz' => esc_html__( 'Skroutz.gr', 'woo-feed' ),
'smartly.io' => esc_html__( 'Smartly.io', 'woo-feed' ),
'spartoo.fi' => esc_html__( 'Spartoo.fi', 'woo-feed' ),
'shopee' => esc_html__( 'Shopee', 'woo-feed' ),
'stylight.com' => esc_html__( 'Stylight.com', 'woo-feed' ),
'trovaprezzi' => esc_html__( 'Trovaprezzi.it', 'woo-feed' ),
'twenga' => esc_html__( 'Twenga', 'woo-feed' ),
'tweaker_xml' => esc_html__( 'Tweakers (XML)', 'woo-feed' ),
'tweaker_csv' => esc_html__( 'Tweakers (CSV)', 'woo-feed' ),
'vertaa.fi' => esc_html__( 'Vertaa.fi', 'woo-feed' ),
'walmart' => esc_html__( 'Walmart', 'woo-feed' ),
'webmarchand' => esc_html__( 'Webmarchand', 'woo-feed' ),
'wine_searcher' => esc_html__( 'Wine Searcher', 'woo-feed' ),
'wish' => esc_html__( 'Wish.com', 'woo-feed' ),
'yahoo_nfa' => esc_html__( 'Yahoo NFA', 'woo-feed' ),
'zap.co.il' => esc_html__( 'Zap.co.il', 'woo-feed' ),
'zbozi.cz' => esc_html__( 'Zbozi.cz', 'woo-feed' ),
'zalando' => esc_html__( 'Zalando', 'woo-feed' ),
'admarkt' => esc_html__( 'Admarkt(marktplaats)', 'woo-feed' ),
'glami' => esc_html__( 'GLAMI', 'woo-feed' ),
]
],
];
return $merchant;
//return self::Create_DropDown_IF_Needed( $merchant, $dropdown, $selected );
}
/**
* Feed File Type List.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function file_types( $selected = '', $dropdown = true ) {
$types = array(
'xml' => 'XML',
'csv' => 'CSV',
'tsv' => 'TSV',
'xls' => 'XLS',
'xlsx' => 'XLSX',
'txt' => 'TXT',
'json' => 'JSON',
);
return $types;
//return self::Create_DropDown_IF_Needed( $types, $dropdown, $selected );
}
/**
* Variation Options.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function include_variation( $selected = '', $dropdown = true ) {
$variation_options = array(
'y' => esc_html__( 'All Variations', 'woo-feed' ),
'n' => esc_html__( 'Variable Products (Parent)', 'woo-feed' ),
'default' => esc_html__( 'Default Variation', 'woo-feed' ),
'cheap' => esc_html__( 'Cheapest Variation', 'woo-feed' ),
'expensive' => esc_html__( 'Expensive Variation', 'woo-feed' ),
'first' => esc_html__( 'First Variation', 'woo-feed' ),
'last' => esc_html__( 'Last Variation', 'woo-feed' ),
'both' => esc_html__( 'Variable + Variations', 'woo-feed' ),
);
return $variation_options;
//return self::Create_DropDown_IF_Needed( $variation_options, $dropdown, $selected );
}
/**
* Variation Price Options.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function variable_product_price( $selected = '', $dropdown = true ) {
$variation_price = array(
'first' => esc_html__( 'First Variation Price', 'woo-feed' ),
'max' => esc_html__( 'Max Variation Price', 'woo-feed' ),
'min' => esc_html__( 'Min Variation Price', 'woo-feed' ),
);
return $variation_price;
//return self::Create_DropDown_IF_Needed( $variation_price, $dropdown, $selected );
}
/**
* Variation Quantity Options.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function variable_product_quantity( $selected = '', $dropdown = true ) {
$variation_quantity = array(
'first' => esc_html__( 'First Variation Quantity', 'woo-feed' ),
'max' => esc_html__( 'Max Variation Quantity', 'woo-feed' ),
'min' => esc_html__( 'Min Variation Quantity', 'woo-feed' ),
'sum' => esc_html__( 'Sum of Variation Quantity', 'woo-feed' ),
);
return $variation_quantity;
//return self::Create_DropDown_IF_Needed( $variation_quantity, $dropdown, $selected );
}
/**
* CSV Feed Delimiters.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function delimiters( $selected = '', $dropdown = true ) {
$delimiters = [
',' => 'Comma',
':' => 'Colon',
' ' => 'Space',
'|' => 'Pipe',
';' => 'Semi Colon',
"\t" => 'TAB',
];
return $delimiters;
//return self::Create_DropDown_IF_Needed( $delimiters, $dropdown, $selected );
}
/**
* CSV Feed Enclosure.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function enclosure( $selected = '', $dropdown = true ) {
$enclosure = [
'double' => '"',
'single' => '\'',
' ' => 'None',
];
return $enclosure;
//return self::Create_DropDown_IF_Needed( $enclosure, $dropdown, $selected );
}
/**
* Get Merchant attribute dropdown.
*
* @param $attributes
* @param string $selected
* @param bool $dropdown
*
* @return string|false
*/
public static function merchant_attributes( $attributes, $selected = '', $dropdown = true ) {
$cache_key = 'ctx_merchant_attribute_dropdown_' . $selected;
return $attributes;
//return self::Create_DropDown_IF_Needed( $attributes, $dropdown, $selected, $cache_key, true );
}
/**
* Get Merchant attribute from API.
*
* @param $selected
* @param $dropdown
*
* @return array|false|mixed|string|string[]
*/
public static function mattributes( $selected = '', $dropdown = true ) {
$merchantAttributes = MerchantAttributesFactory::get();
return $merchantAttributes;
}
/**
* Product Attributes.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function product_attributes( $selected = '', $dropdown = true, $cache_key = 'woo_feed_product_attribute_dropdown' ) {
$attributes = ProductAttributeFactory::getAttributes();
return $attributes;
//return self::Create_DropDown_IF_Needed( $attributes, $dropdown, $selected, $cache_key, true );
}
/**
* Comparing Condition. Used on Dynamic Attributes and
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function conditions( $selected = '', $dropdown = true ) {
$conditions = array(
// '' => __( 'Select Condition' ),
'==' => __( 'is / equal', 'woo-feed' ),
'!=' => __( 'is not / not equal', 'woo-feed' ),
'>=' => __( 'equals or greater than', 'woo-feed' ),
'>' => __( 'greater than', 'woo-feed' ),
'<=' => __( 'equals or less than', 'woo-feed' ),
'<' => __( 'less than', 'woo-feed' ),
'contains' => __( 'contains', 'woo-feed' ),
'nContains' => __( 'does not contain', 'woo-feed' ),
'between' => __( 'between', 'woo-feed' ),
);
return $conditions;
//return self::Create_DropDown_IF_Needed( $conditions, $dropdown, $selected );
}
/**
* Variation Query Type at Settings.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function variation_query_type( $selected = '', $dropdown = false ) {
$variation_query_type = [
'individual' => __( 'Individual', 'woo-feed' ),
'variable' => __( 'Variable Dependable', 'woo-feed' ),
];
return $variation_query_type;
//return self::Create_DropDown_IF_Needed( $variation_query_type, $dropdown, $selected );
}
/**
* Product Query Type at Settings.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function product_query_type( $selected = '', $dropdown = false ) {
$product_query_type = [
'wc' => __( 'WC_Product_Query', 'woo-feed' ),
'wp' => __( 'WP_Query', 'woo-feed' ),
'both' => __( 'Both', 'woo-feed' ),
];
return $product_query_type;
//return self::Create_DropDown_IF_Needed( $product_query_type, $dropdown, $selected );
}
/**
* Get all WP Options list.
*
* @param $dropdown
* @param $selected
*
* @return array|false|mixed|string|string[]
*/
public static function get_options( $selected = '', $dropdown = false ) {
$options = [];
$getOptions = wp_load_alloptions();
if ( ! empty( $getOptions ) ) {
$options[''] = "Select an Option";
foreach ( $getOptions as $key => $option ) {
$options[ $key ] = $key;
}
}
return $options;
//return self::Create_DropDown_IF_Needed( $options, $dropdown, $selected );
}
/**
* Get Product Categories for category mapping.
*
* @param $dropdown
* @param $selected
*
* @return void
*/
/**
* Get All Product Categories
*
* @param int $parent Category Parent ID.
* @param $dropdown
* @param $selected
*
* @return array
*/
public static function get_catmap_categories( $parent = 0, $dropdown = true, $selected = [], $slug = '' ) {
$args = [
'taxonomy' => 'product_cat',
'parent' => $parent,
'orderby' => 'term_id',
'show_count' => 1,
'pad_counts' => 1,
'hierarchical' => 1,
'title_li' => '',
'hide_empty' => 0,
];
$categories = get_categories( $args );
if ( ! empty( $categories ) ) {
if ( ! empty( $slug ) ) {
$slug = $slug . ' > ';
}
foreach ( $categories as $cat ) {
if ( ! array_key_exists( $cat->slug, self::$cats ) ) {
if ( ! empty( get_term_children( $cat->term_id, 'product_cat' ) ) ) {
$group_id = 'group-parent-' . $cat->term_id;
} else {
$group_id = 'group-child-' . $cat->parent;
}
$cat->name = htmlspecialchars_decode( $cat->name );
self::$cats[ $cat->slug ] = [
'name' => $slug . $cat->name,
'id' => $cat->term_id,
'has_child' => get_term_children( $cat->term_id, 'product_cat' ),
'group_id' => $group_id
];
self::get_catmap_categories( $cat->term_id, false, '', $slug . $cat->name );
}
}
}
return self::$cats;
}
/**
* Get Product Categories
*
* @param $dropdown
* @param $selected
*
* @return void
*/
/**
* Get All Product Categories
*
* @param int $parent Category Parent ID.
* @param $dropdown
* @param $selected
*
* @return array
*/
public static function get_categories( $args ) {
$current_language = defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : '';
$query_vars = [
'taxonomy' => 'product_cat',
'orderby' => 'term_group',
'show_count' => 1,
'pad_counts' => 1,
'hierarchical' => 1,
'title_li' => '',
'hide_empty' => 0,
'language' => $current_language
];
$query_vars = wp_parse_args( $args, $query_vars );
$categories = get_categories( $query_vars );
if ( ! empty( $categories ) ) {
foreach ( $categories as $cat ) {
self::$cats[ $cat->slug ] = $cat->name;
}
}
return apply_filters( 'ctx_feed_filter_categories', self::$cats, $query_vars );
}
/**
* Get Product Categories
*
* @param $dropdown
* @param $selected
*
* @return void
*/
/**
* Read txt file which contains google taxonomy list
*
* @return array
*/
public static function googleTaxonomyArray() {
// Get All Google Taxonomies
$fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/taxonomies/google_taxonomy.txt';
$customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
$taxonomy = [];
if ( $customTaxonomyFile ) {
// First line contains metadata, ignore it
fgets( $customTaxonomyFile ); // phpcs:ignore
while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
list( $catId, $cat ) = explode( '-', $line );
$taxonomy[] = [
'value' => absint( trim( $catId ) ),
'label' => trim( $catId ) . " - " . trim( $cat ),
];
}
}
return array_filter( $taxonomy );
}
/**
* Read txt file which contains facebook taxonomy list
*
* @return array
*/
public static function facebookTaxonomyArray() {
// Get All Facebook Taxonomies
$fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/taxonomies/fb_taxonomy.txt';
$customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
$taxonomy = array();
if ( $customTaxonomyFile ) {
// First line contains metadata, ignore it
fgets( $customTaxonomyFile ); // phpcs:ignore
while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
list( $catId, $cat ) = explode( ',', $line );
$taxonomy[] = array(
'value' => absint( trim( $catId ) ),
'label' => trim( $catId ) . " - " . trim( $cat ),
);
}
}
$taxonomy = array_filter( $taxonomy );
return $taxonomy;
}
/**
* Get Output Types
*
* @return array
*/
public static function output_types() {
$output_types = array(
'1' => 'Default',
'2' => 'Strip Tags',
'3' => 'UTF-8 Encode',
'4' => 'htmlentities',
'5' => 'Integer',
'6' => 'Price',
'7' => 'Rounded Price',
'8' => 'Remove Space',
'9' => 'CDATA',
'10' => 'Remove Special Character',
'11' => 'Remove ShortCodes',
'12' => 'ucwords',
'13' => 'ucfirst',
'14' => 'strtoupper',
'15' => 'strtolower',
'16' => 'urlToSecure',
'17' => 'urlToUnsecure',
'18' => 'only_parent',
'19' => 'parent',
'20' => 'parent_if_empty',
'21' => 'htmlspecialchars',
'22' => 'htmlspecialchars_decode',
);
//when wpml or polylang plugin is activated
if (
class_exists( 'SitePress', false ) || defined( 'POLYLANG_BASENAME' ) || function_exists( 'PLL' ) // When WPML is active
|| is_plugin_active( 'translatepress-multilingual/index.php' ) // Translatepress
) {
array_push( $output_types, 'parent_lang' );
array_push( $output_types, 'parent_lang_if_empty' );
}
return apply_filters( 'woo_feed_output_types', $output_types );
}
/**
* Get Product Statuses
*
* @return array
*/
public static function get_post_statuses() {
return (array) apply_filters( 'woo_feed_product_statuses', get_post_statuses() );
}
public static function all_product_ids_old( $args ) {
if ( ! function_exists( 'is_plugin_active' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
return [];
}
$query_vars = wp_parse_args( $args, [ 'return' => 'objects' ] );
$config = new Config( [] );
$wc_query = new WCQuery( $config, $query_vars );
$products = $wc_query->product_ids();
$product_ids_with_titles = [];
foreach ( $products as $product ) {
if ( $product instanceof \WC_Product ) {
$id = $product->get_id();
$sku = ! empty( $product->get_sku() ) ? "::" . $product->get_sku() : '';
$product_ids_with_titles[ $id ] = $id . $sku . '::' . $product->get_name();
}
}
return apply_filters( 'ctx_feed_all_product_ids_with_title', $product_ids_with_titles, $config, $wc_query, $query_vars );
}
/**
* Product search with id, title, sku.
*
* @param $args
*
* @return array|mixed|null
* @example [
* 's' => 'hoodie' //for title search.
* 'include' => 1,2,3 // for id search
* 'sku' => 'woo-beanie' // for sku search
* ];
*
*
*/
public static function all_product_ids( $args ) {
if ( ! function_exists( 'is_plugin_active' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
return [];
}
$config = new Config( [] );
$query_vars = wp_parse_args( $args, [ 'return' => 'objects', 'limit' => 200 ] );
if ( isset( $query_vars['sku'] ) ) {
$args = array(
'post_type' => array( 'product', 'product_variation' ),
'meta_key' => '_sku',
'post_status' => array( 'publish' ),
'fields' => 'all',
'meta_query' => array(
array(
'key' => '_sku',
'value' => $query_vars['sku'],
'compare' => 'LIKE',
),
),
);
// search with sku
$wp_query = new WPQuery( $config, $args );
$products = $wp_query->product_ids();
} else {
// search with id or title
$wc_query = new WCQuery( $config, $query_vars );
$products = $wc_query->product_ids();
}
$product_ids_with_titles = self::get_formatted_product_titles( $products );
return apply_filters( 'ctx_feed_all_product_ids_with_title', $product_ids_with_titles, $config, $query_vars );
}
/**
* @param $products
*
* @return array
*/
private static function get_formatted_product_titles( $products ) {
$product_ids_with_titles = [];
foreach ( $products as $product ) {
if ( $product instanceof \WC_Product ) {
$id = $product->get_id();
$sku = ! empty( $product->get_sku() ) ? "::" . $product->get_sku() : '';
$product_ids_with_titles[ $id ] = $id . $sku . '::' . $product->get_name();
} else if ( $product instanceof \WP_Post ) {
$id = $product->ID;
$sku = ! empty( get_post_meta( $product->ID, '_sku', true ) ) ? "::" . get_post_meta( $product->ID, '_sku', true ) : '';
$product_ids_with_titles[ $id ] = $id . $sku . '::' . $product->post_title;
}
}
return $product_ids_with_titles;
}
/**
* Get Active Languages for current site.
*
* @param string $selected
*
* @return string
*/
public static function getActiveLanguages( $selected = '' ) {
$options = false;
if ( false === $options ) {
$languages = [];
if ( class_exists( 'SitePress' ) ) {
$get_languages = apply_filters( 'wpml_active_languages', null, 'orderby=id&order=desc' );
if ( ! empty( $get_languages ) ) {
foreach ( $get_languages as $key => $language ) {
$languages[ $key ] = $language['translated_name'];
}
}
}
// when polylang plugin is activated
if ( defined( 'POLYLANG_BASENAME' ) || function_exists( 'PLL' ) ) {
// polylang language names
$poly_languages_names = pll_languages_list( [ 'fields' => 'name' ] );
// polylang language locales
$poly_languages_slugs = pll_languages_list( [ 'fields' => 'slug' ] );
// polylang language lists
$get_languages = array_combine( $poly_languages_slugs, $poly_languages_names );
if ( ! empty( $get_languages ) ) {
$languages = [];
foreach ( $get_languages as $key => $value ) {
$languages[ $key ] = $value;
}
}
}
//when translatepress is activated
if ( is_plugin_active( 'translatepress-multilingual/index.php' ) ) {
if ( class_exists( 'TRP_Translate_Press' ) ) {
$tr_press_languages = trp_get_languages( 'default' );
if ( ! empty( $tr_press_languages ) ) {
foreach ( $tr_press_languages as $key => $value ) {
$languages[ $key ] = $value;
}
}
}
}
//language dropdown
$options = $languages;
}
return $options;
}
/**
* Get Active Currency
*
* @param string $selected
*
* @return false|mixed|string
* @since 3.3.2
*/
public static function getActiveCurrencies( $selected = '' ) {
$options = false;
if ( false === $options ) {
global $woocommerce_wpml;
if ( class_exists( 'SitePress' ) && class_exists( 'woocommerce_wpml' ) && wcml_is_multi_currency_on() && isset( $woocommerce_wpml->multi_currency->currencies ) ) {
$get_currencies = $woocommerce_wpml->multi_currency->currencies;
if ( ! empty( $get_currencies ) ) {
$currencies = [];
foreach ( $get_currencies as $key => $currency ) {
$currencies[ $key ] = $key;
}
$options = $currencies;
}
} elseif ( class_exists( 'WC_Aelia_CurrencySwitcher' ) ) {
$base_currency = get_woocommerce_currency();
$get_currencies = apply_filters( 'wc_aelia_cs_enabled_currencies', $base_currency );
// Fixed warning with Alia Currency Plugin's initial settings when activated.
if ( ! empty( $get_currencies ) ) {
if ( is_array( $get_currencies ) ) {
$currencies = [];
foreach ( $get_currencies as $currency ) {
$currencies[ $currency ] = $currency;
}
} elseif ( gettype( $get_currencies ) === 'string' ) {
$currencies = [
$get_currencies => $get_currencies,
];
} else {
$currencies = [];
}
$options = $currencies;
}
} elseif (is_plugin_active('woocommerce-currency-switcher/index.php') || class_exists('WOOCS')) {
global $WOOCS;
// Try to get currencies from the $WOOCS object first
if (isset($WOOCS) && method_exists($WOOCS, 'get_currencies')) {
$get_currencies = $WOOCS->get_currencies();
if (! empty($get_currencies)) {
foreach ($get_currencies as $key => $currency) {
$options[$key] = $key;
}
}
}
// Fallback to get currencies from the 'woocs' option
if (empty($options)) {
$get_currencies = get_option('woocs', array());
if (! empty($get_currencies)) {
foreach ($get_currencies as $key => $currency) {
$options[$key] = $key;
}
}
}
} elseif ( is_plugin_active( 'currency-switcher-woocommerce/currency-switcher-woocommerce.php' ) ) {
if ( function_exists( 'alg_get_enabled_currencies' ) ) {
$currencies = alg_get_enabled_currencies();
$currencies = array_combine( $currencies, $currencies );
$options = $currencies;
}
} elseif ( is_plugin_active( 'woocommerce-multicurrency/woocommerce-multicurrency.php' ) ) {
if ( class_exists( 'WOOMC\DAO\Factory' ) ) {
$currencies = Factory::getDao()->getEnabledCurrencies();
$currencies = array_combine( $currencies, $currencies );
$options = $currencies;
}
} elseif ( is_plugin_active( 'woo-multi-currency/woo-multi-currency.php' ) || is_plugin_active( 'woocommerce-multi-currency/woocommerce-multi-currency.php' ) ) {
$settings = get_option( 'woo_multi_currency_params' );
if ( isset( $settings['currency'] ) ) {
$currencies = $settings['currency'];
$currencies = array_combine( $currencies, $currencies );
$options = $currencies;
}
}
}
return $options;
}
/**
* Get Product Statuses
*
* @return array
*/
public static function post_statuses() {
return (array) apply_filters( 'woo_feed_product_statuses', get_post_statuses() );
}
/**
* Get WooCommerce Vendor List for multi-vendor shop
*
* @return false|WP_User[]|array
*/
public static function get_vendors() {
$users = [];
$vendor_role = Helper::get_multi_vendor_user_role();
if ( ! empty( $vendor_role ) ) {
/**
* Filter Get Vendor (User) Query Args
*
* @param array $args
*/
$args = apply_filters( 'woo_feed_get_vendors_args', [ 'role' => $vendor_role ] );
if ( is_array( $args ) && ! empty( $args ) ) {
$users = get_users( $args );
}
}
return apply_filters( 'woo_feed_product_vendors', $users );
}
/**
* Make DropDown Option from array if needed else return the array.
*
* @param $array
* @param $DropDownStatus
* @param $selected
* @param string $cache_key
* @param bool $cache
*
* @return array|false|mixed|string|string[]
*/
public static function Create_DropDown_IF_Needed( $array, $DropDownStatus, $selected, $cache_key = '', $cache = false ) {
if ( $DropDownStatus ) {
return Dropdown::Create( $array, $selected, $cache_key, $cache );
}
return $array;
}
}