<?php
class functions extends core {
    // Функция не показывать нули
    public static function nonull($var) {
        if($var > 0):
            return $var;
        endif;
    }
    // Генерация символов
    public static function gennz($strength = NULL) {
        $input = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $input_length = strlen($input);
        $random_string = '';
        for($i = 0; $i < $strength; $i++) {
            $random_character = $input[mt_rand(0, $input_length - 1)];
            $random_string .= $random_character;
        }
        return $random_string;
    }
    // получение размера файлов
    public static function sizeraz($size) {
        if ($size >= 1073741824) {
            $size = round($size / 1073741824 * 100) / 100 . ' Gb';
        } elseif ($size >= 1048576) {
            $size = round($size / 1048576 * 100) / 100 . ' Mb';
        } elseif ($size >= 1024) {
            $size = round($size / 1024 * 100) / 100 . ' Kb';
        } else {
            $size = $size . ' b';
        }

        return $size;
    }
    // Пользователи
    public static function usvv($var) {
        $sql = DB::$dbs->queryFetch('SELECT `id`,`first_name`,`last_name`,`ava`,`ncolor`,`kcolor`,`datelast`,`lvl` FROM `user` WHERE `id` = ? LIMIT 1', [$var]);
        // Онлайн или нет
        if($sql['datelast'] > (time() - 360)):
        	$onl = 1;
        else: // не онлайн
        	$onl = 0;
        endif;
        // админ или нет
        if($sql['lvl'] == 100):
        	$adm = '<i title="Блогер" class="far fa-check" style="color: #5c9ce6;opacity: 0.5;font-size: 13px;vertical-align: 2px;"></i>';
        else:
        	$adm = NULL;
        endif;

        return '<img alt="*" title="пользователь" src="/files/img/us/3.'.$onl.'.png" style="vertical-align: -2px;padding-right: 3px;"> '.functions::grad($sql['first_name'].' '.$sql['last_name'],$sql['ncolor'],$sql['kcolor']).' '.$adm;
    }
    // Уровни доступа
    public static function level($lvl) {
        global $user;
        $sql = DB::$dbs->queryFetch('SELECT `id`,`lvl` FROM `user` WHERE `id` = ? LIMIT 1', [$user['id']]);
        if($sql['lvl'] < $lvl):
            $_SESSION['err'] = 'Ошибка доступа.';
            header('location: /'); exit;
        endif;
    }
    // Транслит
    public static function transliterate($s) {
          $s = (string) $s; // преобразуем в строковое значение
          $s = strip_tags($s); // убираем HTML-теги
          $s = str_replace(["\n", "\r"], " ", $s); // убираем перевод каретки
          $s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
          $s = trim($s); // убираем пробелы в начале и конце строки
          $s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
          $s = strtr($s, ['а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'e','ж'=>'j','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shch','ы'=>'y','э'=>'e','ю'=>'yu','я'=>'ya','ъ'=>'','ь'=>'']);
          $s = preg_replace("/[^0-9a-z-_ ]/i", "", $s); // очищаем строку от недопустимых символов
          $s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
          return $s; // возвращаем результат
    }
    // Функция пагинации
    public static function page($param,$page,$total) {
        if($total > 1): ?>
            <div class="str1">
                <?php if ($page != 1): ?> <a href="<?php echo $param;?>page=1"><span>&laquo;</span></a><? endif;
                ///
                if($page - 2 > 0) echo ' <a href="'.$param.'page='. ($page - 2) .'">'.($page - 2).'</a> ';
                ///
                if($page - 1 > 0) echo ' <a href="'.$param.'page='. ($page - 1) .'">'.($page - 1).'</a> ';
                //
                ?> <a class="str2" href="#"><?=$page?></a> <?php
                //
                if($page + 1 <= $total) echo ' <a href="'.$param.'page='. ($page + 1) .'">'.($page + 1).'</a> ';
                //
                if($page + 2 <= $total) echo ' <a href="'.$param.'page='. ($page + 2) .'">'.($page + 2).'</a> ';
                //
                if ($page != $total): ?> <a href="<?=$param?>page=<?=$total?>"><span>&raquo;</span></a> <?php endif; ?>
            </div>
        <?php endif;
    }
    /// Градиент
    public static function grad($text, $from='', $to='', $mode = 'hex') {
        $text = iconv("UTF-8", "windows-1251", $text);
        if ($mode == 'hex'):
            $to = hexdec($to['0'].$to['1']).','.hexdec($to['2'].$to['3']).','.hexdec($to['4'].$to['5']);
            $from = hexdec($from['0'].$from['1']).",".hexdec($from['2'].$from['3']).",".hexdec($from['4'].$from['5']);
        endif;
        if (empty($text)) return null; else $levels = strlen($text);
        if (empty($from)) $from = array(0, 0, 255); else $from = explode(',', $from);
        if (empty($to)) $to = array(255, 0, 0); else $to = explode(',', $to);   $output = null;
        for ($i = 1; $i <= $levels; $i++) {
            for ($ii = 0; $ii < 3; $ii++) {
                $tmp[$ii] = $from[$ii] - $to[$ii];
                $tmp[$ii] = floor($tmp[$ii] / $levels);
                $rgb[$ii] = $from[$ii] - ($tmp[$ii] * $i);
                if ($rgb[$ii] > 255) $rgb[$ii] = 255;
                $rgb[$ii] = dechex($rgb[$ii]);
                $rgb[$ii] = strtoupper($rgb[$ii]);
                if (strlen($rgb[$ii]) < 2) $rgb[$ii] = '0'.$rgb[$ii];
            }
            $output .= '<span style="color: #'.$rgb['0'].$rgb['1'].$rgb['2'].'">'.$text[$i-1].'</span>';
        }
        return iconv("windows-1251",  "UTF-8", $output);
    }
    // Функция отображения месяца
    public static function mesec($mon, $type=1) {
        if($type == 1){ // Если склоняем месяца
            $mon = strtr($mon,['1' => 'Января', '2' => 'Февраля', '3' => 'Марта', '4' => 'Апреля',
            '5' => 'Мая', '6' => 'Июня', '7' => 'Июля', '8' => 'Августа', '9' => 'Сентября','10' => 'Октября',
            '11' => 'Ноября', '12' => 'Декабря']);
        }else{ // Если без склонения месяцев
            $mon = strtr($mon,['1' => 'Январь', '2' => 'Февраль', '3' => 'Март', '4' => 'Апрель',
            '5' => 'Май', '6' => 'Июнь', '7' => 'Июль', '8' => 'Август', '9' => 'Сентябрь','10' => 'Октябрь',
            '11' => 'Ноябрь', '12' => 'Декабрь']);
        }
        return $mon;
    }
    // Функция вывода времени
    public static function vremja($time = NULL) {
        // Меняем формат даты, тоесть получаем вместо цыфр
        $data = date('j.n.y', $time);
        // Делаем условия
        if($data == date('j.n.y')): // Если сегодня
            $res = 'Сегодня в '. date('G:i', $time);
        elseif($data == date('j.n.y', time() - 86400)): // Проверяем на вчера
            $res = 'Вчера в '. date('G:i', $time);
        else: // Ну и если далеко от вчера 
            $m = [1 => 'Янв', 2 => 'Фев', 3 => 'Мар', 4 => 'Апр', 5 => 'Май', 6 => 'Июн', 7 => 'Июл', 8 => 'Авг', 9 => 'Сен', 10 => 'Окт', 11 => 'Ноя', 12 => 'Дек'];
            $res = date('j '. $m[date('n', $time)] .' Y', $time);
        endif;
        return $res;
    }
    //функция фильтрации текста лучшая
    public static function htmlred($var) {
        return trim(htmlspecialchars($var, ENT_QUOTES, 'UTF-8'));
    }
    //функция фильтрации чисел вынес в отдельую что бы модить потом
    public static function ints($var) {
        return filter_var($var, FILTER_VALIDATE_INT);
    }
    //функция изменения размера картинки
    public static function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100) {
        if (!file_exists($src)) return false;
        $size = getimagesize($src);

        if ($size === false) return false;
        $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
        $icfunc = "imagecreatefrom" . $format;
        if (!function_exists($icfunc)) return false;

        $x_ratio = $width / $size[0];
        $y_ratio = $height / $size[1];

        $ratio = min($x_ratio, $y_ratio);
        $use_x_ratio = false;   //($x_ratio == $ratio);

        $new_width = !$use_x_ratio  ? $width  : floor($size[0] * $ratio);
        $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
        $new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
        $new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

        $isrc = $icfunc($src);
        $idest = imagecreatetruecolor($width, $height);

        imagefill($idest, 0, 0, $rgb);
        imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width+1, $new_height, $size[0], $size[1]);

        imagejpeg($idest, $dest, $quality);

        imagedestroy($isrc);
        imagedestroy($idest);

        return true;
    }
}
?>