Beautiful PM. Часть 1: Ответ
6-04-2013, 17:44
0
  DLE Хаки

Beautiful PM. Часть 1: Ответ

Ужасно раздражает допотопная система обмена сообщениями на сайте, стартует цикл статей по улучшению этого модуля.

Часть 1: Ответ

Каждый пользователь DLE хоть раз да отвечал на сообщение пользователя в PM и знает сколько нужно сделать действий. И это ужасное цитирование, чувствуешь себя стариком, он тебе каждый раз вставляет цитирование только что отправленного сообщения, ужс.

Обойдем действие кнопки ответ и выведем окно ответа и возможные ограничения сразу при чтении сообщения.

Установка

1. Открываем engine/modules/pm.php

Находим:

land, icq, xfields


Заменяем на:

land, icq, xfields, pm_all


Найти:

 $tpl->set( '{text}', stripslashes( $row['text'] ) );


Заменить на:




 $tpl->set( '{pm-text}', stripslashes( $row['text'] ) );
                $ar = true;
                /* Начинаем вывод поля для ответа*/             
                // Проверка, что не гасится
                $srow = $db->super_query( "SELECT  id FROM " . USERPREFIX . "_ignore_list WHERE user=(SELECT user_id FROM " . USERPREFIX . "_users WHERE name='{$row['user_from']}' ) AND user_from='{$member_id['name']}'" );
                if(!empty($srow)) {$ar = false; $err .= "<p>".$lang['pm_ignored']."</p>";}
                $db->free();
                // Проверка на максимум сообщений у него 
                if( $user_group[$row['user_group']]['max_pm'] AND $row['pm_all'] >= $user_group[$row['user_group']]['max_pm'] AND $member_id['user_group'] != 1 ) {
                        $ar = false; $err .= "<p>".$lang['pm_err_8']."</p>";
                }
        if ($ar AND $row['folder'] == "inbox") {
        $ajax_form = <<<HTML
<span id="dle-pm-preview"></span>
<script language="javascript" type="text/javascript">
<!--
function dlePMPreview( ){ 
        if (dle_wysiwyg == "1") {
                submit_all_data(); 
        }
        if (dle_wysiwyg == "2") {
                var pm_text = tinyMCE.get('comments').getContent(); 
        } else {
                var pm_text = document.getElementById('dle-comments-form').comments.value;
        }
        if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || pm_text == '')
        {
                DLEalert('{$lang['comm_req_f']}', dle_info);return false;
        }
        var name = document.getElementById('dle-comments-form').name.value;
        var subj = document.getElementById('dle-comments-form').subj.value;
        ShowLoading('');
        $.post(dle_root + "engine/ajax/pm.php", { text: pm_text, name: name, subj: subj, skin: dle_skin }, function(data){
                HideLoading('');
                $("#dle-pm-preview").html(data);
                $("html"+( ! $.browser.opera ? ",body" : "")).animate({scrollTop: $("#dle-pm-preview").position().top - 70}, 1100);
                setTimeout(function() { $("#blind-animation").show('blind',{},1500)}, 1100);
        });
};
function reload () {
        var rndval = new Date().getTime(); 
        document.getElementById('dle-captcha').innerHTML = '<img src="' + dle_root + 'engine/modules/antibot.php?rand=' + timeval + '" border=0><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a>';  
};
//-->
</script>
HTML;
        $tpl->set( '[quick-reply]', $ajax_form );
        $tpl->set( '[/quick-reply]', "" );        
        if( $user_group[$member_id['user_group']]['captcha_pm'] ) {
                        if ( $config['allow_recaptcha'] ) {
                                $tpl->set( '[recaptcha]', "" );
                                $tpl->set( '[/recaptcha]', "" );
                                $tpl->set( '{recaptcha}', '
<script language="javascript" type="text/javascript">
<!--
        var RecaptchaOptions = {
        theme: ''.$config['recaptcha_theme'].'',
        lang: ''.$lang['wysiwyg_language'].''
        };
//-->
</script>
<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k='.$config['recaptcha_public_key'].'"></script>' );
                                $tpl->set_block( "'[sec_code](.*?)[/sec_code]'si", "" );
                                $tpl->set( '{sec_code}', "" );
                        } else {
                                $tpl->set( '[sec_code]', "" );
                                $tpl->set( '[/sec_code]', "" );
                                $path = parse_url( $config['http_home_url'] );
                                $tpl->set( '{sec_code}', "<span id="dle-captcha"><img src="" . $path['path'] . "engine/modules/antibot.php" alt="${lang['sec_image']}" border="0" /><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a></span>" );
                                $tpl->set_block( "'[recaptcha](.*?)[/recaptcha]'si", "" );
                                $tpl->set( '{recaptcha}', "" );
                        }
        } else {
                $tpl->set( '{sec_code}', "" );
                $tpl->set( '{recaptcha}', "" );
                $tpl->set_block( "'[recaptcha](.*?)[/recaptcha]'si", "" );
                $tpl->set_block( "'[sec_code](.*?)[/sec_code]'si", "" );
        }
        if( $user_group[$member_id['user_group']]['pm_question'] ) {
                $tpl->set( '[question]', "" );
                $tpl->set( '[/question]', "" );
                $question = $db->super_query("SELECT id, question FROM " . PREFIX . "_question ORDER BY RAND() LIMIT 1");
                $tpl->set( '{question}', "<span id="dle-question">".htmlspecialchars( stripslashes( $question['question'] ), ENT_QUOTES, $config['charset'] )."</span>" );
                $_SESSION['question'] = $question['id'];
        } else {
                $tpl->set_block( "'[question](.*?)[/question]'si", "" );
                $tpl->set( '{question}', "" );
        }        
        $text = "";        
                $tpl->set( '{reply-author}', $row['user_from'] );
                if (strpos ( $row['subj'], "RE:" ) === false)
                        $tpl->set( '{reply-subj}', "RE: " . stripslashes( $row['subj'] ) );
                else
                        $tpl->set( '{reply-subj}', stripslashes( $row['subj'] ) );                        
        if( $config['allow_comments_wysiwyg'] ) {           
                include_once ENGINE_DIR . '/editor/comments.php';
                $bb_code = "";
                $allow_comments_ajax = true;
        } else
                include_once ENGINE_DIR . '/modules/bbcode.php';
        if( $config['allow_comments_wysiwyg'] ) {     
                $tpl->set( '{editor}', $wysiwyg );
        } else {
                $tpl->set( '{editor}', $bb_code );
        }
                        $tpl->set( '{text}', $text );
        if( $config['sec_addnews'] ) {
                $salt = str_shuffle("abchefghjkmnpqrstuvwxyz");
                $random_key = "";
                for($i = 0; $i < 8; $i ++) {
                        $random_key .= $salt{rand( 0, 23 )};
                }
                $_SESSION['id_key'] = $random_key;
                $random_key = "<input name="{$random_key}" type="hidden" value="{$dle_login_hash}" />";
        } else
                $random_key = "";
        if( $config['allow_comments_wysiwyg'] == "2") $tpl->copy_template = "<form  method="post" name="dle-comments-form" id="dle-comments-form" onsubmit="document.getElementById('comments').value = tinyMCE.get('comments').getContent(); if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || document.getElementById('comments').value == ''){DLEalert('{$lang['comm_req_f']}', dle_info);return false}" action="">n" . $tpl->copy_template . "{$random_key}<input name="send" type="hidden" value="send" /></form>";
        else $tpl->copy_template = "<form  method="post" name="dle-comments-form" id="dle-comments-form" onsubmit="if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || document.getElementById('comments').value == ''){DLEalert('{$lang['comm_req_f']}', dle_info);return false}" action="">n" . $tpl->copy_template . "{$random_key}<input name="send" type="hidden" value="send" /></form>";
        } else  $tpl->set_block( "'[quick-reply].*?[/quick-reply]'si", $err );


2. Открыть templates/YOURTEMPLATE/pm.tpl

Между тегами [readpm] ... [/readpm] в нужное вам место вставить:

[quick-reply]
<div class="baseform">
	<table class="tableform" style="width:100%;">
		<tr>
			<td style="width:100px;"></td>
			<td class="editorcomm" style="text-align:center;">{editor}<br /><input type="hidden" id="outboxcopy" name="outboxcopy" value="1" />
			</td>
		</tr>
		[sec_code]
		<tr>
			<td class="label">
				Код:<span class="impot">*</span>
			</td>
			<td>
				<div>{sec_code}</div>
				<div><input type="text" name="sec_code" id="sec_code" style="width:115px" class="f_input" /></div>
			</td>
		</tr>
		[/sec_code]
		[recaptcha]
		<tr>
			<td class="label">
				Введите два слова, показанных на изображении:<span class="impot">*</span>
			</td>
			<td>
				<div>{recaptcha}</div>
			</td>
		</tr>
		[/recaptcha]
		[question]
			<tr>
				<td class="label">
					Вопрос:
				</td>
				<td>
					<div>{question}</div>
				</td>
			</tr>
			<tr>
				<td class="label">
					Ответ:<span class="impot">*</span>
				</td>
				<td>
					<div><input type="text" name="question_answer" id="question_answer" class="f_input" /></div>
				</td>
			</tr>
		[/question]
	</table>
		<input type="hidden" name="name" value="{reply-author}"/>
        <input type="hidden" name="subj" value="{reply-subj}"/>
	<div class="fieldsubmit">
		<input type="button" class="btn btn-info" onclick="dlePMPreview()" title="Просмотр" value="Просмотр" />
		<button type="submit" name="add" class="btn btn-primary"><span>Отправить</span></button>
	</div>	
</div>
[/quick-reply]


Я лично удалил кнопку просмотра сообщения, но в инструкции оставил (кто нибудь ей вообще пользовался !?) )

Найти между тегами [newpm] ... [/newpm]:

{text}



Заменить на

{pm-text}



3. Открыть engine/ajax/pm.php

Найти:

$tpl->set( '{text}', stripslashes($text) );


Заменить на:

$tpl->set( '{pm-text}', stripslashes($text) );		
$tpl->set_block( "'[quick-reply].*?[/quick-reply]'si", "" );
$tpl->set_block( "'[reply].*?[/reply]'si", "" );
$tpl->set_block( "'[del].*?[/del]'si", "" );
$tpl->set_block( "'[complaint].*?[/complaint]'si", "" );
$tpl->set_block( "'[ignore].*?[/ignore]'si", "" );



Тем самым еще удалили при просмотре кнопки Пожаловаться / Удалить / Игнорить / Ответить

Готово.

Сайт автора: dark5ider.ru

Комментарии

Никто еще не оставил комментариев – станьте первым!

Напишите своё мнение