﻿Module "Closed site for JohnCMS v3.2.2"

*********************************************
Автор: Krite (http://upcoder.net)
Переделал под JohnCMS v3: Easy (http://smartbox.org.ru)
*********************************************
FIX by BlackVJ под версию 3.2.2

-Исправлены ошибки:
1.Ошибка с постоянным flood-исправлена.
2.Создатель сайта-теперь может зайти на сайт!.
3.Добавлена форма авторизации на скрытой странице только для Админа!

Из оригинал мода вырезан head.php и closed.php-так как там были ошибки!
Модернизирован файл login.php
4.Добавлена возможность входа администрации по авто-ссылке!
5.Сайт теперь закрыт только для Юзеров,весь Админ Состав может зайти через Авторизацию на сайт!

Мод тестировал BlackVJ-работоспособность 100%!
*********************************************
Мод.Закрытый сайт-нужен,для тех,у кого ведуться тех.работы на сайте,закрываем сайт и юзеры увидят страницу Причину Тех.Работ на сайте!(Причина редактируеться вручную в файле head.php!)


*********************************************
Установка:
*********************************************

1.Заменить 
 panel/sys_set.php

*********************************************

Или прописать код

после

    mysql_query("UPDATE `cms_settings` SET `val`='" . check($_POST['meta_desc']) . "' WHERE `key` = 'meta_desc'");

Дописать

    //Закрыть сайт START
mysql_query("UPDATE `cms_settings` SET `val`='" . intval($_POST['closed']) . "' WHERE `key`='closed'");
//Закрыть сайт END

***********************************
После

closedir($dir);
echo '</select>';

Дописать

//Закрыть сайт START
echo '<br/><br/><input name="closed" type="checkbox" value="1" ' . ($set['closed'] ? 'checked="checked"': '') . ' />&nbsp;Закрыть сайт';
//Закрыть сайт END


*************************************************************
2.Заменить head.php или дописать код,как указано ниже:
*************************************************************

в head.php после (пример смотрите в head.php в даном архиве!)

defined('_IN_JOHNCMS') or die('Error: restricted access');

добавить

//Закрыть сайт START
if (!$rights >= 1){
if($set['closed'] == 1){

echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
echo "\n" . '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">';
echo "\n" . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">';
echo "\n" . '<head><meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>';
echo "\n" . '<link rel="shortcut icon" href="' . $home . '/favicon.ico" />';
echo "\n" . '<meta name="copyright" content="Powered by JohnCMS" />';// ВНИМАНИЕ!!! Данный копирайт удалять нельзя
if (!empty ($set['meta_key']))
    echo "\n" . '<meta name="keywords" content="' . $set['meta_key'] . '" />';
if (!empty ($set['meta_desc']))
    echo "\n" . '<meta name="description" content="' . $set['meta_desc'] . '" />';
echo "\n" . '<link rel="alternate" type="application/rss+xml" title="RSS | Новости ресурса" href="' . $home . '/rss/rss.php" />';
echo "\n" . '<title>' . $textl . '</title>';
echo "\n" . '<link rel="stylesheet" href="' . $home . '/theme/' . $set_user['skin'] . '/style.css" type="text/css" />';

// Выводим логотип
echo '<div><img src="' . $home . '/theme/' . $set_user['skin'] . '/images/logo.gif" alt=""/></div>';

echo '<div class="menu">';


echo '<BLINK>Внимание! Сайт закрыт по техническим причинам!</BLINK><br/>';
echo 'Администрация сайта приносит Вам свои извинения за возможные неудобства.<br/>';
echo 'Работа сайта, возможно, возобновится в ближайшее время.<br/>';

echo '</div>';

;exit; 

}
}
//Закрыть сайт END

***********************************************************

После приветствия
// Выводим верхний блок с приветствием
echo '<div class="header">Привет ' . ($user_id ? '<b> ' . $login . '</b>!' : 'прохожий!') . '</div>';

Добавить уведомление о закрытом сайте!

//Закрыть сайт START
//Выводим напоминание админу
if($set['closed'] == 1){
if ($rights >= 1){
echo '<div class="menu">Внимание!Сайт закрыт!</div>';
}
}
//Закрыть сайт END


************************************************

3.В login.php впишите код между

**************************************************

define('_IN_JOHNCMS', 1);

$rootpath = '';
require_once('incfiles/core.php');

Тут наш код..он ниже

require_once('incfiles/head.php');

вставте там код

if($set['closed'])

{
//Опция сайт закрыт-активна.Мод.вход на сайт!

echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
echo "\n" . '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">';
echo "\n" . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">';
echo "\n" . '<head><meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>';
echo "\n" . '<link rel="shortcut icon" href="' . $home . '/favicon.ico" />';
echo "\n" . '<meta name="copyright" content="Powered by JohnCMS" />';// ВНИМАНИЕ!!! Данный копирайт удалять нельзя
if (!empty ($set['meta_key']))
    echo "\n" . '<meta name="keywords" content="' . $set['meta_key'] . '" />';
if (!empty ($set['meta_desc']))
    echo "\n" . '<meta name="description" content="' . $set['meta_desc'] . '" />';
echo "\n" . '<link rel="alternate" type="application/rss+xml" title="RSS | Новости ресурса" href="' . $home . '/rss/rss.php" />';
echo "\n" . '<title>' . $textl . '</title>';
echo "\n" . '<link rel="stylesheet" href="' . $home . '/theme/' . $set_user['skin'] . '/style.css" type="text/css" />';

// Выводим логотип
echo '<div><img src="' . $home . '/theme/' . $set_user['skin'] . '/images/logo.gif" alt=""/></div>';

echo '<div class="phdr"><b>Админ Вход</b></div>';

echo '<div class="menu">';

$error = array ();
$captcha = false;
$display_form = 1;
$user_login = isset($_POST['n']) ? check($_POST['n']) : NULL;
$user_pass = isset($_REQUEST['p']) ? check($_REQUEST['p']) : NULL;
$user_mem = isset($_POST['mem']) ? 1 : 0;
$user_code = isset($_POST['code']) ? trim($_POST['code']) : NULL;
if ($user_pass && !$user_login && !$id)
    $error[] = 'Вы не ввели имя';
if (($user_login || $id) && !$user_pass)
    $error[] = 'Вы не ввели пароль';
if ($user_login && (mb_strlen($user_login) < 2 || mb_strlen($user_login) > 20))
    $error[] = 'Допустимая длина имени не менее 2 и не более 20 символов';
if ($user_pass && (mb_strlen($user_pass) < 3 || mb_strlen($user_pass) > 15))
    $error[] = 'Допустимая длина пароля не менее 3 и не более 15 символов';
if (!$error && $user_pass && ($user_login || $id)) {
    // Запрос в базу на юзера
    $sql = $id ? "`id` = '$id'" : "`name_lat`='" . rus_lat(mb_strtolower($user_login)) . "'";
    $req = mysql_query("SELECT * FROM `users` WHERE $sql LIMIT 1");
    if (mysql_num_rows($req)) {
        $user = mysql_fetch_assoc($req);
        if ($user['failed_login'] > 2) {
            if ($user_code) {
                if (mb_strlen($user_code) > 3 && $user_code == $_SESSION['code']) {
                    // Если введен правильный проверочный код
                    unset($_SESSION['code']);
                    $captcha = true;
                } else {
                    // Если проверочный код указан неверно
                    unset($_SESSION['code']);
                    $error[] = 'Проверочный код указан неверно';
                }
            } else {
                // Показываем CAPTCHA
                $display_form = 0;
                echo '<form action="login.php" method="post">' .
                    '<div class="menu"><p><img src="captcha.php?r=' . rand(1000, 9999) . '" alt="Проверочный код"/><br />' .
                    'Введите код с картинки:<br/><input type="text" size="5" maxlength="5"  name="code"/>' .
                    '<input type="hidden" name="n" value="' . $user_login . '"/>' .
                    '<input type="hidden" name="p" value="' . $user_pass . '"/>' .
                    '<input type="hidden" name="mem" value="' . $user_mem . '"/>' .
                    '<input type="submit" name="submit" value="Продолжить"/></p></div></form>';
            }
        }
        if ($user['failed_login'] < 3 || $captcha) {
            if (md5(md5($user_pass)) == $user['password']) {
                // Если логин удачный
                $display_form = 0;
                mysql_query("UPDATE `users` SET `failed_login` = '0' WHERE `id` = '" . $user['id'] . "' LIMIT 1");
                if (!$user['preg']) {
                    // Если регистрация не подтверждена
                    echo '<div class="rmenu"><p>';
                    if (!empty($user['regadm']))
                        echo 'Ваша заявка на регистроацию отклонена.<br />Причина:<br />' . $res['regadm'];
                    else
                        echo 'Приносим извинения, но Ваша заявка на регистрацию ещё не рассмотрена.<br />Пожалуйста ожидайте.';
                    echo '</p></div>';
                } else {
                    // Если все проверки прошли удачно, подготавливаем вход на сайт
                    if ($_POST['mem'] == 1) {
                        // Установка данных COOKIE
                        $cuid = base64_encode($user['id']);
                        $cups = md5($user_pass);
                        setcookie("cuid", $cuid, time() + 3600 * 24 * 365);
                        setcookie("cups", $cups, time() + 3600 * 24 * 365);
                    }
                    // Установка данных сессии
                    $_SESSION['uid'] = $user['id'];
                    $_SESSION['ups'] = md5(md5($user_pass));
                    mysql_query("UPDATE `users` SET `sestime` = '$realtime' WHERE `id` = '" . $user['id'] . "'");
                    $set_user = unserialize($user['set_user']);
                    if ($user['lastdate'] < ($realtime - 3600) && $set_user['digest'])
                        header('Location: ' . $home . '/index.php?act=digest&last=' . $user['lastdate']);
                    else
                        header('Location: ' . $home . '/index.php');
                    echo '<div class="gmenu"><p><b><a href="index.php?act=digest">Войти на сайт</a></b></p></div>';
                }
            } else {
                // Если логин неудачный
                if ($user['failed_login'] < 3) {
                    // Прибавляем к счетчику неудачных логинов
                    $failed_login = $user['failed_login'] + 1;
                    mysql_query("UPDATE `users` SET `failed_login` = '$failed_login' WHERE `id` = '" . $user['id'] . "' LIMIT 1");
                }
                $error[] = 'Авторизация не прошла';
            }
        }
    } else {
        $error[] = 'Авторизация не прошла';
    }
}

if ($display_form) {
    if ($error)
        echo display_error($error);
    echo '<div class="gmenu"><form action="login.php" method="post">' .
        'Имя:<br/><input type="text" name="n" value="' . htmlentities($user_login, ENT_QUOTES, 'UTF-8') . '" maxlength="20"/><br/>' .
        'Пароль:<br/><input type="password" name="p" maxlength="20"/><br/>' .
        '<input type="checkbox" name="mem" value="1" checked="checked"/>Запомнить меня<br/>' .
        '<input type="submit" value="Вход"/></form></div>';
}

echo '</div>';

require_once('incfiles/end.php');

}
else
{

****************************
И в самом конце страници login.php

Добавте скобку

перед ?>

Вот так 

}
?>


*************************************************************
4.Залить файл install.php и
Заходим http://$my.site/install.php и следуем инструкциям.
*************************************************************

Все пользователи при входе на сайт будут видеть постоянно страницу с Тех.причиной Закрытого сайта,до тех пор пока Админ не откроет доступ к сайту!

**************
Перейдя по ссылке http://ваш сайт/login.php

Вы попадете в форме авторизации,которая не блокируеться модом-аторизироваться смогут только Админ состав!
Юзеры-лишь увидят страницу с Тех.Причиной!

Или Администрации

Просто для входа перейдите по ссылке-ключе

Вот пример

http://ru.ru/login.php?id=1&p=262626

1-ID анкеты

262626-пароль от анкеты

*****************************
Инструкцию дописал и исправил баги: BlackVJ
Для бесплатного пользования!
Удачного сайто-строения!