<?php class OsMoneyHelper { /** * @param $amount * @param $include_currency * @param $hide_zero_decimals * @return string * * Formats amount from database format (99999.0000) to requested format, optionally can include currency symbol and strip zero cents * */ public static function format_price($amount, $include_currency = true, $hide_zero_decimals = true): string{ $decimal_separator = OsSettingsHelper::get_settings_value('decimal_separator', '.'); $thousand_separator = OsSettingsHelper::get_settings_value('thousand_separator', ','); $decimals = OsSettingsHelper::get_settings_value('number_of_decimals', '2'); if(empty($amount)) $amount = 0; $amount = number_format($amount, $decimals, $decimal_separator, $thousand_separator); if($hide_zero_decimals){ $zeros = ''; switch($decimals){ case '1': $zeros = '0'; break; case '2': $zeros = '00'; break; case '3': $zeros = '000'; break; case '4': $zeros = '0000'; break; } $amount = str_replace($decimal_separator.$zeros, '', $amount); } if($include_currency) $amount = implode('', array(OsSettingsHelper::get_settings_value('currency_symbol_before'), $amount, OsSettingsHelper::get_settings_value('currency_symbol_after'))); $amount = apply_filters('latepoint_format_price', $amount, $include_currency, $hide_zero_decimals); return $amount; } // formats amount to be used in input money fields public static function to_money_field_format($amount){ return self::format_price((float)$amount, false, false); } // amount stripped from any formatting like currency symbol, thousand separator, just numbers and decimal separator is left public static function convert_amount_from_money_input_to_db_format($amount){ $decimal_separator = OsSettingsHelper::get_settings_value('decimal_separator', '.'); $amount = preg_replace('/[^-\\d'.$decimal_separator.']+/', '', $amount); // database is using dot as a decimal separator, if latepoint is not using dot for currency input - convert it to dot to store in db if($decimal_separator != '.') $amount = str_replace($decimal_separator, '.', $amount); $amount = self::pad_to_db_format($amount); return $amount; } public static function convert_value_from_percent_input_to_db_format($value){ $decimal_separator = OsSettingsHelper::get_settings_value('decimal_separator', '.'); $value = preg_replace('/[^-\\d'.$decimal_separator.']+/', '', $value); // database is using dot as a decimal separator, if latepoint is not using dot for input - convert it to dot to store in db if($decimal_separator != '.') $value = str_replace($decimal_separator, '.', $value); $value = self::pad_to_db_format($value); return $value; } public static function pad_to_db_format($amount) : string{ return number_format((float)$amount, 4, '.', ''); } }