<?php
// Начинаем класс
class core{
    private $ip; // получаем ip
    private $boter; // получаем пота
    private $db; // подключаем бд
    // Даем переменные
    public static $userData = array(); // Все данные пользователя
    // Главные функции тут
    function __construct() {
        $this->authorize(); // Авторизация пользователя
        $this->onlines(); // получение онлайна
    }
    // Проверка авторизации
    private function authorize() {
        if (isset($_COOKIE['token'])):
            $cookieToken = $_COOKIE['token'];
            $req = DB::$dbs->query('SELECT * FROM `user` WHERE `token` = ? LIMIT 1',[$cookieToken]);
            if ($req->rowCount()):
                self::$userData = $req->fetch();
                DB::$dbs->query('UPDATE `user` SET `datelast` = ? WHERE `token` = ? LIMIT 1', [time(),$cookieToken]);
            else:
                setcookie('token','',time()-3600,'/');
            endif;
        endif;
    }
    // Смотрим гости онлайн
    private function onlines() {
        // фильтрация usagenta
        if(isset($_SERVER['HTTP_USER_AGENT'])):
            $usea = trim(htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8'));
        else:
            $usea = NULL;
        endif;
        // Получаем адресс старницы
        if(isset($_SERVER['REQUEST_URI'])):
            $url = trim(htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8'));
        else:
            $url = NULL;
        endif;
        // Запись онлайна
        if(DB::$dbs->querySingle('SELECT COUNT(id) FROM `online` WHERE `ip` = ?',[$this->getIp()[1]]) == 0):
            $in1 = ['#3eb5b9','#55b337','#d93939','#e3b931','#5e2524','#f5427b','#b042f5','#4d42f5','#2ca025','#a05825'];
            $ra1 = array_rand($in1, 2);
            DB::$dbs->query('INSERT INTO `online` SET `ip` = ?, `time` = ?, `ippoln` = ?, `usera` = ?, `color` = ?, `bote` = ?, `url` = ?',[$this->getIp()[1],time(),$this->getIp()[2],$usea,$in1[$ra1[1]],$this->boters($usea),$url]);
        else:
            DB::$dbs->query('UPDATE `online` SET `time` = ?,`cool` = `cool` + 1, `url` = ? WHERE `ip` = ? LIMIT 1', [time(),$url,$this->getIp()[1]]);
        endif;
    }
    // Получаем данные ip отфильтрованные
    private function getIp() {
        if (null === $this->ip):
            $ips = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP); // отфильтрованный ip
            $ip = ip2long($ips);
            $ipc = sprintf("%u", $ip); // чистый ip
            $this->ip = [
                1 => $ipc, //цыферный ip
                2 => $ips //профильтрованный ip
            ];
        endif;
        return $this->ip;
    }
    // Боты
    private function boters($text) {
        if (isset($text)):
            $options = ['builtwith.com', 'google.com','yandex.com','xml-sitemaps.com','mj12bot.com','Google Favicon','clarabot.info','ahrefs.com','go.mail.ru'];
            foreach($options as $row):
                if (stripos($text, $row) !== false):
                    $this->boter = 1;
                    return $this->boter;
                endif;
            endforeach;
        endif;
        $this->boter = 0;
        return $this->boter;
    }
}
?>