From b825bd6d6ee7807068c1661b3abf9c75c6023ff6 Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Mon, 20 Feb 2023 15:48:47 +0100 Subject: [PATCH] Add settings to enable/disable phone priority and phone limits --- controllers/internals/Scheduled.php | 52 ++-- controllers/internals/Sended.php | 30 +- env.php.dist | 2 + templates/phone/add.php | 44 +-- templates/phone/edit.php | 93 +++--- templates/phone/list.php | 116 +++---- templates/setting/show.php | 448 +++++++++++++++++----------- 7 files changed, 461 insertions(+), 324 deletions(-) diff --git a/controllers/internals/Scheduled.php b/controllers/internals/Scheduled.php index e5122e3..85d964a 100644 --- a/controllers/internals/Scheduled.php +++ b/controllers/internals/Scheduled.php @@ -669,32 +669,46 @@ use Monolog\Logger; $phones_subset = $mms_only ?: $phones_subset; } - // Keep only phones with remaining volume and available status + // Keep only available phones $remaining_volume_phones = array_filter($phones_subset, function ($phone) { - return $phone['remaining_volume'] > 0 && $phone['status'] == \models\Phone::STATUS_AVAILABLE; + return $phone['status'] == \models\Phone::STATUS_AVAILABLE; }); $phones_subset = $remaining_volume_phones ?: $phones_subset; - $max_priority_phones = []; - $max_priority = PHP_INT_MIN; - foreach ($phones_subset as $phone) + + // Keep only phones with remaining volume + if ((int) ($users_settings[$id_user]['phone_limit'] ?? false)) { - if ($phone['priority'] < $max_priority) - { - continue; - } - elseif ($phone['priority'] == $max_priority) - { - $max_priority_phones[] = $phone; - } - elseif ($phone['priority'] > $max_priority) - { - $max_priority_phones = [$phone]; - $max_priority = $phone['priority']; - } + $remaining_volume_phones = array_filter($phones_subset, function ($phone) { + return $phone['remaining_volume'] > 0; + }); + $phones_subset = $remaining_volume_phones ?: $phones_subset; } - $phones_subset = $max_priority_phones; + if ((int) ($users_settings[$id_user]['phone_priority'] ?? false)) + { + $max_priority_phones = []; + $max_priority = PHP_INT_MIN; + foreach ($phones_subset as $phone) + { + if ($phone['priority'] < $max_priority) + { + continue; + } + elseif ($phone['priority'] == $max_priority) + { + $max_priority_phones[] = $phone; + } + elseif ($phone['priority'] > $max_priority) + { + $max_priority_phones = [$phone]; + $max_priority = $phone['priority']; + } + } + + $phones_subset = $max_priority_phones; + } + if ($phones_subset) { $random_phone = $phones_subset[array_rand($phones_subset)]; diff --git a/controllers/internals/Sended.php b/controllers/internals/Sended.php index fc723dd..d8badf4 100644 --- a/controllers/internals/Sended.php +++ b/controllers/internals/Sended.php @@ -255,6 +255,9 @@ use Exception; 'error_message' => null, ]; + $internal_setting = new Setting(); + $user_settings = $internal_setting->gets_for_user($id_user); + $at = (new \DateTime())->format('Y-m-d H:i:s'); $media_uris = []; foreach ($medias as $media) @@ -295,20 +298,23 @@ use Exception; throw new Exception('Invalid phone status : ' . $phone['status']); } - //If we reached limit for this phone, do not send the message - $limits = $internal_phone->get_limits($id_phone); - - $remaining_volume = PHP_INT_MAX; - foreach ($limits as $limit) + //If we reached limit for this phone and phone limits are enabled, do not send the message + if ((int) ($users_settings['phone_limit'] ?? false)) { - $startpoint = new \DateTime($limit['startpoint']); - $consumed = $this->count_since_for_phone_and_user($id_user, $id_phone, $startpoint); - $remaining_volume = min(($limit['volume'] - $consumed), $remaining_volume); - } + $limits = $internal_phone->get_limits($id_phone); - if ($remaining_volume < 1) - { - throw new Exception('Phone send limit have been reached.'); + $remaining_volume = PHP_INT_MAX; + foreach ($limits as $limit) + { + $startpoint = new \DateTime($limit['startpoint']); + $consumed = $this->count_since_for_phone_and_user($id_user, $id_phone, $startpoint); + $remaining_volume = min(($limit['volume'] - $consumed), $remaining_volume); + } + + if ($remaining_volume < 1) + { + throw new Exception('Phone send limit have been reached.'); + } } $response = $adapter->send($destination, $text, $flash, $mms, $media_uris); diff --git a/env.php.dist b/env.php.dist index c544ba0..2c13aab 100644 --- a/env.php.dist +++ b/env.php.dist @@ -83,6 +83,8 @@ 'alert_quota_limit_close' => 0.9, 'hide_menus' => '', 'force_gsm_alphabet' => 0, + 'phone_limit' => 0, + 'phone_priority' => 0, ], ]; diff --git a/templates/phone/add.php b/templates/phone/add.php index ab2e143..b7fb0ee 100644 --- a/templates/phone/add.php +++ b/templates/phone/add.php @@ -44,18 +44,22 @@ Le nom du téléphone qui enverra et recevra les messages.

- -
- -
- -

- 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. -

-
- +
+ + +
+ +

+ 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. +

+
+ +
+
+ +

@@ -87,15 +91,19 @@

-
- -

- Défini le nombre maximum de SMS qui pourront être envoyés avec ce téléphone sur des périodes de temps données. -

-
-
+ + +
+ +

+ Défini le nombre maximum de SMS qui pourront être envoyés avec ce téléphone sur des périodes de temps données. +

+
+
+
-
+ + Annuler diff --git a/templates/phone/edit.php b/templates/phone/edit.php index c27d24a..835fdf7 100644 --- a/templates/phone/edit.php +++ b/templates/phone/edit.php @@ -40,6 +40,7 @@
+

@@ -49,15 +50,19 @@

-
- -

- 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. -

+ +
- + +

+ 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. +

+
+ +
-
+ +

@@ -94,44 +99,48 @@

-
- -

- Défini le nombre maximum de SMS qui pourront être envoyés avec ce téléphone sur des périodes de temps données. -

-
- -
-
-
- - -
-
- -
- + + +
+ +

+ Défini le nombre maximum de SMS qui pourront être envoyés avec ce téléphone sur des périodes de temps données. +

+
+ +
+
+
+ +
+
+ +
+ +
+
+
- -
- -
+ +
+
-
+ +

diff --git a/templates/phone/list.php b/templates/phone/list.php index fccc5fa..d0b192d 100644 --- a/templates/phone/list.php +++ b/templates/phone/list.php @@ -41,10 +41,14 @@ ID Nom - Priorité + + Priorité + Type de téléphone Callbacks - Limites + + Limites + @@ -113,7 +117,9 @@ jQuery(document).ready(function () return html }, }, - {data: 'priority', render: jQuery.fn.dataTable.render.text()}, + + {data: 'priority', render: jQuery.fn.dataTable.render.text()}, + {data: 'adapter', render: jQuery.fn.dataTable.render.text()}, { data: '_', @@ -149,61 +155,63 @@ jQuery(document).ready(function () return html; }, }, - { - data: 'limits', - render: function (limits) { - if (!limits.length) - { - return 'Pas de limites.'; - } - - var html = ''; - for (limit of limits) - { - switch (limit.startpoint) + + { + data: 'limits', + render: function (limits) { + if (!limits.length) { - case "today" : - var startpoint = 'Par jour'; - break; - case "-24 hours" : - var startpoint = '24 heures glissantes'; - break; - case "this week midnight" : - var startpoint = 'Cette semaine'; - break; - case "-7 days" : - var startpoint = '7 jours glissants'; - break; - case "this week midnight -1 week" : - var startpoint = 'Ces deux dernières semaines'; - break; - case "-14 days" : - var startpoint = '14 jours glissants'; - break; - case "this month midnight" : - var startpoint = 'Ce mois'; - break; - case "-1 month" : - var startpoint = '1 mois glissant'; - break; - case "-28 days" : - var startpoint = '28 jours glissants'; - break; - case "-30 days" : - var startpoint = '30 jours glissants'; - break; - case "-31 days" : - var startpoint = '31 jours glissants'; - break; - default : - var startpoint = 'Inconnu' + return 'Pas de limites.'; } - html += '
' + jQuery.fn.dataTable.render.text().display(startpoint) + ' : ' + jQuery.fn.dataTable.render.text().display(limit.volume) + '
'; - } - return html; + var html = ''; + for (limit of limits) + { + switch (limit.startpoint) + { + case "today" : + var startpoint = 'Par jour'; + break; + case "-24 hours" : + var startpoint = '24 heures glissantes'; + break; + case "this week midnight" : + var startpoint = 'Cette semaine'; + break; + case "-7 days" : + var startpoint = '7 jours glissants'; + break; + case "this week midnight -1 week" : + var startpoint = 'Ces deux dernières semaines'; + break; + case "-14 days" : + var startpoint = '14 jours glissants'; + break; + case "this month midnight" : + var startpoint = 'Ce mois'; + break; + case "-1 month" : + var startpoint = '1 mois glissant'; + break; + case "-28 days" : + var startpoint = '28 jours glissants'; + break; + case "-30 days" : + var startpoint = '30 jours glissants'; + break; + case "-31 days" : + var startpoint = '31 jours glissants'; + break; + default : + var startpoint = 'Inconnu' + } + html += '
' + jQuery.fn.dataTable.render.text().display(startpoint) + ' : ' + jQuery.fn.dataTable.render.text().display(limit.volume) + '
'; + } + + return html; + }, }, - }, + { data: 'id', render: function (data, type, row, meta) { diff --git a/templates/setting/show.php b/templates/setting/show.php index afe8cff..bc64c83 100644 --- a/templates/setting/show.php +++ b/templates/setting/show.php @@ -34,26 +34,64 @@

Les réglages de RaspiSMS

-
+
-

Transfert des SMS par e-mail

+

Pays par défaut numéros internationaux

- +
- - + +
-
+
+
+ +
+
+
+

Pays préférés numéros internationaux

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Pays autorisés pour l'envoi

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +

Alphabet SMS optimisé

@@ -73,7 +111,10 @@
-
+
+ +
+

Support des MMS

@@ -92,17 +133,20 @@
+
+ +
-

Détection des URL dans les discussions

+

Support des SMS Flash

-
+
- +
@@ -111,96 +155,8 @@
-
-
-

Pays préférés numéros internationaux

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Pays autorisés pour l'envoi

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Son sur reception d'un SMS

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Alerte limite de SMS atteinte

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Affichage de l'aide

-
-
-
-
- - -
-
- -
-
-
-
-
+
+
@@ -221,79 +177,9 @@
-
-
-

Activation de Webhooks

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Pays par défaut numéros internationaux

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Support des SMS Flash

-
-
-
-
- - -
-
- -
-
-
-
-
-
-

Support des groupes conditionnels

-
-
-
-
- - -
-
- -
-
-
-
+
+ +

Support du templating

@@ -313,6 +199,141 @@
+
+ +
+
+
+

Support des groupes conditionnels

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Support des limites d'envoi par téléphones

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Support des téléphones prioritaires

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Activation de Webhooks

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Transfert des SMS par e-mail

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Alerte limite de SMS atteinte

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +

Alerte limite de SMS proche

@@ -337,6 +358,75 @@
+
+ +
+
+
+

Son sur reception d'un SMS

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Détection des URL dans les discussions

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +
+
+
+

Affichage de l'aide

+
+
+
+
+ + +
+
+ +
+
+
+
+
+ +

Cacher des menus

@@ -346,7 +436,7 @@
- +
@@ -354,7 +444,7 @@
-
+