yura3d |
Отправлено: 10 марта 2011 — 00:37
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Таня пишет:В примере из текущего времени отнимается $post_id, которая равна времени публикации сообщения и если разница меньше заданной то параметр edited ( и соответственно надпись "Отредактировано автором..." ) к сообщению не добавляется.
Вариант с использованием переменной $post_id не очень хорош тем, что в ней хранится дата публикации сообщения без учёта того, что сообщение может быть дополнено автором впоследствии (опция склеивания сообщений, которая как раз включена на форуме Nikela, интервал склеивания равен 5-ти минутам). В результате, если после дополнения своего сообщения пользователь захочет его отредактировать, вновь получим пресловутое "Отредактировано автором...", поскольку сравнение происходит по времени публикации самой первой части сообщения
Правильным будет в файле postings.php первоначальные строки:
CODE: } elseif ($fm->_Moderator === FALSE) {
$topic[$post_id]['edited'] = $fm->_Nowtime;
}
заменить строками:
CODE: } elseif ($fm->_Moderator === FALSE && $fm->_Nowtime - $list[$topic_id]['postdate'] > 180) {
$topic[$post_id]['edited'] = $fm->_Nowtime;
}
Здесь по сути меняется только 1-ая строка, полностью фрагмент приведён только чтобы было понятно, где её искать. Здесь мы извлекаем время публикации последней части сообщения из списка тем - $list[$topic_id]['postdate']. В результате после дополнения своего сообщения пользователь получит новые 3 минуты его редактирование без указания информации о редактировании |
|
|
Таня |
Отправлено: 12 марта 2011 — 01:25
|
Newbie
Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2011
Репутация: 8
|
5 минут... мало очень, планирую 2 часа сделать, оно же ни на что не влияет.
У меня другая строка, вместо
CODE:} elseif ($fm->_Moderator === FALSE) {
$topic[$post_id]['edited'] = $fm->_Nowtime;
}
CODE:}else{
$topic[$post_id]['edited']=$fm->_Nowtime;
}
Видимо потому, что делала исправления по этим отметкам (там кажется админская правка не стиралась никак), выложенные тут на форуме, потому решение пришлось делать универсальным, чтобы работало как с исправлением, так без него.
Второй вариант с дополнительными 3 минутами после склейки тоже красиво, хотя дополнение (склейка) по сути тоже есть редакция.
(Добавление)
Сейчас проверила - да, у меня сделано исправление и что интересно модераторы/администраторы могут редактировать свои сообщения без отметки о редакции.
Сочла это несправедливостью и в postings.php перед строкой
CODE:$topic[$post_id]['post']=$fm->bads_filter(preg_replace( "#(\?|&|;|&)PHPSESSID=([0-9a-zA-Z]){32}#i", "", $fm->input['inpost']));
добавила строчку
CODE:if($fm->_Moderator===TRUE&&$topic[$post_id]['p_id']==$fm->user['id']&&$fm->_Nowtime-$post_id>180)$topic[$post_id]['edited']=$fm->_Nowtime; //редакция своих постов модераторами |
|
|
Таня |
Отправлено: 12 марта 2011 — 15:24
|
Newbie
Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2011
Репутация: 8
|
Nikela, это до применения исправления для удаления отметки о редактировании администратором, на которое у Вас ссылка в сообщении.
Скоро на меня Юра наверное обидится , но я нашла там еще один неприятный момент - надпись о правке показывается раньше подписи пользователя, что совсем плохо смотрится.
Ввела в topic.php еще одну переменную, чтобы это исправить, но сейчас не об этом.
Вот мой отрезок кода из postings.php, если применять, то обязательно после исправления (ссылка выше) и естественно сделав резервную копию файла postings.php.
Вариант с отметкой о редактировании своих постов, если автор Администратор/Модератор:
CODE:$fm->_Boolean($fm->input,'modertext');
if($fm->_Moderator===TRUE){
$topic[$post_id]['lockedit']=($fm->_Boolean($fm->input,'lockedit')===TRUE)?TRUE:FALSE;
if($topic[$post_id]['lockedit']===FALSE){
unset($topic[$post_id]['lockedit']);
}
if($topic[$post_id]['p_id']!==$fm->user['id']&&$fm->input['modertext']===TRUE){
if($fm->input['mo_text']!==''){
$topic[$post_id]['mo_text']=$fm->input['mo_text'];
}
if(defined('IS_ADMIN')){
$topic[$post_id]['ad_editor']=$fm->user['name'];
$topic[$post_id]['ad_edited']=$fm->_Nowtime;
unset($topic[$post_id]['mo_editor'],$topic[$post_id]['mo_edited']);
}else{
$topic[$post_id]['mo_editor']=$fm->user['name'];
$topic[$post_id]['mo_edited']=$fm->_Nowtime;
unset($topic[$post_id]['ad_editor'],$topic[$post_id]['ad_edited']);
}
}else{
unset($topic[$post_id]['mo_text'],$topic[$post_id]['ad_editor'],$topic[$post_id]['ad_edited'],
$topic[$post_id]['mo_editor'],$topic[$post_id]['mo_edited']);
}
}else{
if($fm->_Nowtime-$post_id>300)$topic[$post_id]['edited']=$fm->_Nowtime; //время редактирования без отметки о редактировании автором
}
if($fm->_Moderator===TRUE&&$topic[$post_id]['p_id']==$fm->user['id']&&$fm->_Nowtime-$post_id>300)$topic[$post_id]['edited']=$fm->_Nowtime; //редакция своих постов модераторами
$topic[$post_id]['post']=$fm->bads_filter(preg_replace( "#(\?|&|;|&)PHPSESSID=([0-9a-zA-Z]){32}#i", "", $fm->input['inpost']));
Вариант с закомментированной строкой, тут Администраторы могут править свои сообщения без отметок:
CODE:$fm->_Boolean($fm->input,'modertext');
if($fm->_Moderator===TRUE){
$topic[$post_id]['lockedit']=($fm->_Boolean($fm->input,'lockedit')===TRUE)?TRUE:FALSE;
if($topic[$post_id]['lockedit']===FALSE){
unset($topic[$post_id]['lockedit']);
}
if($topic[$post_id]['p_id']!==$fm->user['id']&&$fm->input['modertext']===TRUE){
if($fm->input['mo_text']!==''){
$topic[$post_id]['mo_text']=$fm->input['mo_text'];
}
if(defined('IS_ADMIN')){
$topic[$post_id]['ad_editor']=$fm->user['name'];
$topic[$post_id]['ad_edited']=$fm->_Nowtime;
unset($topic[$post_id]['mo_editor'],$topic[$post_id]['mo_edited']);
}else{
$topic[$post_id]['mo_editor']=$fm->user['name'];
$topic[$post_id]['mo_edited']=$fm->_Nowtime;
unset($topic[$post_id]['ad_editor'],$topic[$post_id]['ad_edited']);
}
}else{
unset($topic[$post_id]['mo_text'],$topic[$post_id]['ad_editor'],$topic[$post_id]['ad_edited'],
$topic[$post_id]['mo_editor'],$topic[$post_id]['mo_edited']);
}
}else{
if($fm->_Nowtime-$post_id>300)$topic[$post_id]['edited']=$fm->_Nowtime; //время редактирования без отметки о редактировании автором
}
//if($fm->_Moderator===TRUE&&$topic[$post_id]['p_id']==$fm->user['id']&&$fm->_Nowtime-$post_id>300)$topic[$post_id]['edited']=$fm->_Nowtime; //редакция своих постов модераторами
$topic[$post_id]['post']=$fm->bads_filter(preg_replace( "#(\?|&|;|&)PHPSESSID=([0-9a-zA-Z]){32}#i", "", $fm->input['inpost']));
Возможно, строка для правки своих сообщений Администраторами/Модераторами не идеальна, но думаю это нужно/можно опционально вынести в админку. Если такая возможность не требуется закомментированную строку можно совсем удалить.
Последняя строчка в примерах
CODE:$topic[$post_id]['post']=$fm->bads_filter(preg_replace( "#(\?|&|;|&)PHPSESSID=([0-9a-zA-Z]){32}#i", "", $fm->input['inpost']));
не изменяется, я её привела для определения места окончания отрезка кода.
Юра наверное еще подправит, уже под вариант с исправлением, в моем варианте 300 секунд (подставила как у Nikela, чтобы меньше возиться) дается на правку без отметки о редактировании с момента публикации сообщения. |
|
|
|