Files
module-forms/forms/templates/history.tpl

342 lines
14 KiB
Smarty
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{literal}
<style>
#forms input {
box-sizing:border-box;
}
</style>
{/literal}
<script type="text/javascript">
// назначаем языковые переменные (так удобнее работать со smarty)
$smarty = new Array;
$smarty['stat_replied'] = '{#stat_replied#}';
$smarty['stat_viewed'] = '{#stat_viewed#}';
$smarty['delete'] = '{#delete#}';
$smarty['cn_select_for_action'] = '{#cn_select_for_action#}';
$smarty['cn_confirm_mass_del'] = '{#cn_confirm_mass_del#}';
$smarty['delete_error'] = '{#delete_error#}';
$smarty['action_confirm_title'] = '{#action_confirm_title#}';
$smarty['action_error_title'] = '{#action_error_title#}';
</script>
<div class="title">
<h5>{#contacts#}</h5>
</div>
<div class="widget" style="margin-top:0">
<div class="body">{#mod_info#}</div>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}" class="toprightDir"></a></li>
<li><a href="index.php?do=modules&amp;cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
<li><a href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=1&amp;cp={$sess}">{#contacts#}</a></li>
<li><a href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=1&amp;cp={$sess}">{#forms#}</a></li>
<li><strong class="code"><a href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=form_edit&amp;fid={$fid}&amp;cp={$sess}" {if $ave14}style="float:none; display:inline;"{/if}>{$form.title|escape}</a></strong></li>
<li>{#history#}</li>
</ul>
</div>
</div>
<div class="widget first">
<div class="head">
<h5 class="iFrames">{#history#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=1&amp;cp={$sess}" target="_self">{#cn_return_list_form#}</a>
</div>
</div>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm" id="forms">
<colgroup>
<col width="10">
<col width="100"/>
<col/>
<col width="1"/>
<col width="1"/>
<col width="60"/>
</colgroup>
<thead>
<tr>
<td><div align="center"><input type="checkbox" id="selectAll" value="1" /></div></td>
<td>{#date#}</td>
<td>{#mfld_subject#}</td>
<td>{#author#}</td>
<td>{#status#}</td>
<td>{#cn_actions#}</td>
</tr>
</thead>
<tbody>
{foreach from=$dialogs item=dialog}
<tr class="{if $dialog.status==='new'}green{elseif $dialog.status==='viewed'}yellow{/if}">
<td nowrap="nowrap"><div><input name="form[{$dialog.id}]" type="checkbox" value="1" class="checkbox his-checkbox" /></div></td>
<td align="right" nowrap="nowrap">
<span class="date_text dgrey">{$dialog.date|date_format:$TIME_FORMAT|pretty_date}</span>
</td>
<td>
<strong><a class="toprightDir" href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=history_dialog&amp;hid={$dialog.id}&amp;cp={$sess}" title="{#look#}">{$dialog.subject|stripslashes|escape}</a></strong>
</td>
<td>
<a href="mailto:{$dialog.email}" title="{#write_email#}" class="topDir">{$dialog.email}</a>
</td>
<td nowrap="nowrap">
{if $dialog.status!='replied'}
<select style="width:300px" class="dialog_status" data-hid="{$dialog.id}" onChange="status_change($(this));">
{if $dialog.status=='new'}<option value="">{#stat_new#}</option>{/if}
<option value="viewed">{#stat_viewed#}</option>
<option value="replied">{#stat_replied#}</option>
</select>
{else}{#stat_replied#}
{/if}
</td>
<td align="center">
<a class="topleftDir icon_sprite ico_delete ConfirmDelete" dir="{#deleting#}" name="{#cn_del_mail#}" href="index.php?do=modules&amp;action=modedit&amp;mod=forms&amp;moduleaction=email_del&amp;hid={$dialog.id}&amp;fid={$fid}&amp;cp={$sess}" title="{#delete#}"></a>
</td>
</tr>
{foreachelse}
<tr>
<td colspan="5">
<ul class="messages">
<li class="highlight yellow">{#cn_not_mail#}</li>
</ul>
</td>
</tr>
{/foreach}
</tbody>
{if $dialog}
<thead>
<tr>
<td></td>
<td>{#date#}</td>
<td>{#mfld_subject#}</td>
<td>{#author#}</td>
<td>{#status#}</td>
<td>{#cn_actions#}</td>
</tr>
</thead>
{/if}
</table>
{if $dialog}
<div class="rowElem" id="saveBtn">
<div class="saveBtn">
<select name="moderation" class="action-in-moderation">
<option value="none" selected="selected">{#actions_sel#}</option>
<option value="viewed">{#stat_viewed#}</option>
<option value="replied">{#stat_replied#}</option>
<option value="delete">{#delete#}</option>
</select>
&nbsp;&nbsp;<input type="button" class="basicBtn" value="{#save_changes#}" id="massActionButton" />
<script>// разукрашиваем select
$('select').styler({ldelim}selectSearch:false, selectVisibleOptions:5{rdelim});
</script>
</div>
</div>
{/if}
</div>
{if $page_nav}
<div class="pagination">
<ul class="pages">
{$page_nav}
</ul>
</div>
{/if}
{literal}
<script type="text/javascript">
function status_change (sel) {
var status = sel.val();
var td = sel.parents('td');
var hid = sel.attr('data-hid');
$.ajax({
url: 'index.php?do=modules&action=modedit&mod=forms&moduleaction=dialog_status',
type: 'POST',
data: {
hid: hid,
status: status,
ajax: 1
},
beforeSend: function() {
$.alerts._overlay('show');
},
success: function(e) {
$.alerts._overlay('hide');
td.empty();
if (status === 'replied') {
td.text($smarty['stat_replied']);
td.parent().removeClass('yellow');
}
else if (status === 'viewed') {
td.parent().removeClass('green').addClass('yellow');
$('<select class="dialog_status" data-hid="'+hid+'" onChange="status_change($(this));"><option value="viewed">'+$smarty['stat_viewed']+'</option><option value="replied">'+$smarty['stat_replied']+'</option></select>').appendTo(td).jqTransform({imgPath: "../images"}).styler({selectVisibleOptions: 5,selectSearch: false});
}
}
});
};
</script>
{/literal}
{literal}
<script>
// =========================================================
// 1. ФУНКЦИЯ ДЛЯ СБРОСА ВСЕХ ВЫБРАННЫХ ЧЕКБОКСОВ ПОСЛЕ AJAX
// =========================================================
function resetAllCheckedHisCheckboxes() {
// 1. Сначала пытаемся сбросить через главный чекбокс, если он активен
var $selectAll = $('#selectAll');
if ($selectAll.prop('checked')) {
// Используем .click() для корректной работы с плагином стилизации
$selectAll.click();
}
// 2. Агрессивный сброс: Проходим по всем подчиненным элементам, которые могли остаться отмеченными
$('#forms tbody .his-checkbox:checked').each(function() {
var $checkbox = $(this);
// Вызываем click() для снятия отметки, если она еще стоит
$checkbox.click();
});
}
// =========================================================
// 2. ОБРАБОТЧИК КЛИКА ПО ГЛАВНОМУ ЧЕКБОКСУ (#selectAll)
// =========================================================
$(document).on('click', '#selectAll', function() {
var isChecked = $(this).prop('checked');
var $hisCheckboxes = $('#forms tbody .his-checkbox');
$hisCheckboxes.each(function() {
var $checkbox = $(this);
// Используем .click() для принудительного обновления стилизованного элемента
if ($checkbox.prop('checked') !== isChecked) {
$checkbox.click();
}
});
});
// =========================================================
// 3. ОБРАБОТЧИК КНОПКИ МАССОВОГО ДЕЙСТВИЯ (#massActionButton)
// =========================================================
$(document).on('click', '#massActionButton', function() {
var $selectElement = $('.action-in-moderation');
// Получаем значение, читая выбранный <option> (для обхода плагина стилизации)
var selectedAction = $selectElement.find('option:selected').val();
var $checkedRows = $('#forms tbody .his-checkbox:checked');
if ($checkedRows.length === 0) {
if (selectedAction !== 'none') {
jAlert($smarty['cn_select_for_action'], $smarty['action_error_title']); // "Выберите хотя бы один элемент"
}
return false;
}
// --- ЛОГИКА МАССОВОГО УДАЛЕНИЯ ---
if (selectedAction === 'delete') {
// 1. Подтверждение удаления через jConfirm
jConfirm($smarty['cn_confirm_mass_del'], $smarty['action_confirm_title'], function(r) {
if (r) {
var deletions = [];
// Сбор ID и визуальное удаление
$checkedRows.each(function() {
var $checkbox = $(this);
var nameAttr = $checkbox.attr('name');
var match = nameAttr.match(/form\[(\d+)\]/);
if (match && match[1]) {
var dialogId = match[1];
var $row = $checkbox.closest('tr');
deletions.push(dialogId);
$row.fadeOut(300, function() { $(this).remove(); });
}
});
// Выполнение AJAX-запросов
if (deletions.length > 0) {
$.alerts._overlay('show');
var completedRequests = 0;
deletions.forEach(function(hid) {
$.ajax({
url: 'index.php?do=modules&action=modedit&mod=forms&moduleaction=email_del&hid=' + hid + '&ajax=1',
type: 'GET',
success: function() {
completedRequests++;
if (completedRequests === deletions.length) {
$.alerts._overlay('hide');
resetAllCheckedHisCheckboxes(); // Сброс
}
},
error: function() {
completedRequests++;
if (completedRequests === deletions.length) {
$.alerts._overlay('hide');
jAlert($smarty['delete_error'], $smarty['action_error_title']);
}
}
});
});
}
}
});
// --- ЛОГИКА МАССОВОГО ИЗМЕНЕНИЯ СТАТУСА ---
} else if (selectedAction === 'viewed' || selectedAction === 'replied') {
var completedRequests = 0;
var totalRequests = $checkedRows.length;
$.alerts._overlay('show');
// Перебираем выбранные чекбоксы
$checkedRows.each(function() {
var $checkbox = $(this);
var nameAttr = $checkbox.attr('name');
var match = nameAttr.match(/form\[(\d+)\]/);
if (match && match[1]) {
var hid = match[1];
var $row = $checkbox.closest('tr');
var $tdStatus = $row.find('td:eq(4)'); // 5-я ячейка со статусом
// Отправляем AJAX-запрос
$.ajax({
url: 'index.php?do=modules&action=modedit&mod=forms&moduleaction=dialog_status',
type: 'POST',
data: { hid: hid, status: selectedAction, ajax: 1 },
success: function(e) {
// Обновление ячейки статуса в DOM (взято из status_change)
$tdStatus.empty();
if (selectedAction === 'replied') {
$tdStatus.text($smarty['stat_replied']);
$row.removeClass('green yellow');
}
else if (selectedAction === 'viewed') {
$row.removeClass('green').addClass('yellow');
$('<select class="dialog_status" data-hid="'+hid+'" onChange="status_change($(this));"><option value="viewed">'+$smarty['stat_viewed']+'</option><option value="replied">'+$smarty['stat_replied']+'</option></select>').appendTo($tdStatus).jqTransform({imgPath: "../images"}).styler({selectVisibleOptions: 5,selectSearch: false});
}
completedRequests++;
if (completedRequests === totalRequests) {
$.alerts._overlay('hide');
resetAllCheckedHisCheckboxes(); // Сброс
}
},
error: function() {
completedRequests++;
if (completedRequests === totalRequests) {
$.alerts._overlay('hide');
jAlert('{#status_change_error#}', $smarty['action_error_title']);
}
}
});
}
});
} else {
return false;
}
});
</script>
{/literal}