Files
register/marko_unpacked/marko/cms/widgets/views/table.php
T
Admin Nasledstvo ac168868ee Initial import
2026-05-01 20:52:04 +03:00

271 lines
8.8 KiB
PHP

<?php
use app\widgets\services\Includes;
use app\widgets\services\UserRight;
use app\widgets\services\XLSx;
/**
* @var $this \yii\web\View;
* @var $top array
* @var $actions array
* @var $th array
* @var $data array
* @var $advanced_filter string
* @var $filter array
* @var $exportData array
* @var $ignoreIds array
* @var $listTabs array
* @var $model \yii\db\ActiveRecord | null
*/
?>
<?php if ($_SERVER['REQUEST_METHOD'] == 'GET'): ?>
<?php if (!UserRight::pub()): ?>
<style>
label.switch:has([data-key="is_for_publish"]),
label.switch:has([data-key="on_partner_page"]),
label.switch:has([data-key="partner_page_selected"]) {
pointer-events: none;
opacity: 0.8
}
</style>
<?php endif; ?>
<?php if (!UserRight::isAdmin()): ?>
<style>
label.switch:has([data-key="private"]) {
pointer-events: none;
opacity: 0.8
}
</style>
<?php endif; ?>
<?php if (!UserRight::edit()): ?>
<style>
label.switch:has([data-key="partner_page_selected"]) {
pointer-events: none;
opacity: 0.8
}
</style>
<?php endif; ?>
<?php endif; ?>
<?php
if ($model && isset($_GET['update-indexes']) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['indexes'])) {
$indexes = [];
$ids = [];
foreach (json_decode($_POST['indexes']) as $index) {
$indexes[$index->id] = $index->order_index;
$ids[] = $index->id;
}
$data = $model::find()->where(['IN', 'id', $ids])->all();
foreach ($data as $m) {
if ($m->hasProperty('order_index')) {
$m->{'order_index'} = $indexes[$m->{'id'}];
$m->save();
}
}
exit;
}
if (isset($_GET['export'])) {
$ed = $exportData();
//echo json_encode($ed);
//exit;
$error = 0;
foreach (['data', 'file_name', 'header'] as $d) {
if (empty($ed[$d]))
$error++;
}
if ($error == 0)
XLSx::toXlsWriter($ed['data'], $ed['file_name'], $ed['file_name'], $ed['header']);
}
if (isset($_GET['p']) && sizeof($data['list']) == 0) {
header('Location: ' . explode('?', $_SERVER['REQUEST_URI'])[0]);
exit;
}
Includes::top($top['title'] ?? null, $top['data'] ?? null);
Includes::setListTabs($listTabs);
?>
<div class="inner-content p10">
<?= $this->render('includes/actions', ['actions' => $actions, 'data' => $data, 'exportData' => $exportData]) ?>
<?= $this->render('includes/filter', ['filter' => $filter, 'advanced_filter' => $advanced_filter]); ?>
<table class="cms-table">
<thead>
<tr>
<?php
$j = 0;
foreach ($th as $title => $class): ?>
<th class="<?= $class ?>">
<?php if (sizeof($data['list'])): ?>
<?php if (isset($actions['delete']) && UserRight::del()): ?>
<?= $j == 0 ? '<input id="checkAll" onclick="checkAll(this)" title="Избери всички" class="delete-checkbox" type="checkbox">' : '' ?>
<?php endif; ?>
<?php endif; ?>
<?= $title ?>
</th>
<?php
$j++;
endforeach; ?>
</tr>
</thead>
<tbody>
<tr>
<td colspan="<?= sizeof($th) ?>" style="padding: 0"></td>
</tr>
<?php if (!empty($data['list'])): ?>
<?php foreach ($data['list'] as $index => $td): ?>
<tr <?= isset($td['order_index']) ? 'data-index="' . $td['order_index'] . '"' : '' ?>>
<?php $i = 0;
foreach ($th as $title => $class): ?>
<td class="<?= $class ?>">
<?php if (isset($actions['edit']) || isset($actions['delete'])): ?>
<?php if (UserRight::edit() || UserRight::del()): ?>
<?php if (!empty($ignoreIds)): ?>
<?php if (!in_array($td[$i], $ignoreIds)): ?>
<?= $i == 0 ? '<input onclick="checkSingle(this)" data-del="' . $td['id'] . '" class="delete-checkbox" type="checkbox">' : '' ?>
<?php else: ?>
<?= $i == 0 ? '<input disabled class="delete-checkbox" type="checkbox">' : '' ?>
<?php endif; ?>
<?php else: ?>
<?= $i == 0 ? '<input onclick="checkSingle(this)" data-del="' . $td['id'] . '" class="delete-checkbox" type="checkbox">' : '' ?>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?= $td[$i] ?>
</td>
<?php $i++;endforeach; ?>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="<?= sizeof($th) ?>" style="background: #fff"></td>
</tr>
<tr>
<td class="ct" style="font-size: 16px; padding: 20px"
colspan="<?= sizeof($th) ?>"><?= isset($_GET['q']) ? Yii::t('cms', 'No data found') : Yii::t('cms', 'No data has been added') ?></td>
</tr>
<?php endif; ?>
</tbody>
</table>
<?php if (!empty($data['list'])): ?>
<?= $this->render('includes/pagination', ['data' => $data]) ?>
<?php endif; ?>
</div>
<script src="/_public/assets/js/order.js"></script>
<script>
let sl = [];
function checkAll(el) {
sl = [];
all('td [data-del]').forEach(e => {
e.checked = el.checked === true;
if (el.checked) {
sl.push(e.dataset.del);
e.parentNode.parentNode.addClass('checked');
} else {
e.parentNode.parentNode.removeClass('checked');
}
})
updateActionButtons();
}
function checkSingle(e) {
if (e) {
if (e.checked) {
sl.push(e.dataset.del);
e.parentNode.parentNode.addClass('checked');
} else {
let checkedAll = one('#checkAll')
if (checkedAll) {
checkedAll.checked = false;
}
e.parentNode.parentNode.removeClass('checked');
const f = sl.indexOf(e.dataset.del);
sl.splice(f, 1);
}
updateActionButtons(e.dataset.del);
}
}
function updateActionButtons() {
const bEdit = one('#bEdit');
const bDelete = one('#bDelete');
const delCount = one('#delCount');
const c = sl.length;
if (delCount)
delCount.innerText = '(' + c + ')';
if (c > 0) {
if (bDelete)
bDelete.removeClass('disabled');
if (bEdit) {
if (c < 2) {
bEdit.href = window.getUri('o=w&id=' + sl[0])
bEdit.removeClass('disabled');
} else {
bEdit.addClass('disabled');
bEdit.href = '';
}
}
} else {
if (bEdit)
bEdit.addClass('disabled');
if (bDelete)
bDelete.addClass('disabled');
}
}
function checkDelete(e) {
const msg = 'Сигурни ли сте, че искате да изтриете ' + (sl.length > 1 ? 'тези ' + sl.length + ' записа?' : 'този запис?');
modal.confirm(msg, () => {
request({
url: window.getUri('o=d'),
post: {
ids: JSON.stringify(sl),
model: e.dataset.model
},
done: e => {
window.location.reload();
}
})
});
}
window.onscroll = function () {
const ab = one('.action-buttons');
if (ab) {
if (window.pageYOffset > ab.offsetTop) {
ab.addClass('buttons-top')
} else {
ab.removeClass('buttons-top')
}
}
}
window.addEventListener('load', function () {
all('.delete-checkbox', input => {
input.checked = false;
})
})
orderItems('[data-index]', '?update-indexes=1', function () {
});
</script>
<?php if (!UserRight::pub()): ?>
<script>
document.querySelectorAll('[data-key="on_partner_page"], [data-key="is_for_publish"], [data-key="partner_page_selected"]').forEach(e => {
e.removeAttribute('onchange')
})
</script>
<?php endif; ?>