mirror of
https://github.com/RaspbianFrance/raspisms.git
synced 2025-06-06 14:46:27 +02:00
Change all lists to use ajax data source and high perf datatable + improve all consuming listing queries + add indexes on numbers for perf improvment
This commit is contained in:
parent
52ac5b459b
commit
b98d5a22ef
34 changed files with 1238 additions and 767 deletions
|
@ -1,11 +1,17 @@
|
|||
<?php
|
||||
//Template dashboard
|
||||
|
||||
$this->render('incs/head', ['title' => 'Receiveds - Show All'])
|
||||
if ($is_unread)
|
||||
{
|
||||
$this->render('incs/head', ['title' => 'Receiveds - Unread']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->render('incs/head', ['title' => 'Receiveds - Show All']);
|
||||
}
|
||||
?>
|
||||
<div id="wrapper">
|
||||
<?php
|
||||
$this->render('incs/nav', ['page' => 'receiveds'])
|
||||
$this->render('incs/nav', ['page' => ($is_unread ? 'receiveds_unread' : 'receiveds')])
|
||||
?>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
|
@ -20,7 +26,7 @@
|
|||
<i class="fa fa-dashboard"></i> <a href="<?php echo \descartes\Router::url('Dashboard', 'show'); ?>">Dashboard</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<i class="fa fa-download "></i> SMS reçus
|
||||
<i class="fa <?= $is_unread ? 'fa-eye-slash' : 'fa-download' ?> "></i> <?= $is_unread ? 'SMS non lus' : 'SMS reçus' ?>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
@ -31,13 +37,10 @@
|
|||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-download fa-fw"></i> Liste des SMS reçus</h3>
|
||||
<h3 class="panel-title"><i class="fa fa-fw <?= $is_unread ? 'fa-eye-slash' : 'fa-download' ?>"></i> <?= $is_unread ? 'Liste des SMS non lus' : 'Liste des SMS reçus' ?></h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<form method="GET">
|
||||
<?php if (!$receiveds) { ?>
|
||||
<p>Aucun SMS n'a été reçu pour le moment.</p>
|
||||
<?php } else { ?>
|
||||
<div class="table-receiveds">
|
||||
<table class="table table-bordered table-hover table-striped datatable" id="table-receiveds">
|
||||
<thead>
|
||||
|
@ -48,39 +51,21 @@
|
|||
<th>Date</th>
|
||||
<th>Status</th>
|
||||
<th>Commande</th>
|
||||
<?php if ($_SESSION['user']['admin']) { ?><th class="checkcolumn">✓</th><?php } ?>
|
||||
<th class="checkcolumn">✓</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($receiveds as $received) { ?>
|
||||
<tr>
|
||||
<td class="no-wrap">
|
||||
<?php if ($received['contact'] ?? false) { ?>
|
||||
<?php echo \controllers\internals\Tool::phone_link($received['origin']) . ' (' . $received['contact'] . ')'; ?>
|
||||
<?php } else { ?>
|
||||
<?php echo \controllers\internals\Tool::phone_link($received['origin']); ?>
|
||||
<?php } ?>
|
||||
</td>
|
||||
<td class="no-wrap"><?php $this->s($received['phone_name'] ?? 'Inconnu'); ?></td>
|
||||
<td><?php $this->s($received['text']); ?></td>
|
||||
<td><?php $this->s($received['at']); ?></td>
|
||||
<td><?php echo ($received['status'] == 'read' ? 'Lu' : 'Non lu'); ?></td>
|
||||
<td><?php echo $received['command'] ? 'Oui' : 'Non'; ?></td>
|
||||
<?php if ($_SESSION['user']['admin']) { ?><td><input name="ids[]" type="checkbox" value="<?php $this->s($received['id']); ?>"></td><?php } ?>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<?php if ($_SESSION['user']['admin']) { ?>
|
||||
<div class="text-right col-xs-12 no-padding">
|
||||
<strong>Action pour la séléction :</strong>
|
||||
<button class="btn btn-default btn-confirm" type="submit" formaction="<?php echo \descartes\Router::url('Received', 'delete', ['csrf' => $_SESSION['csrf']]); ?>"><span class="fa fa-trash-o"></span> Supprimer</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="text-right col-xs-12 no-padding">
|
||||
<strong>Action pour la séléction :</strong>
|
||||
<button class="btn btn-default" type="submit" formaction="<?php echo \descartes\Router::url('Received', 'mark_as', ['status' => \models\Received::STATUS_READ, 'csrf' => $_SESSION['csrf']]); ?>"><span class="fa fa-eye"></span> Marquer comme lu</button>
|
||||
<button class="btn btn-default" type="submit" formaction="<?php echo \descartes\Router::url('Received', 'mark_as', ['status' => \models\Received::STATUS_UNREAD, 'csrf' => $_SESSION['csrf']]); ?>"><span class="fa fa-eye-slash"></span> Marquer comme non lu</button>
|
||||
<button class="btn btn-default btn-confirm" type="submit" formaction="<?php echo \descartes\Router::url('Received', 'delete', ['csrf' => $_SESSION['csrf']]); ?>"><span class="fa fa-trash-o"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -90,20 +75,71 @@
|
|||
</div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(document).ready(function ()
|
||||
{
|
||||
jQuery('.action-dropdown a').on('click', function (e)
|
||||
{
|
||||
e.preventDefault();
|
||||
var destination = jQuery(this).parents('.action-dropdown').attr('destination');
|
||||
var url = jQuery(this).attr('href');
|
||||
jQuery(destination).find('input:checked').each(function ()
|
||||
{
|
||||
url += '/' + jQuery(this).val();
|
||||
});
|
||||
window.location = url;
|
||||
});
|
||||
});
|
||||
jQuery(document).ready(function ()
|
||||
{
|
||||
jQuery('.datatable').DataTable({
|
||||
"pageLength": 25,
|
||||
"bLengthChange": false,
|
||||
"language": {
|
||||
"url": HTTP_PWD + "/assets/js/datatables/french.json",
|
||||
},
|
||||
"columnDefs": [{
|
||||
'targets': 'checkcolumn',
|
||||
'orderable': false,
|
||||
}],
|
||||
|
||||
"ajax": {
|
||||
'url': '<?php echo $is_unread ? \descartes\Router::url('Received', 'list_unread_json') : \descartes\Router::url('Received', 'list_json'); ?>',
|
||||
'dataSrc': 'data',
|
||||
},
|
||||
"columns" : [
|
||||
{
|
||||
data: 'origin',
|
||||
render: function (data, type, row, meta) {
|
||||
if (row.contact_name) {
|
||||
return row.origin_formatted + ' (' + jQuery.fn.dataTable.render.text().display(row.contact_name) + ')';
|
||||
}
|
||||
|
||||
return row.origin_formatted;
|
||||
},
|
||||
},
|
||||
{data: 'phone_name', render: jQuery.fn.dataTable.render.text()},
|
||||
{data: 'text', render: jQuery.fn.dataTable.render.text()},
|
||||
{data: 'at', render: jQuery.fn.dataTable.render.text()},
|
||||
{
|
||||
data: 'status',
|
||||
render: function (data, type, row, meta) {
|
||||
switch (data) {
|
||||
case 'read':
|
||||
return 'Lu';
|
||||
break;
|
||||
|
||||
default:
|
||||
return 'Non lu';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
data: 'command',
|
||||
render: function (data, type, row, meta) {
|
||||
if (data == 0) {
|
||||
return "Non";
|
||||
} else {
|
||||
return 'Oui';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
data: 'id',
|
||||
render: function (data, type, row, meta) {
|
||||
return '<input name="ids[]" type="checkbox" value="' + data + '">';
|
||||
},
|
||||
},
|
||||
],
|
||||
"deferRender": true
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$this->render('incs/footer');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue