Причина редактирования комментария

Причина редактирования комментария

После применения этого хака, у администраторов и модераторов появится возможность оставлять причину редактирования комментария.




Возможности:
  • Причина редактирования.
  • Кто отредактировал?
  • Когда отредактировал?
  • Вкл/Откл вывод уведомления о редактировании.
  • Полная поддержка BBCODES.



Установка:
1. Открыть engine/modules/show.full.php и найти:
$comments->query = "SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, " . PREFIX . "_comments.rating, " . PREFIX . "_comments.vote_num, " . PREFIX . "_comments.parent, name, " . USERPREFIX . "_users.email, news_num, comm_num, user_group, lastdate, reg_date, signature, foto, fullname, land, xfields FROM " . PREFIX . "_comments LEFT JOIN " . USERPREFIX . "_users ON " . PREFIX . "_comments.user_id=" . USERPREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id'" . $where_approve . " ORDER BY " . PREFIX . "_comments.id " . $comm_msort;

Заменить на:
$comments->query = "SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, view_edit, date_edit, user_edit, reason_edit, " . PREFIX . "_comments.rating, " . PREFIX . "_comments.vote_num, " . PREFIX . "_comments.parent, name, " . USERPREFIX . "_users.email, news_num, comm_num, user_group, lastdate, reg_date, signature, foto, fullname, land, xfields FROM " . PREFIX . "_comments LEFT JOIN " . USERPREFIX . "_users ON " . PREFIX . "_comments.user_id=" . USERPREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id'" . $where_approve . " ORDER BY " . PREFIX . "_comments.id " . $comm_msort;

2. Открыть engine/classes/comments.class.php и найти:
$tpl->set( '{comment}', "<div id='comm-id-" . $row['id'] . "'>" . $row['text'] . "</div>" );

Добавить выше:
if( $row['view_edit'] and $row['date_edit'] ) {
			
			if( date( Ymd, $row['date_edit'] ) == date( Ymd, $_TIME ) ) {
				
				$tpl->set( '{date_edit}', $lang['time_heute'] . langdate( ", H:i", $row['date_edit'] ) );
			
			} elseif( date( Ymd, $row['date_edit'] ) == date( Ymd, ($_TIME - 86400) ) ) {
				
				$tpl->set( '{date_edit}', $lang['time_gestern'] . langdate( ", H:i", $row['date_edit'] ) );
			
			} else {
				
				$tpl->set( '{date_edit}', langdate( $config['timestamp_active'], $row['date_edit'] ) );
			
			}
			
			$tpl->set( '{user_edit}', $row['user_edit'] );
			$tpl->set( '{reason_edit}', $row['reason_edit'] );
			
			if( $row['reason_edit'] ) {
				
				$tpl->set( '[reason_edit]', "" );
				$tpl->set( '[/reason_edit]', "" );
			
			} else
				$tpl->set_block( "'\\[reason_edit\\](.*?)\\[/reason_edit\\]'si", "" );
			
			$tpl->set( '[date_edit]', "" );
			$tpl->set( '[/date_edit]', "" );
		
		} else {
			
			$tpl->set( '{date_edit}', "" );
			$tpl->set( '{user_edit}', "" );
			$tpl->set( '{reason_edit}', "" );
			$tpl->set_block( "'\\[date_edit\\](.*?)\\[/date_edit\\]'si", "" );
			$tpl->set_block( "'\\[reason_edit\\](.*?)\\[/reason_edit\\]'si", "" );
		}

3. Открыть engine/ajax/editcomments.php и найти:
$row = $db->super_query( "SELECT id, date, autor, text, is_register FROM " . PREFIX . "_{$allowed_areas[$area]['comments_table']} where id = '$id'" );

Заменить на:
$row = $db->super_query( "SELECT id, date, autor, text, is_register, reason_edit FROM " . PREFIX . "_{$allowed_areas[$area]['comments_table']} where id = '$id'" );

Найти:
$comm_txt = $parse->decodeBBCodes( $row['text'], false );

Добавить ниже:
$edit_reason = $parse->decodeBBCodes( $row['reason_edit'], false );

Найти:
$comm_txt = $parse->decodeBBCodes( $row['text'], true, $config['allow_comments_wysiwyg'] );

Добавить ниже:
$edit_reason = $parse->decodeBBCodes( $row['reason_edit'], true, $config['allow_comments_wysiwyg'] );

Найти:
$buffer = <<<HTML
<div class="bb-editor ignore-select">
{$bb_code}
<textarea name="dleeditcomments{$id}" id="dleeditcomments{$id}" rows="10" cols="50" {$params}>{$comm_txt}</textarea><br>
<div align="right" style="width:99%;padding-top:5px;"><input class="bbcodes" title="$lang[bb_t_apply]" type="button" onclick="ajax_save_comm_edit('{$id}', '{$area}'); return false;" value="$lang[bb_b_apply]">
<input class="bbcodes" title="$lang[bb_t_cancel]" type="button" onclick="ajax_cancel_comm_edit('{$id}'); return false;" value="$lang[bb_b_cancel]">
</div></div>
HTML;

Заменить на:
if($is_logged AND $user_group[$member_id['user_group']]['admin_comments']) {
	$reason_com = "<br>Причина редактирования:{$bb_code}<textarea name='reason{$id}' id='reason{$id}' rows='5' cols='50' {$params}>{$edit_reason}</textarea><br><br><label class='comments_subscribe'><input type='checkbox' name='view_edit{$id}' id='view_edit{$id}' value='1' checked /><b style='color:red'>Выводить информацию о том что комментарий отредактирован</b></label>";		
	}else{	
	$reason_com = "";
	}	
	
	$buffer = <<<HTML
<div class="bb-editor ignore-select">
{$bb_code}
<textarea name="dleeditcomments{$id}" id="dleeditcomments{$id}" rows="10" cols="50" {$params}>{$comm_txt}</textarea><br>{$reason_com}
<div align="right" style="width:99%;padding-top:5px;"><input class="bbcodes" title="$lang[bb_t_apply]" type="button" onclick="ajax_save_comm_edit('{$id}', '{$area}'); return false;" value="$lang[bb_b_apply]">
<input class="bbcodes" title="$lang[bb_t_cancel]" type="button" onclick="ajax_cancel_comm_edit('{$id}'); return false;" value="$lang[bb_b_cancel]">
</div></div>
HTML;

Найти:
$db->query( "UPDATE " . PREFIX . "_{$allowed_areas[$area]['comments_table']} SET text='$comm_update', approve='1' WHERE id = '$id'" );

Заменить на:
if($is_logged AND $user_group[$member_id['user_group']]['admin_comments']) {
	$reason = trim( $parse->BB_Parse( $parse->process( convert_unicode( $_POST['reason'], $config['charset'] ) ), $use_html ) );	
	$reason_update = $db->safesql( $reason );
	$view_edit = intval($_REQUEST['view_edit']);	
	$db->query( "UPDATE " . PREFIX . "_{$allowed_areas[$area]['comments_table']} SET text='$comm_update', approve='1', view_edit='$view_edit', date_edit='$_TIME', user_edit='$member_id[name]', reason_edit='$reason_update' where id = '$id'");	
	}else{		
	$db->query( "UPDATE " . PREFIX . "_{$allowed_areas[$area]['comments_table']} SET text='$comm_update', approve='1' where id = '$id'");
	}

4. Открыть templates/Default/comments.tpl и найти:
<div class="text">{comment}</div>

Заменить на:
<div class="text">{comment}[date_edit]<p class="editdate grey">Сообщение отредактировал: <b>{user_edit}</b> - {date_edit}<br>[reason_edit]Причина: {reason_edit}[/reason_edit]</p>[/date_edit]</div>

5. Открыть engine/classes/js/dle_js.js найти:
function ajax_save_comm_edit(a,c){"2"==dle_wysiwyg&&tinyMCE.triggerSave();var b=$("#dleeditcomments"+a).val();ShowLoading("");$.post(dle_root+"engine/ajax/editcomments.php",{id:a,comm_txt:b,area:c,action:"save",user_hash:dle_login_hash},function(b){HideLoading("");c_cache[a]="";$("#comm-id-"+a).html(b)});return!1}

Заменить на:
function ajax_save_comm_edit(a,c){"2"==dle_wysiwyg&&tinyMCE.triggerSave();var b=$("#dleeditcomments"+a).val();var v=$("#view_edit"+a+":checked").val();var r=$("#reason"+a).val();ShowLoading("");$.post(dle_root+"engine/ajax/editcomments.php",{id:a,comm_txt:b,view_edit:v,reason:r,area:c,action:"save",user_hash:dle_login_hash},function(b){HideLoading("");c_cache[a]="";$("#comm-id-"+a).html(b)});return!1}

6. В phpMyAdmin выполнить запрос (если другой префикс, изменить на свой):
ALTER TABLE `dle_comments` ADD `view_edit` tinyint(1) NOT NULL DEFAULT '0';
ALTER TABLE `dle_comments` ADD `date_edit` int(11) unsigned NOT NULL DEFAULT '0';
ALTER TABLE `dle_comments` ADD `user_edit` varchar(40) NOT NULL DEFAULT '';
ALTER TABLE `dle_comments` ADD `reason_edit` text NOT NULL;

7. Очистить кэш в браузере.

Готово!
 
Версия DLE: 11.3-12.х
Кодировка: win-1251 + utf-8
Автор: SX2
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.

Комментариев 1

rufffer 16 января 2019 23:11
Привет, не знаешь как этот хак на 13.1 прикрутить? вернее что нужно в этом коде изменить чтобы заработало на 13.