Реализация модуля белого списка для нашего движка

 

Доброго времени суток! Спасибо, что заглянули на Блог RS! Сегодня я продолжаю пополнять цикл "Создать блог с нуля" а Вы делаете еще один шаг по созданию своего проекта. Цель сегодняшней заметки написать модуль белого списка и создать таблицу базы данныхс которой списку придется работать. Смысл белого списка прост, определить статус сообщения который посылает пользователь через форму "Добавить комментарий". Статус определяется по двум критерием:

  • Если пользователь отправляет свое первое сообщение, то скрипт белого списка назначит ему статус по умолчанию. Статус по умолчанию тоже имеет два варианта:
    1. Если белый список включен, то назначить статус "Не подтвержден"
    2. Если белый список отключен, то назначить статус "Гость"

 

 

  • Если пользователь уже когда то оставлял сообщение на блоге, то скрипт назначит статус который находится в базе данных, и был присвоен администратором или же белым списком, определенным при первом отправление сообщения.

 

Для новоприбывших

 

Небольшая заметка для тех кто на блоге в первый раз. Так как этот пост написан для тех кто читает цикл, то для Вас этот текст будет почти на 90 процентов бессмыслен. Если Вы ищите уроки по php, и хотите научится программировать, на данном языке, без тонны теории, то почитайте мой, выше упомянутый, цикл "Создать блог с нуля". Цикл представляет собой сборку постов в которых я рассказываю о том как писал движок, на котором работает мой блог.

Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки цикла!

 

Создаем новую таблицу базы данных

 

Нам понадобится список, в котором движок будет хранить все почтовые ящики, с которых писали хоть раз, и их статусы. Я дам Вам sql запрос, надеюсь Вы знаете что с ним делать... Если нет, то напишите комментарий в этом посте, объясню =)

CREATE TABLE IF NOT EXISTS `whitelist` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

 

Новая колонка в таблице comm, нашей базы данных

 

Каждое сообщение будет содержать статус почтового ящика с которого это сообщение послали, таким образом наш движок сможет показывать только те сообщения которые разрешены к показу.

  • Заходим в структуры таблицы comm

 

структура таблицы comm

 

  • После колонки comm создаем новую.

 

после колонки comm

 

  • Заполняем поля новой колонки (status)

 

поля новой колонки

 

  • Жмем "сохранить"

Теперь давайте приступим к созданию самого скрипта определения статуса

 

Модуль белого списка - whitelist.php

 

Как я уже говорил, скрипт не сложный, и имеет два условия (если включен и если выключен), каждое из которых имеет свои два условия (Если пользователь уже есть в базе данных, и если нет).

Уведомления пользователя о включенном белом списке или нахождения его почтового ящика статусе "блокирован" будет реализовано с помощью кукис. К подобному способу реализации уведомления мы прибегали во время создания формы обратной связи.

Я даю Вам полный код файла whitelist.php (нового файла, который Вам необходимо создать в пользовательской папке moduls)

<?
//выводим пользователя из таблицы whitelist по почтовому ящику
@$userRESULT = mysql_query("SELECT email,status FROM whitelist WHERE email='$email_comm'");
@$user = mysql_fetch_array($userRESULT);

if($whitelist == 0)//если белый список отключен
{
if($user != "")//если пользователь уже писал сообщения и есть в бд
{
if($user['status'] == 2)//статус пользователя - бан
{
//формируем куку с сообщением
cookieMessW($server_root,"Вы не можете оставлять комментарии.");
header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;
}
if($user['status'] == 1)//статус пользователя - Не подтвержден
//формируем куку с сообщением
cookieMessW($server_root,"Ваше сообщение появится после того как администратор его проверит.");

$status = $user['status'];//сохраняем статус в переменной (0 или 1)
}
else//если это первое сообщение пользователя
{
$status = 0;//по умолчанию - гость
//заносим пользователя в список
$result_add_new_user = mysql_query ("INSERT INTO whitelist (email,status) VALUES ('$email_comm','0')");
}
}
else//если белый список включен
{
if($user != "")//если это не превое сообщение пользователя
{
if($user['status'] == 2)//если пользователь имеет статус бан
{
//формируем куку с сообщением
cookieMessW($server_root,"Вы не можете оставлять комментарии.");
header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;
}
if($user['status'] == 1)//статус пользователя - Не подтвержден
//формируем куку с сообщением
cookieMessW($server_root,"Включена премодерация комментариев. Ваше сообщение появится после того как администратор его проверит.");

$status = $user['status'];//сохраняем статус в переменной (0 или 1)
}
else//если это сообщение не первое
{
$status = 1;//по умолчанию заносим статус не подтвержден
//заносим пользователя в список
$result_add_new_user = mysql_query ("INSERT INTO whitelist (email,status) VALUES ('$email_comm','1')");
//формируем куку с сообщением
cookieMessW($server_root,"Включена премодерация комментариев. Ваше сообщение появится после того как администратор его проверит.");
}
}
//-------------------------------------------------
function cookieMessW($server_root,$txt)
{
preg_match("/http:\/\/(.*?)\//s",$server_root,$cookieSITE);
$cookieSITE = str_replace("www.","",$cookieSITE[1]);

setcookie("messW",$txt,time()+300,"/",".".$cookieSITE);
}
?>

Код за комментирован, да и сам по себе не сложный. Хочу лишь поделится идеей статуса, если быть точнее то, что означает число в переменной status и что это за переменная whitelist такая =)

Давайте с начало о статусе:

  • 0 - Гость, то есть почтовый ящик имеющий этот статус сможет оставлять сообщения без вмешательства администратора
  • 1 - Не подтвержден, почтовый ящик с таким статусом не может увидеть сообщение после отправления, но его комментарий попадает в базу данных. Его видит администратор, и стало быть сможет перевести его (сообщение и почтовый ящик) в статус "Гость"
  • 2 - Бан, почтовый ящик с этим статусом не может добавлять свои сообщения в базу данных, тем самым и увидеть их когда-нить не сможет

Что касается переменной whitelist, то тут все очень просто. Значение этой переменной будет формироваться в файле index.php. Если переменная имеет значение ноль, то модуль белого списка считает отключенным. Если переменная имеет значение единица, то, соответственно, модуль является включенным!

 

Заключение

 

Запустить этот модуль для проверки пока не получится, но совсем скоро этот модуль окажется привязан к нашим комментарием, и вот уже тогда мы сможем его тщательно потестить =)

Если Вы читаете мои заметки, и все еще не подписаны, то скорее подписывайтесь на RSS ленту блога через ридер, или же по почте =)

Всего Вам наилучшего! На сегодня к сожалению все!

Исходник

_______

P.S.: Умеете пользоваться интернетом? Знаете Всё об Интернет? Если простор веб-паутины Вас пугает, и Вы уверенны, что интернет это что-то типа свалки, то это значит, что Вы просто не умеете им пользоваться =) Почитайте ресурс inetedu.ru, Вам обязательно покажется интересным их материал...

 

Возможно Вам будут интересны следующие заметки

Комментарии (1)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Never Lex, 21 Мая 2012 г. 20:19 пишет:
Гость
Думал раньше сделать такой список. Но как-то времени не выделил :)