$row){ foreach($row AS $key=>$value){ $sort_arr[$key][$uniqid] = $value; } } array_multisort($sort_arr[$KEY],constant($ASC),$mass); return $mass; } function pr($arg) { $is_cli = false; if (php_sapi_name() == 'cli') { $is_cli = true; } if ($is_cli) echo PHP_EOL; else echo ""; if (!isset($arg)) echo "pr(): value not set"; elseif (is_object($arg)) echo print_r($arg); elseif (is_bool($arg)) if($arg) echo "true"; else echo "false"; elseif (!is_array($arg)) echo "pr() string: '$arg'"; elseif (!count($arg)) echo "pr(): array empty"; else print_r($arg); if ($is_cli) echo PHP_EOL; else echo ""; } function cdie( $text = '' ) { global $auth; if (isset($auth)){ $auth->saveSession(); } die( $text . '
Перейти на главную страницу' ); } function ajax_send( $text = '' ) { global $auth; $auth->saveSession(); die( $text ); } function _redirect($url='', $frame_msg = 'OK', $frame_redirect = false) { // Сохраняем сессию global $auth; if ( is_object($auth) ) { $auth->saveSession(); } // Если ajax запрос if ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) { if ($_POST['ajaxsubmit'] || $_GET['ajaxsubmit']) { $resp = []; $resp['html'] = $frame_msg; if ($url) { $resp['redirect'] = $url; } else { $resp['reload'] = true; } echo json_encode($resp); exit(); } else { echo ''; if ( $url ) { echo ""; } else { echo ''; } echo ''; exit(); } } // Если ничего из прошлого - просто редирект if (!$url ) $url = _SITE_ROOT_; Header ('Location: '.$url, true, 301); exit(); } function _getcurl ($isk='') { if (!is_array($isk)) $iskl[] = $isk; else $iskl=$isk; foreach ($_GET as $key => $val) { if (!is_array($val)) { $val = htmlspecialchars($val); if (!in_array($key,$iskl)) $cmass[]="$key=$val"; } else { $cmass[] = http_build_query(array($key=>$val)); } } $curl = "?" . @implode('&', $cmass); return $curl; } function _getMonthName($day, $skl = false) { $day = intval($day); $months = array ( 1 => 'Январь', 2 => 'Февраль', 3 => 'Март', 4 => 'Апрель', 5 => 'Май', 6 => 'Июнь', 7 => 'Июль', 8 => 'Август', 9 => 'Сентябрь', 10 => 'Октябрь', 11 => 'Ноябрь', 12 => 'Декабрь' ); $months_skl = array ( 1 => 'января', 2 => 'февраля', 3 => 'марта', 4 => 'апреля', 5 => 'мая', 6 => 'июня', 7 => 'июля', 8 => 'августа', 9 => 'сентября', 10 => 'октября', 11 => 'ноября', 12 => 'декабря' ); if ($skl ) { return $months_skl[$day]; } else { return $months[$day]; } } function _getNedName($day, $full = true) { $day = intval($day); if ($full) { $months = array ( 0 => 'Воскресение', 1 => 'Понедельник', 2 => 'Вторник', 3 => 'Среда', 4 => 'Четверг', 5 => 'Пятница', 6 => 'Суббота', 7 => 'Воскресение', ); } else { $months = array ( 0 => 'Вс', 1 => 'Пн', 2 => 'Вт', 3 => 'Ср', 4 => 'Чт', 5 => 'Пт', 6 => 'Сб', 7 => 'Вс', ); } return $months[$day]; } function trim_array( $val ) { return array_diff($val, array('')); } /* karnaval utils */ function translit($str) { $tr = array( "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G", "Д"=>"D","Е"=>"E","Ё"=>"E","Ж"=>"Zh","З"=>"Z","И"=>"I", "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N", "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T", "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"C","Ч"=>"Ch", "Ш"=>"Sh","Щ"=>"Sch","Ъ"=>"","Ы"=>"Y","Ь"=>"", "Э"=>"E","Ю"=>"Yu","Я"=>"Ya","а"=>"a","б"=>"b", "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"zh", "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"", "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"," "=>"-","("=>"",")"=>"","'"=>"",'"'=>"" ); return strtr($str,$tr); } function nf($str, $color = false) { $c = number_format($str, 0, '.', ' '); if ($color) { if ($str < 0 ) { return ''.$c.''; } else { return ''.$c.''; } } else { return $c; } } function mf($str) { return number_format($str, 2, '.', ' '); } //цена прописью function int2word($price) { $price = number_format($price, 2, '.', ''); $point = strpos($price, '.'); //отделяем рубли от копеек if(!empty($point)) { $rub = substr($price, 0, $point); $kop = substr($price, $point + 1); } //преобразуем рубли $str = write_number_in_words($rub) ; //пишем рублей(ь,я) $word = " рублей"; //последнее число $last_digit = $rub[(strlen($rub) - 1)]; //предпоследнее число $pred_last_digit = $rub[(strlen($rub) - 2)]; if($last_digit == '1' && $pred_last_digit != '1') $word = " рубль"; elseif(($last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1') $word = " рубля"; $str .= $word; //преобразуем копейки if(!empty($kop)) { $str .= write_number_in_words($kop, 'femininum') ; //пишем копейка (и, ек) $word = " копеек"; //последнее число $last_digit = $kop[(strlen($kop) - 1)]; //предпоследнее число $pred_last_digit = $kop[(strlen($kop) - 2)]; if($last_digit == '1' && $pred_last_digit != '1') $word = " копейка"; elseif(($last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1' ) $word = " копейки"; $str .= $word; } return $str; } //допустимый диапазон чисел 0 .. 999999 //число прописью function write_number_in_words ($num, $genus = 'masculinum') { //разряд: единицы, десятки, сотни, тысячи $cur_order = "единицы"; $cur_thousands_order = "единицы"; if($num == 0) return " 00"; $num = strval($num); $limit = strlen($num) - 1; for($i = $limit; $i >= 0; $i--) { //тысячный разряд if($cur_order == "тысячи") { //сотни if($cur_thousands_order == "сотни") { $str = write_units_hundreds($num[$i]).$str; } //десятки if($cur_thousands_order == "десятки") { $str = write_units_tens($num[$i], $next_digit).$str; $cur_thousands_order = "сотни"; $next_digit = ''; } //единицы if($cur_thousands_order == "единицы") { if($i > 0 && $num[$i-1] == "1") { $next_digit = $num[$i]; $str = " тысяч".$str; } else $str = write_units_thousands_units($num[$i]).$str; $cur_thousands_order = "десятки"; } } //сотни if($cur_order == "сотни") { $str = write_units_hundreds($num[$i]).$str; $cur_order = "тысячи"; } //десятки if($cur_order == "десятки") { $str = write_units_tens($num[$i], $next_digit).$str; $cur_order = "сотни"; $next_digit = ''; } //единицы if($cur_order == "единицы") { if($i > 0 && $num[$i-1] == "1") $next_digit = $num[$i]; else $str = write_units($num[$i], $genus); $cur_order = "десятки"; } } return($str); } //принадлежит функции write_number_in_words //преобразует десятки function write_units_tens ($tens, $next_digit) { $tens .= $next_digit; if($tens == 2) $str_tens = " двадцать"; if($tens == 3) $str_tens = " тридцать"; if($tens == 4) $str_tens = " сорок"; if($tens == 5) $str_tens = " пятьдесят"; if($tens == 6) $str_tens = " шестьдесят"; if($tens == 7) $str_tens = " семьдесят"; if($tens == 8) $str_tens = " восемьдесят"; if($tens == 9) $str_tens = " девяносто"; if($tens == 10) $str_tens = " десять"; if($tens == 11) $str_tens = " одиннадцать"; if($tens == 12) $str_tens = " двенадцать"; if($tens == 13) $str_tens = " тринадцать"; if($tens == 14) $str_tens = " четырнадцать"; if($tens == 15) $str_tens = " пятнадцать"; if($tens == 16) $str_tens = " шестнадцать"; if($tens == 17) $str_tens = " семнадцать"; if($tens == 18) $str_tens = " восемнадцать"; if($tens == 19) $str_tens = " девятнадцать"; return($str_tens); } //принадлежит функции write_number_in_words //преобразует сотни function write_units_hundreds ($hundreds) { if($hundreds == 1) $str_hundreds = " сто"; if($hundreds == 2) $str_hundreds = " двести"; if($hundreds == 3) $str_hundreds = " триста"; if($hundreds == 4) $str_hundreds = " четыреста"; if($hundreds == 5) $str_hundreds = " пятьсот"; if($hundreds == 6) $str_hundreds = " шестьсот"; if($hundreds == 7) $str_hundreds = " семьсот"; if($hundreds == 8) $str_hundreds = " восемьсот"; if($hundreds == 9) $str_hundreds = " девятьсот"; return($str_hundreds); } //принадлежит функции write_number_in_words //преобразует единицы тысячного разряда function write_units_thousands_units ($hundreds) { if($hundreds == 0) $str_hundreds = " тысяч"; if($hundreds == 1) $str_hundreds = " одна тысяча"; if($hundreds == 2) $str_hundreds = " две тысячи"; if($hundreds == 3) $str_hundreds = " три тысячи"; if($hundreds == 4) $str_hundreds = " четыре тысячи"; if($hundreds == 5) $str_hundreds = " пять тысяч"; if($hundreds == 6) $str_hundreds = " шесть тысяч"; if($hundreds == 7) $str_hundreds = " семь тысяч"; if($hundreds == 8) $str_hundreds = " восемь тысяч"; if($hundreds == 9) $str_hundreds = " девять тысяч"; return($str_hundreds); } //принадлежит функции write_number_in_words //преобразует единицы function write_units ($units, $genus='masculinum') { if($genus == 'masculinum') { if($units == 1) $str_units = " один"; if($units == 2) $str_units = " два"; } if($genus == 'femininum') { if($units == 1) $str_units = " одна"; if($units == 2) $str_units = " две"; } if($units == 3) $str_units = " три"; if($units == 4) $str_units = " четыре"; if($units == 5) $str_units = " пять"; if($units == 6) $str_units = " шесть"; if($units == 7) $str_units = " семь"; if($units == 8) $str_units = " восемь"; if($units == 9) $str_units = " девять"; return($str_units); } /** * Переключает раскладку с англ. на русскую */ function textswitch($text, $revert = false) { $remap_table = ["q"=>"й","w"=>"ц","e"=>"у","r"=>"к","t"=>"е","y"=>"н","u"=>"г","i"=>"ш","o"=>"щ","p"=>"з","["=>"х","]"=>"ъ", "a"=>"ф","s"=>"ы","d"=>"в","f"=>"а","g"=>"п","h"=>"р","j"=>"о","k"=>"л","l"=>"д",";"=>"ж","'"=>"э", "z"=>"я","x"=>"ч","c"=>"с","v"=>"м","b"=>"и","n"=>"т","m"=>"ь",","=>"б","."=>"ю", "Q"=>"Й","W"=>"Ц","E"=>"У","R"=>"К","T"=>"Е","Y"=>"Н","U"=>"Г","I"=>"Ш","O"=>"Щ","P"=>"З","{"=>"Х","}"=>"Ъ", "A"=>"Ф","S"=>"Ы","D"=>"В","F"=>"А","G"=>"П","H"=>"Р","J"=>"О","K"=>"Л","L"=>"Д",":"=>"Ж",'"'=>"Э", "Z"=>"Я","X"=>"Ч","C"=>"С","V"=>"М","B"=>"И","N"=>"Т","M"=>"Ь","<"=>"Б",">"=>"Ю","/"=>".","?"=>",", "~"=>"Ё","@"=>'"',"#"=>"№","$"=>";","^"=>":","&"=>"?","|"=>"/","`"=>"ё"]; if ($revert) { $remap_table = array_flip($remap_table); } return strtr($text, $remap_table); } function addLog($str, $file = "global_log" ) { $filename = _PROJECT_DIR.'engine/logs/'.$file.'_'.date('Y-m').'.log'; if(!file_exists(dirname($filename))) { mkdir(dirname($filename), 0777, true); chmod(dirname($filename), 0777); } if (!file_exists($filename)) { file_put_contents($filename,""); chmod($filename, 0777); } file_put_contents($filename, '['.date('d.m.Y H:i:s')."]\n". $_SERVER['REMOTE_ADDR'] ."\n" . $str ."\n\n", FILE_APPEND ); } function getFirst() { $args = func_get_args(); foreach( $args as $v ){ if ($v) return $v; } } function wordForm($n, $form1, $form2, $form5) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; if ($n1 > 1 && $n1 < 5) return $form2; if ($n1 == 1) return $form1; return $form5; } function admin_report($msg = '', $title = 'Оповещение для администрации') { if ($msg) { require_once( _CFG_DIR . '/core/mail.core.php' ); $mail = new send_mail(); $mail->to_pool( _ADMIN_MAIL, $title, $msg ); } } function s_natksort(&$array) { $keys = array_keys($array); natcasesort($keys); foreach ($keys as $k) { $new_array[$k] = $array[$k]; } $array = $new_array; return true; } function column_sort($arr, $columns = 3) { // Сортировка массива для вывода в нужное количество колонок if ($columns < 2 ) return $arr; $acnt = count($arr); if ($columns >= $acnt ) { return $arr; } $karr = array_keys($arr); $step = ceil($acnt / $columns); $ost = $acnt % $columns; if (!$ost) $ost = $columns; for( $i = 0; $i < $step; $i++ ) { $step_once = $step; $k = 0; for( $j = $i; $j <= $acnt; $j+=$step_once ) { if (isset( $karr[$j] ) ) { $key = $karr[$j]; $ret[] = $arr[$key]; } if (++$k > $ost ) { $step_once = $step - 1; } } } /* Удаляем лишние элементы */ if (count($ret) > $acnt ) { $todel = count($ret) - $acnt; for( $i = 1; $i<=$todel; $i++ ) { array_pop($ret); } } return $ret; } function sec2str($sec, $reverse = false, $short = false, $ret_count = 0) { $data = secondsToTime($sec); $str = array(); if (!$short ) { if ($data['d']) $str[] = $data['d'] . wordForm($data['d'], ' день', ' дня', ' дней'); if ($data['h']) $str[] = $data['h'] . wordForm($data['h'], ' час', ' часа', ' часов'); if ($reverse) { // склонение в прошлом if ($data['m']) $str[] = $data['m'] . wordForm($data['m'], ' минуту', ' минуты', ' минут'); $str[] = $data['s'] . wordForm($data['s'], ' секунду', ' секунды', ' секунд'); } else { if ($data['m']) $str[] = $data['m'] . wordForm($data['m'], ' минута', ' минуты', ' минут'); $str[] = $data['s'] . wordForm($data['s'], ' секунда', ' секунды', ' секунд'); } } else { if ($data['d']) $str[] = $data['d'] . ' дн'; if ($data['h']) $str[] = $data['h'] . ' ч'; if ($data['m']) $str[] = $data['m'] . ' мин'; $str[] = $data['s'] . ' сек'; } if ($ret_count) { $str = array_slice($str, 0, $ret_count); } return implode(" ", $str); } function secondsToTime($inputSeconds) { $secondsInAMinute = 60; $secondsInAnHour = 60 * $secondsInAMinute; $secondsInADay = 24 * $secondsInAnHour; // extract days $days = floor($inputSeconds / $secondsInADay); // extract hours $hourSeconds = $inputSeconds % $secondsInADay; $hours = floor($hourSeconds / $secondsInAnHour); // extract minutes $minuteSeconds = $hourSeconds % $secondsInAnHour; $minutes = floor($minuteSeconds / $secondsInAMinute); // extract the remaining seconds $remainingSeconds = $minuteSeconds % $secondsInAMinute; $seconds = ceil($remainingSeconds); // return the final array $obj = array( 'd' => (int) $days, 'h' => (int) $hours, 'm' => (int) $minutes, 's' => (int) $seconds, ); return $obj; } function getImagePath($val) { $val = sprintf('%02d/%02d/%d', substr(intval($val), 0, 2), substr(intval($val), 2, 2), $val ); return $val; } function getImageUrl($val) { $val = sprintf('%02d/%02d/%d', substr(intval($val), 0, 2), substr(intval($val), 2, 2), $val); return _STATIC_ROOT_ . 'images/'.$val.'.jpg'; } function gen_uuid() { $uuid = array( 'time_low' => 0, 'time_mid' => 0, 'time_hi' => 0, 'clock_seq_hi' => 0, 'clock_seq_low' => 0, 'node' => array() ); $uuid['time_low'] = mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16); $uuid['time_mid'] = mt_rand(0, 0xffff); $uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000)); $uuid['clock_seq_hi'] = (1 << 7) | (mt_rand(0, 128)); $uuid['clock_seq_low'] = mt_rand(0, 255); for ($i = 0; $i < 6; $i++) { $uuid['node'][$i] = mt_rand(0, 255); } $uuid = sprintf('%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', $uuid['time_low'], $uuid['time_mid'], $uuid['time_hi'], $uuid['clock_seq_hi'], $uuid['clock_seq_low'], $uuid['node'][0], $uuid['node'][1], $uuid['node'][2], $uuid['node'][3], $uuid['node'][4], $uuid['node'][5] ); return $uuid; } function time_ago( $timestamp = 0, $now = 0 ) { // Set up our variables. $minute_in_seconds = 60; $hour_in_seconds = $minute_in_seconds * 60; $day_in_seconds = $hour_in_seconds * 24; $week_in_seconds = $day_in_seconds * 7; $month_in_seconds = $day_in_seconds * 30; $year_in_seconds = $day_in_seconds * 365; // Get the current time if a reference point has not been provided. if ( 0 === $now ) { $now = time(); } // Make sure the timestamp to check is in the past. if ( $timestamp > $now ) { /*throw new Exception( 'Timestamp is in the future' );*/ return 'в будущем'; } // Calculate the time difference between the current time reference point and the timestamp we're comparing. $time_difference = (int) abs( $now - $timestamp ); // Calculate the time ago using the smallest applicable unit. if ( $time_difference < $hour_in_seconds ) { $difference_value = round( $time_difference / $minute_in_seconds ); $difference_label = array('минуту', 'минуты', 'минут'); } elseif ( $time_difference < $day_in_seconds ) { $difference_value = round( $time_difference / $hour_in_seconds ); $difference_label = array('час', 'часа', 'часов'); } elseif ( $time_difference < $week_in_seconds ) { $difference_value = round( $time_difference / $day_in_seconds ); $difference_label = array('день', 'дня', 'дней'); } elseif ( $time_difference < $month_in_seconds ) { $difference_value = round( $time_difference / $week_in_seconds ); $difference_label = array('неделю', 'недели', 'недель'); } elseif ( $time_difference < $year_in_seconds ) { $difference_value = round( $time_difference / $month_in_seconds ); $difference_label = array('месяц', 'месяца', 'месяцев'); } else { $difference_value = round( $time_difference / $year_in_seconds ); $difference_label = array('год', 'года', 'лет'); } $label = wordForm($difference_value, $difference_label[0], $difference_label[1], $difference_label[2]); $time_ago = sprintf( '%s %s назад', $difference_value, $label ); return $time_ago; } function human_filesize($size, $precision = 2) { for($i = 0; ($size / 1024) > 0.9; $i++, $size /= 1024) {} return round($size, $precision).['Б','Кб','Мб','Гб','Тб','Пб','Еб','Зб','Юб'][$i]; } function xml_escape($str ) { return htmlspecialchars($str, ENT_XML1 | ENT_COMPAT, 'UTF-8'); } function get_cfrm() { global $uauth; $ts = time(); $data = md5($ts . $uauth->sess_id . $_SERVER['REMOTE_ADDR']); $data = $ts.'.'.$data; return $data; } function check_cfrm($str = '') { if ( !$str ) return false; global $uauth; list($ts,$data) = explode('.', $str); if ((time() - $ts) > 600) return false; $check = md5($ts . $uauth->sess_id . $_SERVER['REMOTE_ADDR']); if ($check != $data) return false; return true; } function ceilCoefficient($number, $rate = 50) { // если число дробное, то округляем его до целого $number = ceil($number); // разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент $rest = ceil($number / $rate) * $rate; return $rest; } function doDebug($level = 'errors') { switch ($level) { case 'full': error_reporting(E_ALL & ~E_NOTICE); break; default: error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED); break; } ini_set('display_errors', 'On'); $whoops = new \Whoops\Run(); $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler()); $whoops->register(); } function date2humanString($ts) { static $d1, $d2, $d3; if (!$d1 ) $d1 = date('Ymd'); if (!$d2 ) $d2 = date('Ymd', mktime(0,0,0,date('m'),date('d')+1, date('Y'))); if (!$d3 ) $d3 = date('Ymd', mktime(0,0,0,date('m'),date('d')+2, date('Y'))); switch( date('Ymd',$ts) ) { case $d1: return 'сегодня'; break; case $d2: return 'завтра'; break; case $d3: return 'послезавтра'; break; default: return date('d', $ts) . ' ' . _getMonthName(date('m', $ts), true); break; } } // Не работает если в разных проектах файлы с одинаковым именем function multiRunCheck() { if(php_sapi_name() !=="cli") return true; global $argv; $cmd = "ps aux | grep '" . $argv[0] . "' | grep -v 'grep'"; exec($cmd, $output); if (count($output) > 2) { // В ответе 2 строки, т.к. cron пораждает дочерний процесс, в котором тоже присутсвует название файла die('double run'); } return true; } function displayError($body, $title ="", $btns = []) { global $R; $tpl = $R->getTpl('order_blanks/generalErrorTemplate.htm'); if (!$title) $title = "Ошибка"; $tpl = $R->set('title', $title, $tpl); $tpl = $R->set('body', $body, $tpl); if (!empty($btns)) { foreach ($btns as $btn) { if (!isset($btn['class'])) $btn['class'] = 'btn-primary'; $btnHtml = ''.$btn['title'].''; $tpl = $R->parse('btns', $btnHtml, $tpl); } } else { if ( $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' ) { $tpl = $R->set('btns', "Вернуться назад", $tpl); } } return $R->clear($tpl); } ?>