Gram
Модератор раздела
Откуда: здешний Всего сообщений: 566 Рейтинг пользователя: 14 Репутация пользователя: 1Дата регистрации на форуме: 23 июля 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 25 августа 2004 2:33 Сообщение отредактировано: 20 октября 2004 15:22
Иногда складывается ситуация, когда необходимо забанить один из форумов для конкретного участника, т.е. запретить доступ на определенный форум определенному участнику. Так вот делается это достаточно просто. Смысл такой: в профиле для закрытых форумов пишется что то типа 22=yes&23=yes - это номера закрытых форумов, на которые имеется доступ. Так вот туда можно вписать номера форумов, на которые мы запрещаем доступ. Естественно вместо yes необходимо написать no, например: 22=yes&23=yes&5=no (на форум с номером 5 мы запрещаем доступ). Так вот собственно реализация этой фичи:
Открываем topic.cgi, post.cgi, postings.cgi, printpage.cgi и заменяем ВСЕ строчки вида
if (("$privateforum" eq "yes" && "$allowed" ne "yes")) {
На
if (("$privateforum" eq "yes" && "$allowed" ne "yes") || $allowedentry{$inforum} eq "no") {
Открываем forums.cgi и перед строчкой
if (("$privateforum" eq "yes") && ("$allowed" ne "yes")) { &accessneeded; }
Пишем
if ($allowedentry{$inforum} eq "no") { &error("входе в закрытый форум&К сожалению, у вас нет доступа к этому форуму"); }
Открываем newposts.cgi, search2.cgi (или search.cgi) и заменяем ВЕЗДЕ
if (($privateforum eq "yes") && ($allowedentry{$forumid} ne "yes")) { next; }
На
if (($privateforum eq "yes") && ($allowedentry{$forumid} ne "yes") || ($allowedentry{$forumid} eq "no")) { next; }
На главной страничке форума (board.cgi) скрывать форум бесмысленно: во-первых, юзер знает о его существовании, а во-вторых пусть смотрит и корит себя за проступки. Может опомнится и прощение попросит (за это мы ему доступ и откроем). Так же необходимо поправить скрипт рассылки (subsc.cgi), но поскольку у меня пока его нет в наличии, то допишу чуть попозже. Теперь самое главное: делаем настройки через Админцентр:
Открываем setmembers.cgi и находим:
if ($tocheck eq "yes") {
И заменяем на:
if ($tocheck eq "yes" or $tocheck eq "no") {
Ищем чуть ниже:
if ($privateforum eq "yes") {
$grab = "$forumid|$forumname";
push(@newforums, $grab);
}
И сразу после этого пишем:
else {
$grab1 = "$forumid|$forumname";
push(@newforums1, $grab1);
}
Еще чуть ниже ищем код:
foreach $line (@allowedforums) {
($forumid, $forumname) = split(/\|/,$line);
if ($allowedentry2{$forumid} eq "yes") { $checked = " checked"; }
else { $checked = ""; }
$privateoutput .= qq~<input type="checkbox" name="allow$forumid" value="yes"$checked>$forumname<br>\n~;
}
И сразу после него пишем:
foreach $line (@newforums1) {
($forumid, $forumname) = split(/\|/,$line);
if ($allowedentry2{$forumid} eq "no") { $checked = " checked"; }
else { $checked = ""; }
$banforumoutput .= qq~<input type="checkbox" name="allow$forumid" value="no" $checked>$forumname<br>\n~;
}
Затем ищем еще чуть ниже:
if ($privateoutput) {
$privateoutput = qq~
<td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Доступ на закрытые форумы (выберите те форумы, на которые участник должен иметь доступ):</b><br>
$privateoutput</td></tr><tr>~;
}
Заменяем на:
if ($privateoutput) {
$privateoutput = qq~
<td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Доступ на закрытые форумы (выберите те форумы, на которые участник должен иметь доступ):</b><br>
$privateoutput</td></tr><tr><td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Закрыть доступ на открытые форумы (выберите те форумы, на которые участник НЕ должен иметь доступ):</b><br>
$banforumoutput</td></tr><tr>~;
}
Вот собственно и все :) Еще бы неплохо сделать поиск участников в Админцентре, которым запрещен доступ к тем или иным форумам. Но мне лень разбираться с тем кодом. Как будет необходимость - будет и поиск :)
Хак написан мною, естественно протестирован. Не бойтесь, что где то будет дырка в безопастности: мы же не открываем доступ, а наоборот запрещаем его. Так что беспокоиться не стоит. И не забывайте делать backup копии редактируемых файлов. Удачи. |