Файл: wapxl.ru/shaxty/classes/core.php
Строк: 175
<?php
class core {
public static $db = FALSE; // Инициируем $db
public static $set = array(); // Настройки сайта
public static $core_error = array(); // Ошибки ядра
public static $realtime; // Время сайта
public static $ipp; // IP Адрес
public static $ipl; // IP Адрес
public static $agn; // User Agent
public static $user_id = FALSE; // ID пользователя
public static $user_ps = FALSE; // pass пользователя
public static $level = 0; // Уровень пользователя
public static $max = 10; // Сообщений на стр
public static $sid = 1; // cид
public static $user = array(); // Данные пользователя
public function __construct(){
require_once 'ip.php';
$ipinit = new ipinit();
self::$ipl = $ipinit->ip;
self::$ipp = long2ip(self::$ipl);
unset ($ipinit);
if (isset($_SERVER["HTTP_X_OPERAMINI_PHONE_UA"]) && strlen(trim($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])) > 5) {
self::$agn = 'Opera Mini: ' . htmlspecialchars(mb_substr(trim($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']), 0, 150));
} elseif (isset($_SERVER['HTTP_USER_AGENT'])) {
self::$agn = htmlspecialchars(mb_substr(trim($_SERVER['HTTP_USER_AGENT']), 0, 150));
} else {
self::$agn = 'Not Recognised';
}
if (get_magic_quotes_gpc()) $this->del_slashes();
$this->connect_Old(); // Подключаемся к базе данных (mysql_connect)
$this->connect(); // Подключаемся к базе данных PDO
$this->session_start(); // Стартуем сессию
$this->startTimer(); // Старт подсчета генерации
//self::$set = $this -> setting();
self::$realtime = $_SERVER['REQUEST_TIME'];
$this->autorize(); // авторизация
// $this->ip_ban(); // Проверяем адрес IP на бан
// $this->agent_ban(); // Проверяем user_agent на бан
// $this->user_ban(); // Проверяем пользователя на бан
// $this->unset_ban(); // снимаем баны и пинки
}
public function __destruct(){
self::$db = Null;
}
public function check($str) {
if (function_exists('iconv')) $str = iconv("UTF-8", "UTF-8", $str);
$str = preg_replace('/[^P{C}n]+/u', '', $str);
return htmlentities(trim($str), ENT_QUOTES, 'UTF-8');
}
/* Удаляем слэши из глобальных переменных */
private function del_slashes(){
$in = array(&$_GET,&$_POST,&$_COOKIE);
while ((list($k, $v) = each($in)) !== FALSE) {
foreach ($v as $key => $val) {
if (!is_array($val)) {
$in[$k][$key] = stripslashes($val);
continue;
}
$in[] = & $in[$k][$key];
}
}
unset($in);
if (!empty($_FILES)) foreach ($_FILES as $k => $v) $_FILES[$k]['name'] = stripslashes((string)$v['name']);
}
/* функции для подсчета генерации страницы */
public static function startTimer(){
$mtime = microtime ();
$mtime = explode (' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$_SESSION['starttime'] = $mtime;
}
/* Подключаемся к базе данных */
public static function connect() {
// Подключаем PDO
include_once 'pdo.php';
@self :: $db = new PDO_('mysql:host=' . DBHOST . ';port=' . DBPORT . ';dbname=' . DBNAME, DBUSER, DBPASS);
self :: $db -> exec('SET CHARACTER SET utf8');
self :: $db -> exec('SET NAMES utf8');
}
public static function endTimer(){
$mtime = microtime ();
$mtime = explode (' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = round (($endtime - $_SESSION['starttime']), 5);
return $totaltime;
}
/* подключение через mysql_connect*/
public static function connect_Old() {
$connect = @ mysql_connect(DBHOST, DBUSER, DBPASS) or die('Невозможно подключится к серверу БД!');
mysql_select_db(DBNAME) or die('Проблемы с БД!');
mysql_query("SET NAMES 'utf8'");
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'");
mysql_query("SET character_set_results='utf8'");
}
private function session_start(){
session_name('SIDS');
session_start();
}
/* авторизаци пользователя*/
private function autorize(){
$user_id = FALSE;
$user_ps = FALSE;
if (isset ($_SESSION['sesid']) && isset ($_SESSION['sesps'])) {
$user_id = intval($_SESSION['sesid']);
$user_ps = trim($_SESSION['sespass']);
}
// Авторизация по COOKIE
elseif (isset ($_COOKIE['cookid']) && isset ($_COOKIE['cookps'])) {
$user_id = intval(base64_decode($_COOKIE['cookid']));
$_SESSION['sesid'] = $user_id;
$user_ps = trim(md5($_COOKIE['cookps']));
$_SESSION['sespass'] = $user_ps;
$cookauth = TRUE;
}
if($user_id && $user_ps){
$user = self :: $db->query("SELECT * FROM `users` WHERE id=? LIMIT 1;", array($user_id));
if($user->rowCount() == 1){
$user = $user -> fetch();
if($user_ps === $user['pass']){
self::$user = $user;
self::$user_id = $user['id'];
self::$level = $user['level'];
self::$max = $user['max'];
// $this->user_ip_history();// История ИП
//$this->user_ip_bloced(); // Блок левых ИП
//$this->user_level_up(); // Изменение уровня по постам
/* считаем время проведения юзера на сайте */
/*if ($user['user_ip'] != self::$ipp)
$sql .= "`user_ip` = '".self::$ipp."',";*/
if ($user['user_soft'] != self::$agn)
$sql .= "`user_soft` = '".self::$agn."',";
if ($user['onl'] > (self::$realtime - 300))
$user['total_on_site'] = $user['total_on_site'] + self::$realtime - $user['onl'];
self::$db->query("UPDATE `users` SET {$sql} `total_on_site`=?, `onl`=? WHERE `id`=? LIMIT 1",array($user['total_on_site'],self::$realtime,$user['id']));
//$this->user_onl_max(); // Подсчет максимального онлайн
/* Запрет авторизованным пользователям посещать страницы гостей*/
/*$pag = explode('::', 'nous.php::in.php::reg.php::lost_pass.php');
$co = count($pag);
for($i=0;$i<$co;$i++){
$direct[] = $pag[$i];
}
if(in_array(substr($_SERVER['PHP_SELF'], 1) , $direct)){
header("Location: /index.php");
}*/
}else $this->user_unset();
}else $this->user_unset();
} else $this->user_unset();
}
/* уничтожаем данные пользователя и ведем учет гостей... */
private function user_unset(){
/* unset($_SESSION['sesid']);
unset($_SESSION['sesps']);
setcookie('cookid','');
setcookie('cookps','');*/
self::$user_id = FALSE;
self::$level = 0;
self::$max = 10;
if (!isset ($_COOKIE['sessionid']))setcookie("sessionid", session_id(), self::$realtime + 3600 * 24 * 365);
// учет гостей сайта
$gip = md5(self::$ipp);
}
// Блок посторонних IP
private function user_ip_bloced()
{
if(self::$user['ip_bloced']!=NULL)
{
$pag = explode('::', self::$user['ip_bloced']);
$co = count($pag);
for($i=0;$i<$co;$i++){
$direct[] = $pag[$i];
}
if(!in_array(self::$ipp , $direct)){
$title = 'Стоп!';
$align = 'center';
$head = 'Стоп!';
include_once (H.'shaxty/head.php');
if(isset($_POST['otvet_pass_ip_bloced'])){
if(md5(md5($_POST['otvet_pass_ip_bloced']))==self::$user['otvet_pass']){
$ip_bloced = self::$user['ip_bloced'].'::'.self::$ipp;
$dbi = core::$db -> prepare("UPDATE `users` SET `ip_bloced`=? WHERE `id`=?");
$dbi -> execute($ip_bloced, self::$user['id']);
echo "<br /><b>Ваш IP адрес добавлен в список разрешенных!</b><br />";
echo '<br /><a href="'.H.'index.php" class="href">На главную</a><br />';
echo '<br />';
include_once (H.'shaxty/foot.php');
}else{ echo "<br /><b>Ответ неверен!</b><br />";
$opovesh = 'Сработал фильтр IP адресов!
Ответ на секретный вопрос был введен неверно!<br />
<b>IP:</b> '.core::$ipp.'
<b>Soft:</b> '.core::$agn.'
<br />Если это были не вы, сообщите администрации!';
self::$db->query("INSERT INTO `users_opovesh` SET `user_id` = '" . self::$user_id . "', `msg` = '" . $opovesh . "', `time` = '" . self::$realtime . "' ");
}
}
echo '<br /><b>Вам необходимо подтвердить, что эта учетная запись действительно ваша!</b><br /><br />';
echo '<form action="'.H.'index.php?" method="post">';
echo 'Ответьте на ваш Секретный вопрос: <b>'.self::$user['vopros_pass'].'</b> <br/><br />';
echo '<b>Ответ:</b><br/><input type="text" name="otvet_pass_ip_bloced" /><br />';
echo '<p><input type="submit" class="ibutton" value="Далее"/></p></form>';
echo '<br />';
include_once (H.'shaxty/foot.php');
}
}
}
//История IP адресов
private function user_ip_history()
{
/* if (self::$user['user_ip'] != self::$ipp) {
// Удаляем из истории текущий адрес (если есть)
self::$db->query("DELETE FROM `users_iphistory` WHERE `user_id`=? AND `ip`=? LIMIT 1",array(self::$user_id,self::$ipp));
if (!empty(self::$user['user_ip'])) {
// Вставляем в историю предыдущий адрес IP
self::$db->query("INSERT INTO `users_iphistory` SET `user_id` = '" . self::$user_id . "', `ip` = '" . self::$user['user_ip'] . "', `time` = '" . self::$user['onl'] . "' ");
}
// Оповещение юзера
if(self::$user['ip_edit']==1){
$opovesh = 'IP адрес последнего визита не совпадает с вашим нынешним адресом!
<br /> IP последнего посещения: <b>' . self::$user['user_ip'] . '</b>
<br />Ваш IP: <b>' . self::$ipp . '</b>
<br />Если вы уверены, что этот IP адрес не ваш, сообщите администрации!';
self::$db->query("INSERT INTO `users_opovesh` SET `user_id` = '" . self::$user_id . "', `msg` = '" . $opovesh . "', `time` = '" . self::$realtime . "' ");
}
// Обновляем текущий адрес в таблице `users`
self::$db->query("UPDATE `users` SET `user_ip` = '" . self::$ipp . "' WHERE `id` = '" . self::$user_id . "'");
}*/
}
// Изменение уровня по постам
private function user_level_up()
{
/* if ((self::$user["posts"]>=200)&&(self::$user["level"]<1)){
$message = "Поздравляю [b]".self::$user["user"]."[/b]!!! Вы набрали необходимое колличество постов и вам присвоен уровень <b>Новичек</b>.";
self::$db->query("INSERT INTO `users_opovesh` SET `user_id` = '" . self::$user_id . "', `msg` = '" . $message . "', `time` = '" . self::$realtime . "' ");
self::$db->query("UPDATE `users` SET `level` = '1' WHERE `id` = '" . self::$user_id . "'");
} else if ((self::$user["posts"]>=400)&&(self::$user["level"]<2)){
$message = "Поздравляю [b]".self::$user["user"]."[/b]!!! Вы набрали необходимое колличество постов и вам присвоен уровень <b>Наш чел</b>.";
self::$db->query("INSERT INTO `users_opovesh` SET `user_id` = '" . self::$user_id . "', `msg` = '" . $message . "', `time` = '" . self::$realtime . "' ");
self::$db->query("UPDATE `users` SET `level` = '2' WHERE `id` = '" . self::$user_id . "'");
} else if ((self::$user["posts"]>=600)&&(self::$user["level"]<3)){
$message = "Поздравляю [b]".self::$user["user"]."[/b]!!! Вы набрали необходимое колличество постов и вам присвоен уровень <b>Мастер</b>.";
self::$db->query("INSERT INTO `users_opovesh` SET `user_id` = '" . self::$user_id . "', `msg` = '" . $message . "', `time` = '" . self::$realtime . "' ");
self::$db->query("UPDATE `users` SET `level` = '3' WHERE `id` = '" . self::$user_id . "'");
}
*/
}
// Подсчет и запись максимального онлайн
private function user_onl_max()
{
/* $onler = self:: $db -> querySingle("SELECT COUNT(id) FROM `users` WHERE `onl`>'".(self::$realtime-self::$set['time_aut']) ."'");
if($onler>self::$set['max_onl']){
$dbr = self::$db -> prepare("UPDATE `setting` SET `value`=? WHERE `name`=?;");
$dbr -> execute($onler, 'max_onl');
$dbr -> execute(self::$realtime, 'max_onl_time');
}
*/
}
/*__подгружаем_системные_настройки__*/
public static function setting(){
$setting =self::$db->query("SELECT `name`, `value` FROM `setting`;");
return $setting -> fetchAssoc();
}
} //конец класса
?>