304 lines
14 KiB
Smarty
304 lines
14 KiB
Smarty
{if $display_comments==1}
|
||
|
||
{* ===================================================================== *}
|
||
{* ПРОВЕРКА ПРАВ НА ЧТЕНИЕ *}
|
||
{* ===================================================================== *}
|
||
{if $no_read_permission == 1}
|
||
<div class="alert alert-warning" role="alert">{#COMMENT_READ_FALSE#}</div>
|
||
|
||
{else}
|
||
{* ===================================================================== *}
|
||
{* БЛОК КОММЕНТАРИЕВ *}
|
||
{* ===================================================================== *}
|
||
|
||
<h3 class="mb-3">
|
||
{#COMMENT_SITE_TITLE#}
|
||
{if $closed==1 && $smarty.const.UGROUP!=1}
|
||
<span class="badge bg-secondary ms-2">{#COMMENT_SITE_CLOSED#}</span>
|
||
{/if}
|
||
</h3>
|
||
|
||
<div class="d-flex mb-4 align-items-center">
|
||
{* Кнопка "Добавить комментарий" - ведет к якорю формы *}
|
||
<a href="#end" class="btn btn-sm btn-outline-primary">
|
||
<i class="bi bi-plus-circle me-1"></i> {#COMMENT_SITE_ADD#}
|
||
</a>
|
||
|
||
{if $smarty.const.UGROUP==1}
|
||
{* Кнопки управления комментированием для Администратора *}
|
||
{if $closed==1}
|
||
<a id="mod_comment_open" href="javascript:void(0);" class="btn btn-sm btn-outline-success ms-3">
|
||
<i class="bi bi-lock-fill me-1"></i> {#COMMENT_SITE_OPEN#}
|
||
</a>
|
||
{else}
|
||
<a id="mod_comment_close" href="javascript:void(0);" class="btn btn-sm btn-outline-danger ms-3">
|
||
<i class="bi bi-unlock-fill me-1"></i> {#COMMENT_SITE_CLOSE#}
|
||
</a>
|
||
{/if}
|
||
{/if}
|
||
</div>
|
||
|
||
{if isset($comments[0])}
|
||
<div class="comments-list" id="comments_list">
|
||
{include file="$subtpl" subcomments=$comments[0]}
|
||
</div>
|
||
{/if}
|
||
|
||
<a id="end"></a>
|
||
|
||
{* ===================================================================== *}
|
||
{* ФОРМА ДОБАВЛЕНИЯ КОММЕНТАРИЯ *}
|
||
{* ===================================================================== *}
|
||
<div class="mt-5">
|
||
{if $closed==1 && $smarty.const.UGROUP!=1}
|
||
<div class="alert alert-info">{#COMMENT_NEW_CLOSED#}</div>
|
||
{elseif $cancomment!=1 && $smarty.const.UGROUP!=1}
|
||
<div class="alert alert-info">{#COMMENT_NEW_FALSE#}</div>
|
||
{else}
|
||
<div id="mod_comment_new" class="card shadow-sm">
|
||
<div class="card-header bg-light">
|
||
<h4 class="mb-0">{#COMMENT_NEW_TITLE#}</h4>
|
||
</div>
|
||
|
||
<div class="card-body p-4" id="forms">
|
||
<form method="post" action="{$ABS_PATH}" enctype="multipart/form-data">
|
||
|
||
<fieldset>
|
||
<legend class="d-none">Форма добавления комментария</legend>
|
||
|
||
{* Блок для имени и email *}
|
||
{if $smarty.session.user_group != '2'}
|
||
{* АВТОРИЗОВАННЫЙ ПОЛЬЗОВАТЕЛЬ *}
|
||
<div class="row mb-3">
|
||
<div class="col-md-6 mb-3 mb-md-0">
|
||
<label for="in_author_name_display" class="form-label">{#COMMENT_YOUR_NAME#}</label>
|
||
<input type="text" id="in_author_name_display" class="form-control" value="{$smarty.session.user_name|default:''|escape|stripslashes}" readonly />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="in_author_email_display" class="form-label">{#COMMENT_YOUR_EMAIL#}</label>
|
||
<input type="email" id="in_author_email_display" class="form-control" value="{$smarty.session.user_email|default:''|escape|stripslashes}" readonly />
|
||
</div>
|
||
</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}
|
||
|
||
{* ДИНАМИЧЕСКИЕ ПОЛЯ (Field 1 и Field 2) *}
|
||
<div class="row mb-3">
|
||
{if $comment_show_f1 == 1}
|
||
<div class="col-md-6 mb-3 mb-md-0">
|
||
<label for="in_author_website" class="form-label">
|
||
{$comment_name_f1|default:#COMMENT_YOUR_SITE#} {if $comment_req_f1 == 1}*{else}(необязательно){/if}
|
||
</label>
|
||
<input name="comment_author_website" type="text" id="in_author_website" class="form-control" placeholder="{$comment_name_f1|default:#COMMENT_YOUR_SITE#}" value="{$smarty.request.comment_author_website|default:''|escape|stripslashes}" />
|
||
</div>
|
||
{/if}
|
||
|
||
{if $comment_show_f2 == 1}
|
||
<div class="col-md-6">
|
||
<label for="in_author_city" class="form-label">
|
||
{$comment_name_f2|default:#COMMENT_YOUR_FROM#} {if $comment_req_f2 == 1}*{else}(необязательно){/if}
|
||
</label>
|
||
<input name="comment_author_city" type="text" id="in_author_city" class="form-control" placeholder="{$comment_name_f2|default:#COMMENT_YOUR_FROM#}" value="{$smarty.request.comment_author_city|default:''|escape|stripslashes}" />
|
||
</div>
|
||
{/if}
|
||
</div>
|
||
|
||
{* Текст комментария *}
|
||
<div class="mb-3">
|
||
<label for="in_message" class="form-label">{#COMMENT_YOUR_TEXT#}*</label>
|
||
<textarea rows="8" name="comment_text" id="in_message" class="form-control" placeholder="{#COMMENT_YOUR_TEXT#}"></textarea>
|
||
</div>
|
||
|
||
{* --- ВНЕДРЕНИЕ: ВЫБОР РЕЙТИНГА АВТОРОМ С ПРОВЕРКОЙ НАСТРОЙКИ --- *}
|
||
{if $comment_show_user_rating == 1}
|
||
{* Показываем только если не гость ИЛИ если гостям разрешено в настройках *}
|
||
{if $smarty.session.user_group != '2' || $comment_rating_anon_set == 1}
|
||
<div class="mb-3">
|
||
<label class="form-label d-block small fw-bold text-muted text-uppercase mb-1">Оцените материал:</label>
|
||
<div class="d-flex align-items-center">
|
||
<div id="user_rating_stars" class="fs-4" style="color: #ffc107; display: inline-block;">
|
||
<i class="star-choice bi bi-star" data-value="1" title="Ужасно" style="cursor: pointer;"></i>
|
||
<i class="star-choice bi bi-star" data-value="2" title="Плохо" style="cursor: pointer;"></i>
|
||
<i class="star-choice bi bi-star" data-value="3" title="Нормально" style="cursor: pointer;"></i>
|
||
<i class="star-choice bi bi-star" data-value="4" title="Хорошо" style="cursor: pointer;"></i>
|
||
<i class="star-choice bi bi-star" data-value="5" title="Отлично" style="cursor: pointer;"></i>
|
||
</div>
|
||
<a href="javascript:void(0);" id="reset_stars" class="ms-3 text-decoration-none small text-muted" title="Убрать оценку">
|
||
<i class="bi bi-x-circle"></i> Сбросить
|
||
</a>
|
||
</div>
|
||
{* Скрытое поле, куда JS запишет выбранное число *}
|
||
<input name="comment_user_rating" type="hidden" id="comment_user_rating" value="0" />
|
||
</div>
|
||
{/if}
|
||
{/if}
|
||
{* --- КОНЕЦ ВНЕДРЕНИЯ --- *}
|
||
|
||
{* Оставшиеся символы *}
|
||
<p class="text-end text-muted small">
|
||
{#COMMENT_CHARS_LEFT#} <span class="charsLeft fw-bold" id="charsLeft_new"></span>
|
||
</p>
|
||
|
||
{* Блок загрузки изображения *}
|
||
{if $comment_allow_files == 1}
|
||
{* ПРОВЕРКА: Разрешено ли текущему пользователю загружать файлы *}
|
||
{if $smarty.session.user_group != '2' || $comment_allow_files_anon == 1}
|
||
<div class="mb-3">
|
||
<label for="comment_image" class="form-label text-muted small">
|
||
<i class="bi bi-camera me-1"></i> Прикрепить изображение (JPG, PNG, GIF)
|
||
</label>
|
||
|
||
<input type="file" name="comment_image" id="comment_image" class="form-control form-control-sm" accept="image/*">
|
||
|
||
{* Контейнер для превью *}
|
||
<div id="image_preview_wrapper" class="mt-2 d-none position-relative" style="width: fit-content;">
|
||
<img id="image_preview_img" src="#" alt="Предпросмотр" class="img-thumbnail" style="max-height: 120px;">
|
||
<button type="button" id="remove_image_btn" class="btn btn-danger btn-sm position-absolute top-0 end-0"
|
||
style="padding: 0 5px; margin: 2px;" title="Удалить фото">
|
||
<i class="bi bi-x-lg"></i>
|
||
</button>
|
||
</div>
|
||
|
||
{* --- НОВОЕ: ИНДИКАТОР ЗАГРУЗКИ (PROGRESS BAR) --- *}
|
||
<div id="upload_progress_container" class="mt-2 d-none">
|
||
<div class="progress" style="height: 8px;">
|
||
<div id="upload_progress_bar" class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" style="width: 0%"></div>
|
||
</div>
|
||
<div id="upload_status_text" class="small text-muted mt-1">Загрузка: 0%</div>
|
||
</div>
|
||
{* --- КОНЕЦ ИНДИКАТОРА --- *}
|
||
|
||
<div id="file_error" class="text-danger small mt-1 d-none"></div>
|
||
</div>
|
||
{/if}
|
||
{/if}
|
||
|
||
{* CAPTCHA *}
|
||
{if $im}
|
||
<div class="row mb-3 align-items-center">
|
||
<div class="col-md-4">
|
||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE#}</label>
|
||
<div id="captcha_block">
|
||
<span id="captcha" class="d-block mb-1">
|
||
<img src="{$ABS_PATH}inc/captcha.php" alt="{#COMMENT_FORM_CODE#}" class="img-fluid border rounded" style="cursor: pointer;" width="120" height="60" border="0" />
|
||
</span>
|
||
<a href="javascript:void(0);" id="reload_captcha" class="small text-decoration-none text-muted">
|
||
<i class="bi bi-arrow-clockwise"></i> {if #COMMENT_RELOAD_CODE#}{#COMMENT_RELOAD_CODE#}{else}Обновить код{/if}
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-8">
|
||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE_ENTER#}*</label>
|
||
<input name="securecode" type="text" id="securecode" maxlength="10" class="form-control" placeholder="{#COMMENT_FORM_CODE_ENTER#}" />
|
||
</div>
|
||
</div>
|
||
{/if}
|
||
|
||
{* Кнопки отправки *}
|
||
<div class="mt-4">
|
||
<button type="submit" class="btn btn-success me-2">
|
||
<i class="bi bi-send-fill me-1"></i> {#COMMENT_BUTTON_ADD#}
|
||
</button>
|
||
<button type="reset" id="buttonReset" class="btn btn-secondary">
|
||
<i class="bi bi-x-circle me-1"></i> Сбросить
|
||
</button>
|
||
</div>
|
||
|
||
{* Скрытые поля *}
|
||
<input name="module" type="hidden" value="comment" />
|
||
<input name="action" type="hidden" value="comment" />
|
||
<input name="sub" type="hidden" value="send" />
|
||
<input name="doc_id" type="hidden" value="{$smarty.request.id|escape}" />
|
||
<input name="parent_id" id="parent_id" type="hidden" value="" />
|
||
<input name="page" type="hidden" value="{$page}" />
|
||
</fieldset>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
{/if}
|
||
</div>
|
||
|
||
{if $page_nav}
|
||
<div class="page_navigation_box mt-4">
|
||
<nav aria-label="Comment Page Navigation">{$page_nav}</nav>
|
||
</div>
|
||
{/if}
|
||
|
||
{* Модальное окно удаления *}
|
||
<div class="modal fade" id="deleteCommentModal" tabindex="-1" aria-labelledby="deleteCommentModalLabel" aria-hidden="true">
|
||
<div class="modal-dialog">
|
||
<div class="modal-content">
|
||
<div class="modal-header bg-danger text-white">
|
||
<h5 class="modal-title" id="deleteCommentModalLabel">Подтверждение действия</h5>
|
||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Закрыть"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
Вы уверены, что хотите **удалить этот комментарий**?
|
||
Это действие необратимо.
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||
<button type="button" class="btn btn-danger" id="confirmDeleteButton">Удалить комментарий</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
{* ПЕРЕМЕННЫЕ JAVASCRIPT *}
|
||
<script type="text/javascript">
|
||
var COMMENT_SITE_CLOSE = '{#COMMENT_SITE_CLOSE#}';
|
||
var COMMENT_SITE_OPEN = '{#COMMENT_SITE_OPEN#}';
|
||
var COMMENT_LOCK_LINK = '{#COMMENT_LOCK_LINK#}';
|
||
var COMMENT_EDIT_LINK = '{#COMMENT_EDIT_LINK#}';
|
||
var COMMENT_EDIT_TITLE = '{#COMMENT_EDIT_TITLE#}';
|
||
var COMMENT_UNLOCK_LINK = '{#COMMENT_UNLOCK_LINK#}';
|
||
var COMMENT_ERROR_AUTHOR = '{#COMMENT_ERROR_AUTHOR#}';
|
||
var COMMENT_ERROR_EMAIL = '{#COMMENT_ERROR_EMAIL#}';
|
||
var COMMENT_ERROR_TEXT = '{#COMMENT_ERROR_TEXT#}';
|
||
var COMMENT_ERROR_CAPTCHA = '{#COMMENT_ERROR_CAPTCHA#}';
|
||
var COMMENT_BUTTON_EDIT = '{#COMMENT_BUTTON_EDIT#}';
|
||
var COMMENT_BUTTON_CANCEL = '{#COMMENT_BUTTON_CANCEL#}';
|
||
var COMMENT_CHARS_LEFT = '{#COMMENT_CHARS_LEFT#}';
|
||
var COMMENT_DATE_TIME_FORMAT = '{#COMMENT_DATE_TIME_FORMAT#}';
|
||
var COMMENT_TEXT_CHANGED = '{#COMMENT_TEXT_CHANGED#}';
|
||
var COMMENT_WRONG_CODE = '{#COMMENT_WRONG_CODE#}';
|
||
|
||
var REQ_F1 = '{$comment_req_f1}';
|
||
var REQ_F2 = '{$comment_req_f2}';
|
||
var NAME_F1 = '{$comment_name_f1|default:#COMMENT_YOUR_SITE#}';
|
||
var NAME_F2 = '{$comment_name_f2|default:#COMMENT_YOUR_FROM#}';
|
||
|
||
var UGROUP = '{$smarty.const.UGROUP}';
|
||
var IS_IM = '{$im}';
|
||
var DOC_ID = '{$doc_id}';
|
||
var MAX_CHARS = '{$comment_max_chars}';
|
||
var aveabspath = '{$ABS_PATH}';
|
||
|
||
// Глобальная переменная для JS
|
||
var SHOW_USER_RATING = '{$comment_show_user_rating|default:0}';
|
||
var RATING_ANON_SET = '{$comment_rating_anon_set|default:0}';
|
||
// ДОБАВЛЕНО: Настройка прав на загрузку для JS
|
||
var ALLOW_FILES_ANON = '{$comment_allow_files_anon|default:0}';
|
||
</script>
|
||
<script src="{$ABS_PATH}modules/comment/js/comment.js" type="text/javascript"></script>
|
||
<style>
|
||
.fade-out { opacity: 0; transition: opacity 0.5s ease; }
|
||
.italic { font-style: italic; }
|
||
</style>
|
||
|
||
{/if}
|
||
{/if} |