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", "" );Тем самым еще удалили при просмотре кнопки Пожаловаться / Удалить / Игнорить / Ответить
Готово.

