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 = '
';
}
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();
}
}