342 lines
14 KiB
Smarty
342 lines
14 KiB
Smarty
{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&cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
|
||
<li><a href="index.php?do=modules&action=modedit&mod=forms&moduleaction=1&cp={$sess}">{#contacts#}</a></li>
|
||
<li><a href="index.php?do=modules&action=modedit&mod=forms&moduleaction=1&cp={$sess}">{#forms#}</a></li>
|
||
<li><strong class="code"><a href="index.php?do=modules&action=modedit&mod=forms&moduleaction=form_edit&fid={$fid}&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&action=modedit&mod=forms&moduleaction=1&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&action=modedit&mod=forms&moduleaction=history_dialog&hid={$dialog.id}&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&action=modedit&mod=forms&moduleaction=email_del&hid={$dialog.id}&fid={$fid}&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>
|
||
<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} |