Вход Регистрация
Файл: root/index.php
Строк: 491
<?php

/**
* @name        JMY CMS
* @link        http://jmy.su/
* @copyright   Copyright (C) 2012-2015 JMY LTD
* @license     LICENSE.txt (see attached file)
* @version     VERSION.txt (see attached file)
* @author      Komarov Ivan
* @revision       25.02.2015
*/
 
 
if (!defined('ACCESS') && !$core->auth->isAdmin && $url[0] !== ADMIN) {
    
header('Location: /');
    exit;
}

define('ADMIN_ACCESS', true);
define('COOKIE_VISIT', md5(getenv("REMOTE_ADDR")) . '-admin_visit');
define('SESS_AUTH', md5(getenv("REMOTE_ADDR")) . '-auth');
define('SESS_COUNT', md5(getenv("REMOTE_ADDR")) . '-counter');
session_start();

require 
ROOT . 'etc/admin.config.php';
require 
ROOT . 'root/functions.php';
require 
ROOT . 'root/ajax_funcs.php';
require 
ROOT . 'root/admin_tpl.class.php';

$core->loadLangFile('root/langs/{lang}.navigation.php');

if(!empty(
$admin_conf['ipaccess']))
{
    
$IPs_arr = explode("n", $admin_conf['ipaccess']);
    
$parse_ip = @ip2long(getRealIpAddr()); 
    foreach(
$IPs_arr as $IPs) 
    { 
        
$IPs = explode('|', $IPs);
        if(
count($IPs) == 2)
        {
            if(
$parse_ip <= @ip2long($IPs[0]) && $parse_ip <= @ip2long($IPs[1]))
            {
                
$_SESSION[SESS_AUTH] = null;
                
$_SESSION[SESS_COUNT] = 0;
                
setcookie(COOKIE_AUTH, '', time(), '/');
                
setcookie(COOKIE_PAUSE, '', time(), '/');
                
location();
            }
        }
    }
}

function 
admin_main() 
{
    global 
$adminTpl,  $db, $core, $config;
    
$last_visit = time();
    
$last_ip = $_SERVER['REMOTE_ADDR'];
    
$query = '';
    
    if(!isset(
$_COOKIE[COOKIE_VISIT]) && !isset($_SESSION[SESS_AUTH])) 
    {
        if(
$db->query("INSERT INTO " . DB_PREFIX . "_logs VALUES ('" . time() . "', '" . filter($_SERVER['REMOTE_ADDR']) . "', '" . $core->auth->user_id . "', '" . str_replace('{nick}', $core->auth->user_info['nick'], _LOG_WRITE) . "', '1')")) 
        {
            
setcookie(COOKIE_VISIT, time(), time() + 86400, '/');
        }        
        
$last_visit = time();
        
$last_ip = $_SERVER['REMOTE_ADDR'];
    } 
    else 
    {
        
$query = $db->query("SELECT * FROM " . DB_PREFIX . "_logs ORDER BY time DESC");
        
$i = 0;
        while(
$log = $db->getRow($query)) {
            
$i++;            
            if(
$i == 1)
            {
                
$last_visit = $log['time'];
                
$last_ip = $log['ip'];
            }            
            
$logs[$log['level']][$log['uid']][$log['time']] = $log['ip'] . '-' . $log['history'];
        }
    }    
    
$adminTpl->admin_head(_MAIN_PAGE);
    echo 
'<div class="row mg-b">
                        <div class="col-xs-6">
                            <h3 class="no-margin">' 
._MAIN_MAIN . '</h3>
                            <small>version {VERSION}</small>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-3 col-sm-6 col-xs-12">
                            <section style="cursor:pointer" class="panel" onclick="location.href='
{ADMIN}/module/news/add';">
                                <div class="panel-body">
                                    <div class="circle-icon">
                                        <img src="usr/tpl/admin/assets/images/new.png" class="img-circle" alt="">
                                    </div>
                                    <div>
                                        <h3 class="no-margin">'
._MAIN_CREATE.'</h3>'._MAIN_CREATE_DESC.'
                                    </div>
                                </div>
                            </section>
                        </div>
                        <div class="col-md-3 col-sm-6 col-xs-12">
                            <section style="cursor:pointer" class="panel" onclick="location.href='
{ADMIN}/module/news/';">
                                <div class="panel-body">
                                    <div class="circle-icon">
                                        <img src="usr/tpl/admin/assets/images/edit.png" class="img-circle" alt="">
                                    </div>
                                    <div>
                                        <h3 class="no-margin">'
._MAIN_LIST.'</h3>'._MAIN_LIST_DESC.'
                                    </div>
                                </div>
                            </section>
                        </div>
                        <div class="col-md-3 col-sm-6 col-xs-12">
                            <section style="cursor:pointer" class="panel" onclick="location.href='
{ADMIN}/module/content';">
                                <div class="panel-body">
                                    <div class="circle-icon">
                                        <img src="usr/tpl/admin/assets/images/page.png" class="img-circle" alt="">
                                    </div>
                                    <div>
                                        <h3 class="no-margin">'
._MAIN_STATIC.'</h3>'._MAIN_STATIC_DESC.'
                                    </div>
                                </div>
                            </section>
                        </div>
                        <div class="col-md-3 col-sm-6 col-xs-12">
                            <section style="cursor:pointer" class="panel" onclick="location.href='
administration/config';">
                                <div class="panel-body">
                                    <div class="circle-icon">
                                        <img src="usr/tpl/admin/assets/images/settings.png" class="img-circle" alt="">
                                    </div>
                                    <div>
                                        <h3 class="no-margin">'
._MAIN_CONF.'</h3>'._MAIN_CONF_DESC.'
                                    </div>
                                </div>
                            </section>
                        </div>
                    </div>'
;    
    foreach(
glob(ROOT.'usr/modules/*/admin/moderation.php') as $listed) require_once($listed);
    unset(
$component_array);
    if (
$config['dbCache']== 1 OR $config['cache'] == 1) 
    {
        echo 
'<div class="row"><div class="col-lg-12"><section class="panel"><div class="panel-heading no-border"><b>' . _CACHE . '</b></div><div class="panel-body"><div class="switcher-content"><p>' . _MAIN_CACHE_INFO . '<br><div style="float:right"><small>[ <a href="index.php?url='.ADMIN.'/do/clearCache">'. _MAIN_CLEARCACHE .'</a> ]</small></div></p></div></div></section></div></div>';
    }        
    echo 
'<div class="row">
        <div class="col-lg-12">
            <section>
            <ul id="myTab" class="nav nav-tabs">                
                <li class="pull-right">
                    <a href="#profile2" data-toggle="tab">'
._MAIN_LAST_COMM.'</a>
                </li>
                <li class="active pull-right">
                    <a href="#home2" data-toggle="tab">'
._MAIN_LAST_USER.'</a>
                </li>
            </ul>
            <section class="panel">
                <div class="panel-body no-padding">
                    <div id="myTabContent" class="tab-content">
                        <div class="tab-pane active" id="home2">'
;    
    
$query = $db->query("SELECT c.*, u.nick, u.group, u.last_visit FROM ".DB_PREFIX."_comments as c LEFT JOIN `" . USER_DB . "`.`" . USER_PREFIX . "_users` as u on (c.uid=u.id) ORDER BY date DESC LIMIT 5");
    if(
$db->numRows($query) > 0) 
    {
    echo 
'<div class="panel-heading">'._MAIN_LAST_USER.'</div>
                            <table class="table table-striped no-margin">
                                <thead>
                                    <tr>
                                        <th><span class="pd-l-sm"></span>ID</th>
                                        <th class="col-md-4">' 
. _COMMENT . '</th>
                                        <th class="col-md-1">' 
. _MODULE . '</th>
                                        <th class="col-md-2">' 
. _DATE . '</th>
                                        <th class="col-md-2">' 
. _USER . '</th>
                                        <th class="col-md-1">' 
. _LINKS . '</th>
                                        <th class="col-md-4">' 
. _ACTIONS . '</th>
                                    </tr>
                                </thead>
                                <tbody>'
;
        while(
$commment = $db->getRow($query)) 
        {
            
$tt = str(htmlspecialchars(strip_tags($commment['text'])), 30);
            
$active = ($commment['status'] == 1) ? '<a href="javascript:void(0)" onclick="adminCommentStatus('' . $commment['id'] . '', 0);" title="' . _DEACTIVATE . '"><button type="button" class="btn btn btn-primary btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' . _DEACTIVATE . '">D</button></a>' : '<a href="javascript:void(0)" onclick="adminCommentStatus('' . $commment['id'] . '', 1);" title="' . _ACTIVATE . '"><button type="button" class="btn btn btn-primary btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' . _ACTIVATE . '">A</button></a>';
            echo 
'
            <tr>
                <td><span class="pd-l-sm"></span>' 
. $commment['id'] . '</td>
                <td>' 
. (($tt != '') ? $tt : '<font color="red">'._NO_TEXT.'</font>') . '</td>
                <td>' 
. commentLink($commment['module'], $commment['post_id']) . '</td>
                <td>' 
. formatDate($commment['date'], true) . '</td>
                <td>' 
. (($commment['uid'] != 0) ? '<a href="profile' . $commment['nick'] . '" title="' . $commment['nick'] . '">' . $commment['nick'] . '</a>' : $commment['gname']) . '</td>
                <td>' 
. (eregStrt('href', $commment['text']) || eregStrt('[url', $commment['text']) ? "<font color="red">"._YES."</font>" : "<font color="green">"._NO."</font>") . '</td>
                <td>
                '
.$active.'
                <button onclick="location.href='
{ADMIN}/comments/edit/'.$commment['id'].'';" type="button" class="btn btn-info btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="'._EDIT.'">E</button>
                <button onclick="location.href='
{ADMIN}/comments/delete/'.$commment['id'].'';" type="button" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="'._DELETE.'">D</button>                
                </td>
                </tr>
                '
;
                
        }
        echo 
'</tbody></table>';
    } 
    else 
    {
        echo 
'<div class="panel-heading">'._MAIN_EMPTY_COMM.'</div>';
    }
    echo 
'</div><div class="tab-pane" id="profile2">';        
    
$query = $db->query('SELECT u.*, g.name FROM `' . USER_DB . '`.`' . USER_PREFIX . '_users` as u LEFT JOIN `' . USER_DB . '`.`' . USER_PREFIX . '_groups` as g on(u.group = g.id) ORDER BY regdate DESC LIMIT 5');
    if(
$db->numRows($query) > 0) 
    {
    echo 
'<div class="panel-heading">'._MAIN_LAST_COMM.'</div>
                            <table class="table table-striped no-margin">
                                <thead>
                                    <tr>
                                        <th><span class="pd-l-sm"></span>ID</th>
                                        <th class="col-md-2">' 
. _NICK . '</th>
                                        <th class="col-md-2">' 
. _GROUP . '</th>
                                        <th class="col-md-3">' 
. _REGDATE . '</th>
                                        <th class="col-md-3">' 
. _LASTDATE . '</th>                                        
                                        <th class="col-md-4">' 
. _ACTIONS . '</th>
                                    </tr>
                                </thead>
                                <tbody>'
;
        while(
$user = $db->getRow($query)) 
        {
            echo 
'            
            <tr>
                <td><span class="pd-l-sm"></span>' 
. $user['id'] . '</td>
                <td> <a href="profile/' 
. $user['nick'] . '">' . $user['nick'] .'</a></td>
                <td>' 
. $user['name'] . '</td>
                <td>' 
. formatDate($user['regdate'], true) . '</td>
                <td>' 
. formatDate($user['last_visit']) . '</td>
                <td>
                <a href="administration/user/edit/'
.$user['id'].'">
                <button type="button" class="btn btn-info btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="Редактировать">E</button>
                </a>
                <a href="administration/user/ban/'
.$user['id'].'" onclick="return getConfirm('Забанить пользователя?')"><button type="button" class="btn btn btn-primary btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="Забанить">B</button></a>                
                <a href="administration//user/delete/'
.$user['id'].'" onclick="return getConfirm('Удалить пользователя?')">
                <button type="button" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="Удалить">X</button>
                </a>
                </td>
                </tr>'
;
        }
    echo 
"</tbody></table>";
    } 
    echo 
"</div></div></div></section></section></div></div>";
    echo 
'<div class="row">
            <div class="col-lg-8">            
                <section>
                    <ul id="myTab" class="nav nav-tabs">
                        <li class="pull-right">
                            <a href="#false2" data-toggle="tab">' 
. _FALSELOG . '</a>
                        </li>
                        <li class="active pull-right">
                            <a href="#log2" data-toggle="tab">'
. _LASTLOG .'</a>
                        </li>
                    </ul>
                <section class="panel">
                    <div class="panel-body no-padding">
                        <div id="myTabContent" class="tab-content">
                            <div class="tab-pane active" id="log2">'
;
    if(isset(
$logs[1]))
    {
        
$log1 = 0;
        echo 
'<div class="panel-heading">'. _LASTLOG .'</div>
                            <table class="table table-striped no-margin">
                                <thead>
                                    <tr>                                        
                                        <th class="col-md-2"><span class="pd-l-sm"></span>' 
. _NICK . '</th>
                                        <th class="col-md-2">' 
. _GROUP . '</th>
                                        <th class="col-md-2">' 
. _REGDATE . '</th>                                        
                                    </tr>
                                </thead>
                                <tbody>'
;
        foreach(
$logs[1] as $uid => $arr) 
        {
            foreach(
$arr as $time => $info) 
            {
                
$log1++;
                if(
$log1 <= 7) 
                {            
                    
$log_true = explode('-', $info);
                    echo 
'
                    <tr>        
                        <td><span class="pd-l-sm"></span>' 
. $log_true[1] .'</td>
                        <td>' 
. $log_true[0] . '</td>
                        <td>' 
. formatDate($time, true) . '</td>
                    </tr>'
;
                }
            }
            
            
        }
            echo 
'</tbody></table>';
            echo 
'<br><div align="right"><a href="/index.php?url={ADMIN}/logs/clear" class="btn btn-warning btn-xs">' . _CLEAN . '</a><span class="pd-l-sm"></span></div><br>';
    } 
    else 
    {
        echo 
'<div class="panel-heading">Информация отсутствует.</div>';
    }    
    echo 
'</div><div class="tab-pane" id="false2">';   
   
   if(isset(
$logs[2])) 
   {
        
$log2 = 0;
        echo 
'<div class="panel-heading">' . _FALSELOG . '/div>
                            <table class="table table-striped no-margin">
                                <thead>
                                    <tr>                                        
                                        <th class="col-md-2"><span class="pd-l-sm"></span>' 
. _NICK . '</th>
                                        <th class="col-md-2">' 
. _GROUP . '</th>
                                        <th class="col-md-2">' 
. _REGDATE . '</th>                                        
                                    </tr>
                                </thead>
                                <tbody>'
;
        foreach(
$logs[2] as $uid => $arr) 
        {
            foreach(
$arr as $time => $info)
            {
                
$log2++;
                if(
$log2 <= 7)
                {            
                    
$log_true = explode('-', $info);
                    echo 
'
                    <tr>            
                        <td><span class="pd-l-sm"></span>' 
. $log_true[1] .'</td>
                        <td>' 
. $log_true[0] . '</td>
                        <td>' 
. formatDate($time, true) . '</td>
                    </tr>'
;
                }
            }
            
            
        }
            echo 
"</tbody></table>";
            echo 
'<br><div align="right"><a href="/index.php?url={ADMIN}/logs/clear" class="btn btn-warning btn-xs">' . _CLEAN . '</a><span class="pd-l-sm"></span></div><br>';
    } 
    else 
    {    
        echo 
'<div class="panel-heading">Информация отсутствует.</div>';
    }    
    echo 
'</div></div></div></section></section></div>';
    list(
$weekUsrs) = $db->fetchRow($db->query("SELECT Count(id) FROM `" . USER_DB . "`.`" . USER_PREFIX . "_users` WHERE regdate > '" . (time()-604900) . "'"));
    list(
$weekComm) = $db->fetchRow($db->query("SELECT Count(id) FROM " . DB_PREFIX . "_comments WHERE date > '" . (time()-604900) . "'"));
    echo 
'<div class="col-lg-4">
            <section class="panel">
                <div class="panel-heading no-border">
                    <b>Статистика</b>
                </div>
                <div class="panel-body">
                    <div class="switcher-content">
                        <p>
                            <b>Комментариев на этой неделе:</b> ' 
. $weekComm . '<br>
                            <b>Пользователей на этой неделе:</b> ' 
. $weekUsrs . '
                        </p>
                    </div>
                </div>
            </section>'
;
    echo 
"</div>";    
    echo 
"</div></div>";
    
$adminTpl->admin_foot($last_visit, $last_ip);
    
}
function 
init_login() 
{
global 
$adminTpl, $admin_conf, $core;
    if(
$core->auth->isUser && $core->auth->isAdmin)
    {
        if(isset(
$_SESSION[SESS_AUTH]) && $_SESSION[SESS_AUTH] == 'ok' OR $admin_conf['sessions'] == 0)
        {
            return 
false;
        } 
        else 
        {
            return 
true;
        }
    }
    else
    {
        return 
true;
    }
}

function 
login() 
{
global 
$adminTpl, $core, $config, $db, $admin_conf;

    
$adminTpl->sep = '';
    if(isset(
$_POST['nick']))
    {
        
$nick = filter($_POST['nick'], 'nick');
        
$password = md5(md5($_POST['password']));
        if(!empty(
$nick) && !empty($_POST['password']))
        {
            
$access = $db->getRow($db->query("SELECT id, password, tail FROM `" . USER_DB . "`.`" . USER_PREFIX . "_users` WHERE `nick` = '" . $db->safesql($nick) . "' AND `group`='1'"));
            
$no_head = true;
            
            if (
md5(mb_substr($password, 0, -mb_strlen($access['tail'])) . $access['tail']) == $access['password']) 
            {
                if(
$core->auth->isUser && $core->auth->isAdmin)
                {
                    
$_SESSION[SESS_AUTH] = 'ok';
                }
                else
                {
                    
$_SESSION[SESS_AUTH] = 'ok';
                    
$newHash = md5(@$_SERVER['HTTP_USER_AGENT'].$config['uniqKey']);
                    
setcookie(COOKIE_AUTH, engine_encode(serialize(array('id' => $access['id'], 'nick' => $nick, 'password' => md5(mb_substr($password, 0, -mb_strlen($access['tail'])) . $access['tail']), 'hash' => $newHash))), time() + COOKIE_TIME, '/');
                }
                
                if(isset(
$_SESSION[SESS_AUTH])) {
                    
$db->query("INSERT INTO " . DB_PREFIX . "_logs VALUES ('" . time() . "', '" . filter($_SERVER['REMOTE_ADDR'], 'ip') . "', '" . $core->auth->user_id . "', '" . str_replace('[nick]', $nick, _GOOD_LOGIN) . "', '1')");
                    if(
eregStrt(ADMIN, $_SERVER['HTTP_REFERER']))
                    {
                        
location($_SERVER['HTTP_REFERER']);
                    }
                    else
                    {
                        
location(ADMIN);
                    }
                }
            }
            else
            {
                if (!isset(
$_SESSION[SESS_COUNT])) 
                {
                    
$_SESSION[SESS_COUNT] = 0;
                }
                
                
$counter = $_SESSION[SESS_COUNT]++;
                
$turns = 5-$counter;
                
$adminTpl->loadFile('login');
                
                if(
$counter == 3) 
                {
                    
$db->query("INSERT INTO " . DB_PREFIX . "_logs VALUES ('" . time() . "', '" . filter($_SERVER['REMOTE_ADDR'], 'ip') . "', '" . $core->auth->user_id . "', '" . str_replace(array('[nick]', '[pass]'), array($nick, str($_POST['password'], 4)), _BAD_LOGIN) . "', '2')");
                }
                
                if(
$turns <= 0) 
                {
                    
$adminTpl->setVar('STOP', '<div id="stop">' . _NO_TURNS . '</div>');
                } 
                else 
                {
                    
$adminTpl->setVar('STOP', '<div id="stop">' . str_replace('{turns}', $turns, _FALSE_TURN) . '</div>');
                }
                
                
$adminTpl->setVar('URL', $config['url']);
                
$adminTpl->setVar('ADM_THEME', 'usr/tpl/admin');
                
$adminTpl->end();
            }
        }
        else
        {
            
$adminTpl->loadFile('login');
            
$adminTpl->setVar('STOP', '<div id="stop">' . _EMPTY_LOGIN . '</div>');
            
$adminTpl->setVar('URL', $config['url']);
            
$adminTpl->setVar('ADM_THEME', 'usr/tpl/admin');
            
$adminTpl->end();
        }
    }
    else
    {
        
$adminTpl->loadFile('login');
        
$adminTpl->setVar('STOP', '');
        
$adminTpl->setVar('URL', $config['url']);
        
$adminTpl->setVar('ADM_THEME', 'usr/tpl/admin');
        
$adminTpl->end();
    }
}

if(
init_login()) 
{
    
login();
} 
else 
{
    require 
ROOT . 'root/list.php';    
    switch(isset(
$url[1]) ? $url[1] : null) {
        default:
            if(isset(
$url[1]))
            {
                if(isset(
$component_array[$url[1]]) OR isset($services_array[$url[1]]))
                {
                    if(
checkAdmControl($url[1]))
                    {
                        require 
ROOT . 'root/modules/' . $url[1] . '.admin.php';
                    }
                    else
                    {
                        
noadmAccess();
                    }
                }
                else
                {
                    if(
checkAdmControl('index'))
                    {
                        
admin_main();
                    }
                    else
                    {
                        
noadmAccess();
                    }
                }
            }
            else
            {
                if(
checkAdmControl('index'))
                {
                    
admin_main();
                }
                else
                {
                    
noadmAccess();
                }
            }
        break;
        
        case 
'do':
            
$switch = filter($url[2]);
            switch(
$switch) {
                case 
'logout':
                    
$_SESSION[SESS_AUTH] = null;
                    
$_SESSION[SESS_COUNT] = 0;
                    
$core->auth->logout();
                    
header('Location: /');
                    break;
                
                case 
'tic':
                    echo 
yandex_tic($_SERVER['HTTP_HOST']);
                    break;
                
                case 
'pr':
                    echo 
getPageRank($_SERVER['HTTP_HOST']);
                    break;                    
                    
                case 
'clearCache':
                    if(
checkAdmControl('index'))
                    {
                        
ajaxInit();
                        
full_rmdir(ROOT . 'tmp/mysql');
                        
full_rmdir(ROOT . 'tmp/cache');
                        @
mkdir(ROOT . 'tmp/mysql', 0777);
                        @
mkdir(ROOT . 'tmp/cache', 0777);
                        echo 
_CACHE_CLEANED;
                        
header('Location: /' . ADMIN);
                    }
                    break;
                
                
            }
        break;
        
        case 
'module':
            
define('ADMIN_SWITCH', true);
            
$mod = $url[2];
            if(
file_exists(ROOT . 'usr/modules/' . $mod . '/admin/index.php')) 
            {
                if(
checkAdmControl($mod))
                {
                    require 
ROOT . 'usr/modules/' . $mod . '/admin/index.php';
                }
                else
                {
                    
noadmAccess();
                }
            } 
            else 
            {
                
header('Location: /' . ADMIN);
            }
            break;
        
        case 
'logs':
        global 
$adminTpl,  $db;
            
ajaxInit();
            
$type = $url[2];
            
$num = isset($url[3]) ? intval($url[3]) : '';
            
            switch(
$type) 
            {
                case 
"clear":
                    
$db->query("TRUNCATE TABLE " . DB_PREFIX . "_logs");
                    echo 
_TABLECLEANED;
                    
header('Location: /' . ADMIN);
                    break;
            }
            break;
                
        case 
'addition':
            
$type = $url[2];
            switch(
$type) 
            {
                case 
"tic":
                    echo 
yandex_tic('http://'.$_SERVER['HTTP_HOST']);
                    break;
            }
        break;            
    }
}
Онлайн: 1
Реклама