Gram
Модератор раздела
 Откуда: здешний Всего сообщений: 569 Рейтинг пользователя: 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 копии редактируемых файлов. Удачи. |