добавлена проверка на смену имен Анонимом - если сменит имя пока жива кука получит плашку с подставновкой всех предыдущих имен
This commit is contained in:
@@ -138,6 +138,34 @@ function __construct()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение всех уникальных имен, использованных анонимом
|
||||
* * @param string $anon_key уникальный ключ
|
||||
* @param string $exclude_name исключить это имя из результата (текущее)
|
||||
* @return array
|
||||
*/
|
||||
private function _getAnonNamesHistory($anon_key, $exclude_name = '')
|
||||
{
|
||||
global $AVE_DB;
|
||||
$names = [];
|
||||
|
||||
$exclude_sql = !empty($exclude_name) ? " AND comment_author_name != '" . addslashes($exclude_name) . "'" : "";
|
||||
|
||||
$sql = $AVE_DB->Query("
|
||||
SELECT DISTINCT comment_author_name
|
||||
FROM " . PREFIX . "_module_comment_info
|
||||
WHERE anon_key = '" . addslashes($anon_key) . "'
|
||||
" . $exclude_sql . "
|
||||
ORDER BY Id DESC
|
||||
");
|
||||
|
||||
while ($row = $sql->FetchAssocArray()) {
|
||||
$names[] = stripslashes($row['comment_author_name']);
|
||||
}
|
||||
return $names;
|
||||
}
|
||||
|
||||
|
||||
function _commentSettingsGet($param = '')
|
||||
{
|
||||
global $AVE_DB;
|
||||
@@ -239,6 +267,9 @@ function commentListShow($tpl_dir)
|
||||
$read_groups = explode(',', $settings['comment_user_groups_read']);
|
||||
$assign['no_read_permission'] = 0;
|
||||
|
||||
// Чтобы Smarty не ругался, создаем пустую заглушку
|
||||
$assign['saved_anon'] = ['name' => '', 'email' => '', 'exists' => false];
|
||||
|
||||
if (!in_array($user_group, $read_groups))
|
||||
{
|
||||
$assign['no_read_permission'] = 1;
|
||||
@@ -323,6 +354,18 @@ if ($settings['comment_use_page_nav'] == 1)
|
||||
|
||||
while ($row = $sql->FetchAssocArray())
|
||||
{
|
||||
|
||||
// --- ВОТ ЭТОТ БЛОК ---
|
||||
if ($assign['saved_anon']['exists'] == false && !empty($row['anon_key']) && $row['anon_key'] == $anon_key) {
|
||||
$assign['saved_anon'] = [
|
||||
'name' => stripslashes($row['comment_author_name']),
|
||||
'email' => stripslashes($row['comment_author_email']),
|
||||
'exists' => true
|
||||
];
|
||||
}
|
||||
// --- КОНЕЦ БЛОКА ---
|
||||
|
||||
|
||||
// 1. Получаем аватар через стандартную функцию системы
|
||||
if (isset($row['comment_author_id']) && $row['comment_author_id'] > 0)
|
||||
{
|
||||
@@ -377,6 +420,13 @@ if ($settings['comment_use_page_nav'] == 1)
|
||||
$row['is_my_own'] = $is_author;
|
||||
// -------------------------------------------------------
|
||||
|
||||
// --- НОВОЕ: Получаем историю имен для анонима ---
|
||||
$row['past_names'] = [];
|
||||
if (!empty($row['anon_key'])) {
|
||||
$row['past_names'] = $this->_getAnonNamesHistory($row['anon_key'], $row['comment_author_name']);
|
||||
}
|
||||
// --- КОНЕЦ НОВОГО ---
|
||||
|
||||
$row['comment_published_raw'] = $row['comment_published'];
|
||||
$row['comment_published'] = ave_date_format($date_time_format, $row['comment_published']);
|
||||
$row['comment_changed'] = ave_date_format($date_time_format, $row['comment_changed']);
|
||||
@@ -410,31 +460,47 @@ if ($settings['comment_use_page_nav'] == 1)
|
||||
*
|
||||
* @param string $tpl_dir - путь к шаблонам модуля
|
||||
*/
|
||||
function commentPostFormShow($tpl_dir)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
function commentPostFormShow($tpl_dir)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
// Используем оператор объединения с null для PHP 8.4
|
||||
$docid = (int)($_REQUEST['docid'] ?? 0);
|
||||
$user_group = UGROUP ?? 0;
|
||||
|
||||
// Получаем список комментариев на которые запрещены ответы
|
||||
$geschlossen = $AVE_DB->Query("
|
||||
SELECT comments_close
|
||||
FROM " . PREFIX . "_module_comment_info
|
||||
WHERE document_id = '" . $docid . "'
|
||||
LIMIT 1
|
||||
")->GetCell();
|
||||
$docid = (int)($_REQUEST['docid'] ?? 0);
|
||||
$user_group = UGROUP ?? 0;
|
||||
|
||||
// --- НОВОЕ: Автоподстановка для анонима ---
|
||||
$anon_data = ['name' => '', 'email' => '', 'exists' => false];
|
||||
if ($user_group == 2) { // Если гость
|
||||
$anon_key = $this->_getAnonKey();
|
||||
$last_post = $AVE_DB->Query("
|
||||
SELECT comment_author_name, comment_author_email
|
||||
FROM " . PREFIX . "_module_comment_info
|
||||
WHERE anon_key = '" . $anon_key . "'
|
||||
ORDER BY Id DESC LIMIT 1
|
||||
")->FetchAssocArray();
|
||||
|
||||
if ($last_post) {
|
||||
$anon_data['name'] = stripslashes($last_post['comment_author_name']);
|
||||
$anon_data['email'] = stripslashes($last_post['comment_author_email']);
|
||||
$anon_data['exists'] = true;
|
||||
}
|
||||
}
|
||||
$AVE_Template->assign('saved_anon', $anon_data);
|
||||
// --- КОНЕЦ НОВОГО ---
|
||||
|
||||
// Формируем ряд переменных для использования в шаблоне
|
||||
$AVE_Template->assign('closed', $geschlossen);
|
||||
$AVE_Template->assign('cancomment', ($this->_commentSettingsGet('comment_active') == 1 && in_array($user_group, explode(',', $this->_commentSettingsGet('comment_user_groups')))));
|
||||
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars'));
|
||||
$AVE_Template->assign('theme', defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER);
|
||||
$geschlossen = $AVE_DB->Query("
|
||||
SELECT comments_close
|
||||
FROM " . PREFIX . "_module_comment_info
|
||||
WHERE document_id = '" . $docid . "'
|
||||
LIMIT 1
|
||||
")->GetCell();
|
||||
|
||||
// Отображаем форму для добавления комментария
|
||||
$AVE_Template->display($tpl_dir . $this->_comment_form_tpl);
|
||||
}
|
||||
$AVE_Template->assign('closed', $geschlossen);
|
||||
$AVE_Template->assign('cancomment', ($this->_commentSettingsGet('comment_active') == 1 && in_array($user_group, explode(',', $this->_commentSettingsGet('comment_user_groups')))));
|
||||
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars'));
|
||||
$AVE_Template->assign('theme', defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER);
|
||||
|
||||
$AVE_Template->display($tpl_dir . $this->_comment_form_tpl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для записи в БД нового комментария.
|
||||
|
||||
@@ -235,6 +235,12 @@ if (action === 'unlock' || action === 'lock') {
|
||||
$(this).next('.invalid-feedback').fadeOut(200, function() { $(this).remove(); });
|
||||
});
|
||||
|
||||
// Инициализация тултипов для всех элементов с data-bs-toggle="tooltip"
|
||||
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
||||
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
||||
return new bootstrap.Tooltip(tooltipTriggerEl)
|
||||
})
|
||||
|
||||
// Счетчик: Количество оставшихся символов 1000 для формы создания комментария
|
||||
$('#in_message').limit(1000, '#charsLeft_new');
|
||||
|
||||
|
||||
@@ -77,18 +77,29 @@
|
||||
</div>
|
||||
<input name="comment_author_name" type="hidden" id="in_author_name" value="{$smarty.session.user_name|default:''|escape|stripslashes}" />
|
||||
<input name="comment_author_email" type="hidden" id="in_author_email" value="{$smarty.session.user_email|default:''|escape|stripslashes}" />
|
||||
{else}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<label for="in_author_name" class="form-label">{#COMMENT_YOUR_NAME#}*</label>
|
||||
<input name="comment_author_name" type="text" id="in_author_name" class="form-control" placeholder="{#COMMENT_YOUR_NAME#}" value="{$smarty.request.comment_author_name|default:''|escape|stripslashes}" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="in_author_email" class="form-label">{#COMMENT_YOUR_EMAIL#}*</label>
|
||||
<input name="comment_author_email" type="email" id="in_author_email" class="form-control" placeholder="{#COMMENT_YOUR_EMAIL#}" value="{$smarty.request.comment_author_email|default:''|escape|stripslashes}" />
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{else}
|
||||
{* Блок для Анонимных пользователей (Гостей) *}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<label for="in_author_name" class="form-label">{#COMMENT_YOUR_NAME#}*</label>
|
||||
<input name="comment_author_name" type="text" id="in_author_name" class="form-control"
|
||||
placeholder="{#COMMENT_YOUR_NAME#}"
|
||||
value="{(isset($saved_anon.name)) ? $saved_anon.name : ($smarty.request.comment_author_name|default:''|escape|stripslashes)}"
|
||||
{if isset($saved_anon.exists) && $saved_anon.exists}readonly style="background-color: #f8f9fa;"{/if} />
|
||||
|
||||
{if isset($saved_anon.exists) && $saved_anon.exists}
|
||||
<div class="form-text small text-muted">Имя зафиксировано по вашему ключу доступа.</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="in_author_email" class="form-label">{#COMMENT_YOUR_EMAIL#}*</label>
|
||||
<input name="comment_author_email" type="email" id="in_author_email" class="form-control"
|
||||
placeholder="{#COMMENT_YOUR_EMAIL#}"
|
||||
value="{(isset($saved_anon.email)) ? $saved_anon.email : ($smarty.request.comment_author_email|default:''|escape|stripslashes)}"
|
||||
{if isset($saved_anon.exists) && $saved_anon.exists}readonly style="background-color: #f8f9fa;"{/if} />
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="row mb-3">
|
||||
{if $comment_show_f1 == 1}
|
||||
|
||||
@@ -29,6 +29,16 @@
|
||||
<span class="d-flex align-items-center">
|
||||
<i class="bi bi-person me-1"></i>
|
||||
<a title="{#COMMENT_INFO#}" href="javascript:void(0);" onclick="popup('{$ABS_PATH}index.php?module=comment&action=postinfo&pop=1&Id={$c.Id}&theme={$theme}','comment','500','300','1');" class="fw-bold link-dark text-decoration-none">{$c.comment_author_name|stripslashes|escape}</a>
|
||||
{* ПРОВЕРКА ИСТОРИИ ИМЕН АНОНИМА *}
|
||||
{if !empty($c.past_names)}
|
||||
<span class="badge rounded-pill bg-light text-danger border border-danger ms-1"
|
||||
style="font-size: 0.65rem; cursor: help;"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-html="true"
|
||||
title="Ранее этот гость использовал имена:<br/>{foreach $c.past_names as $pname}• {$pname|escape}<br/>{/foreach}">
|
||||
<i class="bi bi-exclamation-triangle-fill"></i> менял имя
|
||||
</span>
|
||||
{/if}
|
||||
</span>
|
||||
<span class="d-flex align-items-center"><i class="bi bi-clock me-1"></i> {$c.comment_published}</span>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user