AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

851 lines
19 KiB

7 years ago
<?php
7 years ago
// Язык системы
function set_locale()
{
$acp_language = empty($_SESSION['admin_language'])
? $_SESSION['user_language']
: $_SESSION['admin_language'];
$locale = strtolower(defined('ACP')
? $acp_language
: $_SESSION['user_language']);
switch ($locale)
{
case 'ru':
@setlocale(LC_ALL, 'ru_RU.UTF-8', 'rus_RUS.UTF-8', 'russian');
@setlocale(LC_NUMERIC, "C");
break;
case 'bg':
@setlocale(LC_ALL, 'bg_BG.UTF-8', 'bgr_BGR.UTF-8', 'bulgarian');
@setlocale(LC_NUMERIC, "C");
break;
default:
@setlocale (LC_ALL, $locale . '_' . strtoupper($locale), $locale, '');
break;
}
}
/**
* Переводит в нижний регистр
*
* @param string $string строка для перевода в нижний регистр
* @return string
*/
function _strtolower($string)
{
$language = (defined('ACP') && ACP)
? $_SESSION['admin_language']
: $_SESSION['user_language'];
$language = strtolower($language);
switch ($language)
{
case 'de':
return mb_strtolower($string);
break;
case 'en':
return mb_strtolower($string);
break;
case 'ru':
case 'bg':
$small = array('а','б','в','г','д','е','ё','ж','з','и','й',
'к','л','м','н','о','п','р','с','т','у','ф',
'х','ч','ц','ш','щ','э','ю','я','ы','ъ','ь',
'э', 'ю', 'я');
$large = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й',
'К','Л','М','Н','О','П','Р','С','Т','У','Ф',
'Х','Ч','Ц','Ш','Щ','Э','Ю','Я','Ы','Ъ','Ь',
'Э', 'Ю', 'Я');
break;
case 'ua':
case 'uk':
$small = array('а','б','в','г','д','е','є','ж','з','и','і','й','ї',
'к','л','м','н','о','п','р','с','т','у','ф',
'х','ч','ц','ш','щ','ь','ю','я');
$large = array('А','Б','В','Г','Д','Е','Є','Ж','З','И','І','Й','Ї',
'К','Л','М','Н','О','П','Р','С','Т','У','Ф',
'Х','Ч','Ц','Ш','Щ','Ь','Ю','Я');
break;
default:
return mb_strtolower($string);
break;
}
return str_replace($large, $small, $string);
}
/**
* Транслитерация
*
* @param string $string строка для транслитерации
* @return string
*/
function translit_string($string)
{
// $st = htmlspecialchars_decode($st);
//
// // Convert all named HTML entities to numeric entities
// $st = preg_replace_callback('/&([a-zA-Z][a-zA-Z0-9]{1,7});/', 'convert_entity', $st);
//
// // Convert all numeric entities to their actual character
// $st = preg_replace('/&#x([0-9a-f]{1,7});/ei', 'chr(hexdec("\\1"))', $st);
// $st = preg_replace('/&#([0-9]{1,7});/e', 'chr("\\1")', $st);
//
$language = (defined('ACP') && ACP)
? $_SESSION['admin_language']
: $_SESSION['user_language'];
$language = strtolower($language);
switch ($language)
{
default:
case 'ru':
$table = array(
//-- Заглавные
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Д' => 'D',
'Е' => 'E',
'Ё' => 'YO',
'Ж' => 'ZH',
'З' => 'Z',
'И' => 'I',
'Й' => 'J',
'К' => 'K',
'Л' => 'L',
'М' => 'M',
'Н' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'C',
'Ч' => 'CH',
'Ш' => 'SH',
'Щ' => 'CSH',
'Ь' => '',
'Ы' => 'Y',
'Ъ' => '',
'Э' => 'E',
'Ю' => 'YU',
'Я' => 'YA',
//-- Строчные
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'д' => 'd',
'е' => 'e',
'ё' => 'yo',
'ж' => 'zh',
'з' => 'z',
'и' => 'i',
'й' => 'j',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'c',
'ч' => 'ch',
'ш' => 'sh',
'щ' => 'csh',
'ь' => '',
'ы' => 'y',
'ъ' => '',
'э' => 'e',
'ю' => 'yu',
'я' => 'ya',
);
break;
//болгарский
case 'bg':
$table = array(
//-- Заглавные
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Д' => 'D',
'Е' => 'E',
'Ё' => 'YO',
'Ж' => 'ZH',
'З' => 'Z',
'И' => 'I',
'Й' => 'J',
'К' => 'K',
'Л' => 'L',
'М' => 'M',
'Н' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'C',
'Ч' => 'CH',
'Ш' => 'SH',
'Щ' => 'SHT',
'Ь' => 'Y',
'Ы' => 'Y',
'Ъ' => 'A',
'Э' => 'E',
'Ю' => 'YU',
'Я' => 'YA',
//-- Строчные
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'д' => 'd',
'е' => 'e',
'ё' => 'yo',
'ж' => 'zh',
'з' => 'z',
'и' => 'i',
'й' => 'j',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'c',
'ч' => 'ch',
'ш' => 'sh',
'щ' => 'sht',
'ь' => 'a',
'ы' => 'y',
'ъ' => 'a',
'э' => 'e',
'ю' => 'yu',
'я' => 'ya',
);
break;
//-- українська мова:
case 'ua':
$table = array(
//-- Заглавные
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Д' => 'D',
'Е' => 'E',
'Є' => 'IE',
'Ж' => 'J',
'З' => 'Z',
'И' => 'Y',
'І' => 'I',
'Й' => 'I',
'К' => 'K',
'Л' => 'L',
'М' => 'M',
'Н' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'C',
'Ч' => 'CH',
'Ш' => 'SH',
'Щ' => 'CSH',
'Ь' => '',
'Ю' => 'IU',
'Я' => 'IA',
//-- Строчные
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'д' => 'd',
'е' => 'e',
'є' => 'ie',
'ж' => 'j',
'з' => 'z',
'и' => 'y',
'і' => 'i',
'й' => 'i',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'c',
'ч' => 'ch',
'ш' => 'sh',
'щ' => 'csh',
'ь' => '',
'ю' => 'iu',
'я' => 'ia',
);
break;
case 'uk':
$table = array(
//-- Заглавные
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Ґ' => 'G',
'Д' => 'D',
'Е' => 'E',
'Є' => 'IE',
'Ж' => 'J',
'З' => 'Z',
'И' => 'Y',
'І' => 'I',
'Й' => 'I',
'К' => 'K',
'Л' => 'L',
'М' => 'M',
'Н' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'C',
'Ч' => 'CH',
'Ш' => 'SH',
'Щ' => 'CSH',
'Ь' => '',
'Ю' => 'IU',
'Я' => 'IA',
//-- Строчные
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'ґ' => 'g',
'д' => 'd',
'е' => 'e',
'є' => 'ie',
'ж' => 'j',
'з' => 'z',
'и' => 'y',
'і' => 'i',
'й' => 'i',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'c',
'ч' => 'ch',
'ш' => 'sh',
'щ' => 'csh',
'ь' => '',
'ю' => 'iu',
'я' => 'ia',
);
break;
//-- polski język
case 'pl':
$table = array(
'Ą' => 'ya',
'ą' => 'ya',
'Ć' => 'ya',
'ć' => 'ya',
'Ę' => 'ya',
'ę' => 'ya',
'Ł' => 'ya',
'ł' => 'ya',
'Ń' => 'ya',
'ń' => 'ya',
'Ó' => 'ya',
'ó' => 'ya',
'Ś' => 'ya',
'ś' => 'ya',
'Ź' => 'ya',
'ź' => 'ya',
'Ż' => 'ya',
'ż' => 'ya',
);
break;
}
$string = str_replace(array_keys($table), array_values($table), $string);
switch ($language)
{
default:
case 'ru':
$replace = array(
'ье'=>'ye',
'ъе'=>'ye',
'ьи'=>'yi',
'ъи'=>'yi',
'ъо'=>'yo',
'ьо'=>'yo',
'ё'=>'yo',
'ю'=>'yu',
'я'=>'ya',
'ж'=>'zh',
'х'=>'kh',
'ц'=>'ts',
'ч'=>'ch',
'ш'=>'sh',
'щ'=>'shch',
'ъ'=>'',
'ь'=>'',
'є'=>'ye'
);
break;
case 'bg':
$replace = array(
'ье'=>'ye',
'ъе'=>'ye',
'ьи'=>'yi',
'ъи'=>'yi',
'ъо'=>'yo',
'ьо'=>'yo',
'ё'=>'yo',
'ю'=>'yu',
'я'=>'ya',
'ж'=>'zh',
'ц'=>'ts',
'ч'=>'ch',
'ш'=>'sh',
'щ'=>'sht',
'ъ'=>'a',
'ь'=>'a'
);
break;
}
$string = strtr($string, $replace);
switch ($language)
{
default:
case 'ru':
$search = 'абвгдезийклмнопрстуфыэі';
$replace = 'abvgdeziyklmnoprstufyei';
break;
case 'ua':
$search = 'абвгґдеєжзиійїклмнопрстуфхцчшщьюя';
$replace = 'abvggdeejzyiiklmnoprstufhccssua';
break;
case 'uk':
$search = 'абвгґдеєжзиійїклмнопрстуфхцчшщьюя';
$replace = 'abvggdeejzyiiklmnoprstufhccssua';
break;
case 'bg':
$search = 'абвгдезийклмнопрстуфыэіъ';
$replace = 'abvgdeziyklmnoprstufyeia';
break;
}
$string = strtr($string, $search, $replace);
return trim($string, '-');
}
/**
* Исправление форматирования даты
* Функцию можно использовать в шаблонах Smarty как модификатор
*
* @param string $string - дата отформатированная в соответствии с текущей локалью
* @param string $language - язык
* @return string
*/
function pretty_date($string, $language = '')
{
// пытаемся решить проблему для кодировки дат на лок. серверах
if (! mb_check_encoding($string, 'UTF-8'))
{
$string = iconv('Windows-1251', 'UTF-8', $string);
}
if ($language == '')
{
$language = (defined('ACP') && ACP)
? $_SESSION['admin_language']
: $_SESSION['user_language'];
}
$language = strtolower($language);
switch ($language)
{
default:
case 'ru':
$pretty = array(
'Январь' =>'января', 'Февраль' =>'февраля', 'Март' =>'марта',
'Апрель' =>'апреля', 'Май' =>'мая', 'Июнь' =>'июня',
'Июль' =>'июля', 'Август' =>'августа', 'Сентябрь'=>'сентября',
'Октябрь' =>'октября', 'Ноябрь' =>'ноября', 'Декабрь' =>'декабря',
'воскресенье'=>'Воскресенье', 'понедельник'=>'Понедельник', 'вторник' =>'Вторник',
'среда' =>'Среда', 'четверг' =>'Четверг', 'пятница' =>'Пятница',
'суббота' =>'Суббота'
);
break;
case 'ua':
case 'uk':
$pretty = array(
'Січень' =>'січня', 'Лютий' =>'лютого', 'Березень'=>'березня',
'Квітень'=>'квітня', 'Травень' =>'травня', 'Червень' =>'червня',
'Липень' =>'липня', 'Серпень' =>'серпня', 'Вересень'=>'вересня',
'Жовтень'=>'жовтня', 'Листопад' =>'листопада', 'Грудень' =>'грудня',
'неділя' =>'Неділя', 'понеділок'=>'Понеділок', 'вівторок'=>'Вівторок',
'середа' =>'Середа', 'четвер' =>'Четвер', 'п’ятниця'=>'П’ятниця',
'субота' =>'Субота'
);
break;
}
return (isset($pretty)
? strtr($string, $pretty)
: $string);
}
/**
* Функция перевода даты с en на ru
*
* @param string $data данные
* @return string
*/
function translate_date($data)
{
$language = (defined('ACP') && ACP)
? $_SESSION['admin_language']
: $_SESSION['user_language'];
$language = strtolower($language);
switch ($language)
{
default:
case 'ru':
$data = strtr($data, array(
'January'=>'Января',
'February'=>'Февраля',
'March'=>'Марта',
'April'=>'Апреля',
'May'=>'Мая',
'June'=>'Июня',
'July'=>'Июля',
'August'=>'Августа',
'September'=>'Сентября',
'October'=>'Октября',
'November'=>'Ноября',
'December'=>'Декабря',
'Jan'=>'Янв',
'Feb'=>'Фев',
'Mar'=>'Мрт',
'Apr'=>'Апр',
'May'=>'Май',
'Jun'=>'Июн',
'Jul'=>'Июл',
'Aug'=>'Авг',
'Sep'=>'Сен',
'Oct'=>'Окт',
'Nov'=>'Нбр',
'Dec'=>'Дек',
'Monday'=>'Понедельник',
'Tuesday'=>'Вторник',
'Wednesday'=>'Среда',
'Thursday'=>'Четверг',
'Friday'=>'Пятница',
'Saturday'=>'Суббота',
'Sunday'=>'Воскресенье',
'Mon'=>'Пн',
'Tue'=>'Вт',
'Wed'=>'Ср',
'Thu'=>'Чт',
'Fri'=>'Пт',
'Sat'=>'Сб',
'Sun'=>'Вс'
));
break;
case 'ua':
case 'uk':
$data = strtr($data, array(
'January'=>'Січня',
'February'=>'Лютого',
'March'=>'Березня',
'April'=>'Квітня',
'May'=>'Травня',
'June'=>'Червня',
'July'=>'Липня',
'August'=>'Серпня',
'September'=>'Вересня',
'October'=>'Жовтня',
'November'=>'Листопада',
'December'=>'Грудня',
'Jan'=>'Січ',
'Feb'=>'Лют',
'Mar'=>'Бер',
'Apr'=>'Кві',
'May'=>'Тра',
'Jun'=>'Чер',
'Jul'=>'Лип',
'Aug'=>'Сер',
'Sep'=>'Вер',
'Oct'=>'Жов',
'Nov'=>'Лис',
'Dec'=>'Гру',
'Monday'=>'Понеділок',
'Tuesday'=>'Вівторок',
'Wednesday'=>'Середа',
'Thursday'=>'Четвер',
'Friday'=>'П’ятниця',
'Saturday'=>'Субота',
'Sunday'=>'Неділя',
'Mon'=>'Пн',
'Tue'=>'Вт',
'Wed'=>'Ср',
'Thu'=>'Чт',
'Fri'=>'Пт',
'Sat'=>'Сб',
'Sun'=>'Нд'
));
break;
case 'bg':
$data = strtr($data, array(
'January'=>'Януари',
'February'=>'Февруари',
'March'=>'Март',
'April'=>'Април',
'May'=>'Май',
'June'=>'Юни',
'July'=>'Юли',
'August'=>'Август',
'September'=>'Септември',
'October'=>'Октомври',
'November'=>'Нември',
'December'=>'Декември',
'Jan'=>'Яну',
'Feb'=>'Фев',
'Mar'=>'Мрт',
'Apr'=>'Апр',
'May'=>'Май',
'Jun'=>'Юни',
'Jul'=>'Юли',
'Aug'=>'Авг',
'Sep'=>'Сеп',
'Oct'=>'Окт',
'Nov'=>'Ное',
'Dec'=>'Дек',
'Monday'=>'Понеделник',
'Tuesday'=>'Вторник',
'Wednesday'=>'Сряда',
'Thursday'=>'Четвъртък',
'Friday'=>'Петък',
'Saturday'=>'Събота',
'Sunday'=>'Неделя',
'Mon'=>'Пн',
'Tue'=>'Вт',
'Wed'=>'Ср',
'Thu'=>'Чт',
'Fri'=>'Пт',
'Sat'=>'Сб',
'Sun'=>'Нд'
));
break;
}
return $data;
}
/**
* Подготовка имени файла или директории
*
* @param string $st
* @return string
*/
function prepare_fname($st)
{
$st = strip_tags($st);
$st = strtr($st,'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ',
'abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщьъыэюя');
$st = translit_string(trim($st));
$st = preg_replace(array('/[^a-z0-9_-]/', '/--+/'), '-', $st);
return trim($st, '-');
}
/**
* Отображение даты в фармате
* 25 дней/минут/секунд назад
* и т.д.
*
* @param string $date (TIMESTAMP)
* @return string
*/
function human_date($date)
{
$stf = 0;
$cur_time = time();
$diff = $cur_time - $date;
$language = (defined('ACP') && ACP)
? $_SESSION['admin_language']
: $_SESSION['user_language'];
$language = strtolower($language);
switch ($language)
{
default:
case 'ru':
$seconds = array('секунда', 'секунды', 'секунд');
$minutes = array('минута', 'минуты', 'минут');
$hours = array('час', 'часа', 'часов');
$days = array('день', 'дня', 'дней');
$weeks = array('неделя', 'недели', 'недель' );
$months = array('месяц', 'месяца', 'месяцев');
$years = array('год', 'года', 'лет');
$decades = array('десятилетие', 'десятилетия', 'десятилетий');
$ago = 'назад';
break;
case 'ua':
case 'uk':
$seconds = array('секунда', 'секунди', 'секунд');
$minutes = array('хвилина', 'хвилини', 'хвилин');
$hours = array('година', 'години', 'годин');
$days = array('день', 'дня', 'днів');
$weeks = array('тиждень', 'тижня', 'тижнів' );
$months = array('месяць', 'місяця', 'місяців');
$years = array('рік', 'року', 'років');
$decades = array('десятиріччя', 'десятиріччя', 'десятиріч');
$ago = 'назад';
break;
case 'en':
$seconds = array('second', 'seconds', 'seconds');
$minutes = array('minute', 'minutes', 'minutes');
$hours = array('hour', 'hours', 'hours');
$days = array('day', 'days', 'days');
$weeks = array('week', 'weeks', 'weeks' );
$months = array('month', 'months', 'months');
$years = array('year', 'years', 'years');
$decades = array('decade', 'decades', 'decades');
$ago = 'ago';
break;
}
$phrase = array($seconds, $minutes, $hours, $days, $weeks, $months, $years, $decades);
$length = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
for ($i = sizeof($length) - 1; ($i >= 0) && (($no = $diff / $length[ $i ]) <= 1 ); $i --)
{
;
}
if ($i < 0)
{
$i = 0;
}
$_time = $cur_time - ($diff % $length[$i]);
$no = floor($no);
$value = sprintf("%d %s ", $no, date_phrase($no, $phrase[$i]));
if (($stf == 1) && ($i >= 1) && (($cur_time - $_time) > 0))
{
$value .= time_ago($_time);
}
return $value . $ago;
}
function date_phrase($number, $titles)
{
$cases = array( 2, 0, 1, 1, 1, 2 );
return $titles[($number % 100 > 4 && $number % 100 < 20)
? 2
: $cases[min($number % 10, 5)]];
}
?>