mirror of
https://github.com/RaspbianFrance/raspisms.git
synced 2025-04-20 16:37:48 +02:00
Add transfer controller and model, remove database model and transfer responsabilities
This commit is contained in:
parent
bda1c7ddfd
commit
c6050f06aa
20 changed files with 465 additions and 219 deletions
|
@ -39,6 +39,17 @@ namespace controllers\internals;
|
|||
return $this->model_command->list($nb_entry, $nb_entry * $page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all commands.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_all()
|
||||
{
|
||||
//Recupération des commandes
|
||||
return $this->model_command->get_all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction retourne une liste des commandes sous forme d'un tableau.
|
||||
*
|
||||
|
|
|
@ -15,13 +15,20 @@ namespace controllers\internals;
|
|||
class Console extends \descartes\InternalController
|
||||
{
|
||||
private $model_command;
|
||||
private $model_database;
|
||||
private $model_sent;
|
||||
private $model_sended;
|
||||
private $model_smsstop;
|
||||
private $model_received;
|
||||
private $model_scheduled;
|
||||
private $model_user;
|
||||
private $internal_contact;
|
||||
private $internal_command;
|
||||
private $internal_database;
|
||||
private $internal_sended;
|
||||
private $internal_sms_stop;
|
||||
private $internal_received;
|
||||
private $internal_scheduled;
|
||||
private $internal_user;
|
||||
private $internal_transfer;
|
||||
|
||||
private $internal_event;
|
||||
|
||||
|
@ -30,8 +37,7 @@ class Console extends \descartes\InternalController
|
|||
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
|
||||
|
||||
$this->model_command = new \models\Command($bdd);
|
||||
$this->model_database = new \models\DataBase($bdd);
|
||||
$this->model_sent = new \models\Sent($bdd);
|
||||
$this->model_sended = new \models\Sended($bdd);
|
||||
$this->model_smsstop = new \models\SmsStop($bdd);
|
||||
$this->model_received = new \models\Received($bdd);
|
||||
$this->model_user = new \models\User($bdd);
|
||||
|
@ -80,32 +86,32 @@ class Console extends \descartes\InternalController
|
|||
$numbers = [];
|
||||
|
||||
//On récupère les numéros pour le Sms et on les ajoute
|
||||
$target_numbers = $this->model_database->get_numbers_for_scheduled($id_scheduled);
|
||||
$target_numbers = $this->internal_scheduled->get_numbers($id_scheduled);
|
||||
foreach ($target_numbers as $target_number)
|
||||
{
|
||||
$numbers[] = $target_number['number'];
|
||||
}
|
||||
|
||||
//On récupère les contacts, et on ajoute les numéros
|
||||
$contacts = $this->model_database->getContactForScheduled($id_scheduled);
|
||||
$contacts = $this->internal_scheduled->get_contacts($id_scheduled);
|
||||
foreach ($contacts as $contact)
|
||||
{
|
||||
$numbers[] = $contact['number'];
|
||||
}
|
||||
|
||||
//On récupère les groups
|
||||
$groups = $this->model_database->get_groups_for_scheduled($id_scheduled);
|
||||
$groups = $this->internal_scheduled->get_groups($id_scheduled);
|
||||
foreach ($groups as $group)
|
||||
{
|
||||
//On récupère les contacts du group et on les ajoute aux numéros
|
||||
$contacts = $this->model_database->get_by_group($group['id']);
|
||||
$contacts = $this->internal_contact->get_by_group($group['id']);
|
||||
foreach ($contacts as $contact)
|
||||
{
|
||||
$numbers[] = $contact['number'];
|
||||
}
|
||||
}
|
||||
|
||||
$smsStops = $this->model_smsstop->_select('smsstop');
|
||||
$smsStops = $this->internal_sms_stop->get_all();
|
||||
|
||||
foreach ($numbers as $number)
|
||||
{
|
||||
|
@ -132,7 +138,7 @@ class Console extends \descartes\InternalController
|
|||
$now = $now->format('Y-m-d H:i:s');
|
||||
|
||||
//On peut maintenant ajouter le Sms
|
||||
if (!$id_sended = $this->model_sent->insert(['at' => $now, 'target' => $number, 'content' => $scheduled['content'], 'before_delivered' => ceil(mb_strlen($scheduled['content']) / 160)]))
|
||||
if (!$id_sended = $this->model_sended->insert(['at' => $now, 'target' => $number, 'content' => $scheduled['content'], 'before_delivered' => ceil(mb_strlen($scheduled['content']) / 160)]))
|
||||
{
|
||||
echo 'Impossible d\'inserer le sms pour le numero '.$number."\n";
|
||||
}
|
||||
|
@ -238,7 +244,7 @@ class Console extends \descartes\InternalController
|
|||
$interval = new \DateInterval('PT12H');
|
||||
$sinceDate = $now->sub($interval)->format('Y-m-d H:i:s');
|
||||
|
||||
if (!$sendeds = $this->model_sent->_select('sendeds', ['target' => $number, 'delivered' => false, 'failed' => false, '>at' => $sinceDate], 'at', false, 1))
|
||||
if (!$sendeds = $this->model_sended->_select('sendeds', ['target' => $number, 'delivered' => false, 'failed' => false, '>at' => $sinceDate], 'at', false, 1))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -248,8 +254,8 @@ class Console extends \descartes\InternalController
|
|||
//On gère les echecs
|
||||
if ('Failed' === trim($text))
|
||||
{
|
||||
$this->model_sent->update($sended['id'], ['before_delivered' => 0, 'failed' => true]);
|
||||
echo 'Sent Sms id '.$sended['id']." pass to failed status\n";
|
||||
$this->model_sended->update($sended['id'], ['before_delivered' => 0, 'failed' => true]);
|
||||
echo 'Sended Sms id '.$sended['id']." pass to failed status\n";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -257,15 +263,15 @@ class Console extends \descartes\InternalController
|
|||
//On gère le cas des messages de plus de 160 caractères, lesquels impliquent plusieurs accusés
|
||||
if ($sended['before_delivered'] > 1)
|
||||
{
|
||||
$this->model_database->update($sended['id'], ['before_delivered' => $sended['before_delivered'] - 1]);
|
||||
echo 'Sent Sms id '.$sended['id']." before_delivered decrement\n";
|
||||
$this->internal_sended->decrement_before_delivered($sended['id']);
|
||||
echo 'Sended Sms id '.$sended['id']." before_delivered decrement\n";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
//Si tout est bon, que nous avons assez d'accusés, nous validons !
|
||||
$this->model_database->update($sended['id'], ['before_delivered' => 0, 'delivered' => true]);
|
||||
echo 'Sent Sms id '.$sended['id']." to delivered status\n";
|
||||
$this->internal_sended->set_delivered($sended['id']);
|
||||
echo 'Sended Sms id '.$sended['id']." to delivered status\n";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -280,20 +286,20 @@ class Console extends \descartes\InternalController
|
|||
$flags = \controllers\internals\Tool::parse_for_flag($text);
|
||||
|
||||
//On créer le tableau qui permettra de stocker les commandes trouvées
|
||||
|
||||
$found_commands = [];
|
||||
|
||||
//Si on reçu des identifiants
|
||||
if (\array_key_exists('LOGIN', $flags) && \array_key_exists('PASSWORD', $flags))
|
||||
{
|
||||
//Si on a bien un utilisateur avec les identifiants reçus
|
||||
$user = $this->model_database->get_user_from_email($flags['LOGIN']);
|
||||
$user = $this->internal_user->check_credentials($flags['LOGIN'], $flags['PASSWORD']);
|
||||
|
||||
error_log('We found '.\count($user).' users');
|
||||
if ($user && $user['password'] === sha1($flags['PASSWORD']))
|
||||
if ($user)
|
||||
{
|
||||
error_log('Password is valid');
|
||||
|
||||
//On va passer en revue toutes les commandes, pour voir si on en trouve dans ce message
|
||||
$commands = $this->model_database->_select('commands');
|
||||
$commands = $this->internal_command->get_all();
|
||||
|
||||
error_log('We found '.\count($commands).' commands');
|
||||
foreach ($commands as $command)
|
||||
|
@ -324,7 +330,7 @@ class Console extends \descartes\InternalController
|
|||
$send_by = $number;
|
||||
$content = $text;
|
||||
$is_command = \count($found_commands);
|
||||
if (!$this->model_received->insert(['at' => $date, 'send_by' => $send_by, 'content' => $content, 'is_command' => $is_command]))
|
||||
if ($id_received = $this->internal_received->create($date, $send_by, $content, $is_command))
|
||||
{
|
||||
echo "Erreur lors de l'enregistrement du Sms\n";
|
||||
error_log('Unable to process the Sms in file "'.$dir);
|
||||
|
@ -332,7 +338,7 @@ class Console extends \descartes\InternalController
|
|||
}
|
||||
|
||||
//On insert le Sms dans le tableau des sms à envoyer par mail
|
||||
$this->model_database->_insert('transfers', ['id_received' => $this->model_database->lastId(), 'progress' => false]);
|
||||
$this->internal_transfer->create($id_received);
|
||||
|
||||
//Chaque commande sera executée.
|
||||
foreach ($found_commands as $command_name => $command)
|
||||
|
@ -359,37 +365,32 @@ class Console extends \descartes\InternalController
|
|||
return false;
|
||||
}
|
||||
|
||||
$transfers = $this->model_database->_select('transfers', ['progress' => false]);
|
||||
$users = $this->internal_user->gets_by_transfer(true);
|
||||
$transfers = $this->internal_transfer->get_not_in_progress();
|
||||
|
||||
$ids_transfers = [];
|
||||
$ids_receiveds = [];
|
||||
foreach ($transfers as $transfer)
|
||||
{
|
||||
$ids_transfers[] = $transfer['id'];
|
||||
$ids_receiveds[] = $transfer['id_received'];
|
||||
}
|
||||
$this->internal_transfer->update($transfer['id'], $transfer['id_received'], true);
|
||||
|
||||
$this->model_database->update_progress_transfers_in($ids_transfers, true);
|
||||
$received = $this->internal_received->get($transfer['id_received']);
|
||||
if (!$received)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$receiveds = $this->model_received->gets($ids_receiveds);
|
||||
|
||||
$users = $this->model_user->_select('users', ['transfer' => true]);
|
||||
|
||||
foreach ($users as $user)
|
||||
{
|
||||
foreach ($receiveds as $received)
|
||||
foreach ($users as $user)
|
||||
{
|
||||
echo "Transfer d'un Sms du ".$received['send_by']." à l'email ".$user['email'];
|
||||
|
||||
$to = $user['email'];
|
||||
$subject = '[RaspiSms] - Transfert d\'un Sms du '.$received['send_by'];
|
||||
$message = 'Le numéro '.$received['send_by']." vous a envoyé un Sms : \n".$received['content'];
|
||||
|
||||
$ok = mail($to, $subject, $message);
|
||||
|
||||
echo ' ... '.($ok ? 'OK' : 'KO')."\n";
|
||||
$success = mail($to, $subject, $message);
|
||||
echo ' ... '.($success ? 'ok' : 'ko')."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_database->delete_transfers_in($ids_transfers);
|
||||
$this->internal_transfer->delete($transfer['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,10 +182,10 @@ namespace controllers\internals;
|
|||
*
|
||||
* @return array : La liste des scheduledes
|
||||
*/
|
||||
public function get_number($id_scheduled)
|
||||
public function get_numbers($id_scheduled)
|
||||
{
|
||||
//Recupération des scheduledes
|
||||
return $this->model_scheduled->get_number($id_scheduled);
|
||||
return $this->model_scheduled->get_numbers($id_scheduled);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -195,10 +195,10 @@ namespace controllers\internals;
|
|||
*
|
||||
* @return array : La liste des contact
|
||||
*/
|
||||
public function get_contact($id_scheduled)
|
||||
public function get_contacts($id_scheduled)
|
||||
{
|
||||
//Recupération des scheduledes
|
||||
return $this->model_scheduled->get_contact($id_scheduled);
|
||||
return $this->model_scheduled->get_contacts($id_scheduled);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -208,10 +208,10 @@ namespace controllers\internals;
|
|||
*
|
||||
* @return array : La liste des group
|
||||
*/
|
||||
public function get_group($id_scheduled)
|
||||
public function get_groups($id_scheduled)
|
||||
{
|
||||
//Recupération des scheduledes
|
||||
return $this->model_scheduled->get_group($id_scheduled);
|
||||
return $this->model_scheduled->get_groups($id_scheduled);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,13 +15,13 @@ namespace controllers\internals;
|
|||
/**
|
||||
* Classe des sendedes.
|
||||
*/
|
||||
class Sent extends \descartes\InternalController
|
||||
class Sended extends \descartes\InternalController
|
||||
{
|
||||
private $model_sent;
|
||||
private $model_sended;
|
||||
|
||||
public function __construct(\PDO $bdd)
|
||||
{
|
||||
$this->model_sent = new \models\Sent($bdd);
|
||||
$this->model_sended = new \models\Sended($bdd);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -35,7 +35,7 @@ namespace controllers\internals;
|
|||
public function list($nb_entry = false, $page = false)
|
||||
{
|
||||
//Recupération des sendedes
|
||||
return $this->model_sent->list($nb_entry, $nb_entry * $page);
|
||||
return $this->model_sended->list($nb_entry, $nb_entry * $page);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ namespace controllers\internals;
|
|||
public function gets($ids)
|
||||
{
|
||||
//Recupération des sendedes
|
||||
return $this->model_sent->gets($ids);
|
||||
return $this->model_sended->gets($ids);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -60,7 +60,7 @@ namespace controllers\internals;
|
|||
*/
|
||||
public function get_lasts_by_date($nb_entry = false)
|
||||
{
|
||||
return $this->model_sent->get_lasts_by_date($nb_entry);
|
||||
return $this->model_sended->get_lasts_by_date($nb_entry);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,7 +73,7 @@ namespace controllers\internals;
|
|||
public function get_by_target($target)
|
||||
{
|
||||
//Recupération des sendeds
|
||||
return $this->model_sent->get_by_target($target);
|
||||
return $this->model_sended->get_by_target($target);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,7 +86,7 @@ namespace controllers\internals;
|
|||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
return $this->model_sent->delete($id);
|
||||
return $this->model_sended->delete($id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -98,7 +98,7 @@ namespace controllers\internals;
|
|||
*/
|
||||
public function create($sended)
|
||||
{
|
||||
return $this->model_sent->create($sended);
|
||||
return $this->model_sended->create($sended);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -108,7 +108,7 @@ namespace controllers\internals;
|
|||
*/
|
||||
public function count()
|
||||
{
|
||||
return $this->model_sent->count();
|
||||
return $this->model_sended->count();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -120,7 +120,7 @@ namespace controllers\internals;
|
|||
*/
|
||||
public function count_by_day_since($date)
|
||||
{
|
||||
$counts_by_day = $this->model_sent->count_by_day_since($date);
|
||||
$counts_by_day = $this->model_sended->count_by_day_since($date);
|
||||
$return = [];
|
||||
|
||||
foreach ($counts_by_day as $count_by_day)
|
||||
|
@ -130,4 +130,28 @@ namespace controllers\internals;
|
|||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrement before delivered.
|
||||
*
|
||||
* @param int $id_sended : id of the sended to decrement delivered for
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function decrement_before_delivered($id_sended)
|
||||
{
|
||||
return $this->model_sended->decrement_before_delivered($id_sended);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update sended to delivered.
|
||||
*
|
||||
* @param int $id_sended : id of the sended to mark as delivered
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function set_delivered($id_sended)
|
||||
{
|
||||
return $this->model_sended->update($id_sended, ['before_delivered' => 0, 'delivered' => true]);
|
||||
}
|
||||
}
|
|
@ -24,6 +24,16 @@ namespace controllers\internals;
|
|||
$this->model_sms_stop = new \models\SmsStop($bdd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all smsstops.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_all()
|
||||
{
|
||||
return $this->model_sms_stop->get_all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction retourne une liste des smsstopes sous forme d'un tableau.
|
||||
*
|
||||
|
|
141
controllers/internals/Transfer.php
Executable file
141
controllers/internals/Transfer.php
Executable file
|
@ -0,0 +1,141 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of PHP CS Fixer.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace controllers\internals;
|
||||
|
||||
/**
|
||||
* Classe des transfers.
|
||||
*/
|
||||
class Transfer extends \descartes\InternalController
|
||||
{
|
||||
private $model_transfer;
|
||||
private $internal_event;
|
||||
|
||||
public function __construct(\PDO $bdd)
|
||||
{
|
||||
$this->model_transfer = new \models\Transfer($bdd);
|
||||
$this->internal_event = new \controllers\internals\Event($bdd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of transfers as an array.
|
||||
*
|
||||
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page
|
||||
* @param mixed(int|bool) $page : Le numéro de page en cours
|
||||
*
|
||||
* @return array : La liste des transfers
|
||||
*/
|
||||
public function list($nb_entry = false, $page = false)
|
||||
{
|
||||
return $this->model_transfer->list($nb_entry, $nb_entry * $page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all transfers.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_all()
|
||||
{
|
||||
//Recupération des transfers
|
||||
return $this->model_transfer->get_all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get transfers not in progress.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_not_in_progress()
|
||||
{
|
||||
return $this->model_transfer->get_not_in_progress();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction retourne une liste des transfers sous forme d'un tableau.
|
||||
*
|
||||
* @param array int $ids : Les ids des entrées à retourner
|
||||
*
|
||||
* @return array : La liste des transfers
|
||||
*/
|
||||
public function gets($ids)
|
||||
{
|
||||
//Recupération des transfers
|
||||
return $this->model_transfer->gets($ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction permet de compter le nombre de scheduleds.
|
||||
*
|
||||
* @return int : Le nombre d'entrées dans la table
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return $this->model_transfer->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction va supprimer un transfer.
|
||||
*
|
||||
* @param array $id : L'id de la transfer à supprimer
|
||||
*
|
||||
* @return int : Le nombre de transfers supprimées;
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
return $this->model_transfer->delete($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function insert a new transfer.
|
||||
*
|
||||
* @param int $id_received : Id of the received message to transfer
|
||||
* @param bool $progress : If we must mark it as in progress
|
||||
*
|
||||
* @return int id of the new inserted transfer
|
||||
*/
|
||||
public function create($id_received, $progress = false)
|
||||
{
|
||||
$transfer = [
|
||||
'id_received' => $id_received,
|
||||
'progress' => $progress,
|
||||
];
|
||||
|
||||
$result = $this->model_transfer->insert($transfer);
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction met à jour un transfer.
|
||||
*
|
||||
* @param int $id
|
||||
* @param int $id_received
|
||||
* @param bool $progress
|
||||
*
|
||||
* @return int : le nombre de ligne modifiées
|
||||
*/
|
||||
public function update($id, $id_received, $progress)
|
||||
{
|
||||
$transfer = [
|
||||
'id_received' => $id_received,
|
||||
'progress' => $progress,
|
||||
];
|
||||
|
||||
return $this->model_transfer->update($id, $transfer);
|
||||
}
|
||||
}
|
|
@ -126,6 +126,16 @@ namespace controllers\internals;
|
|||
return $this->model_user->get_by_email($email);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return users by transfer status.
|
||||
*
|
||||
* @param bool $transfer : transfer status
|
||||
*/
|
||||
public function gets_by_transfer($transfer)
|
||||
{
|
||||
return $this->model_user->get_by_transfer($transfer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cette fonction met à jour une série de users.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue