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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Grey2002



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

Цитата:
И все равно не работаааеет....  


Код:
## start($postermembername,$topictitle,$postipaddress...

конечно, закомментировала
и вообще в этом куске много не дочётов... щас исправлю ...
 
вот, держи :

Код:
sub deletepost {  
 
   $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";  
    open(FILE, "$filetoopen");  
    @allthreads = <FILE>;  
   close(FILE);  
     
($postermembername,$topictitle,$postipaddress,$showemoticons,$showsignature,$postdate,$post) = split(/\|/, @allthreads[$posttodelete]);  
&getmember("$postermembername");    
$postermembercode = $membercode;  
     
    $posttodelete = $inpostno;  
    $posttodelete--;  
    $postcountcheck = 0;  
    $totalposts = @allthreads;  
 
    &moderator;  
     
   &getmember("$inmembername");
   if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
   &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа");  
}  
    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'}"); }

 
потестил на чистой иб2, работает
 
ЗЫ.. первый раз, когда писал эту мессагу оборвалася связь... чуть не сдох, пока мессагу и код писал заново

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

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



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

Цитата:
## start($postermembername,$topictitle,$postipaddress...  

 
Эээ... А... где???  
 
Короче счас нет такого.
 

Цитата:
вот, держи :  

 
Спасибо, не работает
 

Цитата:
потестил на чистой иб2, работает  

 
У меня грязная, мне руки оторвать или сразу вешатся??
 
Код сейчас:
 

Код:
 
 
sub deletepost {
 
   $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
    open(FILE, "$filetoopen");
    @allthreads = <FILE>;
    close(FILE);    
   
## Для запрета править модерам посты админа
($postermembername,$topictitle,$postipaddress,$showemoticons,$showsignature,$postdate,$post) = split(/\|/, @allthreads[$posttodelete]);    
&getmember("$postermembername");    
$postermembercode = $membercode;    
##end
    $posttodelete = $inpostno;
    $posttodelete--;
    $postcountcheck = 0;
    $totalposts = @allthreads;
    &getmember("$inmembername");
    &moderator;
##start
&getmember("$inmembername");  
   if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
   &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа"); }  
    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'}"); }  
##end        
       
    $cleartoedit = "no";    
 
   ### First off, lets delete the post in the thread.
 
           foreach $postline (@allthreads) {
           chomp $postline;
           unless ($postcountcheck eq $posttodelete) { $processed_data .= "$postline\n"; }
                $postcountcheck++;
                }
 
           $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
            open(FILE, ">$filetoopen");
            #flock(FILE, 2);
            print FILE $processed_data;
            close(FILE);
            undef $processed_data;
 
        $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
        open(FILE, "$filetoopen");
        @allthreads = <FILE>;
        close(FILE);
        $totalposts = @allthreads;
        $posttograb = $totalposts;
        $posttograb--;
     ($postermembername2,$topictitle2,$postipaddress2,$showemoticons2,$showsignature2,$postdate2,$post2) = split(/\|/, @allthreads[$posttograb]);
       

 
Это уж я перестаралась. А вот еще круче, целый файл

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



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

Цитата:
еще круче, целый файл  

ок, скачал, щас буду разбираться...
 
Добавлено
lynx
короче, этот кусок :

Код:
sub deletepost {  
 
   $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";  
    open(FILE, "$filetoopen");  
    @allthreads = <FILE>;  
    close(FILE);    
     
## Для запрета править модерам посты админа  
($postermembername,$topictitle,$postipaddress,$showemoticons,$showsignature,$postdate,$post) = split(/\|/, @allthreads[$posttodelete]);    
&getmember("$postermembername");      
$postermembercode = $membercode;    
##end  
    $posttodelete = $inpostno;  
    $posttodelete--;  
    $postcountcheck = 0;  
    $totalposts = @allthreads;  
    &getmember("$inmembername");  
    &moderator;  
##start  
&getmember("$inmembername");  
   if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {    
   &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа"); }    
    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'}"); }  
##end          
         
    $cleartoedit = "no";

меняешь на :

Код:
sub deletepost {
 
    $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
    open(FILE, "$filetoopen");
    @allthreads = <FILE>;
    close(FILE);    
   
($postermembername, $topictitle, $postipaddress, $showemoticons, $showsignature ,$postdate, $post) = split(/\|/, @allthreads[$posttodelete]);
&getmember("$postermembername");  
$postermembercode = $membercode;  
 
    $posttodelete = $inpostno;
    $posttodelete--;
    $postcountcheck = 0;
    $totalposts = @allthreads;
     
    &moderator;
 
&getmember("$inmembername");  
   if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {  
   &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа"); }  
   $cleartoedit = "no";  
    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'}"); }  
       
    $cleartoedit = "no";

пробуй...

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

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



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все равно не пашет.
Я тут побилась малость.
В общем, мое подозрение, что не пашет переменная $postermambercode
 
Потому как, если ее дополнительно пропихать сюда:
 

Код:
 
&moderator;  
&getmember("$inmembername");  
$cleartoedit = "no";  
 
   if (($postermembercode eq "ad") && ($inmembmod eq "yes") && ($membercode ne "ad")) {    
  &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа"); }  
    if ($membername eq "$ibtxt{'0043'}") { &error("Правка&Гости не могут редактировать сообщения"); }    
    if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; }    
    if (($inmembmod eq "yes") && ($inpassword eq $password) && ($postermembercode ne "ad")) { $cleartoedit = "yes";    }  
     
     

     
    то все равно не пашет. Все равно модер может удалять мессаги админа.
     
    Идем дальше. Переменная $postermembername тоже не пашет. Ибо если прописать:
     
   
Код:
 
    if (($postermembername eq "lynx") && ($inmembmod eq "yes") && ($membercode ne "ad")) {    
   &error("Редактирование сообщения&Модераторы не могут удалять мессаги админа"); }  
   

     
    Из чего я заключаю, что что-то не так читается из файла:
 

Код:
     
    $filetoopen = "$ikondir" . "forum$inforum/$intopic.thd";
    open(FILE, "$filetoopen");
    @allthreads = <FILE>;
    close(FILE);    
   
($postermembername, $topictitle, $postipaddress, $showemoticons, $showsignature ,$postdate, $post) = split(/\|/, @allthreads[$posttodelete]);  
&getmember("$postermembername");  
$postermembercode = $membercode;  
 
 

 
В самом файле все нормально, вот примерчик одного.
 

Код:
 
lynx|test|-127.0.0.1--|yes|yes|1025816053|testtttt<br>lklklk<p>090909
Guest|test|-127.0.0.1--|yes|yes|1026081541|Ну, и как оно под Оперой?
 

 
Из чего я заключаю, что проблема где-то тут:
 

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

 
 
 
В общем, без Батвы не разберемся, похоже...

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



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

Цитата:
В общем, без Батвы не разберемся, похоже...

разберёмси.. у меня всё пашет, значит и у тебя запашет.. бем искать глюк...

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

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 07:59 11-07-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нда... IBhacker'ы...
lynx
Под:

Цитата:
&getmember("$postermembername");    
$postermembercode = $membercode;    

Клади код:
open (DEBUG, ">debug.txt");
print DEBUG "\$postermembercode = $postermembercode\n \$membercode = $membercode\n \$postermembername = $postermembername";
close DEBUG;
Пробуй и выкладывай сюда содержимое файла debug.txt из корня директории ИБ.
Grey2002
Мдя...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 14:02 15-07-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexander Ipp
На счет скрипта "запретить модераторам открывать темы, закрытые админом"  

Цитата:
В post.cgi:  
Ищем код:  

 
Разве енто пишется не в postings.cgi?!
 
Хм.. Действительно не работает...  
Вернее работает, но крайне глючно:
Если последний пост (на любом из форумов борды) сделал админ, модератор не может разблокировать ни одну из тем вообще.
Однако, если последний пост сделал модер - все в порядке.
 
Почему-то строки

Цитата:
&getmember("$lastposter");  
$lastposterstate = $membercode;  

присваивают IMHO значения не последнего постера в данной теме, а IMHO вообще последнего постера (по крайней мере у меня так).
 
Отсюда мое решение (все нижеследующие исправления делать только в коде Alexander Ipp'а):  
сразу после:
Код:
Цитата:
($topicid, $topictitle, $topicdescription, $threadstate, $threadposts ,$threadviews, $startedby, $startedpostdate, $lastposter, $lastpostdate) = split(/\|/,$in);  

 
дописать:
Код:

Цитата:
$threadlastposter=$lastposter;

 
а вместо:
Код:

Цитата:
&getmember("$lastposter");  

 
Пишем:
Код:

Цитата:
&getmember("$threadlastposter");  

 
 
У меня теперь работает.
PS: Если я что-то не то намалял  - сорри - я не волшебник, я только учусь (с).

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 18:45 11-08-2002 | Исправлено: Yoda Kerr, 19:10 11-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr
Я ещё ничего тогда не умел.
Не надо меня пинать за посы полугодичной давности.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:19 11-08-2002
Yoda Kerr



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дык никто и не пинает! Я "сейчасный" много ниже тебя "тогдашнего".
А твой пост исправлен для людей, которые хотели бы поставить эту фичу, но не знают как.

Всего записей: 14 | Зарегистр. 07-08-2002 | Отправлено: 21:22 11-08-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yoda Kerr

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 22:10 11-08-2002
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите, плиз.  
Сделал как в шапке и ничего все равно модератор может удалять. Пытался добавить как писал Yoda Kerr но что-то запутался.
 
Файл можно посмотреть тут:
postings.txt
Если понадобяться остальные то они тут:
forums.txt
postings.txt
topic.txt
ikon.txt
IkonRussian.txt
 
Версия форума IB219rus_fixed3  
Стоит на локалхосте DeNWeR  
версия Base_Parser_2004-04-17_a1.3.27_p4.3.6_m3.23.53_pma2.5.6_p311 + пакеты расширения.  
Заранее примного благодарен.  

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 14:35 10-02-2005
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Paha_W
 
postings.cgi
 
попробуй вместо:
 

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

 

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 19:16 10-02-2005
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
Все сделал как вы сказали, но все равно модератор может удалять сообщения администратора.
Код сейчас такойpostings.cgi)

Код:
 
$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"; }
            $tempfile = "$ikondir" . "forum$inforum/$intopic.pl";  
            open (ENT, $tempfile);  
            flock ENT, 1;  
            $temp = <ENT>;  
            close (ENT);  
            ($trash, $trash, $trash, $threadstate, $trash) = split(/\|/,$temp);  
            if (($inmembername eq $postermembername) && ($inpassword eq $password) && ($threadstate ne "closed")) { $cleartoedit = "yes"; }            
 
            if ($inmembername eq "$ibtxt{'0043'}"){$cleartoedit = "no"}  
             
            ###Запрет модерам посты админа править start#####  
            &gettopicmember("$postermembername");  
            $postermembercodesec = $membercode;  
            &error("Редактирование сообщения&Модераторы не могут редактировать сообщения администратора") if (($postermembercodesec eq "ad") && ($membercode ne "ad"));  
            ###Запрет модерам посты админа править end#####
             
        unless ($cleartoedit eq "yes") { $cleartoedit eq "no"; }
 

Сам файл лежит тут
postings.txt

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 06:07 11-02-2005 | Исправлено: Paha_W, 06:29 11-02-2005
trew

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Paha_W Попробуй после этого:

Цитата:
if (($inmembername eq $postermembername) && ($inpassword eq $password)) { $cleartoedit = "yes"; }  

Вставить:

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


Всего записей: 716 | Зарегистр. 15-11-2003 | Отправлено: 14:44 11-02-2005 | Исправлено: trew, 20:11 11-02-2005
trew

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

Код:
###Запрет модерам посты админа править start#####  
            &getmember("$postermembername");    
            $postermembercodesec = $membercode;    
            &error("Редактирование сообщения&Модераторы не могут редактировать сообщения администратора") if (($postermembercodesec eq "ad") && ($inmembmod eq "yes"));    
            ###Запрет модерам посты админа править end#####

 
Протестированно, работает!
Ошибку вызывало: $inmembmod, потому как, если  в форуме не есть модератор этого форума, то править он вообще ничего не может по дефолту.
А вот когда $inmembmod включенно для этого модератора( то есть модератор  этого форума), то функции модератора почти как у админа...

Всего записей: 716 | Зарегистр. 15-11-2003 | Отправлено: 21:37 11-02-2005
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все выше сказанное установил.
Теперь у меня код теперь такой:
 

Код:
 
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 (($postermembername eq "ad") && ($membercode  ne "ad")&&($inpassword eq $password)) { $cleartoedit = "no"; }
            ###
            $tempfile = "$ikondir" . "forum$inforum/$intopic.pl";  
            open (ENT, $tempfile);  
            flock ENT, 1;  
            $temp = <ENT>;  
            close (ENT);  
            ($trash, $trash, $trash, $threadstate, $trash) = split(/\|/,$temp);  
            if (($inmembername eq $postermembername) && ($inpassword eq $password) && ($threadstate ne "closed")) { $cleartoedit = "yes"; }            
 
            if ($inmembername eq "$ibtxt{'0043'}"){$cleartoedit = "no"}  
             
            ###Запрет модерам посты админа править start#####    
            &getmember("$postermembername");    
            $postermembercodesec = $membercode;    
            &error("Редактирование сообщения&Модераторы не могут редактировать сообщения администратора")  
            if (($postermembercodesec eq "ad") && ($inmembmod eq "yes"));    
            ###Запрет модерам посты админа править end#####
 


Цитата:
Ошибку вызывало: $inmembmod, потому как, если  в форуме не есть модератор этого форума, то править он вообще ничего не может по дефолту.

Это у меня  тоже работало, но все равно если человек модератор данного форума  он может удалять сообщения администратора.
Модератор не может править сообщения  админитсратора это тоже работает, а если модератор захочет удалить сообщение администратора, то пожалуйста удалит и "не поморщится".  
Да еще у меня теперь пользователи не могут удалять свои сообщения.
Сам файл лежит тут
postings.txt
Плиз Хелп!
 
 

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 06:23 12-02-2005 | Исправлено: Paha_W, 06:46 12-02-2005
trew

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Paha_W Полная путаница, давай сначала: возьми бекапный 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"; }

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

Всего записей: 716 | Зарегистр. 15-11-2003 | Отправлено: 17:25 12-02-2005 | Исправлено: trew, 18:15 12-02-2005
trew

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для того, чтоб модератор не мог удалять сообщения админа( привожу целый кусок и красным что отличается от дефолтного):

Код:
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.

Всего записей: 716 | Зарегистр. 15-11-2003 | Отправлено: 00:09 13-02-2005 | Исправлено: trew, 00:09 13-02-2005
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
trew
Вот мой первоначальный код:

Код:
 
            &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"; }
            $tempfile = "$ikondir" . "forum$inforum/$intopic.pl";  
            open (ENT, $tempfile);  
            flock ENT, 1;  
            $temp = <ENT>;  
            close (ENT);  
            ($trash, $trash, $trash, $threadstate, $trash) = split(/\|/,$temp);  
            if (($inmembername eq $postermembername) && ($inpassword eq $password) && ($threadstate ne "closed")) { $cleartoedit = "yes"; }            
 
            if ($inmembername eq "$ibtxt{'0043'}"){$cleartoedit = "no"}
                                                 
        unless ($cleartoedit eq "yes") { $cleartoedit eq "no"; }
 

Это бэкапный кусок.
Теперь как говорите вы:

Код:
 
&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 (($postermembername eq "ad") && ($membercode  ne "ad")&&($inpassword eq $password)) { $cleartoedit = "no"; }

            $tempfile = "$ikondir" . "forum$inforum/$intopic.pl";  
            open (ENT, $tempfile);  
            flock ENT, 1;  
            $temp = <ENT>;  
            close (ENT);  
            ($trash, $trash, $trash, $threadstate, $trash) = split(/\|/,$temp);  
            if (($inmembername eq $postermembername) && ($inpassword eq $password) && ($threadstate ne "closed")) { $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"; }
 

Я так понял что этот кусок
Цитата:
if (($postermembername eq "ad") && ($membercode  ne "ad")&&($inpassword eq $password)) { $cleartoedit = "no"; }

можно не вставлять. Я пробовал с ним и без него. Все ок посты администратора модераторы не могут править, но теперь и просто участники не могут править свои сообщения например участник со статусом Junior member.
Выдает ошибку:

Цитата:
Определенные причины для Исправление вашего сообщения Ошибка:  
Неправильный пароль или имя пользователя, либо вы не автор этого сообщения  
Вы хотите получить доступ к форуму - Файлы помощи?  
Возможные причины для Исправление вашего сообщения Ошибка:

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

Код:
 
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";
     
#    if ($membername eq "$ibtxt{'0043'}") { &error("Posting&Внимание, Гостю запрещено править сообщения"); }
    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'}"); }
             
            ### First off, lets delete the post in the thread.
 

После изменения:

Код:
 
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 (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes"; }
 

И строчка  

Код:
 
if ($membername eq "$ibtxt{'0043'}") { &error("Posting&Внимание, Гостю запрещено править сообщения"); }
 

была закоментрирована.  
Теперь при попытки модератора удалить пост администратора он пишет что

Цитата:
 
Определенные причины для Posting Ошибка:  
Внимание, Гостю запрещено править сообщения  
Вы хотите получить доступ к форуму - Файлы помощи?  
Возможные причины для Posting Ошибка:
 
 
От сюда вопрос как сделать так чтобы каждому свое, тоесть каждому кто правит сообщение, свой ответ об ошибке, тоесть если человек модератор, то ему пишется при попытке редактирования сообщения администратора:  

Цитата:
Данное сообщение можно править только администатору

А если вы участник, то при редактировании сообщения администратора/модератора писалось бы  

Цитата:
Данное сообщение можно править только администатору/модератору

Либо что-то в таком духе.
Перечень того что у меня работает и что нет:
 
1. Работает:
а) Правка сообщения администатора самим администратором;
б) Удаление сообщения администатора самим администратором;
в) Правка сообщения модератора самим модератором;
г) Удаление сообщения модератора самим модератором;
д) Правка сообщения участника самим модератором;
e) Правка сообщения администратора самим модератором;
ё) Удаление сообщения администратора самим модератором;
ж) Под гостем все работает.
 
2. Не работает:
а) Правка сообщения участников и модераторов самим администратором;
б) Удаление сообщения участников и модераторов самим администратором;
в) Удаление сообщения участников самим модератором;
 
Я хотел реализовать такую структуру:

Цитата:
 
Admin        |Правит сообщения всех и удаляет соответсвенно в том числе и свои.
Moderator  |Правит сообщения  и удаляет соответсвенно свои и ниже стоящих участников.
Участник   |Только свои правит, но не удаляет.
Гость         |Ничего не править, не удалять.
 

Вроде все описал, так что БОЛЬШАЯ просьба помочь. с тем что не работает!
И помочь в реализации вот такой структуры.
Заранее благодарен!
 

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 06:45 14-02-2005
trew

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Paha_W  Вместо своих кусков вставь мои целиком - все заработает

Всего записей: 716 | Зарегистр. 15-11-2003 | Отправлено: 15:04 14-02-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 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