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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки

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

Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла проблемка. Мне было бы очень желательно, чтобы юзер после того, как разместил сообщение и тема была заблокирована, не мог больше ничего в своем сообщении исправить - по принципу "слово не воробей". При этом  оставалась бы возможность редактирования в открытых темах.  
 
Это я не из вредности, просто у одного моего форума есть своя специфика, где бы эта функция очень и очень бы пригодилась, а то сначала пишут одно, потом, когда вопросы им задают, быстро бегут в свою мессагу все исправлять, и отвечают - мол, я не я, и лошадь не моя, это вам все привиделось...
 
Может, кто-то уже реализовал такую штуку?
 


Запрещаем редактировать сообщения в закрытой теме

 
В postings.cgi в sub editform  
 
После:
 

Код:
 
&getforum("$inforum");
&getmember("$inmembername");
&moderator;
 

 
Добавляем:
 

Код:
 
##запрещаем редактировать в закрытой теме посты start
my $ftoopen = "$ikondir" . "forum$inforum/$intopic.pl";
open(FIL, "$ftoopen");
flock (FIL,2);
$in = <FIL>;
close(FIL);
($trash,$trash,$trash,$threadstate,$trash) = split(/\|/,$in);
&error("Редактирование сообщения&Вы не можете редактировать сообщение в закрытой теме")  if (($membercode ne "ad")&&($inmembmod ne "yes")&&($threadstate eq "closed"));
 
##запрещаем редактировать в закрытой теме посты  end
 


Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 09:22 25-06-2002 | Исправлено: lynx, 04:51 29-06-2003
Grey2002



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
маленький оффтоп : мне тут идея в башку стрельнула (c) by ivank  
Такая маленькая и полезная фича - запрещает править выбранные посты,в "Правке" у админа появляется птичка : "Запретить редактирование сообщения".

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

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 13:03 25-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grey2002
Сорри за тупость, я к середине дня плохо соображать начинаю , эта фича уже есть или это пока  

Цитата:
мне тут идея в башку стрельнула (c) by ivank  
?
 

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 13:17 25-06-2002
Grey2002



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

Цитата:
мне тут идея в башку стрельнула

(c) by ivank


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

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 15:40 25-06-2002
ivank



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я  почувствовал себя ужасно популярным. (c)Скив
 
 
Fuchsia
А это надо во всём форуме такую фичу, или только для выбранных тем?
 
Есть два решения: простое и посложнее (а если не через Ж то сильно посложнее).

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

Всего записей: 553 | Зарегистр. 24-01-2002 | Отправлено: 21:27 25-06-2002
MVY

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может быть не в тему , но всё таки спрошу .  
Я часто привожу примеры с других движков . И сейчас приведу один пример . На vBulletin я видел такое . В IB , если зайти в праку сообщения (не своего) , то видишь текст сообщения и т.д. А в vBulletin выскакивает предупреждение , - мол это не ваше сообщение. Хотелось бы прикрутить такое в IB
Благодарю заранее

Всего записей: 297 | Зарегистр. 02-02-2002 | Отправлено: 22:26 25-06-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ivank
А что тут сложного??? Открываем postings.cgi находим этот кусок

Код:
sub processedit {

Далее опускаемся чуть ниже и находим вот этот код:

Код:
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"; }

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 00:18 26-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ivank,
скорее всего, для избранных тем, чтобы одновременно с блокированием сообщения можно было сразу (или не сразу ) поставить запрет на редктирование.  
 
Хотя...  зачем что-то редактировать в закрытых темах? Раз они заблокированы, значит, там уже все, что можно, сказано. Так что, наверное, подойдет и для всех заблокированных тем во всех форумах.
 
alexei,
я правильно поняла, что этот код как раз и запрещает редактировать закрытые темы?

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 05:11 26-06-2002 | Исправлено: Fuchsia, 08:41 26-06-2002
ivank



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
В том то и дело, что это простое решение, которое работает для всего форума сразу, а не для выбранных тем. Что бы только для некоторых, это надо либо поле ещё одно вводить, либо файлами состояния пользоваться (проще, гораздо быстрее, но через Ж).

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

Всего записей: 553 | Зарегистр. 24-01-2002 | Отправлено: 08:52 26-06-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ivank
А что в нем не так? Админы и модеры ведь могут редактировать и в закрытых темах. А юзерам нефиг редактировать свои мессаги в закрытых темах. Насчет еще одного поля - можно, но не все смогут поставить.

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 11:14 26-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei,
спасибо Заменила код, все работает.
 
И как тут не сказать
 

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 11:41 26-06-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Fuchsia
Не за что
Тот код только для редактирования, если хочешь отключить еще и удаление постов в закрытых темах то надо провести установку хака еще и в sub deletepost.

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 12:11 26-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei, а у меня, вроде бы, юзеры и так не могут удалять сообщения даже в открытых темах. Но за подсказку спасибо, ежели ломанутся удалять, тут-то я им малину прикрою  

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 12:22 26-06-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Fuchsia
Oops, просто у меня такая фича установлена. Да и надо то для ее установки всего-то ничего. Открываем postings.cgi и находим:

Код:
sub deletepost {

Спускаемся вниз и находим:

Код:
if (($inmembmod eq "yes") && ($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"; }

Это даст возможность юзерам удалять свои сообщения, но только в открытых темах. Тоесть если ты закроешь тему, а кто-то полезет что-то удалять то обламается.
Еще хотел предложить, такой варант:
Ты закрываешь тему, юзер ломиться что-то исправить в мессаге. Скрипт на самом деле в теме ничего не исправляет, но юзеру пишет типа все ok, ваше сообщение исправлено. А на самом деле создается лог в котором записывается имя юзера, номер поста для правки, и то на что он хотел его исправить. Потом когда юезр что-то орет ты лезешь в лог и смотришь такой-то что-то хотел исправить на такое то и кидаешь ему данные из логов с предупреждением о бане Реализоват в принципе не сложно, но очень долго писать

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 19:13 26-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
спасибо Код скопировала, если настойчиво будут просить, чтобы дали им такую возможность - тогда обдумаю.  
 
Честно говоря, функция удаления (впрочем, я считаю, что и функция редактирования) была бы хороша, если бы, к примеру, удалить или редактировать сообщение в открытой теме юзер мог, скажем, в течение получаса после создания, а если уже есть ответы, то удалить бы уже не мог.  
 
А то в некоторых случаях после правки и, тем более, после удаления следующие сообщения смотрятся совершенно не вписывающимися в контекст.
 
Но, как я понимаю, скрипт для этого должен быть намного сложнее, да и мало кому такое надо...

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 19:24 26-06-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну раз так надо то попробую сделать
После установки тех хаков, что я выше написал находим вот этот кусок в подпрограмме sub processedit {

Код:
$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"; }

И заменяем его на вот этот:

Код:
$currenttime = time;
$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") && ($postdate > $currenttime - 1800)) { $cleartoedit = "yes"; }

Это запретит редактировать юзерам мессаги отправленые более 30 минут назад Если хочешь не 30, а какое то другое число то замени 1800 на (60 * число минут). Насколько нормально будет незнаю, по памяти писал.
А как ты хочешь запретить удаление? Говори что надо или тут или у меня на конфе, постараюсь помочь.

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 21:07 26-06-2002
Fuchsia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei,
у меня просто слов нет. Только я о чем подумаю, а ты уже и решение проблемы даешь.
 
Спасибо, правда, у меня там пока народу мало и все молчаливые такие, аж противно. Так что, я пока этот код к себе в копилку положу, а как понадобится, в дело пущу.
 
Ссылочку на твой форум в закладки кинула, буду заглядывать.

Всего записей: 285 | Зарегистр. 16-02-2002 | Отправлено: 05:47 27-06-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ой, а я не увидила сначала этой темы и сама написала, получилось так:
 
postings.cgi
 
sub editform  
 
После вызова подрограмм  
 
 
&getforum("$inforum");
&getmember("$inmembername");
&moderator;
 
написала:

Код:
 
##запрещаем редактировать в закрытой теме посты start
my $ftoopen = "$ikondir" . "forum$inforum/$intopic.pl";
open(FIL, "$ftoopen");
flock (FIL,2);
$in = <FIL>;
close(FIL);
($trash,$trash,$trash,$threadstate,$trash,$trash,$trash,$trash,$trash,$trash,$trash) = split(/\|/,$in);
if (($membercode ne "ad") && ($inmembmod ne "yes")){
&error("Редактирование сообщения&Вы не можете редактировать сообщение в закрытой теме") if ($threadstate eq "closed");
}
##end
 

 
И теперь если тема закрыта, то только админ или модер могут редактировать мессаги.
Вроде пашет, посмотрите, плиииз.

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
всё вроде нормально. Но код-то...код...
зачем так :

Код:
($trash,$trash,$trash,$threadstate,$trash,$trash,$trash,$trash,$trash,$trash,$trash) = split(/\|/,$in);

когда тебе всё после $threadstate не надо. Можно так :

Код:
]($trash,$trash,$trash,$threadstate,$trash) = split(/\|/,$in);

 
А тут :

Код:
if (($membercode ne "ad") && ($inmembmod ne "yes")){  
&error("Редактирование сообщения&Вы не можете редактировать сообщение в закрытой теме") if ($threadstate eq "closed");  
}

зачем то 2 ифа всплыло...
 

Код:
if (($membercode ne "ad") && ($inmembmod ne "yes") && ($threadstate eq 'closed')){  
&error("Редактирование сообщения&Вы не можете редактировать сообщение в закрытой теме")
}


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

Всего записей: 1325 | Зарегистр. 24-12-2001 | Отправлено: 12:30 28-05-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grey2002
 
 
Угу, сенкс, с трашами без разницы как понимаю, второе верно.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 20:34 28-05-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум 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