option = get_option( $this->option_handle ); if ( ! is_array( $this->option ) ) { $this->option = array(); } } /** * Get Option * * Gets option in Databse. * * @param string $key Option key. * @param mixed $defval Default value. * @param bool $json_encoded Is json encoded value. * * @return mixed Retruns option value. */ public function get_option( $key = null, $defval = '', $json_encoded = false ) { if ( isset( $this->option[ $key ] ) ) { $values = $this->option[ $key ]; if ( $json_encoded ) { $values = ! empty( $values ) ? json_decode( $values, true ) : array(); if ( ! is_array( $values ) ) { $values = array(); } } return $values; } return $defval; } /** * Set Option * * Sets option in Databse. * * @param string $key Option key. * @param mixed $value Option value. * * @return mixed Update option. */ public function set_option( $key, $value ) { $this->option[ $key ] = $value; return update_option( $this->option_handle, $this->option ); } /** * Get All Options * * Gets options in Databse. * * @return mixed Retruns options value. */ public function get_all_options() { return $this->option; } /** * Save All Options * * @param array $options Options. * * @return mixed Retruns value. */ public function save_options( $options ) { return update_option( $this->option_handle, $options ); } /** * Method render_product_icon(). * * @param string $file_name File icon. * @param bool $ret True|False To return. * * @return string */ public static function render_product_icon( $file_name, $ret = false ) { $imgfavi = ''; $favi_url = MainWP_Utility::get_saved_favicon_url( $file_name ); if ( ! empty( $favi_url ) ) { $imgfavi = 'Cost custom icon'; } if ( $ret ) { return $imgfavi; } echo $imgfavi;//phpcs:ignore -- ok. } /** * Format the price with a currency symbol. * * @param float $price Raw price. * @param bool $ret Return or echo value. * @param array $params other params. * * @return string */ public static function cost_tracker_format_price( $price, $ret = false, $params = array() ) { //phpcs:ignore -- NOSONAR - complex. if ( ! is_array( $params ) ) { $params = array(); } $get_currency_format = ! empty( $params['get_currency_format'] ) ? true : false; $get_formated_number = ! empty( $params['get_formated_number'] ) ? true : false; $get_decimals = ! empty( $params['get_decimals'] ) ? true : false; $currency = static::get_instance()->get_option( 'currency' ); if ( empty( $currency ) ) { $currency = 'USD'; } $settings = static::get_instance()->get_option( 'currency_format' ); if ( ! is_array( $settings ) ) { $settings = array(); } $default = static::default_currency_settings(); $args = array_merge( $default, $settings ); // Convert to float to avoid issues on PHP 8. $price = (float) $price; $negative = $price < 0; $price = $negative ? $price * -1 : $price; $price = number_format( $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] ); if ( $get_decimals ) { return $args['decimals']; } if ( $get_formated_number ) { return $price; } if ( $args['decimals'] > 0 ) { // trim zezos. $price = preg_replace( '/' . preg_quote( $args['decimal_separator'], '/' ) . '0++$/', '', $price ?? '' ); } $currency_pos = $args['currency_position']; $format = '%1$s%2$s'; switch ( $currency_pos ) { case 'left': $format = '%1$s%2$s'; break; case 'right': $format = '%2$s%1$s'; break; case 'left_space': $format = '%1$s %2$s'; break; case 'right_space': $format = '%2$s %1$s'; break; default: break; } if ( $get_currency_format ) { return array( 'format' => sprintf( $format, esc_html( static::get_currency_symbol( $currency ) ), '%1' ), // %1 for price holder. 'decimals' => $args['decimals'], ); } $formatted_price = ( $negative ? '-' : '' ) . sprintf( $format, '' . esc_html( static::get_currency_symbol( $currency ) ) . '', esc_html( $price ) ); $value = '' . $formatted_price . ''; if ( $ret ) { return $value; } echo $value; // phpcs:ignore -- escaped. } /** * Format the group costs prices. * * @param array $group_prices Group price. * * @return string */ public static function get_separated_costs_price( $group_prices ) { $grouped = array( 'weekly' => 'W', 'monthly' => 'M', 'quarterly' => 'Q', 'yearly' => 'Y', 'lifetime' => 'L', ); $formated_prices = array(); if ( is_array( $group_prices ) ) { foreach ( $grouped as $idx => $char ) { if ( ! empty( $group_prices[ $idx ] ) ) { $formated_prices[ $idx ] = static::cost_tracker_format_price( $group_prices[ $idx ], true ) . '/' . $char; } } } if ( ! empty( $formated_prices ) ) { return implode( '|', $formated_prices ); } return static::cost_tracker_format_price( 0, true ); } /** * Method get_currency_symbol(). * * @param string $currency Currency. * * @return string Currency symbol. */ public static function get_currency_symbol( $currency ) { if ( ! is_string( $currency ) ) { return ''; } $all_curs = static::get_all_currency_symbols(); return isset( $all_curs[ $currency ]['symbol'] ) ? $all_curs[ $currency ]['symbol'] : ''; } /** * Method get_all_currency_symbols(). * * @return array Currency symbols. */ public static function get_all_currency_symbols() { // phpcs:ignore -- NOSONAR - multi lines. return array( 'AFA' => array( 'name' => 'Afghan Afghani', 'symbol' => '؋', ), 'ALL' => array( 'name' => 'Albanian Lek', 'symbol' => 'Lek', ), 'DZD' => array( 'name' => 'Algerian Dinar', 'symbol' => 'دج', ), 'AOA' => array( 'name' => 'Angolan Kwanza', 'symbol' => 'Kz', ), 'ARS' => array( 'name' => 'Argentine Peso', 'symbol' => '$', ), 'AMD' => array( 'name' => 'Armenian Dram', 'symbol' => '֏', ), 'AWG' => array( 'name' => 'Aruban Florin', 'symbol' => 'ƒ', ), 'AUD' => array( 'name' => 'Australian Dollar', 'symbol' => '$', ), 'AZN' => array( 'name' => 'Azerbaijani Manat', 'symbol' => 'm', ), 'BSD' => array( 'name' => 'Bahamian Dollar', 'symbol' => 'B$', ), 'BHD' => array( 'name' => 'Bahraini Dinar', 'symbol' => '.د.ب', ), 'BDT' => array( 'name' => 'Bangladeshi Taka', 'symbol' => '৳', ), 'BBD' => array( 'name' => 'Barbadian Dollar', 'symbol' => 'Bds$', ), 'BYR' => array( 'name' => 'Belarusian Ruble', 'symbol' => 'Br', ), 'BEF' => array( 'name' => 'Belgian Franc', 'symbol' => 'fr', ), 'BZD' => array( 'name' => 'Belize Dollar', 'symbol' => '$', ), 'BMD' => array( 'name' => 'Bermudan Dollar', 'symbol' => '$', ), 'BTN' => array( 'name' => 'Bhutanese Ngultrum', 'symbol' => 'Nu.', ), 'BTC' => array( 'name' => 'Bitcoin', 'symbol' => '฿', ), 'BOB' => array( 'name' => 'Bolivian Boliviano', 'symbol' => 'Bs.', ), 'BAM' => array( 'name' => 'Bosnia-Herzegovina Convertible Mark', 'symbol' => 'KM', ), 'BWP' => array( 'name' => 'Botswanan Pula', 'symbol' => 'P', ), 'BRL' => array( 'name' => 'Brazilian Real', 'symbol' => 'R$', ), 'GBP' => array( 'name' => 'British Pound Sterling', 'symbol' => '£', ), 'BND' => array( 'name' => 'Brunei Dollar', 'symbol' => 'B$', ), 'BGN' => array( 'name' => 'Bulgarian Lev', 'symbol' => 'Лв.', ), 'BIF' => array( 'name' => 'Burundian Franc', 'symbol' => 'FBu', ), 'KHR' => array( 'name' => 'Cambodian Riel', 'symbol' => 'KHR', ), 'CAD' => array( 'name' => 'Canadian Dollar', 'symbol' => '$', ), 'CVE' => array( 'name' => 'Cape Verdean Escudo', 'symbol' => '$', ), 'KYD' => array( 'name' => 'Cayman Islands Dollar', 'symbol' => '$', ), 'XOF' => array( 'name' => 'CFA Franc BCEAO', 'symbol' => 'CFA', ), 'XAF' => array( 'name' => 'CFA Franc BEAC', 'symbol' => 'FCFA', ), 'XPF' => array( 'name' => 'CFP Franc', 'symbol' => '₣', ), 'CLP' => array( 'name' => 'Chilean Peso', 'symbol' => '$', ), 'CLF' => array( 'name' => 'Chilean Unit of Account', 'symbol' => 'CLF', ), 'CNY' => array( 'name' => 'Chinese Yuan', 'symbol' => '¥', ), 'COP' => array( 'name' => 'Colombian Peso', 'symbol' => '$', ), 'KMF' => array( 'name' => 'Comorian Franc', 'symbol' => 'CF', ), 'CDF' => array( 'name' => 'Congolese Franc', 'symbol' => 'FC', ), 'CRC' => array( 'name' => 'Costa Rican Colón', 'symbol' => '₡', ), 'HRK' => array( 'name' => 'Croatian Kuna', 'symbol' => 'kn', ), 'CUC' => array( 'name' => 'Cuban Convertible Peso', 'symbol' => '$, CUC', ), 'CZK' => array( 'name' => 'Czech Republic Koruna', 'symbol' => 'Kč', ), 'DKK' => array( 'name' => 'Danish Krone', 'symbol' => 'Kr.', ), 'DJF' => array( 'name' => 'Djiboutian Franc', 'symbol' => 'Fdj', ), 'DOP' => array( 'name' => 'Dominican Peso', 'symbol' => '$', ), 'XCD' => array( 'name' => 'East Caribbean Dollar', 'symbol' => '$', ), 'EGP' => array( 'name' => 'Egyptian Pound', 'symbol' => 'ج.م', ), 'ERN' => array( 'name' => 'Eritrean Nakfa', 'symbol' => 'Nfk', ), 'EEK' => array( 'name' => 'Estonian Kroon', 'symbol' => 'kr', ), 'ETB' => array( 'name' => 'Ethiopian Birr', 'symbol' => 'Nkf', ), 'EUR' => array( 'name' => 'Euro', 'symbol' => '€', ), 'FKP' => array( 'name' => 'Falkland Islands Pound', 'symbol' => '£', ), 'FJD' => array( 'name' => 'Fijian Dollar', 'symbol' => 'FJ$', ), 'GMD' => array( 'name' => 'Gambian Dalasi', 'symbol' => 'D', ), 'GEL' => array( 'name' => 'Georgian Lari', 'symbol' => 'ლ', ), 'DEM' => array( 'name' => 'German Mark', 'symbol' => 'DM', ), 'GHS' => array( 'name' => 'Ghanaian Cedi', 'symbol' => 'GH₵', ), 'GIP' => array( 'name' => 'Gibraltar Pound', 'symbol' => '£', ), 'GRD' => array( 'name' => 'Greek Drachma', 'symbol' => '₯, Δρχ, Δρ', ), 'GTQ' => array( 'name' => 'Guatemalan Quetzal', 'symbol' => 'Q', ), 'GNF' => array( 'name' => 'Guinean Franc', 'symbol' => 'FG', ), 'GYD' => array( 'name' => 'Guyanaese Dollar', 'symbol' => '$', ), 'HTG' => array( 'name' => 'Haitian Gourde', 'symbol' => 'G', ), 'HNL' => array( 'name' => 'Honduran Lempira', 'symbol' => 'L', ), 'HKD' => array( 'name' => 'Hong Kong Dollar', 'symbol' => '$', ), 'HUF' => array( 'name' => 'Hungarian Forint', 'symbol' => 'Ft', ), 'ISK' => array( 'name' => 'Icelandic Króna', 'symbol' => 'kr', ), 'INR' => array( 'name' => 'Indian Rupee', 'symbol' => '₹', ), 'IDR' => array( 'name' => 'Indonesian Rupiah', 'symbol' => 'Rp', ), 'IRR' => array( 'name' => 'Iranian Rial', 'symbol' => '﷼', ), 'IQD' => array( 'name' => 'Iraqi Dinar', 'symbol' => 'د.ع', ), 'ILS' => array( 'name' => 'Israeli New Sheqel', 'symbol' => '₪', ), 'ITL' => array( 'name' => 'Italian Lira', 'symbol' => 'L,£', ), 'JMD' => array( 'name' => 'Jamaican Dollar', 'symbol' => 'J$', ), 'JPY' => array( 'name' => 'Japanese Yen', 'symbol' => '¥', ), 'JOD' => array( 'name' => 'Jordanian Dinar', 'symbol' => 'ا.د', ), 'KZT' => array( 'name' => 'Kazakhstani Tenge', 'symbol' => 'лв', ), 'KES' => array( 'name' => 'Kenyan Shilling', 'symbol' => 'KSh', ), 'KWD' => array( 'name' => 'Kuwaiti Dinar', 'symbol' => 'ك.د', ), 'KGS' => array( 'name' => 'Kyrgystani Som', 'symbol' => 'лв', ), 'LAK' => array( 'name' => 'Laotian Kip', 'symbol' => '₭', ), 'LVL' => array( 'name' => 'Latvian Lats', 'symbol' => 'Ls', ), 'LBP' => array( 'name' => 'Lebanese Pound', 'symbol' => '£', ), 'LSL' => array( 'name' => 'Lesotho Loti', 'symbol' => 'L', ), 'LRD' => array( 'name' => 'Liberian Dollar', 'symbol' => '$', ), 'LYD' => array( 'name' => 'Libyan Dinar', 'symbol' => 'د.ل', ), 'LTC' => array( 'name' => 'Litecoin', 'symbol' => 'Ł', ), 'LTL' => array( 'name' => 'Lithuanian Litas', 'symbol' => 'Lt', ), 'MOP' => array( 'name' => 'Macanese Pataca', 'symbol' => '$', ), 'MKD' => array( 'name' => 'Macedonian Denar', 'symbol' => 'ден', ), 'MGA' => array( 'name' => 'Malagasy Ariary', 'symbol' => 'Ar', ), 'MWK' => array( 'name' => 'Malawian Kwacha', 'symbol' => 'MK', ), 'MYR' => array( 'name' => 'Malaysian Ringgit', 'symbol' => 'RM', ), 'MVR' => array( 'name' => 'Maldivian Rufiyaa', 'symbol' => 'Rf', ), 'MRO' => array( 'name' => 'Mauritanian Ouguiya', 'symbol' => 'MRU', ), 'MUR' => array( 'name' => 'Mauritian Rupee', 'symbol' => '₨', ), 'MXN' => array( 'name' => 'Mexican Peso', 'symbol' => '$', ), 'MDL' => array( 'name' => 'Moldovan Leu', 'symbol' => 'L', ), 'MNT' => array( 'name' => 'Mongolian Tugrik', 'symbol' => '₮', ), 'MAD' => array( 'name' => 'Moroccan Dirham', 'symbol' => 'MAD', ), 'MZM' => array( 'name' => 'Mozambican Metical', 'symbol' => 'MT', ), 'MMK' => array( 'name' => 'Myanmar Kyat', 'symbol' => 'K', ), 'NAD' => array( 'name' => 'Namibian Dollar', 'symbol' => '$', ), 'NPR' => array( 'name' => 'Nepalese Rupee', 'symbol' => '₨', ), 'ANG' => array( 'name' => 'Netherlands Antillean Guilder', 'symbol' => 'ƒ', ), 'TWD' => array( 'name' => 'New Taiwan Dollar', 'symbol' => '$', ), 'NZD' => array( 'name' => 'New Zealand Dollar', 'symbol' => '$', ), 'NIO' => array( 'name' => 'Nicaraguan Córdoba', 'symbol' => 'C$', ), 'NGN' => array( 'name' => 'Nigerian Naira', 'symbol' => '₦', ), 'KPW' => array( 'name' => 'North Korean Won', 'symbol' => '₩', ), 'NOK' => array( 'name' => 'Norwegian Krone', 'symbol' => 'kr', ), 'OMR' => array( 'name' => 'Omani Rial', 'symbol' => '.ع.ر', ), 'PKR' => array( 'name' => 'Pakistani Rupee', 'symbol' => '₨', ), 'PAB' => array( 'name' => 'Panamanian Balboa', 'symbol' => 'B/.', ), 'PGK' => array( 'name' => 'Papua New Guinean Kina', 'symbol' => 'K', ), 'PYG' => array( 'name' => 'Paraguayan Guarani', 'symbol' => '₲', ), 'PEN' => array( 'name' => 'Peruvian Nuevo Sol', 'symbol' => 'S/.', ), 'PHP' => array( 'name' => 'Philippine Peso', 'symbol' => '₱', ), 'PLN' => array( 'name' => 'Polish Zloty', 'symbol' => 'zł', ), 'QAR' => array( 'name' => 'Qatari Rial', 'symbol' => 'ق.ر', ), 'RON' => array( 'name' => 'Romanian Leu', 'symbol' => 'lei', ), 'RUB' => array( 'name' => 'Russian Ruble', 'symbol' => '₽', ), 'RWF' => array( 'name' => 'Rwandan Franc', 'symbol' => 'FRw', ), 'SVC' => array( 'name' => 'Salvadoran Colón', 'symbol' => '₡', ), 'WST' => array( 'name' => 'Samoan Tala', 'symbol' => 'SAT', ), 'STD' => array( 'name' => 'São Tomé and Príncipe Dobra', 'symbol' => 'Db', ), 'SAR' => array( 'name' => 'Saudi Riyal', 'symbol' => '﷼', ), 'RSD' => array( 'name' => 'Serbian Dinar', 'symbol' => 'din', ), 'SCR' => array( 'name' => 'Seychellois Rupee', 'symbol' => 'SRe', ), 'SLL' => array( 'name' => 'Sierra Leonean Leone', 'symbol' => 'Le', ), 'SGD' => array( 'name' => 'Singapore Dollar', 'symbol' => '$', ), 'SKK' => array( 'name' => 'Slovak Koruna', 'symbol' => 'Sk', ), 'SBD' => array( 'name' => 'Solomon Islands Dollar', 'symbol' => 'Si$', ), 'SOS' => array( 'name' => 'Somali Shilling', 'symbol' => 'Sh.so.', ), 'ZAR' => array( 'name' => 'South African Rand', 'symbol' => 'R', ), 'KRW' => array( 'name' => 'South Korean Won', 'symbol' => '₩', ), 'SSP' => array( 'name' => 'South Sudanese Pound', 'symbol' => '£', ), 'XDR' => array( 'name' => 'Special Drawing Rights', 'symbol' => 'SDR', ), 'LKR' => array( 'name' => 'Sri Lankan Rupee', 'symbol' => 'Rs', ), 'SHP' => array( 'name' => 'St. Helena Pound', 'symbol' => '£', ), 'SDG' => array( 'name' => 'Sudanese Pound', 'symbol' => '.س.ج', ), 'SRD' => array( 'name' => 'Surinamese Dollar', 'symbol' => '$', ), 'SZL' => array( 'name' => 'Swazi Lilangeni', 'symbol' => 'E', ), 'SEK' => array( 'name' => 'Swedish Krona', 'symbol' => 'kr', ), 'CHF' => array( 'name' => 'Swiss Franc', 'symbol' => 'CHf', ), 'SYP' => array( 'name' => 'Syrian Pound', 'symbol' => 'LS', ), 'TJS' => array( 'name' => 'Tajikistani Somoni', 'symbol' => 'SM', ), 'TZS' => array( 'name' => 'Tanzanian Shilling', 'symbol' => 'TSh', ), 'THB' => array( 'name' => 'Thai Baht', 'symbol' => '฿', ), 'TOP' => array( 'name' => "Tongan Pa'anga", 'symbol' => '$', ), 'TTD' => array( 'name' => 'Trinidad & Tobago Dollar', 'symbol' => '$', ), 'TND' => array( 'name' => 'Tunisian Dinar', 'symbol' => 'ت.د', ), 'TRY' => array( 'name' => 'Turkish Lira', 'symbol' => '₺', ), 'TMT' => array( 'name' => 'Turkmenistani Manat', 'symbol' => 'T', ), 'UGX' => array( 'name' => 'Ugandan Shilling', 'symbol' => 'USh', ), 'UAH' => array( 'name' => 'Ukrainian Hryvnia', 'symbol' => '₴', ), 'AED' => array( 'name' => 'United Arab Emirates Dirham', 'symbol' => 'إ.د', ), 'UYU' => array( 'name' => 'Uruguayan Peso', 'symbol' => '$', ), 'USD' => array( 'name' => 'US Dollar', 'symbol' => '$', ), 'UZS' => array( 'name' => 'Uzbekistan Som', 'symbol' => 'лв', ), 'VUV' => array( 'name' => 'Vanuatu Vatu', 'symbol' => 'VT', ), 'VEF' => array( 'name' => 'Venezuelan BolÃvar', 'symbol' => 'Bs', ), 'VND' => array( 'name' => 'Vietnamese Dong', 'symbol' => '₫', ), 'YER' => array( 'name' => 'Yemeni Rial', 'symbol' => '﷼', ), 'ZMK' => array( 'name' => 'Zambian Kwacha', 'symbol' => 'ZK', ), 'ZWL' => array( 'name' => 'Zimbabwean dollar', 'symbol' => '$', ), ); } /** * Get default tracker settings. */ public static function default_currency_settings() { return array( 'currency_position' => 'left', 'thousand_separator' => ',', 'decimal_separator' => '.', 'decimals' => 2, ); } /** * Validate currency settings. * * @param array $settings Settings value. */ public static function validate_currency_settings( $settings ) { $default = static::default_currency_settings(); $valid_settings = array(); $valid_settings['currency_position'] = isset( $settings['currency_position'] ) ? sanitize_text_field( wp_unslash( $settings['currency_position'] ) ) : 'left'; if ( ! in_array( $valid_settings['currency_position'], array( 'left', 'right', 'left_space', 'right_space' ), true ) ) { $valid_settings['currency_position'] = $default['currency_position']; } $valid_settings['thousand_separator'] = isset( $settings['thousand_separator'] ) ? sanitize_text_field( wp_unslash( $settings['thousand_separator'] ) ) : $default['thousand_separator']; $valid_settings['decimal_separator'] = isset( $settings['decimal_separator'] ) ? sanitize_text_field( wp_unslash( $settings['decimal_separator'] ) ) : $default['decimal_separator']; $valid_settings['decimals'] = isset( $settings['decimals'] ) ? intval( $settings['decimals'] ) : $default['decimals']; if ( $valid_settings['decimals'] > 8 || $valid_settings['decimals'] < 0 ) { $valid_settings['decimals'] = $default['decimals']; } return $valid_settings; } /** * Get payment method icon * * Returns FOmantic UI icon for payment selected payment method. * * @param string $payment_method Selected patyment method. */ public static function get_payment_method_icon( $payment_method ) { $icon = ''; switch ( $payment_method ) { case 'PayPal': $icon = ''; break; case 'Stripe': $icon = ''; break; case 'Apple Pay': $icon = ''; break; case 'Amazon Pay': $icon = ''; break; case 'Google Pay': $icon = ''; break; case 'Credit Card': $icon = ''; break; case 'Debit Card': $icon = ''; break; case 'Cash': $icon = ''; break; default: break; } return $icon; } /** * Method get_product_default_icons(). * * @param bool $get_all Get all icons. * @param string $def_type_icon to get default icon for types. * * @return string icon. */ public static function get_product_default_icons( $get_all = true, $def_type_icon = '' ) { unset( $get_all ); if ( 'default_custom_product_type' === $def_type_icon ) { return 'folder open'; } elseif ( 'default_product' === $def_type_icon ) { return 'archive'; } if ( ! empty( $def_type_icon ) ) { $default_pro_type_icons = Cost_Tracker_Admin::get_default_product_types_icons(); if ( isset( $default_pro_type_icons[ $def_type_icon ] ) ) { return $default_pro_type_icons[ $def_type_icon ]; } } return MainWP_UI::get_default_icons(); } }