Update sending functions to correctly use phone limits and priority
This commit is contained in:
parent
9b7907ad18
commit
715afd79ec
|
@ -552,6 +552,7 @@ use Monolog\Logger;
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Pass on all targets to deduplicate destinations, remove number in sms stops, etc.
|
// Pass on all targets to deduplicate destinations, remove number in sms stops, etc.
|
||||||
$used_destinations = [];
|
$used_destinations = [];
|
||||||
foreach ($targets as $key => $target)
|
foreach ($targets as $key => $target)
|
||||||
|
@ -603,7 +604,7 @@ use Monolog\Logger;
|
||||||
Choose phone if no phone defined for message
|
Choose phone if no phone defined for message
|
||||||
Phones are choosen using type, priority and remaining volume :
|
Phones are choosen using type, priority and remaining volume :
|
||||||
1 - If sms is a mms, try to use mms phone if any available. If mms phone available use mms phone, else use default.
|
1 - If sms is a mms, try to use mms phone if any available. If mms phone available use mms phone, else use default.
|
||||||
2 - In group of phones, keep only phones with remaining volume. If no phones with remaining volume, keep all.
|
2 - In group of phones, keep only phones with remaining volume. If no phones with remaining volume, use all phones instead.
|
||||||
3 - Groupe keeped phones by priority get group with biggest priority.
|
3 - Groupe keeped phones by priority get group with biggest priority.
|
||||||
4 - Get a random phone in this group.
|
4 - Get a random phone in this group.
|
||||||
5 - If their is no phone matching, keep phone at null so sender will directly mark it as failed
|
5 - If their is no phone matching, keep phone at null so sender will directly mark it as failed
|
||||||
|
@ -612,14 +613,15 @@ use Monolog\Logger;
|
||||||
if (null === $phone_to_use)
|
if (null === $phone_to_use)
|
||||||
{
|
{
|
||||||
$phones_subset = $users_phones[$id_user];
|
$phones_subset = $users_phones[$id_user];
|
||||||
if ($scheduled['mms'] && count($users_mms_phones[$id_user]))
|
if ($scheduled['mms'])
|
||||||
{
|
{
|
||||||
$phones_subset = $users_mms_phones[$id_user];
|
$phones_subset = $users_mms_phones[$id_user] ?: $phones_subset;
|
||||||
}
|
}
|
||||||
|
|
||||||
$phones_subset = array_filter($phones_subset, function ($phone) {
|
$remaining_volume_phones = array_filter($phones_subset, function ($phone) {
|
||||||
return $phone['remaining_volume'] > 0;
|
return $phone['remaining_volume'] > 0;
|
||||||
});
|
});
|
||||||
|
$phones_subset = $remaining_volume_phones ?: $phones_subset;
|
||||||
|
|
||||||
$max_priority_phones = [];
|
$max_priority_phones = [];
|
||||||
$max_priority = PHP_INT_MIN;
|
$max_priority = PHP_INT_MIN;
|
||||||
|
@ -640,14 +642,20 @@ use Monolog\Logger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($max_priority_phones)
|
$phones_subset = $max_priority_phones;
|
||||||
|
if ($phones_subset)
|
||||||
{
|
{
|
||||||
$phones_subset = $max_priority_phones;
|
|
||||||
$random_phone = $phones_subset[array_rand($phones_subset)];
|
$random_phone = $phones_subset[array_rand($phones_subset)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This should only happen if the user try to send a message without any phone in his account, then we simply ignore.
|
||||||
|
if (!$random_phone && !$phone_to_use)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$id_phone = $phone_to_use['id'] ?? $random_phone['id'] ?? null;
|
$id_phone = $phone_to_use['id'] ?? $random_phone['id'];
|
||||||
$sms_per_scheduled[$id_scheduled][] = [
|
$sms_per_scheduled[$id_scheduled][] = [
|
||||||
'id_user' => $id_user,
|
'id_user' => $id_user,
|
||||||
'id_scheduled' => $id_scheduled,
|
'id_scheduled' => $id_scheduled,
|
||||||
|
@ -659,14 +667,11 @@ use Monolog\Logger;
|
||||||
'text' => $text,
|
'text' => $text,
|
||||||
];
|
];
|
||||||
|
|
||||||
// If we found a matching phone, consume one sms from remaining volume, dont forget mms phone
|
// Consume one sms from remaining volume of phone, dont forget to do the same for the entry in mms phones
|
||||||
if ($id_phone)
|
$users_phones[$id_user][$id_phone]['remaining_volume'] --;
|
||||||
|
if ($users_mms_phones[$id_user][$id_phone] ?? false)
|
||||||
{
|
{
|
||||||
$users_phones[$id_user][$id_phone]['remaining_volume'] --;
|
$users_mms_phones[$id_user][$id_phone] --;
|
||||||
if ($users_mms_phones[$id_user][$id_phone] ?? false)
|
|
||||||
{
|
|
||||||
$users_mms_phones[$id_user][$id_phone] --;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,6 +179,20 @@ namespace controllers\internals;
|
||||||
return $this->get_model()->get_by_uid_and_adapter_for_user($id_user, $uid, $adapter);
|
return $this->get_model()->get_by_uid_and_adapter_for_user($id_user, $uid, $adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get number of sended SMS since a date for a phone
|
||||||
|
*
|
||||||
|
* @param int $id_user : User id
|
||||||
|
* @param int $id_phone : Phone id we want the number of sended message for
|
||||||
|
* @param \DateTime $since : Date since which we want sended number
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function count_since_for_phone_and_user(int $id_user, int $id_phone, \DateTime $since): int
|
||||||
|
{
|
||||||
|
return $this->get_model()->count_since_for_phone_and_user($id_user, $id_phone, $since);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get number of sended SMS for every date since a date for a specific user.
|
* Get number of sended SMS for every date since a date for a specific user.
|
||||||
*
|
*
|
||||||
|
|
|
@ -22,6 +22,7 @@ class Sender extends AbstractDaemon
|
||||||
private $internal_phone;
|
private $internal_phone;
|
||||||
private $internal_scheduled;
|
private $internal_scheduled;
|
||||||
private $internal_received;
|
private $internal_received;
|
||||||
|
private $internal_sended;
|
||||||
private $bdd;
|
private $bdd;
|
||||||
private $msg_queue;
|
private $msg_queue;
|
||||||
|
|
||||||
|
@ -45,6 +46,7 @@ class Sender extends AbstractDaemon
|
||||||
{
|
{
|
||||||
//Create the internal controllers
|
//Create the internal controllers
|
||||||
$this->internal_scheduled = new \controllers\internals\Scheduled($this->bdd);
|
$this->internal_scheduled = new \controllers\internals\Scheduled($this->bdd);
|
||||||
|
$this->internal_sended = new \controllers\internals\Sended($this->bdd);
|
||||||
|
|
||||||
//Get smss and transmit order to send to appropriate phone daemon
|
//Get smss and transmit order to send to appropriate phone daemon
|
||||||
$smss_per_scheduled = $this->internal_scheduled->get_smss_to_send();
|
$smss_per_scheduled = $this->internal_scheduled->get_smss_to_send();
|
||||||
|
@ -62,8 +64,8 @@ class Sender extends AbstractDaemon
|
||||||
{
|
{
|
||||||
foreach ($smss_per_scheduled as $id_scheduled => $smss)
|
foreach ($smss_per_scheduled as $id_scheduled => $smss)
|
||||||
{
|
{
|
||||||
//If queue not already exists
|
//If queue not already exists
|
||||||
if (!msg_queue_exists(QUEUE_ID_PHONE) || !isset($this->queue))
|
if (!msg_queue_exists(QUEUE_ID_PHONE) || !isset($this->msg_queue))
|
||||||
{
|
{
|
||||||
$this->msg_queue = msg_get_queue(QUEUE_ID_PHONE);
|
$this->msg_queue = msg_get_queue(QUEUE_ID_PHONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,20 @@ namespace models;
|
||||||
return $this->_select_one('sended', ['id_user' => $id_user, 'uid' => $uid, 'adapter' => $adapter]);
|
return $this->_select_one('sended', ['id_user' => $id_user, 'uid' => $uid, 'adapter' => $adapter]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get number of sended SMS since a date for a phone
|
||||||
|
*
|
||||||
|
* @param int $id_user : User id
|
||||||
|
* @param int $id_phone : Phone id we want the number of sended message for
|
||||||
|
* @param \DateTime $since : Date since which we want sended number
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function count_since_for_phone_and_user(int $id_user, int $id_phone, \DateTime $since) : int
|
||||||
|
{
|
||||||
|
return $this->_count('sended', ['id_user' => $id_user, 'id_phone' => $id_phone, '>=at' => $since]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get number of sended SMS for every date since a date for a specific user.
|
* Get number of sended SMS for every date since a date for a specific user.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue