merci-8.x-2.x-dev/modules/merci_printable_contract/money_format.inc

modules/merci_printable_contract/money_format.inc
<?php
/* 
That it is an implementation of the function money_format for the 
platforms that do not it bear.  

The function accepts to same string of format accepts for the 
original function of the PHP.  

(Sorry. my writing in English is very bad)  

The function is tested using PHP 5.1.4 in Windows XP 
and Apache WebServer. 
*/ 
if (!function_exists('money_format')) {
  function money_format($format, $number) 
  { 
    $regex  = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?'. 
      '(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/'; 
    if (setlocale(LC_MONETARY, 0) == 'C') { 
      setlocale(LC_MONETARY, ''); 
    } 
    $locale = localeconv(); 
    preg_match_all($regex, $format, $matches, PREG_SET_ORDER); 
    foreach ($matches as $fmatch) { 
      $value = floatval($number); 
      $flags = array( 
        'fillchar'  => preg_match('/\=(.)/', $fmatch[1], $match) ? 
        $match[1] : ' ', 
        'nogroup'   => preg_match('/\^/', $fmatch[1]) > 0, 
        'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ? 
        $match[0] : '+', 
        'nosimbol'  => preg_match('/\!/', $fmatch[1]) > 0, 
        'isleft'    => preg_match('/\-/', $fmatch[1]) > 0 
      ); 
      $width      = trim($fmatch[2]) ? (int)$fmatch[2] : 0; 
      $left       = trim($fmatch[3]) ? (int)$fmatch[3] : 0; 
      $right      = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits']; 
      $conversion = $fmatch[5]; 

      $positive = true; 
      if ($value < 0) { 
        $positive = false; 
        $value  *= -1; 
      } 
      $letter = $positive ? 'p' : 'n'; 

      $prefix = $suffix = $cprefix = $csuffix = $signal = ''; 

      $signal = $positive ? $locale['positive_sign'] : $locale['negative_sign']; 
      switch (true) { 
      case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+': 
        $prefix = $signal; 
        break; 
      case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+': 
        $suffix = $signal; 
        break; 
      case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+': 
        $cprefix = $signal; 
        break; 
      case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+': 
        $csuffix = $signal; 
        break; 
      case $flags['usesignal'] == '(': 
      case $locale["{$letter}_sign_posn"] == 0: 
        $prefix = '('; 
        $suffix = ')'; 
        break; 
      } 
      if (!$flags['nosimbol']) { 
        $currency = $cprefix . 
          ($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) . 
          $csuffix; 
      } else { 
        $currency = ''; 
      } 
      $space  = $locale["{$letter}_sep_by_space"] ? ' ' : ''; 

      $value = number_format($value, $right, $locale['mon_decimal_point'], 
        $flags['nogroup'] ? '' : $locale['mon_thousands_sep']); 
      $value = @explode($locale['mon_decimal_point'], $value); 

      $n = strlen($prefix) + strlen($currency) + strlen($value[0]); 
      if ($left > 0 && $left > $n) { 
        $value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0]; 
      } 
      $value = implode($locale['mon_decimal_point'], $value); 
      if ($locale["{$letter}_cs_precedes"]) { 
        $value = $prefix . $currency . $space . $value . $suffix; 
      } else { 
        $value = $prefix . $value . $space . $currency . $suffix; 
      } 
      if ($width > 0) { 
        $value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ? 
          STR_PAD_RIGHT : STR_PAD_LEFT); 
      } 

      $format = str_replace($fmatch[0], $value, $format); 
    } 
    return $format; 
  } 
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc