add preview of group members

This commit is contained in:
osaajani 2023-02-17 05:18:57 +01:00
parent 59d3e28489
commit f9e64aee65
6 changed files with 198 additions and 1 deletions

View File

@ -471,6 +471,16 @@ footer img
color: #9b2420; color: #9b2420;
} }
/* PREVIEW CONTACT */
.preview-contact-name
{
font-weight: bold;
}
.preview-contact-number
{
font-style: italic;
}
/* PHONE */ /* PHONE */
#adapter-data-container #adapter-data-container

View File

@ -185,6 +185,45 @@ namespace controllers\publics;
return $this->redirect(\descartes\Router::url('ConditionalGroup', 'list')); return $this->redirect(\descartes\Router::url('ConditionalGroup', 'list'));
} }
/**
* Return contacts of a group as json array
* @param int $id_group = Group id
*
* @return json
*/
public function preview (int $id_group)
{
$return = [
'success' => false,
'result' => 'Une erreur inconnue est survenue.',
];
$group = $this->internal_conditional_group->get_for_user($_SESSION['user']['id'], $id_group);
if (!$group)
{
$return['result'] = 'Ce groupe n\'existe pas.';
echo json_encode($return);
return false;
}
$contacts = $this->internal_conditional_group->get_contacts_for_condition_and_user($_SESSION['user']['id'], $group['condition']);
if (!$contacts)
{
$return['result'] = 'Aucun contact dans le groupe.';
echo json_encode($return);
return false;
}
$return['success'] = true;
$return['result'] = $contacts;
echo json_encode($return);
return true;
}
/** /**
* Try to get the preview of contacts for a conditionnal group. * Try to get the preview of contacts for a conditionnal group.
* *

View File

@ -191,6 +191,45 @@ namespace controllers\publics;
return $this->redirect(\descartes\Router::url('Group', 'list')); return $this->redirect(\descartes\Router::url('Group', 'list'));
} }
/**
* Return contacts of a group as json array
* @param int $id_group = Group id
*
* @return json
*/
public function preview (int $id_group)
{
$return = [
'success' => false,
'result' => 'Une erreur inconnue est survenue.',
];
$group = $this->internal_group->get_for_user($_SESSION['user']['id'], $id_group);
if (!$group)
{
$return['result'] = 'Ce groupe n\'existe pas.';
echo json_encode($return);
return false;
}
$contacts = $this->internal_group->get_contacts($id_group);
if (!$contacts)
{
$return['result'] = 'Aucun contact dans le groupe.';
echo json_encode($return);
return false;
}
$return['success'] = true;
$return['result'] = $contacts;
echo json_encode($return);
return true;
}
/** /**
* Cette fonction retourne la liste des groups sous forme JSON. * Cette fonction retourne la liste des groups sous forme JSON.
*/ */

View File

@ -76,6 +76,7 @@
'delete' => '/group/delete/{csrf}/', 'delete' => '/group/delete/{csrf}/',
'edit' => '/group/edit/', 'edit' => '/group/edit/',
'update' => '/group/update/{csrf}/', 'update' => '/group/update/{csrf}/',
'preview' => '/group/preview/{id_group}/',
'json_list' => '/groups.json/', 'json_list' => '/groups.json/',
], ],
@ -88,6 +89,7 @@
'edit' => '/conditional_group/edit/', 'edit' => '/conditional_group/edit/',
'update' => '/conditional_group/update/{csrf}/', 'update' => '/conditional_group/update/{csrf}/',
'contacts_preview' => '/conditional_group/preview/', 'contacts_preview' => '/conditional_group/preview/',
'preview' => '/conditional_group/preview/{id_group}/',
'json_list' => '/conditional_groups.json/', 'json_list' => '/conditional_groups.json/',
], ],

View File

@ -43,6 +43,7 @@
<th>Condition</th> <th>Condition</th>
<th>Date de création</th> <th>Date de création</th>
<th>Dernière modification</th> <th>Dernière modification</th>
<th>Preview</th>
<th class="checkcolumn"><input type="checkbox" id="check-all"/></th> <th class="checkcolumn"><input type="checkbox" id="check-all"/></th>
</tr> </tr>
</thead> </thead>
@ -69,9 +70,56 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" tabindex="-1" id="preview-text-modal">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Prévisualisation des contacts</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script> <script>
jQuery(document).ready(function () jQuery(document).ready(function ()
{ {
jQuery('body').on('click', '.preview-button', function (e)
{
e.preventDefault();
var group_id = jQuery(this).attr('data-id-group');
jQuery.ajax({
type: "GET",
url: HTTP_PWD + '/conditional_group/preview/' + group_id + '/',
success: function (data) {
if (!data.success) {
jQuery('#preview-text-modal').find('.modal-body').text(data.result);
} else {
html = '';
for (contact of data.result)
{
html += '<div class="preview-contact well">';
html += ' <div class="preview-contact-name">' + jQuery.fn.dataTable.render.text().display(contact.name) + '</div>'
html += ' <div class="preview-contact-number">' + jQuery.fn.dataTable.render.text().display(contact.number) + '</div>'
html += ' <code class="preview-contact-data">' + jQuery.fn.dataTable.render.text().display(contact.data) + '</code>'
html += '</div>';
console.log(contact);
}
jQuery('#preview-text-modal').find('.modal-body').html(html);
}
jQuery('#preview-text-modal').modal({'keyboard': true});
},
dataType: 'json'
});
});
jQuery('.datatable').DataTable({ jQuery('.datatable').DataTable({
"pageLength": 25, "pageLength": 25,
"lengthMenu": [[25, 50, 100, 1000, 10000, -1], [25, 50, 100, 1000, 10000, "All"]], "lengthMenu": [[25, 50, 100, 1000, 10000, -1], [25, 50, 100, 1000, 10000, "All"]],
@ -97,6 +145,12 @@ jQuery(document).ready(function ()
}, },
{data: 'created_at'}, {data: 'created_at'},
{data: 'updated_at'}, {data: 'updated_at'},
{
data: '_',
render: function (data, type, row, meta) {
return '<a class="btn btn-info preview-button" href="#" data-id-group="' + jQuery.fn.dataTable.render.text().display(row.id) + '"><span class="fa fa-eye"></span></a>';
},
},
{ {
data: 'id', data: 'id',
render: function (data, type, row, meta) { render: function (data, type, row, meta) {
@ -106,7 +160,6 @@ jQuery(document).ready(function ()
], ],
"deferRender": true "deferRender": true
}); });
}); });
</script> </script>
<?php <?php

View File

@ -43,6 +43,7 @@
<th>Nombre de contacts</th> <th>Nombre de contacts</th>
<th>Date de création</th> <th>Date de création</th>
<th>Dernière modification</th> <th>Dernière modification</th>
<th>Preview</th>
<th class="checkcolumn"><input type="checkbox" id="check-all"/></th> <th class="checkcolumn"><input type="checkbox" id="check-all"/></th>
</tr> </tr>
</thead> </thead>
@ -69,6 +70,21 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" tabindex="-1" id="preview-text-modal">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Prévisualisation des contacts</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script> <script>
jQuery(document).ready(function () jQuery(document).ready(function ()
{ {
@ -92,6 +108,12 @@ jQuery(document).ready(function ()
{data: 'nb_contact', render: jQuery.fn.dataTable.render.text()}, {data: 'nb_contact', render: jQuery.fn.dataTable.render.text()},
{data: 'created_at'}, {data: 'created_at'},
{data: 'updated_at'}, {data: 'updated_at'},
{
data: '_',
render: function (data, type, row, meta) {
return '<a class="btn btn-info preview-button" href="#" data-id-group="' + jQuery.fn.dataTable.render.text().display(row.id) + '"><span class="fa fa-eye"></span></a>';
},
},
{ {
data: 'id', data: 'id',
render: function (data, type, row, meta) { render: function (data, type, row, meta) {
@ -102,6 +124,38 @@ jQuery(document).ready(function ()
"deferRender": true "deferRender": true
}); });
jQuery('body').on('click', '.preview-button', function (e)
{
e.preventDefault();
var group_id = jQuery(this).attr('data-id-group');
jQuery.ajax({
type: "GET",
url: HTTP_PWD + '/group/preview/' + group_id + '/',
success: function (data) {
if (!data.success) {
jQuery('#preview-text-modal').find('.modal-body').text(data.result);
} else {
html = '';
for (contact of data.result)
{
html += '<div class="preview-contact well">';
html += ' <div class="preview-contact-name">' + jQuery.fn.dataTable.render.text().display(contact.name) + '</div>'
html += ' <div class="preview-contact-number">' + jQuery.fn.dataTable.render.text().display(contact.number) + '</div>'
html += ' <code class="preview-contact-data">' + jQuery.fn.dataTable.render.text().display(contact.data) + '</code>'
html += '</div>';
console.log(contact);
}
jQuery('#preview-text-modal').find('.modal-body').html(html);
}
jQuery('#preview-text-modal').modal({'keyboard': true});
},
dataType: 'json'
});
});
}); });
</script> </script>
<?php <?php