Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Запрещаем модерам править посты админов.

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5

Открыть новую тему     Написать ответ в эту тему

Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Стандартно модераторы могут исправлять постинги администраторов, однако это не всегда есть гуд.
 
Посты могут править:  
1. участник  - только свой по дефолту
2. Гость не может править( установленно в последней версии) по дефолту
3. Забаненый не может править(утановленно в последней версии) по дефолту
4. Модератор  - только в своем форуме по дефолту
5. Администратор везде по дефолту
6. Модератор в своем форуме посты админа ( убираем с помощью этого хака)

Удалением постов.
1. участник  - не может по дефолту
2. Гость не может ( установленно в последней версии) по дефолту
3. Забаненый не может (утановленно в последней версии) по дефолту
4. Модератор  - только в своем форуме по дефолту
5. Администратор везде по дефолту
6. Модератор в своем форуме  даже посты админа ( убираем с помощью этого хака)

 
Предлагаю решение вопроса #1:
Открываем postings.cgi
Ищем:

Код:
 
sub processedit {
 

Опускаемся ниже, находим:

Код:
 
if ($inmembername eq "$ibtxt{'0043'}"){$cleartoedit = "no"}
 

Т.е. строчку запрещающую анрегам редактировать посты.
И ниже добавляем:

Код:
 
&getmember("$postermembername");
$postermembercodesec = $membercode;
&getmember("$inmembername");
if (($postermembercodesec eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {
$cleartoedit = "no";
&error("Редактирование сообщения&Модераторы не могут изменять сообщения администраторов");
}
 

Т.е мы берём значение имени автора поста, узнаём его статус, присваиваем его переменной, потом снова вытаскиваем данные редактирующего пост человека, проверяем, является ли он модером и не является ли админом, если да, то выдаём сообщение о том, что он не может править посты админа. Остальные проверки уже есть в коде.
Вывод сообщения об ощибке можно выкинуть.
Т.е. возможность одному админу править посты второго я оставил. ;)

 
Вариант №2 (альтернатива первому варианту, то есть вариант №1 не ставим)
Редактируем postings.cgi
Вот так выгледеть должно: sub processedit {

Код:
&getmember("$inmembername");  
            &moderator;  
 
            &getforum("$inforum");  
             
            if ($allowedentry{$inforum} eq "yes") { $allowed = "yes"; }  
 
            if (($privateforum eq "yes") && ($allowed ne "yes")) {  
                &error("$ibtxt{'1406'}&$ibtxt{'1407'}");  
                }    
 
            $cleartoedit = "no";  
 
            if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }  
            if (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes"; }  
            if (($inmembername eq $postermembername) && ($inpassword eq $password)) { $cleartoedit = "yes"; }  
 
            if ($inmembername eq "$ibtxt{'0043'}"){$cleartoedit = "no"}  
####Запрет модерам посты админа править start#####    
            &getmember("$postermembername");    
            $postermembercodesec = $membercode;    
            &error("Редактирование сообщения&Модераторы не могут редактировать сообщения администратора") if (($postermembercodesec eq "ad") && ($inmembmod eq "yes"));    
            ###Запрет модерам посты админа править end
 
 
        unless ($cleartoedit eq "yes") { $cleartoedit eq "no"; }  

 
Убираем возможность удалять посты админа модератором в своем форуме.
(привожу целый кусок и красным что отличается от дефолтного):

Код:
sub deletepost {  
 
    $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";  
    open(FILE, "$filetoopen");  
    @allthreads = <FILE>;  
    close(FILE);  
     
    $posttodelete = $inpostno;  
    $posttodelete--;  
    $postcountcheck = 0;  
    $totalposts = @allthreads;  
     
 
($postername,$trash)=split(/\|/,@allthreads[$posttodelete]);  
    &getmember("$postername");  
    $postercode = $membercode;
     
&getmember("$inmembername");  
    &moderator;  
 
    $cleartoedit = "no";  
 
 
    if ($membername eq "$ibtxt{'0043'}") { &error("Posting&Внимание, Гостю запрещено править сообщения"); }  
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }  
    if (($inmembmod eq "yes") && ($inpassword eq $password) && ($postercode ne "ad")) { $cleartoedit = "yes"; }  
    unless ($cleartoedit eq "yes") { $cleartoedit = "no"; }  
     
        if ($cleartoedit eq "no" && $checked eq "yes") { &error("$ibtxt{'1529'}&$ibtxt{'0504'}"); }    
        if ($cleartoedit eq "yes") {  
             
            if ($posttodelete == 0) { &error("$ibtxt{'1530'}&$ibtxt{'1531'}"); }  
             
            ### First off, lets delete the post in the thread.  
 
 
 
 
 

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:58 03-01-2002 | Исправлено: trew, 05:43 15-02-2005
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp, сэнкс. Все работает.


----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 20:39 03-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
См. фикс выше!!!!!
 
Добавлено
В общем, там была ошибка, сам админ, если он модер раздела, править тоже не мог. Теперь могёт.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 21:34 03-01-2002
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp, а я это не проверял.


----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 14:14 04-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vasya Pupkin
Я сам проверил.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:03 04-01-2002
Yauheni



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp, а может напишешь, как запретить модераторам открывать темы, закрытые админом?

Всего записей: 585 | Зарегистр. 07-10-2001 | Отправлено: 22:33 04-01-2002
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yauheni
Вставь проверку в соответствующем месте.
 
Добавлено
щас я скажу, где че поправить надо.
 
Добавлено
Короче, колдуем над этим кодом в файле postings.cgi:

Код:
sub unlockthread {
 
    &getmember("$inmembername");
    &moderator;
 
    $cleartoedit = "no";
     
     
    &mischeader("$ibtxt{'1546'}");
 
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
    if (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
    unless ($cleartoedit eq "yes") { $cleartoedit = "no"; }

Меняем его на этот:

Код:
sub unlockthread {
 
    &getmember("$inmembername");
 
    $cleartoedit = "no";
     
    &mischeader("$ibtxt{'1546'}");
 
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
    unless ($cleartoedit eq "yes") { $cleartoedit = "no"; }

Правда один недостаток:
Цитата:
Вы не модератор и не администратор, либо Ваш пароль неправильный  

но пережить можно.
ПРОВЕРЕНО. (я про этот хак, если можно так сказать).

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 01:08 05-01-2002
Yauheni



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurik, сделал, но выдает ошибку:
"Software error:
Unrecognized character \240 at postings.cgi line 833."

Всего записей: 585 | Зарегистр. 07-10-2001 | Отправлено: 02:54 05-01-2002
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yauheni
что это за строчка (833я)? кинь сюда.
как я и сказал выше - я проверил свой "хак" собственноручно. все пашет, никаких ошибок!

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 03:18 05-01-2002
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurik, вроде работает. Спасибо.


----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 17:22 05-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurik
Пожи, пожи, ты чего-то намудрил...
Смотри, ты просто выкинул возможность модерам открывать темыЖ

Код:
if (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes";  

Этот код делает проверу на то, что если чел модер и его пароль верен, то он может редактировать. Ты это убрал и оставил это право только админам.
Тут всё сложнее. Надо:
1. Узнать, кто закрыл тему (не знаю уж, пишется ли это в файл темы, имхо нет, но завтра гляну).
2. Проверить, админ ли он?
3. Проверить, наш входящий юзер - он админ или модер раздела?
4. Если админ, то пусть правит, если модер, а тема закрыта админом, то вывести сообщение об ошибке (&error("Нефиг открывать темы закрытые админом&Ты модератор и не лезь в дела админа");).
"Недостаток", кстати, исправить очень легко.
Только проку мало.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 21:46 06-01-2002
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp, зимняя сессия. Не соображаю ничего. Действительно. Он разрешил все темы править только админам, а модерам нет.


----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 22:08 06-01-2002
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Ну и, пишется в файл, кто закрыл? Если нет, то придется писать.

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 14:56 07-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurik
Сорри, руки всё не доходит. Имхо, нет.

Цитата:
Если нет, то придется писать.

Не стоит оно того... Хотя можно в ластпост засунуть...
Подумаю.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 22:07 08-01-2002 | Исправлено: Alexander Ipp, 22:10 08-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишется оно туда, пишется, но некоторые здесь эту запись вырубали. Кто не вырубил - вот вам заготовка, правда, есть один маленький недостаток - она не пашет. Разбираться особо не стал, т.к. мне эта фича не очень-то нужна. Имхо, дело в той части, где читается и разбирается файл темы. Я её где-то в posting.cgi выдернул и вставил, как есть.
В post.cgi:
Ищем код:

Код:
 
sub unlockthread {
 
    &getmember("$inmembername");
    &moderator;
 

После него добавлянм:

Код:
 
my $file = "$ikondir" . "forum$inforum/$intopic.pl";
open (ENT, $file);
flock ENT, 1;
$in = <ENT>;
close (ENT);
 
($topicid, $topictitle, $topicdescription, $threadstate, $threadposts ,$threadviews, $startedby, $startedpostdate, $lastposter, $lastpostdate) = split(/\|/,$in);
 

Ниже ищем:

Код:
 
if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
if (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
 

Под ним мутим:

Код:
 
&getmember("$lastposter");
$lastposterstate = $membercode;
&getmember("$inmembername");
if (($inmembmod eq "yes") && ($lastposterstate eq "ad") && ($membercode ne "ad")) {
$cleartoedit = "no";
&error("Вы не администратор&Вы не можете открыть тему, закрытую администратором");
}
 

Всё бы ничего, но это не пашет, разбирайтесь сами, какого это, спрашивается.
Мне эта фича не нужна, это так, наброски.
PS У вас код может отличаться, у меня борда довольно-таки здорово модифицирована.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:03 09-01-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа программеры....!
Я хочу запретить модерам _удалять_ посты админа и не получаетсяяяяя...
 
 

Код:
 
sub deletepost {
 
   $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
    open(FILE, "$filetoopen");
    @allthreads = <FILE>;
   close(FILE);
    $posttodelete = $inpostno;
    $posttodelete--;
    $postcountcheck = 0;
    $totalposts = @allthreads;
    &getmember("$inmembername");
    &moderator;
    $cleartoedit = "no";
 
###Запрет модерам удалять админа править start#####
&getmember("$postermembername");  
$postermembercodesec = $membercode;  
&getmember("$inmembername");  
if (($postermembercodesec eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
$cleartoedit = "no";  
&error("Удаление сообщения&Модераторы не могут удалять сообщения администратора");  
}  
###Запрет модерам удалять админа править end#####    
 
    if ($membername eq "$ibtxt{'0043'}") { &error("правка сообщения&Гостю запрещено править сообщения"); }
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
    if (($inmembmod eq "yes") && ($inpassword eq $password)) {
     $cleartoedit = "yes";    }
 
   unless ($cleartoedit eq "yes") { $cleartoedit = "no"; }
 
    if ($cleartoedit eq "no" && $checked eq "yes") { &error("$ibtxt{'1529'}&$ibtxt{'0504'}"); }    
    if ($cleartoedit eq "yes") {
    if ($posttodelete == 0) { &error("$ibtxt{'1530'}&$ibtxt{'1531'}"); }
 

 
Хнык.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 01:27 09-07-2002
Grey2002



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
дык канешн,

Код:
&getmember("$postermembername");  

откуда бы эта переменная взялась? короче удаляй всё, что ты добавила, после :

Код:
$filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
open(FILE, "$filetoopen");
@allthreads = <FILE>;
close(FILE);

добавляй :

Код:
            ($postermembername, $topictitle, $postipaddress, $showemoticons, $showsignature ,$postdate, $post, $posticon) = split(/\|/, @allthreads[$posttodelete]);
&getmember("$postermembername");  
$postermembercode = $membercode;

а после :

Код:
&moderator;

втыкай это :

Код:
&getmember("$inmembername");
if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
&error("Удаление сообщения&Модераторы не могут удалять сообщения администратора");}


----------
Мой Блог

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 04:53 09-07-2002
ivank



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ИМХО это дурной тон запрещать модерам делать что-то с постами админов. В любом форуме _модератор_ важнее админа.

----------
ivank
http://ivank.oszone.net

Всего записей: 553 | Зарегистр. 24-01-2002 | Отправлено: 10:33 09-07-2002
Grey2002



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ivank
да, ты прав..

----------
Мой Блог

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 10:38 09-07-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ivank
 

Цитата:
ИМХО это дурной тон запрещать модерам делать что-то с постами админов. В любом форуме _модератор_ важнее админа.

 
Да при чем тут тон, дурной или нет, меня, например, бесит, если на конфе не прикручена форма отправки сообщения, а надо кликать для этого, и если гостям постить нельзя тоже раздражает, ну, и что с того? И вообще, вопросы тона - дурного не дурного, это не сюда, а тут скрипты, чисто технические вопросы.
 
Grey2002
 

Цитата:
$posticon

 
А это кто за переменная? У меня нет такого ...
 
И все равно не работаааеет....
 
Вот код сейчас.
 

Код:
 
sub deletepost {
 
   $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
    open(FILE, "$filetoopen");
    @allthreads = <FILE>;
   close(FILE);
   
## start($postermembername,$topictitle,$postipaddress,$showemoticons,$showsignature,$postdate,$post,$posticon) = split(/\|/, @allthreads[$posttodelete]);  
&getmember("$postermembername");  
$postermembercode = $membercode;  
##end
   
    $posttodelete = $inpostno;
    $posttodelete--;
    $postcountcheck = 0;
    $totalposts = @allthreads;
    &getmember("$inmembername");
    &moderator;
    $cleartoedit = "no";    
    &getmember("$inmembername");  
if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
&error("&#211;&#228;&#224;&#235;&#229;&#237;&#232;&#229; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255;&&#204;&#238;&#228;&#229;&#240;&#224;&#242;&#238;&#240;&#251; &#237;&#229; &#236;&#238;&#227;&#243;&#242; &#243;&#228;&#224;&#235;&#255;&#242;&#252; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255; &#224;&#228;&#236;&#232;&#237;&#232;&#241;&#242;&#240;&#224;&#242;&#238;&#240;&#224;");}  
    if ($membername eq "$ibtxt{'0043'}") { &error("Удаление сообщения&Модераторы не могут удалять мессаги админа"); }
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
    if (($inmembmod eq "yes") && ($inpassword eq $password)) {
     $cleartoedit = "yes";    }
 
   unless ($cleartoedit eq "yes") { $cleartoedit = "no"; }
 
    if ($cleartoedit eq "no" && $checked eq "yes") { &error("$ibtxt{'1529'}&$ibtxt{'0504'}"); }    
    if ($cleartoedit eq "yes") {
    if ($posttodelete == 0) { &error("$ibtxt{'1530'}&$ibtxt{'1531'}"); }
 
 


Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 21:59 09-07-2002
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Запрещаем модерам править посты админов.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru