From 8315817388f73ee86bc9b7c16d60775fb6ef0574 Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Sat, 24 Apr 2021 00:10:23 +0200 Subject: [PATCH] Add dynamic deletion of contacts --- assets/css/style.css | 18 ++++++++ controllers/publics/ConditionalGroup.php | 12 +++++- controllers/publics/Contact.php | 36 ++++++++++++++++ routes.php | 1 + templates/conditional_group/add.php | 2 +- templates/contact/list.php | 54 +++++++++++++++++++++++- 6 files changed, 120 insertions(+), 3 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index ba50ec0..1bda82d 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -442,3 +442,21 @@ footer img { margin-bottom: 30px; } + + +/** + * Contacts conditional deletion + */ +.conditional-deletion-preview-container +{ + margin-top: 10px; + margin-bottom: 20px; + text-align: right; +} + +.conditional-deletion-preview-container label, +.conditional-deletion-preview-container select +{ + display: inline-block; + width: auto; +} diff --git a/controllers/publics/ConditionalGroup.php b/controllers/publics/ConditionalGroup.php index 28ad23e..9ba60f9 100644 --- a/controllers/publics/ConditionalGroup.php +++ b/controllers/publics/ConditionalGroup.php @@ -234,7 +234,17 @@ namespace controllers\publics; $contacts_name[] = $contact['name']; } - $return['result'] = 'Contacts du groupe : ' . implode(', ', $contacts_name); + $visible_names = array_slice($contacts_name, 0, 5); + $how_many_more = count($contacts_name) - count($visible_names); + + $result_text = 'Contacts du groupe : ' . implode(', ', $visible_names); + + if ($how_many_more > 0) + { + $result_text .= ", et $how_many_more autres."; + } + + $return['result'] = $result_text; $return['success'] = true; echo json_encode($return); diff --git a/controllers/publics/Contact.php b/controllers/publics/Contact.php index 2e2b8b6..9d6e98f 100644 --- a/controllers/publics/Contact.php +++ b/controllers/publics/Contact.php @@ -18,6 +18,7 @@ namespace controllers\publics; { private $internal_contact; private $internal_event; + private $internal_conditional_group; /** * Cette fonction est appelée avant toute les autres : @@ -31,6 +32,7 @@ namespace controllers\publics; $this->internal_contact = new \controllers\internals\Contact($bdd); $this->internal_event = new \controllers\internals\Event($bdd); + $this->internal_conditional_group = new \controllers\internals\ConditionalGroup($bdd); \controllers\internals\Tool::verifyconnect(); } @@ -83,6 +85,40 @@ namespace controllers\publics; return $this->redirect(\descartes\Router::url('Contact', 'list')); } + + /** + * This function will delete a list of contacts depending on a condition + * + * @param string $_POST['condition'] : Condition to use to delete contacts + * @param mixed $csrf + * + * @return boolean; + */ + public function conditional_delete($csrf) + { + if (!$this->verify_csrf($csrf)) + { + \FlashMessage\FlashMessage::push('danger', 'Jeton CSRF invalid !'); + + return $this->redirect(\descartes\Router::url('Contact', 'list')); + } + + $condition = $_POST['condition'] ?? false; + if (!$condition) + { + \FlashMessage\FlashMessage::push('danger', 'Vous devez fournir une condition !'); + + return $this->redirect(\descartes\Router::url('Contact', 'list')); + } + + $contacts_to_delete = $this->internal_conditional_group->get_contacts_for_condition_and_user($_SESSION['user']['id'], $condition); + foreach ($contacts_to_delete as $contact) + { + $this->internal_contact->delete_for_user($_SESSION['user']['id'], $contact['id']); + } + + return $this->redirect(\descartes\Router::url('Contact', 'list')); + } /** * Cette fonction retourne la page d'ajout d'un contact. diff --git a/routes.php b/routes.php index db8f771..1e3adb1 100644 --- a/routes.php +++ b/routes.php @@ -43,6 +43,7 @@ 'update' => '/contact/update/{csrf}/', 'import' => '/contact/import/{csrf}/', 'export' => '/contact/export/{format}/', + 'conditional_delete' => '/contact/conditional_delete/{csrf}/', 'json_list' => '/contacts.json/', ], diff --git a/templates/conditional_group/add.php b/templates/conditional_group/add.php index 6e517ab..13a0ac9 100644 --- a/templates/conditional_group/add.php +++ b/templates/conditional_group/add.php @@ -48,7 +48,7 @@

- Les conditions vous permettent de définir dynamiquement les contacts qui appartiennent au groupe en utilisant leurs données additionnelles. Pour plus d'informations consultez la documentation relative à l'utilisation des groupes conditionnels.
+ Les conditions vous permettent de définir dynamiquement les contacts qui appartiennent au groupe en utilisant leurs données additionnelles. Pour plus d'informations consultez la documentation relative à l'utilisation des groupes conditionnels.
Vous pouvez prévisualiser les contacts qui feront parti du groupe en cliquant sur le bouton "Prévisualiser les contacts".

diff --git a/templates/contact/list.php b/templates/contact/list.php index 6f5bd98..af5579e 100644 --- a/templates/contact/list.php +++ b/templates/contact/list.php @@ -14,7 +14,8 @@

Dashboard Contacts - Exporter la liste des contacts + Supprimer une liste dynamique de contacts + Exporter la liste des contacts Importer une liste de contacts

+