From 69619d0befa2d1e0ee26e2a295a8985dec35159a Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Sun, 5 Feb 2023 23:11:58 +0100 Subject: [PATCH] Add notion of priority to phones --- controllers/internals/Phone.php | 8 +++- controllers/publics/Api.php | 10 ++++- controllers/publics/Phone.php | 10 ++++- .../20230205214319_add_phone_priority.php | 43 +++++++++++++++++++ templates/phone/add.php | 9 ++++ templates/phone/edit.php | 9 ++++ templates/phone/list.php | 2 + 7 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 db/migrations/20230205214319_add_phone_priority.php diff --git a/controllers/internals/Phone.php b/controllers/internals/Phone.php index 236ac15..9bdeac7 100644 --- a/controllers/internals/Phone.php +++ b/controllers/internals/Phone.php @@ -137,15 +137,17 @@ namespace controllers\internals; * @param string $name : The name of the phone * @param string $adapter : The adapter to use the phone * @param string json $adapter_data : A JSON string representing adapter's data (for example credentials for an api) + * @param int $priority : Priority with which to use phone to send SMS. Default 0. * @param array $limits : An array of limits for this phone. Each limit must be an array with a key volume and a key startpoint * * @return bool|int : false on error, new id on success */ - public function create(int $id_user, string $name, string $adapter, string $adapter_data, array $limits = []) + public function create(int $id_user, string $name, string $adapter, string $adapter_data, int $priority = 0, array $limits = []) { $phone = [ 'id_user' => $id_user, 'name' => $name, + 'priority' => $priority, 'adapter' => $adapter, 'adapter_data' => $adapter_data, ]; @@ -185,17 +187,19 @@ namespace controllers\internals; * @param string $name : The name of the phone * @param string $adapter : The adapter to use the phone * @param string json $adapter_data : A JSON string representing adapter's data (for example credentials for an api) + * @param int $priority : Priority with which to use phone to send SMS. Default 0. * @param array $limits : An array of limits for this phone. Each limit must be an array with a key volume and a key startpoint * * @return bool : false on error, true on success */ - public function update_for_user(int $id_user, int $id, string $name, string $adapter, string $adapter_data, array $limits = []): bool + public function update_for_user(int $id_user, int $id, string $name, string $adapter, string $adapter_data, int $priority = 0, array $limits = []): bool { $phone = [ 'id_user' => $id_user, 'name' => $name, 'adapter' => $adapter, 'adapter_data' => $adapter_data, + 'priority' => $priority, ]; //Use transaction to garanty atomicity diff --git a/controllers/publics/Api.php b/controllers/publics/Api.php index 9f0e3ba..7ee0d36 100644 --- a/controllers/publics/Api.php +++ b/controllers/publics/Api.php @@ -506,6 +506,7 @@ namespace controllers\publics; * @param string $_POST['name'] : Phone name * @param string $_POST['adapter'] : Phone adapter * @param array $_POST['adapter_data'] : Phone adapter data + * @param int $priority : Priority with which to use phone to send SMS. Default 0. * @param ?array $_POST['limits'] : Array of limits in number of SMS for a period to be applied to this phone. * * @return int : id phone the new phone on success @@ -517,6 +518,8 @@ namespace controllers\publics; $name = $_POST['name'] ?? false; $adapter = $_POST['adapter'] ?? false; $adapter_data = !empty($_POST['adapter_data']) ? $_POST['adapter_data'] : []; + $priority = $_POST['priority'] ?? 0; + $priority = max(((int) $priority), 0); $limits = $_POST['limits'] ?? []; $limits = is_array($limits) ? $limits : [$limits]; @@ -660,7 +663,7 @@ namespace controllers\publics; return $this->json($return); } - $phone_id = $this->internal_phone->create($this->user['id'], $name, $adapter, $adapter_data, $limits); + $phone_id = $this->internal_phone->create($this->user['id'], $name, $adapter, $adapter_data, $priority, $limits); if (false === $phone_id) { $return['error'] = self::ERROR_CODES['CANNOT_CREATE']; @@ -683,6 +686,7 @@ namespace controllers\publics; * @param string (optionnal) $_POST['name'] : New phone name * @param string (optionnal) $_POST['adapter'] : New phone adapter * @param array (optionnal) $_POST['adapter_data'] : New phone adapter data + * @param int $priority : Priority with which to use phone to send SMS. Default 0. * * @return int : id phone the new phone on success */ @@ -703,6 +707,8 @@ namespace controllers\publics; $limits = $this->internal_phone->get_limits(($phone['id'])); $name = $_POST['name'] ?? $phone['name']; + $priority = $_POST['priority'] ?? $phone['priority']; + $priority = max(((int) $priority), 0); $adapter = $_POST['adapter'] ?? $phone['adapter']; $adapter_data = !empty($_POST['adapter_data']) ? $_POST['adapter_data'] : json_decode($phone['adapter_data']); $adapter_data = is_array($adapter_data) ? $adapter_data : [$adapter_data]; @@ -842,7 +848,7 @@ namespace controllers\publics; return $this->json($return); } - $success = $this->internal_phone->update_for_user($this->user['id'], $phone['id'], $name, $adapter, $adapter_data_json, $limits); + $success = $this->internal_phone->update_for_user($this->user['id'], $phone['id'], $name, $adapter, $adapter_data_json, $priority, $limits); if (!$success) { $return['error'] = self::ERROR_CODES['CANNOT_UPDATE']; diff --git a/controllers/publics/Phone.php b/controllers/publics/Phone.php index ae04d9f..6610939 100644 --- a/controllers/publics/Phone.php +++ b/controllers/publics/Phone.php @@ -138,6 +138,7 @@ class Phone extends \descartes\Controller * @param string $_POST['adapter'] : Phone adapter * @param ?array $_POST['adapter_data'] : Phone adapter data * @param ?array $_POST['limits'] : Array of limits in number of SMS for a period to be applied to this phone. + * @param int $_POST['priority'] : Priority with which to use phone to send SMS. Default 0. */ public function create($csrf) { @@ -150,6 +151,8 @@ class Phone extends \descartes\Controller $id_user = $_SESSION['user']['id']; $name = $_POST['name'] ?? false; + $priority = $_POST['priority'] ?? 0; + $priority = max(((int) $priority), 0); $adapter = $_POST['adapter'] ?? false; $adapter_data = !empty($_POST['adapter_data']) ? $_POST['adapter_data'] : []; $limits = $_POST['limits'] ?? []; @@ -281,7 +284,7 @@ class Phone extends \descartes\Controller return $this->redirect(\descartes\Router::url('Phone', 'add')); } - $success = $this->internal_phone->create($id_user, $name, $adapter, $adapter_data, $limits); + $success = $this->internal_phone->create($id_user, $name, $adapter, $adapter_data, $priority, $limits); if (!$success) { \FlashMessage\FlashMessage::push('danger', 'Impossible de créer ce téléphone.'); @@ -346,6 +349,7 @@ class Phone extends \descartes\Controller * @param string $_POST['phones']['id']['adapter'] : Phone adapter * @param ?array $_POST['phones']['id']['adapter_data'] : Phone adapter data * @param ?array $_POST['phones']['id']['limits'] : Array of limits in number of SMS for a period to be applied to this phone. + * @param int $_POST['phones']['id']['priority'] : Priority with which to use phone to send SMS. Default 0. */ public function update($csrf) { @@ -367,6 +371,8 @@ class Phone extends \descartes\Controller foreach ($_POST['phones'] as $id_phone => $phone) { $name = $phone['name'] ?? false; + $priority = $phone['priority'] ?? 0; + $priority = max(((int) $priority), 0); $adapter = $phone['adapter'] ?? false; $adapter_data = !empty($phone['adapter_data']) ? $phone['adapter_data'] : []; $limits = $phone['limits'] ?? []; @@ -484,7 +490,7 @@ class Phone extends \descartes\Controller continue; } - $success = $this->internal_phone->update_for_user($id_user, $id_phone, $name, $adapter, $adapter_data, $limits); + $success = $this->internal_phone->update_for_user($id_user, $id_phone, $name, $adapter, $adapter_data, $priority, $limits); if (!$success) { continue; diff --git a/db/migrations/20230205214319_add_phone_priority.php b/db/migrations/20230205214319_add_phone_priority.php new file mode 100644 index 0000000..3ce343b --- /dev/null +++ b/db/migrations/20230205214319_add_phone_priority.php @@ -0,0 +1,43 @@ +table('phone'); + $table->addColumn('priority', 'integer', [ + 'null' => false, + 'default' => 0, + 'comment' => 'Priority with which the phone will be used. The higher the more prioritary.', + 'after' => 'name' + ]) + ->update(); + } +} diff --git a/templates/phone/add.php b/templates/phone/add.php index e8d9cb1..ab2e143 100644 --- a/templates/phone/add.php +++ b/templates/phone/add.php @@ -47,6 +47,15 @@ +
+ +

+ Lors de l'envoi de SMS sans téléphone spécifié, les téléphones avec la plus haute priorité seront utilisés en premier. +

+
+ +
+

diff --git a/templates/phone/edit.php b/templates/phone/edit.php index c1da9a6..ff9b456 100644 --- a/templates/phone/edit.php +++ b/templates/phone/edit.php @@ -49,6 +49,15 @@

+
+ +

+ Lors de l'envoi de SMS sans téléphone spécifié, les téléphones avec la plus haute priorité seront utilisés en premier. +

+
+ +
+

diff --git a/templates/phone/list.php b/templates/phone/list.php index d714e80..59a701c 100644 --- a/templates/phone/list.php +++ b/templates/phone/list.php @@ -41,6 +41,7 @@ ID Nom + Priorité Type de téléphone Callbacks Limites @@ -90,6 +91,7 @@ jQuery(document).ready(function () "columns" : [ {data: 'id', render: jQuery.fn.dataTable.render.text()}, {data: 'name', render: jQuery.fn.dataTable.render.text()}, + {data: 'priority', render: jQuery.fn.dataTable.render.text()}, {data: 'adapter', render: jQuery.fn.dataTable.render.text()}, { data: '_',