Skip to content
Permalink
Browse files
Merge pull request #740 from tarasfrompir/patch-3
Update common.class.php
  • Loading branch information
sergejey committed May 20, 2020
2 parents 115358b + 7787d1e commit 01edb9d582d4bceabb1e7356eb724d7319d30d46
Showing 4 changed files with 0 additions and 181 deletions.
@@ -1418,16 +1418,6 @@

/* end module names */

/* start array for convert number to string */

'NUMBER_TO_STRING_1TEN' => array( array('','one','two','three','four','five','six','seven', 'eight','nine'), array('','one','two','three','four','five','six','seven', 'eight','nine')),
'NUMBER_TO_STRING_2TEN' => array('ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'),
'NUMBER_TO_STRING_TENS' => array(2=>'twenty ',' thirty ',' forty ',' fifty ',' sixty ',' seventy ',' eighty ',' ninety '),
'NUMBER_TO_STRING_HUNDRED' => array('','one hundred','two hundred','three hundred','four hundred','five hundred','six hundred', 'seven hundred','eight hundred','nine hundred'),
'NUMBER_TO_STRING_UNIT' => array(array(' ' ,' ' , 1), array(' ' ,' point' ,' point' ,0),array('thousand ',' thousands', 'thousands' ,1), array('million ',' million ',' millions' ,0), array('billion', 'billion', 'billion',0)),
'NUMBER_TO_STRING_NULL' => 'zero',

/* end array for convert number to string */

'ENABLE_AUTO_UPDATE' => 'Enable automatic updates',
'AUTO_UPDATE_DELAY' => 'Auto-update safety delay (days)',
@@ -1419,17 +1419,6 @@

/* end module names */

/* start array for convert number to string */

'NUMBER_TO_STRING_1TEN' => array(array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'), array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять')),
'NUMBER_TO_STRING_2TEN' => array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'),
'NUMBER_TO_STRING_TENS' => array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто'),
'NUMBER_TO_STRING_HUNDRED' => array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот'),
'NUMBER_TO_STRING_UNIT' => array(array('десятая' ,'десятых' , 1), array(' ' ,' целая' ,'целых ' ,0), array('тысяча' ,'тысячи' ,'тысяч' ,1), array('миллион' ,'миллиона','миллионов' ,0), array('миллиард','милиарда','миллиардов',0)),
'NUMBER_TO_STRING_NULL' => 'ноль',

/* end array for convert number to string */

'ENABLE_AUTO_UPDATE' => 'Включить автоматическое обновление',
'AUTO_UPDATE_DELAY' => 'Задержка автоматического обновлния (дней)',
'AUTO_UPDATE_TIME' => 'Время проверки и установки обновлений',
@@ -1368,17 +1368,6 @@

/* end module names */

/* start array for convert number to string */

'NUMBER_TO_STRING_1TEN' => array( array('','один','два','три','чотири','п`ять','шість','сім', 'вісім','дев`ять'), array('','одна','дві','три','чотири','п`ять','шість','сім', 'вісім','дев`ять')),
'NUMBER_TO_STRING_2TEN' => array('десять','одиннадцять','дванадцять','тринадцять','чотирнадцять' ,'п`ятнадцять','шістнадцять','сімнадцять','вісімнадцять','дев`ятнадцять'),
'NUMBER_TO_STRING_TENS' => array(2=>'двадцять','тридцять','сорок','п`ятьдесят','шістдесят','сімдесят' ,'вісімдесят','дев`яносто'),
'NUMBER_TO_STRING_HUNDRED' => array('','сто','двісті','триста','чоториста','п`ятсот','шістьсот', 'сімсот','вісімсот','дев`ятсот'),
'NUMBER_TO_STRING_UNIT' => array(array('десята' ,'десятих' , 1), array(' ' ,' ціла' ,'цілих ' ,0),array('тисяча' ,'тисячі' ,'тисяч' ,1), array('мільйон' ,'мільйона','мільйонів' ,0), array('мілльярд','мільярда','мільярдів',0)),
'NUMBER_TO_STRING_NULL' => 'нуль',

/* end array for convert number to string */

);

foreach ($dictionary as $k => $v) {
@@ -1403,152 +1403,3 @@ function get_remote_filesize($url)
}
return $clen; // return size in bytes
}

/**
* Returns number spelling
*/
function num2str($num) {

if (!$num) return;

if (!defined('LANG_NUMBER_TO_STRING_UNIT')) return $num;

list($whole,$tenths) = explode('.',sprintf("%014.1f", floatval($num)));
$out = array();
if (intval($whole)>0) {
foreach(str_split($whole,3) as $uk=>$v) { // by 3 symbols
if (!intval($v)) continue;
$uk = sizeof(LANG_NUMBER_TO_STRING_UNIT)-$uk-1; // unit key
$gender = LANG_NUMBER_TO_STRING_UNIT[$uk][3];
list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
// mega-logic
$out[] = LANG_NUMBER_TO_STRING_HUNDRED[$i1]; # 1xx-9xx
if ($tenths!=0) {
if ($i2>1) $out[]= LANG_NUMBER_TO_STRING_TENS[$i2].' '.LANG_NUMBER_TO_STRING_1TEN[1][$i3]; # 20-99
else $out[]= $i2>0 ? LANG_NUMBER_TO_STRING_2TEN[$i3] : LANG_NUMBER_TO_STRING_1TEN[1][$i3]; # 10-19 | 1-9
} else {
if ($i2>1) $out[]= LANG_NUMBER_TO_STRING_TENS[$i2].' '.LANG_NUMBER_TO_STRING_1TEN[$gender][$i3]; # 20-99
else $out[]= $i2>0 ? LANG_NUMBER_TO_STRING_2TEN[$i3] : LANG_NUMBER_TO_STRING_1TEN[$gender][$i3]; # 10-19 | 1-9
}
// units without rub & kop
if ($uk>1) $out[]= num2straddon($v,LANG_NUMBER_TO_STRING_UNIT[$uk][0],LANG_NUMBER_TO_STRING_UNIT[$uk][1],LANG_NUMBER_TO_STRING_UNIT[$uk][2]);
} //foreach
}
else $out[] = LANG_NUMBER_TO_STRING_NULL;
if ($tenths!=0) {
$out[] = num2straddon(intval($whole), LANG_NUMBER_TO_STRING_UNIT[1][1],LANG_NUMBER_TO_STRING_UNIT[1][2],LANG_NUMBER_TO_STRING_UNIT[1][2]);
$out[] = LANG_NUMBER_TO_STRING_1TEN[1][$tenths].' '.num2straddon($tenths,LANG_NUMBER_TO_STRING_UNIT[0][0],LANG_NUMBER_TO_STRING_UNIT[0][1],LANG_NUMBER_TO_STRING_UNIT[0][1]);
} else {
$out[] = num2straddon(intval($whole), LANG_NUMBER_TO_STRING_UNIT[1][0],LANG_NUMBER_TO_STRING_UNIT[1][0],LANG_NUMBER_TO_STRING_UNIT[1][0]);
}
return trim(preg_replace('/ {2,}/', ' ', join(' ',$out)));
}

/**
* Addition to num2str
*/
function num2straddon($n, $f1, $f2, $f5) {
$n = abs(intval($n)) % 100;
if ($n>10 && $n<20) return $f5;
$n = $n % 10;
if ($n>1 && $n<5) return $f2;
if ($n==1) return $f1;
return $f5;
}

function date2str($date)
{
if (empty($date)) {
return '';
}

$thousands = array(
1 => 'одна тысяча',
2 => 'две тысячи',
);

$hundreds = array(
0 => '',
9 => 'девятьсот',
);

$days = array(
1 => 'первое',
2 => 'второе',
3 => 'третье',
4 => 'четвертое',
5 => 'пятое',
6 => 'шестое',
7 => 'седьмое',
8 => 'восьмое',
9 => 'девятое',
10 => 'десятое',
11 => 'одиннадцатое',
12 => 'двенадцатое',
13 => 'тринадцатое',
14 => 'четырнадцатое',
15 => 'пятнадцатое',
16 => 'шестнадцатое',
17 => 'семнадцатое',
18 => 'восемнадцатое',
19 => 'девятнадцатое',
20 => 'двадцатое',
30 => 'тридцатое',
40 => 'сороковое',
);

$tens = array(
20 => 'двадцать',
30 => 'тридцать',
40 => 'сорок',
);

foreach ($tens as $d => $ten) {
for ($day = 1; $day < 10; $day++) {
$days[$d + $day] = $ten . ' ' . $days[$day];
}
}

$months = array(
0 => 'нулября',
1 => 'января',
2 => 'февраля',
3 => 'марта',
4 => 'апреля',
5 => 'мая',
6 => 'июня',
7 => 'июля',
8 => 'августа',
9 => 'сентября',
10 => 'октября',
11 => 'ноября',
12 => 'декабря',
);

list($year, $month, $day) = explode('-', $date);

$monthStr = $months[(int)$month];
$dayStr = $days[(int)$day];

$yearPart = $days[(int)mb_substr($year, -2)];
$endYear = mb_substr($yearPart, -2);

switch ($endYear) {
case 'ое':
$yearPart = mb_substr($yearPart, 0, -2) . 'ого';
break;
case 'ье':
$yearPart .= 'го';
break;
}

$yearParts = array(
$thousands[(int)$year[0]],
$hundreds[(int)$year[1]],
$yearPart
);

$yearStr = implode(' ', array_filter(array_map('trim', $yearParts)));

return implode(' ', array($dayStr, $monthStr, $yearStr));
}

0 comments on commit 01edb9d

Please sign in to comment.