few coderules changes

This commit is contained in:
osaajani 2019-10-29 18:36:25 +01:00
parent 80b6a3ed86
commit 117c18ddca
28 changed files with 1485 additions and 1666 deletions

View File

@ -1,40 +1,41 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des commandes /**
*/ * Classe des commandes
class Command extends \InternalController */
{ class Command extends \descartes\InternalController
{
private $model_command; private $model_command;
public function __construct (\PDO $bdd) public function __construct(\PDO $bdd)
{ {
$this->model_command = new \models\Command($bdd); $this->model_command = new \models\Command($bdd);
$this->internal_event = new \controllers\internals\Event($bdd); $this->internal_event = new \controllers\internals\Event($bdd);
} }
/** /**
* Return the list of commands as an array * Return the list of commands as an array
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des commandes * @return array : La liste des commandes
*/ */
public function list ($nb_entry = false, $page = false) public function list($nb_entry = false, $page = false)
{ {
//Recupération des commandes //Recupération des commandes
$model_command = new \models\Command($this->bdd); $model_command = new \models\Command($this->bdd);
return $model_command->list($nb_entry, $nb_entry * $page); return $model_command->list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des commandes sous forme d'un tableau * Cette fonction retourne une liste des commandes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des commandes * @return array : La liste des commandes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des commandes //Recupération des commandes
$modelCommand = new \models\Command($this->bdd); $modelCommand = new \models\Command($this->bdd);
return $modelCommand->get_by_ids($ids); return $modelCommand->get_by_ids($ids);
} }
@ -43,29 +44,29 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de scheduleds * Cette fonction permet de compter le nombre de scheduleds
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelCommand = new \models\Command($this->bdd); $modelCommand = new \models\Command($this->bdd);
return $modelCommand->count(); return $modelCommand->count();
} }
/** /**
* Cette fonction va supprimer une commande * Cette fonction va supprimer une commande
* @param array $id : L'id de la commande à supprimer * @param array $id : L'id de la commande à supprimer
* @return int : Le nombre de commandes supprimées; * @return int : Le nombre de commandes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelCommand = new \models\Command($this->bdd); $modelCommand = new \models\Command($this->bdd);
return $modelCommand->delete_by_id($id); return $modelCommand->delete_by_id($id);
} }
/** /**
* Cette fonction insert une nouvelle commande * Cette fonction insert une nouvelle commande
* @param array $command : La commande à insérer * @param array $command : La commande à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle commande insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle commande insérée
*/ */
public function create ($name, $script, $admin) public function create($name, $script, $admin)
{ {
$command = [ $command = [
'name' => $name, 'name' => $name,
@ -76,21 +77,20 @@ namespace controllers\internals;
$modelCommand = new \models\Command($this->bdd); $modelCommand = new \models\Command($this->bdd);
$result = $modelCommand->insert($command); $result = $modelCommand->insert($command);
if (!$result) if (!$result) {
{
return false; return false;
} }
$internalEvent = new \controllers\internals\Event($this->bdd); $internalEvent = new \controllers\internals\Event($this->bdd);
$internalEvent->create('COMMAND_ADD', 'Ajout commande : ' . $name . ' => ' . $script); $internalEvent->create('COMMAND_ADD', 'Ajout commande : ' . $name . ' => ' . $script);
return $result; return $result;
} }
/** /**
* Cette fonction met à jour un commande * Cette fonction met à jour un commande
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($id, $name, $script, $admin) public function update($id, $name, $script, $admin)
{ {
$modelCommand = new \models\Command($this->bdd); $modelCommand = new \models\Command($this->bdd);
@ -104,4 +104,4 @@ namespace controllers\internals;
return $result; return $result;
} }
} }

View File

@ -1,6 +1,7 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
class Console extends \InternalController
class Console extends \descartes\InternalController
{ {
/** /**
@ -32,35 +33,26 @@ class Console extends \InternalController
$message .= "Voici la liste des commandes disponibles : \n"; $message .= "Voici la liste des commandes disponibles : \n";
//On écrit les texte pour la liste des commandes dispos //On écrit les texte pour la liste des commandes dispos
foreach ($commands as $name => $value) foreach ($commands as $name => $value) {
{
$requireds = isset($value['requireds']) ? $value['requireds'] : array(); $requireds = isset($value['requireds']) ? $value['requireds'] : array();
$optionals = isset($value['optionals']) ? $value['optionals'] : array(); $optionals = isset($value['optionals']) ? $value['optionals'] : array();
$message .= ' ' . $name . ' : ' . $value['description'] . "\n"; $message .= ' ' . $name . ' : ' . $value['description'] . "\n";
$message .= " Arguments obligatoires : \n"; $message .= " Arguments obligatoires : \n";
if (!count($requireds)) if (!count($requireds)) {
{
$message .= " Pas d'argument\n"; $message .= " Pas d'argument\n";
} } else {
else foreach ($requireds as $argument => $desc) {
{
foreach ($requireds as $argument => $desc)
{
$message .= ' - ' . $argument . ' : ' . $desc . "\n"; $message .= ' - ' . $argument . ' : ' . $desc . "\n";
} }
} }
$message .= " Arguments optionnels : \n"; $message .= " Arguments optionnels : \n";
if (!count($optionals)) if (!count($optionals)) {
{
$message .= " Pas d'argument\n"; $message .= " Pas d'argument\n";
} } else {
else foreach ($optionals as $argument => $desc) {
{
foreach ($optionals as $argument => $desc)
{
$message .= ' - ' . $argument . ' : ' . $desc . "\n"; $message .= ' - ' . $argument . ' : ' . $desc . "\n";
} }
} }
@ -77,8 +69,7 @@ class Console extends \InternalController
//On créé l'objet de base de données //On créé l'objet de base de données
global $db; global $db;
for ($i = 0; $i < 30; $i++) for ($i = 0; $i < 30; $i++) {
{
$now = new \DateTime(); $now = new \DateTime();
$now = $now->format('Y-m-d H:i:s'); $now = $now->format('Y-m-d H:i:s');
@ -89,8 +80,7 @@ class Console extends \InternalController
$ids_scheduleds = array(); $ids_scheduleds = array();
//On passe en cours de progression tous les SMS //On passe en cours de progression tous les SMS
foreach ($scheduleds as $scheduled) foreach ($scheduleds as $scheduled) {
{
$ids_scheduleds[] = $scheduled['id']; $ids_scheduleds[] = $scheduled['id'];
} }
@ -99,8 +89,7 @@ class Console extends \InternalController
$db->updateProgressScheduledIn($ids_scheduleds, true); $db->updateProgressScheduledIn($ids_scheduleds, true);
//Pour chaque SMS à envoyer //Pour chaque SMS à envoyer
foreach ($scheduleds as $scheduled) foreach ($scheduleds as $scheduled) {
{
$id_scheduled = $scheduled['id']; $id_scheduled = $scheduled['id'];
$text_sms = escapeshellarg($scheduled['content']); $text_sms = escapeshellarg($scheduled['content']);
$flash = $scheduled['flash']; $flash = $scheduled['flash'];
@ -110,41 +99,33 @@ class Console extends \InternalController
//On récupère les numéros pour le SMS et on les ajoute //On récupère les numéros pour le SMS et on les ajoute
$target_numbers = $db->getNumbersForScheduled($id_scheduled); $target_numbers = $db->getNumbersForScheduled($id_scheduled);
foreach ($target_numbers as $target_number) foreach ($target_numbers as $target_number) {
{
$numbers[] = $target_number['number']; $numbers[] = $target_number['number'];
} }
//On récupère les contacts, et on ajoute les numéros //On récupère les contacts, et on ajoute les numéros
$contacts = $db->getContactForScheduled($id_scheduled); $contacts = $db->getContactForScheduled($id_scheduled);
foreach ($contacts as $contact) foreach ($contacts as $contact) {
{
$numbers[] = $contact['number']; $numbers[] = $contact['number'];
} }
//On récupère les groupes //On récupère les groupes
$groupes = $db->getGroupeForScheduled($id_scheduled); $groupes = $db->getGroupeForScheduled($id_scheduled);
foreach ($groupes as $groupe) foreach ($groupes as $groupe) {
{
//On récupère les contacts du groupe et on les ajoute aux numéros //On récupère les contacts du groupe et on les ajoute aux numéros
$contacts = $db->getContactForGroupe($groupe['id']); $contacts = $db->getContactForGroupe($groupe['id']);
foreach ($contacts as $contact) foreach ($contacts as $contact) {
{
$numbers[] = $contact['number']; $numbers[] = $contact['number'];
} }
} }
$smsStops = $db->getFromTableWhere('smsstop'); $smsStops = $db->getFromTableWhere('smsstop');
foreach ($numbers as $number) foreach ($numbers as $number) {
{
//Si les SMS STOP sont activés, on passe au numéro suivant si le numéro actuelle fait parti des SMS STOP //Si les SMS STOP sont activés, on passe au numéro suivant si le numéro actuelle fait parti des SMS STOP
if (RASPISMS_SETTINGS_SMSSTOPS) if (RASPISMS_SETTINGS_SMSSTOPS) {
{ foreach ($smsStops as $smsStop) {
foreach ($smsStops as $smsStop) if (!($number == $smsStop['number'])) {
{
if (!($number == $smsStop['number']))
{
continue; continue;
} }
@ -160,8 +141,7 @@ class Console extends \InternalController
$now = $now->format('Y-m-d H:i:s'); $now = $now->format('Y-m-d H:i:s');
//On peut maintenant ajouter le SMS //On peut maintenant ajouter le SMS
if (!$db->insertIntoTable('sendeds', ['at' => $now, 'target' => $number, 'content' => $scheduled['content'], 'before_delivered' => ceil(mb_strlen($scheduled['content'])/160)])) if (!$db->insertIntoTable('sendeds', ['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"; echo 'Impossible d\'inserer le sms pour le numero ' . $number . "\n";
} }
@ -170,8 +150,7 @@ class Console extends \InternalController
//Commande qui envoie le SMS //Commande qui envoie le SMS
$commande_send_sms = 'gammu-smsd-inject TEXT ' . escapeshellarg($number) . ' -report -len ' . mb_strlen($text_sms) . ' -text ' . $text_sms; $commande_send_sms = 'gammu-smsd-inject TEXT ' . escapeshellarg($number) . ' -report -len ' . mb_strlen($text_sms) . ' -text ' . $text_sms;
if (RASPISMS_SETTINGS_SMS_FLASH && $flash) if (RASPISMS_SETTINGS_SMS_FLASH && $flash) {
{
$commande_send_sms .= ' -flash'; $commande_send_sms .= ' -flash';
} }
@ -184,7 +163,7 @@ class Console extends \InternalController
} }
echo "Tous les SMS sont en cours d'envoi.\n"; echo "Tous les SMS sont en cours d'envoi.\n";
//Tous les SMS ont été envoyés. //Tous les SMS ont été envoyés.
$db->deleteScheduledIn($ids_scheduleds); $db->deleteScheduledIn($ids_scheduleds);
//On dors 2 secondes //On dors 2 secondes
@ -200,15 +179,12 @@ class Console extends \InternalController
//On créer l'objet de base de données //On créer l'objet de base de données
global $db; global $db;
for ($i = 0; $i < 30; $i++) for ($i = 0; $i < 30; $i++) {
{ foreach (scandir(PWD_RECEIVEDS) as $dir) {
foreach (scandir(PWD_RECEIVEDS) as $dir)
{
//Si le fichier est un fichier système, on passe à l'itération suivante //Si le fichier est un fichier système, on passe à l'itération suivante
if ($dir == '.' || $dir == '..' || $dir == '.tokeep') if ($dir == '.' || $dir == '..' || $dir == '.tokeep') {
{
continue; continue;
} }
echo "Analyse du SMS " . $dir . "\n"; echo "Analyse du SMS " . $dir . "\n";
@ -220,15 +196,13 @@ class Console extends \InternalController
$content_file = file_get_contents(PWD_RECEIVEDS . $dir); $content_file = file_get_contents(PWD_RECEIVEDS . $dir);
//Si on peux pas ouvrir le fichier, on quitte en logant une erreur //Si on peux pas ouvrir le fichier, on quitte en logant une erreur
if ($content_file == false) if ($content_file == false) {
{
$this->wlog('Unable to read file "' . $dir); $this->wlog('Unable to read file "' . $dir);
die(4); die(4);
} }
//On supprime le fichier. Si on n'y arrive pas, alors on log //On supprime le fichier. Si on n'y arrive pas, alors on log
if (!unlink(PWD_RECEIVEDS . $dir)) if (!unlink(PWD_RECEIVEDS . $dir)) {
{
$this->wlog('Unable to delete file "' . $dir); $this->wlog('Unable to delete file "' . $dir);
die(8); die(8);
} }
@ -236,8 +210,7 @@ class Console extends \InternalController
$content_file = explode(':', $content_file, 2); $content_file = explode(':', $content_file, 2);
//Si on a pas passé de numéro ou de message, alors on lève une erreur //Si on a pas passé de numéro ou de message, alors on lève une erreur
if (!isset($content_file[0], $content_file[1])) if (!isset($content_file[0], $content_file[1])) {
{
$this->wlog('Missing params in file "' . $dir); $this->wlog('Missing params in file "' . $dir);
die(5); die(5);
} }
@ -247,8 +220,7 @@ class Console extends \InternalController
$text = $content_file[1]; $text = $content_file[1];
//On gère les SMS STOP //On gère les SMS STOP
if (trim($text) == 'STOP') if (trim($text) == 'STOP') {
{
echo 'STOP SMS detected ' . $number . "\n"; echo 'STOP SMS detected ' . $number . "\n";
$this->wlog('STOP SMS detected ' . $number); $this->wlog('STOP SMS detected ' . $number);
$db->insertIntoTable('smsstop', ['number' => $number]); $db->insertIntoTable('smsstop', ['number' => $number]);
@ -256,8 +228,7 @@ class Console extends \InternalController
} }
//On gère les accusés de reception //On gère les accusés de reception
if (trim($text) == 'Delivered' || trim($text) == 'Failed') if (trim($text) == 'Delivered' || trim($text) == 'Failed') {
{
echo 'Delivered or Failed SMS for ' . $number . "\n"; echo 'Delivered or Failed SMS for ' . $number . "\n";
$this->wlog('Delivered or Failed SMS for ' . $number); $this->wlog('Delivered or Failed SMS for ' . $number);
@ -266,24 +237,21 @@ class Console extends \InternalController
$interval = new \DateInterval('PT12H'); $interval = new \DateInterval('PT12H');
$sinceDate = $now->sub($interval)->format('Y-m-d H:i:s'); $sinceDate = $now->sub($interval)->format('Y-m-d H:i:s');
if (!$sendeds = $db->getFromTableWhere('sendeds', ['target' => $number, 'delivered' => false, 'failed' => false, '>at' => $sinceDate], 'at', false, 1)) if (!$sendeds = $db->getFromTableWhere('sendeds', ['target' => $number, 'delivered' => false, 'failed' => false, '>at' => $sinceDate], 'at', false, 1)) {
{
continue; continue;
} }
$sended = $sendeds[0]; $sended = $sendeds[0];
//On gère les echecs //On gère les echecs
if (trim($text) == 'Failed') if (trim($text) == 'Failed') {
{
$db->updateTableWhere('sendeds', ['before_delivered' => 0, 'failed' => true], ['id' => $sended['id']]); $db->updateTableWhere('sendeds', ['before_delivered' => 0, 'failed' => true], ['id' => $sended['id']]);
echo "Sended SMS id " . $sended['id'] . " pass to failed status\n"; echo "Sended SMS id " . $sended['id'] . " pass to failed status\n";
continue; continue;
} }
//On gère le cas des messages de plus de 160 caractères, lesquels impliquent plusieurs accusés //On gère le cas des messages de plus de 160 caractères, lesquels impliquent plusieurs accusés
if ($sended['before_delivered'] > 1) if ($sended['before_delivered'] > 1) {
{
$db->updateTableWhere('sendeds', ['before_delivered' => $sended['before_delivered'] - 1], ['id' => $sended['id']]); $db->updateTableWhere('sendeds', ['before_delivered' => $sended['before_delivered'] - 1], ['id' => $sended['id']]);
echo "Sended SMS id " . $sended['id'] . " before_delivered decrement\n"; echo "Sended SMS id " . $sended['id'] . " before_delivered decrement\n";
continue; continue;
@ -295,8 +263,7 @@ class Console extends \InternalController
continue; continue;
} }
if (!$number) if (!$number) {
{
$this->wlog('Invalid phone number in file "' . $dir); $this->wlog('Invalid phone number in file "' . $dir);
die(6); die(6);
} }
@ -309,28 +276,23 @@ class Console extends \InternalController
$found_commands = array(); $found_commands = array();
//Si on reçu des identifiants //Si on reçu des identifiants
if (array_key_exists('LOGIN', $flags) && array_key_exists('PASSWORD', $flags)) if (array_key_exists('LOGIN', $flags) && array_key_exists('PASSWORD', $flags)) {
{
//Si on a bien un utilisateur avec les identifiants reçus //Si on a bien un utilisateur avec les identifiants reçus
$user = $db->getUserFromEmail($flags['LOGIN']); $user = $db->getUserFromEmail($flags['LOGIN']);
$this->wlog('We found ' . count($user) . ' users'); $this->wlog('We found ' . count($user) . ' users');
if ($user && $user['password'] == sha1($flags['PASSWORD'])) if ($user && $user['password'] == sha1($flags['PASSWORD'])) {
{
$this->wlog('Password is valid'); $this->wlog('Password is valid');
//On va passer en revue toutes les commandes, pour voir si on en trouve dans ce message //On va passer en revue toutes les commandes, pour voir si on en trouve dans ce message
$commands = $db->getFromTableWhere('commands'); $commands = $db->getFromTableWhere('commands');
$this->wlog('We found ' . count($commands) . ' commands'); $this->wlog('We found ' . count($commands) . ' commands');
foreach ($commands as $command) foreach ($commands as $command) {
{
$command_name = mb_strtoupper($command['name']); $command_name = mb_strtoupper($command['name']);
if (array_key_exists($command_name, $flags)) if (array_key_exists($command_name, $flags)) {
{
$this->wlog('We found command ' . $command_name); $this->wlog('We found command ' . $command_name);
//Si la commande ne nécessite pas d'être admin, ou si on est admin //Si la commande ne nécessite pas d'être admin, ou si on est admin
if (!$command['admin'] || $user['admin']) if (!$command['admin'] || $user['admin']) {
{
$this->wlog('And the count is ok'); $this->wlog('And the count is ok');
$found_commands[$command_name] = PWD_SCRIPTS . $command['script'] . escapeshellcmd($flags[$command_name]); $found_commands[$command_name] = PWD_SCRIPTS . $command['script'] . escapeshellcmd($flags[$command_name]);
} }
@ -340,8 +302,7 @@ class Console extends \InternalController
} }
//On va supprimer le mot de passe du SMS pour pouvoir l'enregistrer sans danger //On va supprimer le mot de passe du SMS pour pouvoir l'enregistrer sans danger
if (isset($flags['PASSWORD'])) if (isset($flags['PASSWORD'])) {
{
$text = str_replace($flags['PASSWORD'], '*****', $text); $text = str_replace($flags['PASSWORD'], '*****', $text);
} }
@ -349,8 +310,7 @@ class Console extends \InternalController
$send_by = $number; $send_by = $number;
$content = $text; $content = $text;
$is_command = count($found_commands); $is_command = count($found_commands);
if (!$db->insertIntoTable('receiveds', ['at' => $date, 'send_by' => $send_by, 'content' => $content, 'is_command' => $is_command])) if (!$db->insertIntoTable('receiveds', ['at' => $date, 'send_by' => $send_by, 'content' => $content, 'is_command' => $is_command])) {
{
echo "Erreur lors de l'enregistrement du SMS\n"; echo "Erreur lors de l'enregistrement du SMS\n";
$this->wlog('Unable to process the SMS in file "' . $dir); $this->wlog('Unable to process the SMS in file "' . $dir);
die(7); die(7);
@ -360,8 +320,7 @@ class Console extends \InternalController
$db->insertIntoTable('transfers', ['id_received' => $db->lastId(), 'progress' => false]); $db->insertIntoTable('transfers', ['id_received' => $db->lastId(), 'progress' => false]);
//Chaque commande sera executée. //Chaque commande sera executée.
foreach ($found_commands as $command_name => $command) foreach ($found_commands as $command_name => $command) {
{
echo 'Execution de la commande : ' . $command_name . ' :: ' . $command . "\n"; echo 'Execution de la commande : ' . $command_name . ' :: ' . $command . "\n";
exec($command); exec($command);
} }
@ -375,10 +334,9 @@ class Console extends \InternalController
/** /**
* Cette fonction permet d'envoyer par mail les sms à transférer * Cette fonction permet d'envoyer par mail les sms à transférer
*/ */
public function sendTransfers () public function sendTransfers()
{ {
if (!RASPISMS_SETTINGS_TRANSFER) if (!RASPISMS_SETTINGS_TRANSFER) {
{
echo "Le transfer de SMS est désactivé ! \n"; echo "Le transfer de SMS est désactivé ! \n";
return false; return false;
} }
@ -388,8 +346,7 @@ class Console extends \InternalController
$ids_transfers = []; $ids_transfers = [];
$ids_receiveds = []; $ids_receiveds = [];
foreach ($transfers as $transfer) foreach ($transfers as $transfer) {
{
$ids_transfers[] = $transfer['id']; $ids_transfers[] = $transfer['id'];
$ids_receiveds[] = $transfer['id_received']; $ids_receiveds[] = $transfer['id_received'];
} }
@ -400,10 +357,8 @@ class Console extends \InternalController
$users = $db->getFromTableWhere('users', ['transfer' => true]); $users = $db->getFromTableWhere('users', ['transfer' => true]);
foreach ($users as $user) foreach ($users as $user) {
{ foreach ($receiveds as $received) {
foreach ($receiveds as $received)
{
echo "Transfer d'un SMS du " . $received['send_by'] . " à l'email " . $user['email']; echo "Transfer d'un SMS du " . $received['send_by'] . " à l'email " . $user['email'];
$to = $user['email']; $to = $user['email'];
$subject = '[RaspiSMS] - Transfert d\'un SMS du ' . $received['send_by']; $subject = '[RaspiSMS] - Transfert d\'un SMS du ' . $received['send_by'];

View File

@ -1,32 +1,33 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des contactes
*/
class Contact extends \InternalController
{
/** /**
* Classe des contactes
*/
class Contact extends \descartes\InternalController
{
/**
* Cette fonction retourne une liste des contactes sous forme d'un tableau * Cette fonction retourne une liste des contactes sous forme d'un tableau
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des contactes * @return array : La liste des contactes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des contactes //Recupération des contactes
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->get_list($nb_entry, $nb_entry * $page); return $modelContact->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des contactes sous forme d'un tableau * Cette fonction retourne une liste des contactes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des contactes * @return array : La liste des contactes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des contactes //Recupération des contactes
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->get_by_ids($ids); return $modelContact->get_by_ids($ids);
} }
@ -35,10 +36,10 @@ namespace controllers\internals;
* Cette fonction retourne un contact par son numéro de tel * Cette fonction retourne un contact par son numéro de tel
* @param string $number : Le numéro du contact * @param string $number : Le numéro du contact
* @return array : Le contact * @return array : Le contact
*/ */
public function get_by_number ($number) public function get_by_number($number)
{ {
//Recupération des contactes //Recupération des contactes
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->get_by_number($number); return $modelContact->get_by_number($number);
} }
@ -47,10 +48,10 @@ namespace controllers\internals;
* Cette fonction retourne un contact par son name * Cette fonction retourne un contact par son name
* @param string $name : Le name du contact * @param string $name : Le name du contact
* @return array : Le contact * @return array : Le contact
*/ */
public function get_by_name ($name) public function get_by_name($name)
{ {
//Recupération des contactes //Recupération des contactes
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->get_by_name($name); return $modelContact->get_by_name($name);
} }
@ -60,29 +61,29 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de contacts * Cette fonction permet de compter le nombre de contacts
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->count(); return $modelContact->count();
} }
/** /**
* Cette fonction va supprimer un contact * Cette fonction va supprimer un contact
* @param array $id : L'id du contact à supprimer * @param array $id : L'id du contact à supprimer
* @return int : Le nombre de contact supprimées; * @return int : Le nombre de contact supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
return $modelContact->delete_by_id($id); return $modelContact->delete_by_id($id);
} }
/** /**
* Cette fonction insert une nouvelle contacte * Cette fonction insert une nouvelle contacte
* @param array $contact : Un tableau représentant la contacte à insérer * @param array $contact : Un tableau représentant la contacte à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle contacte insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle contacte insérée
*/ */
public function create ($number, $name) public function create($number, $name)
{ {
$contact = [ $contact = [
'number' => $number, 'number' => $number,
@ -92,8 +93,7 @@ namespace controllers\internals;
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
$result = $modelContact->insert($contact); $result = $modelContact->insert($contact);
if (!$result) if (!$result) {
{
return $result; return $result;
} }
@ -101,13 +101,13 @@ namespace controllers\internals;
$internalEvent->create('CONTACT_ADD', 'Ajout contact : ' . $name . ' (' . \controllers\internals\Tool::phone_add_space($number) . ')'); $internalEvent->create('CONTACT_ADD', 'Ajout contact : ' . $name . ' (' . \controllers\internals\Tool::phone_add_space($number) . ')');
return $result; return $result;
} }
/** /**
* Cette fonction met à jour une série de contactes * Cette fonction met à jour une série de contactes
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($id, $number, $name) public function update($id, $number, $name)
{ {
$modelContact = new \models\Contact($this->bdd); $modelContact = new \models\Contact($this->bdd);
@ -118,4 +118,4 @@ namespace controllers\internals;
return $modelContact->update($id, $contact); return $modelContact->update($id, $contact);
} }
} }

View File

@ -3,52 +3,52 @@
/** /**
* Classe des Event * Classe des Event
*/ */
class Event extends \InternalController class Event extends \descartes\InternalController
{ {
/** /**
* Cette fonction retourne une liste des events sous forme d'un tableau * Cette fonction retourne une liste des events sous forme d'un tableau
* @param PDO $bdd : instance PDO de la base de donnée * @param PDO $bdd : instance PDO de la base de donnée
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des events * @return array : La liste des events
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des events //Recupération des events
$modelEvent = new \models\Event($this->bdd); $modelEvent = new \models\Event($this->bdd);
return $modelEvent->get_list($nb_entry, $nb_entry * $page); return $modelEvent->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne les X dernières entrées triées par date * Cette fonction retourne les X dernières entrées triées par date
* @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout * @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout
* @return array : Les dernières entrées * @return array : Les dernières entrées
*/ */
public function get_lasts_by_date ($nb_entry = false) public function get_lasts_by_date($nb_entry = false)
{ {
$modelEvent = new \models\Event($this->bdd); $modelEvent = new \models\Event($this->bdd);
return $modelEvent->get_lasts_by_date($nb_entry); return $modelEvent->get_lasts_by_date($nb_entry);
} }
/** /**
* Cette fonction va supprimer une liste de contacts * Cette fonction va supprimer une liste de contacts
* @param array $ids : Les id des contactes à supprimer * @param array $ids : Les id des contactes à supprimer
* @return int : Le nombre de contactes supprimées; * @return int : Le nombre de contactes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelEvent = new \models\Event($this->bdd); $modelEvent = new \models\Event($this->bdd);
return $modelEvent->delete_by_id($id); return $modelEvent->delete_by_id($id);
} }
/** /**
* Cette fonction insert un nouvel event * Cette fonction insert un nouvel event
* @param array $event : Un tableau représentant l'event à insérer * @param array $event : Un tableau représentant l'event à insérer
* @return mixed bool|int : false si echec, sinon l'id du nouvel event inséré * @return mixed bool|int : false si echec, sinon l'id du nouvel event inséré
*/ */
public function create ($type, $text) public function create($type, $text)
{ {
$modelEvent = new \models\Event($this->bdd); $modelEvent = new \models\Event($this->bdd);
@ -58,6 +58,5 @@
]; ];
return $modelEvent->insert($event); return $modelEvent->insert($event);
} }
}
}

View File

@ -1,32 +1,33 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des groupes
*/
class Groupe extends \InternalController
{
/** /**
* Classe des groupes
*/
class Groupe extends \descartes\InternalController
{
/**
* Cette fonction retourne une liste des groupes sous forme d'un tableau * Cette fonction retourne une liste des groupes sous forme d'un tableau
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des groupes * @return array : La liste des groupes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des groupes //Recupération des groupes
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->get_list($nb_entry, $nb_entry * $page); return $modelGroupe->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des groupes sous forme d'un tableau * Cette fonction retourne une liste des groupes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des groupes * @return array : La liste des groupes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des groupes //Recupération des groupes
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->get_by_ids($ids); return $modelGroupe->get_by_ids($ids);
} }
@ -35,10 +36,10 @@ namespace controllers\internals;
* Cette fonction retourne un groupe par son name * Cette fonction retourne un groupe par son name
* @param string $name : Le name du groupe * @param string $name : Le name du groupe
* @return array : Le groupe * @return array : Le groupe
*/ */
public function get_by_name ($name) public function get_by_name($name)
{ {
//Recupération des groupes //Recupération des groupes
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->get_by_name($name); return $modelGroupe->get_by_name($name);
} }
@ -47,45 +48,43 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de groupe * Cette fonction permet de compter le nombre de groupe
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->count(); return $modelGroupe->count();
} }
/** /**
* Cette fonction va supprimer une liste de groupe * Cette fonction va supprimer une liste de groupe
* @param array $ids : Les id des groupes à supprimer * @param array $ids : Les id des groupes à supprimer
* @return int : Le nombre de groupes supprimées; * @return int : Le nombre de groupes supprimées;
*/ */
public function delete ($ids) public function delete($ids)
{ {
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->delete_by_ids($ids); return $modelGroupe->delete_by_ids($ids);
} }
/** /**
* Cette fonction insert une nouvelle groupe * Cette fonction insert une nouvelle groupe
* @param array $name : le nom du groupe * @param array $name : le nom du groupe
* @param array $contacts_ids : Un tableau des ids des contact du groupe * @param array $contacts_ids : Un tableau des ids des contact du groupe
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle groupe insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle groupe insérée
*/ */
public function create ($name, $contacts_ids) public function create($name, $contacts_ids)
{ {
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
$groupe = [ $groupe = [
'name' => $name, 'name' => $name,
]; ];
$id_groupe = $modelGroupe->insert($groupe); $id_groupe = $modelGroupe->insert($groupe);
if (!$id_groupe) if (!$id_groupe) {
{
return false; return false;
} }
foreach ($contacts_ids as $contact_id) foreach ($contacts_ids as $contact_id) {
{
$modelGroupe->insert_groupe_contact($id_groupe, $contact_id); $modelGroupe->insert_groupe_contact($id_groupe, $contact_id);
} }
@ -93,16 +92,16 @@ namespace controllers\internals;
$internalEvent->create('GROUP_ADD', 'Ajout groupe : ' . $name); $internalEvent->create('GROUP_ADD', 'Ajout groupe : ' . $name);
return $id_groupe; return $id_groupe;
} }
/** /**
* Cette fonction met à jour un groupe * Cette fonction met à jour un groupe
* @param int $id : L'id du groupe à update * @param int $id : L'id du groupe à update
* @param string $name : Le nom du groupe à update * @param string $name : Le nom du groupe à update
* @param string $contacts_ids : Les ids des contact du groupe * @param string $contacts_ids : Les ids des contact du groupe
* @return bool : True if all update ok, false else * @return bool : True if all update ok, false else
*/ */
public function update ($id, $name, $contacts_ids) public function update($id, $name, $contacts_ids)
{ {
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
@ -115,16 +114,13 @@ namespace controllers\internals;
$modelGroupe->delete_groupe_contact($id); $modelGroupe->delete_groupe_contact($id);
$nb_contact_insert = 0; $nb_contact_insert = 0;
foreach ($contacts_ids as $contact_id) foreach ($contacts_ids as $contact_id) {
{ if ($modelGroupe->insert_groupe_contact($id, $contact_id)) {
if ($modelGroupe->insert_groupe_contact($id, $contact_id))
{
$nb_contact_insert ++; $nb_contact_insert ++;
} }
} }
if (!$result && $nb_contact_insert != count($contacts_ids)) if (!$result && $nb_contact_insert != count($contacts_ids)) {
{
return false; return false;
} }
@ -135,12 +131,11 @@ namespace controllers\internals;
* Cette fonction retourne les contact pour un groupe * Cette fonction retourne les contact pour un groupe
* @param string $id : L'id du groupe * @param string $id : L'id du groupe
* @return array : Un tableau avec les contact * @return array : Un tableau avec les contact
*/ */
public function get_contact ($id) public function get_contact($id)
{ {
//Recupération des groupes //Recupération des groupes
$modelGroupe = new \models\Groupe($this->bdd); $modelGroupe = new \models\Groupe($this->bdd);
return $modelGroupe->get_contact($id); return $modelGroupe->get_contact($id);
} }
}
}

View File

@ -1,9 +1,10 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/** /**
* Classe des receivedes * Classe des receivedes
*/ */
class Received extends \InternalController class Received extends \descartes\InternalController
{ {
/** /**
@ -11,8 +12,8 @@ class Received extends \InternalController
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des receivedes * @return array : La liste des receivedes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des receivedes //Recupération des receivedes
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
@ -24,8 +25,8 @@ class Received extends \InternalController
* Cette fonction retourne une liste des receivedes sous forme d'un tableau * Cette fonction retourne une liste des receivedes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des receivedes * @return array : La liste des receivedes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des receivedes //Recupération des receivedes
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
@ -37,7 +38,7 @@ class Received extends \InternalController
* @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout * @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout
* @return array : Les dernières entrées * @return array : Les dernières entrées
*/ */
public function get_lasts_by_date ($nb_entry = false) public function get_lasts_by_date($nb_entry = false)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->get_lasts_by_date($nb_entry); return $modelReceived->get_lasts_by_date($nb_entry);
@ -47,8 +48,8 @@ class Received extends \InternalController
* Cette fonction retourne une liste des receiveds sous forme d'un tableau * Cette fonction retourne une liste des receiveds sous forme d'un tableau
* @param string $origin : Le numéro depuis lequel est envoyé le message * @param string $origin : Le numéro depuis lequel est envoyé le message
* @return array : La liste des receiveds * @return array : La liste des receiveds
*/ */
public function get_by_origin ($origin) public function get_by_origin($origin)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->get_by_origin($origin); return $modelReceived->get_by_origin($origin);
@ -59,7 +60,7 @@ class Received extends \InternalController
* @param $date : La date depuis laquelle on veux les SMS (au format 2014-10-25 20:10:05) * @param $date : La date depuis laquelle on veux les SMS (au format 2014-10-25 20:10:05)
* @return array : Tableau avec tous les SMS depuis la date * @return array : Tableau avec tous les SMS depuis la date
*/ */
public function get_since_by_date ($date) public function get_since_by_date($date)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->get_since_by_date($date, $number); return $modelReceived->get_since_by_date($date, $number);
@ -71,7 +72,7 @@ class Received extends \InternalController
* @param $number : Le numéro * @param $number : Le numéro
* @return array : Tableau avec tous les SMS depuis la date * @return array : Tableau avec tous les SMS depuis la date
*/ */
public function get_since_for_number_by_date ($date, $number) public function get_since_for_number_by_date($date, $number)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->get_since_for_number_by_date($date, $number); return $modelReceived->get_since_for_number_by_date($date, $number);
@ -82,7 +83,7 @@ class Received extends \InternalController
* @param array $ids : Les id des receivedes à supprimer * @param array $ids : Les id des receivedes à supprimer
* @return int : Le nombre de receivedes supprimées; * @return int : Le nombre de receivedes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->delete_by_id($id); return $modelReceived->delete_by_id($id);
@ -93,7 +94,7 @@ class Received extends \InternalController
* @param array $received : Un tableau représentant la receivede à insérer * @param array $received : Un tableau représentant la receivede à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle receivede insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle receivede insérée
*/ */
public function create ($at, $origin, $content, $is_command) public function create($at, $origin, $content, $is_command)
{ {
$received = [ $received = [
'at' => $at, 'at' => $at,
@ -110,7 +111,7 @@ class Received extends \InternalController
* Cette fonction met à jour une série de receivedes * Cette fonction met à jour une série de receivedes
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($id, $at, $origin, $content, $is_command) public function update($id, $at, $origin, $content, $is_command)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
@ -128,7 +129,7 @@ class Received extends \InternalController
* Cette fonction permet de compter le nombre de receiveds * Cette fonction permet de compter le nombre de receiveds
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->count(); return $modelReceived->count();
@ -138,15 +139,14 @@ class Received extends \InternalController
* Cette fonction compte le nombre de receiveds par jour depuis une date * Cette fonction compte le nombre de receiveds par jour depuis une date
* @return array : un tableau avec en clef la date et en valeure le nombre de sms envoyés * @return array : un tableau avec en clef la date et en valeure le nombre de sms envoyés
*/ */
public function count_by_day_since ($date) public function count_by_day_since($date)
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
$counts_by_day = $modelReceived->count_by_day_since($date); $counts_by_day = $modelReceived->count_by_day_since($date);
$return = []; $return = [];
foreach ($counts_by_day as $count_by_day) foreach ($counts_by_day as $count_by_day) {
{
$return[$count_by_day['at_ymd']] = $count_by_day['nb']; $return[$count_by_day['at_ymd']] = $count_by_day['nb'];
} }
@ -157,7 +157,7 @@ class Received extends \InternalController
* Cette fonction retourne les discussions avec un numéro * Cette fonction retourne les discussions avec un numéro
* @return array : Un tableau avec la date de l'échange et le numéro de la personne * @return array : Un tableau avec la date de l'échange et le numéro de la personne
*/ */
public function get_discussions () public function get_discussions()
{ {
$modelReceived = new \models\Received($this->bdd); $modelReceived = new \models\Received($this->bdd);
return $modelReceived->get_discussions(); return $modelReceived->get_discussions();

View File

@ -1,31 +1,32 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des smsstopes /**
*/ * Classe des smsstopes
class SMSStop extends \InternalController */
{ class SMSStop extends \descartes\InternalController
/** {
/**
* Cette fonction retourne une liste des smsstopes sous forme d'un tableau * Cette fonction retourne une liste des smsstopes sous forme d'un tableau
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des smsstopes * @return array : La liste des smsstopes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des smsstopes //Recupération des smsstopes
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->get_list($nb_entry, $nb_entry * $page); return $modelSMSStop->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des smsstopes sous forme d'un tableau * Cette fonction retourne une liste des smsstopes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des smsstopes * @return array : La liste des smsstopes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des smsstopes //Recupération des smsstopes
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->get_by_ids($ids); return $modelSMSStop->get_by_ids($ids);
} }
@ -34,10 +35,10 @@ namespace controllers\internals;
* Cette fonction retourne un smsstop par son numéro de tel * Cette fonction retourne un smsstop par son numéro de tel
* @param string $number : Le numéro du smsstop * @param string $number : Le numéro du smsstop
* @return array : Le smsstop * @return array : Le smsstop
*/ */
public function get_by_number ($number) public function get_by_number($number)
{ {
//Recupération des smsstopes //Recupération des smsstopes
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->get_by_number($number); return $modelSMSStop->get_by_number($number);
} }
@ -47,53 +48,51 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de smsstops * Cette fonction permet de compter le nombre de smsstops
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->count(); return $modelSMSStop->count();
} }
/** /**
* Cette fonction va supprimer une liste de smsstops * Cette fonction va supprimer une liste de smsstops
* @param array $ids : Les id des smsstopes à supprimer * @param array $ids : Les id des smsstopes à supprimer
* @return int : Le nombre de smsstopes supprimées; * @return int : Le nombre de smsstopes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->delete_by_id($id); return $modelSMSStop->delete_by_id($id);
} }
/** /**
* Cette fonction insert une nouvelle smsstope * Cette fonction insert une nouvelle smsstope
* @param array $smsstop : Un tableau représentant la smsstope à insérer * @param array $smsstop : Un tableau représentant la smsstope à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle smsstope insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle smsstope insérée
*/ */
public function create ($smsstop) public function create($smsstop)
{ {
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
return $modelSMSStop->insert($smsstop); return $modelSMSStop->insert($smsstop);
} }
/** /**
* Cette fonction met à jour une série de smsstopes * Cette fonction met à jour une série de smsstopes
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($smsstops) public function update($smsstops)
{ {
$modelSMSStop = new \models\SMSStop($this->bdd); $modelSMSStop = new \models\SMSStop($this->bdd);
$nb_update = 0; $nb_update = 0;
foreach ($smsstops as $smsstop) foreach ($smsstops as $smsstop) {
{
$result = $modelSMSStop->update($smsstop['id'], $smsstop); $result = $modelSMSStop->update($smsstop['id'], $smsstop);
if ($result) if ($result) {
{
$nb_update ++; $nb_update ++;
} }
} }
return $nb_update; return $nb_update;
} }
} }

View File

@ -1,32 +1,33 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des scheduledes /**
*/ * Classe des scheduledes
class Scheduled extends \InternalController */
{ class Scheduled extends \descartes\InternalController
{
/** /**
* Cette fonction retourne une liste des scheduledes sous forme d'un tableau * Cette fonction retourne une liste des scheduledes sous forme d'un tableau
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des scheduledes * @return array : La liste des scheduledes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des scheduledes //Recupération des scheduledes
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_list($nb_entry, $nb_entry * $page); return $modelScheduled->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des scheduledes sous forme d'un tableau * Cette fonction retourne une liste des scheduledes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des scheduledes * @return array : La liste des scheduledes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des scheduledes //Recupération des scheduledes
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_by_ids($ids); return $modelScheduled->get_by_ids($ids);
} }
@ -37,7 +38,7 @@ namespace controllers\internals;
* @param string $number : Le numéro * @param string $number : Le numéro
* @return array : Les messages programmés avant la date * @return array : Les messages programmés avant la date
*/ */
public function get_before_date_for_number ($date, $number) public function get_before_date_for_number($date, $number)
{ {
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_before_date_for_number($date, $number); return $modelScheduled->get_before_date_for_number($date, $number);
@ -47,94 +48,86 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de scheduled * Cette fonction permet de compter le nombre de scheduled
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->count(); return $modelScheduled->count();
} }
/** /**
* Cette fonction va supprimer un scheduled * Cette fonction va supprimer un scheduled
* @param int $id : L'id du scheduled à supprimer * @param int $id : L'id du scheduled à supprimer
* @return int : Le nombre de scheduledes supprimées; * @return int : Le nombre de scheduledes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->delete_by_id($id); return $modelScheduled->delete_by_id($id);
} }
/** /**
* Cette fonction insert un nouveau scheduled * Cette fonction insert un nouveau scheduled
* @param array $scheduled : Le scheduled à créer avec at, content, flash, progress * @param array $scheduled : Le scheduled à créer avec at, content, flash, progress
* @param array $numbers : Les numéros auxquels envoyer le scheduled * @param array $numbers : Les numéros auxquels envoyer le scheduled
* @param array $contacts_ids : Les ids des contact auquels envoyer le scheduled * @param array $contacts_ids : Les ids des contact auquels envoyer le scheduled
* @param array $groupes_ids : Les ids des groupe auxquels envoyer le scheduled * @param array $groupes_ids : Les ids des groupe auxquels envoyer le scheduled
* @return mixed bool|int : false si echec, sinon l'id du nouveau scheduled inséré * @return mixed bool|int : false si echec, sinon l'id du nouveau scheduled inséré
*/ */
public function create ($scheduled, $numbers = [], $contacts_ids = [], $groupes_ids = []) public function create($scheduled, $numbers = [], $contacts_ids = [], $groupes_ids = [])
{ {
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
if (!$id_scheduled = $modelScheduled->insert($scheduled)) if (!$id_scheduled = $modelScheduled->insert($scheduled)) {
{
$internalEvent = new \controllers\internals\Event($this->bdd); $internalEvent = new \controllers\internals\Event($this->bdd);
$internalEvent->create('SCHEDULED_ADD', 'Ajout d\'un SMS pour le ' . $date . '.'); $internalEvent->create('SCHEDULED_ADD', 'Ajout d\'un SMS pour le ' . $date . '.');
return false; return false;
} }
foreach ($numbers as $number) foreach ($numbers as $number) {
{
$modelScheduled->insert_scheduled_number($id_scheduled, $number); $modelScheduled->insert_scheduled_number($id_scheduled, $number);
} }
foreach ($contacts_ids as $contact_id) foreach ($contacts_ids as $contact_id) {
{
$modelScheduled->insert_scheduled_contact($id_scheduled, $contact_id); $modelScheduled->insert_scheduled_contact($id_scheduled, $contact_id);
} }
foreach ($groupes_ids as $groupe_id) foreach ($groupes_ids as $groupe_id) {
{
$modelScheduled->insert_scheduled_groupe($id_scheduled, $groupe_id); $modelScheduled->insert_scheduled_groupe($id_scheduled, $groupe_id);
} }
return $id_scheduled; return $id_scheduled;
} }
/** /**
* Cette fonction met à jour une série de scheduledes * Cette fonction met à jour une série de scheduledes
* @param array $scheduleds : Un tableau de scheduled à modifier avec at, content, flash, progress + pour chaque scheduled number, contact_ids, groupe_ids * @param array $scheduleds : Un tableau de scheduled à modifier avec at, content, flash, progress + pour chaque scheduled number, contact_ids, groupe_ids
* @param array $numbers : Les numéros auxquels envoyer le scheduled * @param array $numbers : Les numéros auxquels envoyer le scheduled
* @param array $contacts_ids : Les ids des contact auquels envoyer le scheduled * @param array $contacts_ids : Les ids des contact auquels envoyer le scheduled
* @param array $groupes_ids : Les ids des groupe auxquels envoyer le scheduled * @param array $groupes_ids : Les ids des groupe auxquels envoyer le scheduled
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($scheduleds) public function update($scheduleds)
{ {
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
$nb_update = 0; $nb_update = 0;
foreach ($scheduleds as $scheduled) foreach ($scheduleds as $scheduled) {
{
$result = $modelScheduled->update($scheduled['scheduled']['id'], $scheduled['scheduled']); $result = $modelScheduled->update($scheduled['scheduled']['id'], $scheduled['scheduled']);
$modelScheduled->delete_scheduled_number($scheduled['scheduled']['id']); $modelScheduled->delete_scheduled_number($scheduled['scheduled']['id']);
$modelScheduled->delete_scheduled_contact($scheduled['scheduled']['id']); $modelScheduled->delete_scheduled_contact($scheduled['scheduled']['id']);
$modelScheduled->delete_scheduled_groupe($scheduled['scheduled']['id']); $modelScheduled->delete_scheduled_groupe($scheduled['scheduled']['id']);
foreach ($scheduled['number'] as $number) foreach ($scheduled['number'] as $number) {
{
$modelScheduled->insert_scheduled_number($scheduled['scheduled']['id'], $number); $modelScheduled->insert_scheduled_number($scheduled['scheduled']['id'], $number);
} }
foreach ($scheduled['contact_ids'] as $contact_id) foreach ($scheduled['contact_ids'] as $contact_id) {
{
$modelScheduled->insert_scheduled_contact($scheduled['scheduled']['id'], $contact_id); $modelScheduled->insert_scheduled_contact($scheduled['scheduled']['id'], $contact_id);
} }
foreach ($scheduled['groupe_ids'] as $groupe_id) foreach ($scheduled['groupe_ids'] as $groupe_id) {
{
$modelScheduled->insert_scheduled_groupe($scheduled['scheduled']['id'], $groupe_id); $modelScheduled->insert_scheduled_groupe($scheduled['scheduled']['id'], $groupe_id);
} }
@ -149,35 +142,35 @@ namespace controllers\internals;
* Cette fonction retourne une liste de numéro pour un scheduled * Cette fonction retourne une liste de numéro pour un scheduled
* @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro * @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro
* @return array : La liste des scheduledes * @return array : La liste des scheduledes
*/ */
public function get_number ($id_scheduled) public function get_number($id_scheduled)
{ {
//Recupération des scheduledes //Recupération des scheduledes
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_number($id_scheduled); return $modelScheduled->get_number($id_scheduled);
} }
/** /**
* Cette fonction retourne une liste de contact pour un scheduled * Cette fonction retourne une liste de contact pour un scheduled
* @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro * @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro
* @return array : La liste des contact * @return array : La liste des contact
*/ */
public function get_contact ($id_scheduled) public function get_contact($id_scheduled)
{ {
//Recupération des scheduledes //Recupération des scheduledes
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_contact($id_scheduled); return $modelScheduled->get_contact($id_scheduled);
} }
/** /**
* Cette fonction retourne une liste de groupe pour un scheduled * Cette fonction retourne une liste de groupe pour un scheduled
* @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro * @param int $id_scheduled : L'id du scheduled pour lequel on veux le numéro
* @return array : La liste des groupe * @return array : La liste des groupe
*/ */
public function get_groupe ($id_scheduled) public function get_groupe($id_scheduled)
{ {
//Recupération des scheduledes //Recupération des scheduledes
$modelScheduled = new \models\Scheduled($this->bdd); $modelScheduled = new \models\Scheduled($this->bdd);
return $modelScheduled->get_groupe($id_scheduled); return $modelScheduled->get_groupe($id_scheduled);
} }
} }

View File

@ -1,32 +1,33 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
/**
* Classe des sendedes
*/
class Sended extends \InternalController
{
/** /**
* Classe des sendedes
*/
class Sended extends \descartes\InternalController
{
/**
* Cette fonction retourne une liste des sendedes sous forme d'un tableau * Cette fonction retourne une liste des sendedes sous forme d'un tableau
* @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page * @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 * @param mixed(int|bool) $page : Le numéro de page en cours
* @return array : La liste des sendedes * @return array : La liste des sendedes
*/ */
public function get_list ($nb_entry = false, $page = false) public function get_list($nb_entry = false, $page = false)
{ {
//Recupération des sendedes //Recupération des sendedes
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->get_list($nb_entry, $nb_entry * $page); return $modelSended->get_list($nb_entry, $nb_entry * $page);
} }
/** /**
* Cette fonction retourne une liste des sendedes sous forme d'un tableau * Cette fonction retourne une liste des sendedes sous forme d'un tableau
* @param array int $ids : Les ids des entrées à retourner * @param array int $ids : Les ids des entrées à retourner
* @return array : La liste des sendedes * @return array : La liste des sendedes
*/ */
public function get_by_ids ($ids) public function get_by_ids($ids)
{ {
//Recupération des sendedes //Recupération des sendedes
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->get_by_ids($ids); return $modelSended->get_by_ids($ids);
} }
@ -36,7 +37,7 @@ namespace controllers\internals;
* @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout * @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout
* @return array : Les dernières entrées * @return array : Les dernières entrées
*/ */
public function get_lasts_by_date ($nb_entry = false) public function get_lasts_by_date($nb_entry = false)
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->get_lasts_by_date($nb_entry); return $modelSended->get_lasts_by_date($nb_entry);
@ -46,52 +47,50 @@ namespace controllers\internals;
* Cette fonction retourne une liste des receivedes sous forme d'un tableau * Cette fonction retourne une liste des receivedes sous forme d'un tableau
* @param string $target : Le numéro de à qui est envoyé le message * @param string $target : Le numéro de à qui est envoyé le message
* @return array : La liste des sendeds * @return array : La liste des sendeds
*/ */
public function get_by_target ($target) public function get_by_target($target)
{ {
//Recupération des sendeds //Recupération des sendeds
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->get_by_target($target); return $modelSended->get_by_target($target);
} }
/** /**
* Cette fonction va supprimer une liste de sendeds * Cette fonction va supprimer une liste de sendeds
* @param array $ids : Les id des sendedes à supprimer * @param array $ids : Les id des sendedes à supprimer
* @return int : Le nombre de sendedes supprimées; * @return int : Le nombre de sendedes supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->delete_by_id($id); return $modelSended->delete_by_id($id);
} }
/** /**
* Cette fonction insert une nouvelle sendede * Cette fonction insert une nouvelle sendede
* @param array $sended : Un tableau représentant la sendede à insérer * @param array $sended : Un tableau représentant la sendede à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle sendede insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle sendede insérée
*/ */
public function create ($sended) public function create($sended)
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->create($sended); return $modelSended->create($sended);
} }
/** /**
* Cette fonction met à jour une série de sendedes * Cette fonction met à jour une série de sendedes
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($sendeds) public function update($sendeds)
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
$nb_update = 0; $nb_update = 0;
foreach ($sendeds as $sended) foreach ($sendeds as $sended) {
{
$result = $modelSended->update($sended['id'], $sended); $result = $modelSended->update($sended['id'], $sended);
if ($result) if ($result) {
{
$nb_update ++; $nb_update ++;
} }
} }
@ -103,7 +102,7 @@ namespace controllers\internals;
* Cette fonction permet de compter le nombre de sendeds * Cette fonction permet de compter le nombre de sendeds
* @return int : Le nombre d'entrées dans la table * @return int : Le nombre d'entrées dans la table
*/ */
public function count () public function count()
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
return $modelSended->count(); return $modelSended->count();
@ -113,18 +112,17 @@ namespace controllers\internals;
* Cette fonction compte le nombre de sendeds par jour depuis une date * Cette fonction compte le nombre de sendeds par jour depuis une date
* @return array : un tableau avec en clef la date et en valeure le nombre de sms envoyés * @return array : un tableau avec en clef la date et en valeure le nombre de sms envoyés
*/ */
public function count_by_day_since ($date) public function count_by_day_since($date)
{ {
$modelSended = new \models\Sended($this->bdd); $modelSended = new \models\Sended($this->bdd);
$counts_by_day = $modelSended->count_by_day_since($date); $counts_by_day = $modelSended->count_by_day_since($date);
$return = []; $return = [];
foreach ($counts_by_day as $count_by_day) foreach ($counts_by_day as $count_by_day) {
{
$return[$count_by_day['at_ymd']] = $count_by_day['nb']; $return[$count_by_day['at_ymd']] = $count_by_day['nb'];
} }
return $return; return $return;
} }
} }

View File

@ -1,29 +1,29 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
class Setting extends \InternalController class Setting extends \descartes\InternalController
{ {
private $model_setting; private $model_setting;
public function __construct (\PDO $bdd) public function __construct(\PDO $bdd)
{ {
$this->model_setting = new \models\Setting($bdd); $this->model_setting = new \models\Setting($bdd);
} }
/** /**
* Return all settings * Return all settings
* @return array || false * @return array || false
*/ */
public function all () public function all()
{ {
return $this->model_setting->all(); return $this->model_setting->all();
} }
/** /**
* Update a setting by his name * Update a setting by his name
*/ */
public function update (string $name, $value) : boolean public function update(string $name, $value) : boolean
{ {
return (bool) $this->model_setting->update($name, $value); return (bool) $this->model_setting->update($name, $value);
} }
} }

View File

@ -1,134 +1,129 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
class Tool extends \InternalController
{
/**
* Cette fonction parse un numéro pour le retourner sans espaces, etc.
* @param string $number : Le numéro de téléphone à parser
* @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux
*/
public static function parse_phone($number)
{
$number = preg_replace('#[^-0-9+]#', '', $number);
if (preg_match('#^(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8,10}$#', $number))
{
return $number;
}
return false;
}
/** class Tool extends \descartes\InternalController
* Cette fonction parse un numéro pour le retourner avec des espaces, etc. {
* @param string $number : Le numéro de téléphone à parser /**
* @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux * Cette fonction parse un numéro pour le retourner sans espaces, etc.
*/ * @param string $number : Le numéro de téléphone à parser
public static function phone_add_space($number) * @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux
{ */
return preg_replace('#(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})#', '$1 $2 $3 $4 $5', $number); public static function parse_phone($number)
} {
$number = preg_replace('#[^-0-9+]#', '', $number);
if (preg_match('#^(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8,10}$#', $number)) {
return $number;
}
return false;
}
/** /**
* Cette fonction fait la correspondance entre un type d'evenement et une icone font awesome. * Cette fonction parse un numéro pour le retourner avec des espaces, etc.
* @param string $type : Le type de l'évenement à analyser * @param string $number : Le numéro de téléphone à parser
* @return string : Le nom de l'icone à afficher (ex : fa-user) * @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux
*/ */
public static function event_type_to_icon($type) public static function phone_add_space($number)
{ {
switch ($type) return preg_replace('#(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})#', '$1 $2 $3 $4 $5', $number);
{ }
case 'USER_ADD' :
$logo = 'fa-user';
break;
case 'CONTACT_ADD' :
$logo = 'fa-user';
break;
case 'GROUP_ADD' :
$logo = 'fa-group';
break;
case 'SCHEDULED_ADD' :
$logo = 'fa-calendar';
break;
case 'COMMAND_ADD' :
$logo = 'fa-terminal';
break;
default :
$logo = 'fa-question';
}
return $logo; /**
} * Cette fonction fait la correspondance entre un type d'evenement et une icone font awesome.
* @param string $type : Le type de l'évenement à analyser
* @return string : Le nom de l'icone à afficher (ex : fa-user)
*/
public static function event_type_to_icon($type)
{
switch ($type) {
case 'USER_ADD':
$logo = 'fa-user';
break;
case 'CONTACT_ADD':
$logo = 'fa-user';
break;
case 'GROUP_ADD':
$logo = 'fa-group';
break;
case 'SCHEDULED_ADD':
$logo = 'fa-calendar';
break;
case 'COMMAND_ADD':
$logo = 'fa-terminal';
break;
default:
$logo = 'fa-question';
}
/** return $logo;
* Cette fonction vérifie une date }
* @param string $date : La date a valider
* @param string $format : Le format de la date
* @return boolean : Vrai si la date et valide, faux sinon
*/
public static function validate_date($date, $format)
{
$objectDate = \DateTime::createFromFormat($format, $date);
return ($objectDate && $objectDate->format($format) == $date);
}
/** /**
* Cette fonction parse un texte, pour en extraire des données contenu dans des drapeaux au format [FLAG:contenu du drapeau] * Cette fonction vérifie une date
* @param string $texte : Le texte à parser * @param string $date : La date a valider
* @return mixed : Tableau de la forme 'FLAG' => 'contenu du drapeau'. si on trouve une forme correcte (Le contenu de FLAG sera mis en majuscule automatiquement). Sinon le tableau vide. * @param string $format : Le format de la date
*/ * @return boolean : Vrai si la date et valide, faux sinon
public static function parse_for_flag($texte) */
{ public static function validate_date($date, $format)
$returns = array(); {
$results = array(); $objectDate = \DateTime::createFromFormat($format, $date);
while(preg_match('#\[(.*)(?<!\\\):(.*)(?<!\\\)\]#Uui', $texte, $results)) //Tant qu'on recuèpre un flag return ($objectDate && $objectDate->format($format) == $date);
{ }
$returns[mb_strtoupper($results[1])] = $results[2];
$texte = str_replace($results[0], '', $texte);
}
return $returns;
}
/** /**
* Cette fonction retourne un mot de passe généré aléatoirement * Cette fonction parse un texte, pour en extraire des données contenu dans des drapeaux au format [FLAG:contenu du drapeau]
* @param int $length : Taille du mot de passe à générer * @param string $texte : Le texte à parser
* @return string : Le mot de passe aléatoire * @return mixed : Tableau de la forme 'FLAG' => 'contenu du drapeau'. si on trouve une forme correcte (Le contenu de FLAG sera mis en majuscule automatiquement). Sinon le tableau vide.
*/ */
public static function generate_password($length) public static function parse_for_flag($texte)
{ {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-@()?.:!%*$&/'; $returns = array();
$password = ''; $results = array();
$chars_length = mb_strlen($chars) - 1; while (preg_match('#\[(.*)(?<!\\\):(.*)(?<!\\\)\]#Uui', $texte, $results)) { //Tant qu'on recuèpre un flag
$i = 0; $returns[mb_strtoupper($results[1])] = $results[2];
while ($i < $length) $texte = str_replace($results[0], '', $texte);
{ }
$i ++;
$password .= $chars[rand(0, $chars_length)]; return $returns;
} }
return $password;
}
/** /**
* Cette fonction vérifie si un utilisateur et connecté, et si il ne l'est pas, redirige sur la page de connexion * Cette fonction retourne un mot de passe généré aléatoirement
* @return void * @param int $length : Taille du mot de passe à générer
*/ * @return string : Le mot de passe aléatoire
public static function verify_connect() */
{ public static function generate_password($length)
if (!isset($_SESSION['connect']) || !$_SESSION['connect']) {
{ $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-@()?.:!%*$&/';
header('Location: /'); $password = '';
die(); $chars_length = mb_strlen($chars) - 1;
} $i = 0;
while ($i < $length) {
$i ++;
$password .= $chars[rand(0, $chars_length)];
}
return $password;
}
/**
* Cette fonction vérifie si un utilisateur et connecté, et si il ne l'est pas, redirige sur la page de connexion
* @return void
*/
public static function verify_connect()
{
if (!isset($_SESSION['connect']) || !$_SESSION['connect']) {
header('Location: /');
die();
}
} }
/** /**
* Check if the user is admin. * Check if the user is admin.
* @return Bool : True if admin, False else * @return Bool : True if admin, False else
*/ */
public static function is_admin() public static function is_admin()
{ {
if (!isset($_SESSION['user']) || !$_SESSION['connect']['admin']) if (!isset($_SESSION['user']) || !$_SESSION['connect']['admin']) {
{
return false; return false;
} }
@ -141,10 +136,10 @@
* @param array $settings : Les settings du mail, type, sujet, template * @param array $settings : Les settings du mail, type, sujet, template
* @param array $datas : Les données à fournir au template du mail * @param array $datas : Les données à fournir au template du mail
*/ */
public function send_email ($to, $settings, $datas = []) public function send_email($to, $settings, $datas = [])
{ {
$controller = new \Controller(); $controller = new \Controller();
$content = $controller->render($settings['template'], $datas, true); $content = $controller->render($settings['template'], $datas, true);
return true;#mail($to, $settings['subject'], $content); return true;#mail($to, $settings['subject'], $content);
} }
} }

View File

@ -1,67 +1,65 @@
<?php <?php
namespace controllers\internals; namespace controllers\internals;
class User extends \InternalController class User extends \descartes\InternalController
{ {
private $model_user; private $model_user;
public function __construct (\PDO $bdd) public function __construct(\PDO $bdd)
{ {
$this->model_user = new \models\User($bdd); $this->model_user = new \models\User($bdd);
$this->internal_event = new \controllers\internals\Event($bdd); $this->internal_event = new \controllers\internals\Event($bdd);
} }
/** /**
* Return list of users as an array * Return list of users as an array
* @param mixed(int|bool) $nb_entry : Number of entry to return * @param mixed(int|bool) $nb_entry : Number of entry to return
* @param mixed(int|bool) $page : Numero of page * @param mixed(int|bool) $page : Numero of page
* @return array|bool : List of user or false * @return array|bool : List of user or false
*/ */
public function list (?int $nb_entry = null, ?int $page = null) public function list(?int $nb_entry = null, ?int $page = null)
{ {
return $this->model_user->list($nb_entry, $page); return $this->model_user->list($nb_entry, $page);
} }
/** /**
* Cette fonction va supprimer une liste de users * Cette fonction va supprimer une liste de users
* @param array $ids : Les id des useres à supprimer * @param array $ids : Les id des useres à supprimer
* @return int : Le nombre de useres supprimées; * @return int : Le nombre de useres supprimées;
*/ */
public function delete ($id) public function delete($id)
{ {
return $this->model_user->remove($id); return $this->model_user->remove($id);
} }
/** /**
* Cette fonction vérifie s'il existe un utilisateur qui corresponde à ce couple login/password * Cette fonction vérifie s'il existe un utilisateur qui corresponde à ce couple login/password
* @param string $email : L'eamil de l'utilisateur * @param string $email : L'eamil de l'utilisateur
* @param string $password : Le mot de passe de l'utilisateur * @param string $password : Le mot de passe de l'utilisateur
* @return mixed false | array : False si pas de user, le user correspondant sous forme d'array sinon * @return mixed false | array : False si pas de user, le user correspondant sous forme d'array sinon
*/ */
public function check_credentials ($email, $password) public function check_credentials($email, $password)
{ {
$user = $this->model_user->get_by_email($email); $user = $this->model_user->get_by_email($email);
if (!$user) if (!$user) {
{
return false; return false;
} }
if (!password_verify($password, $user['password'])) if (!password_verify($password, $user['password'])) {
{
return false; return false;
} }
return $user; return $user;
} }
/** /**
* Update a user password * Update a user password
* @param string $id : User id * @param string $id : User id
* @param string $password : New password * @param string $password : New password
* @return boolean; * @return boolean;
*/ */
public function update_password (int $id, string $password) : boolean public function update_password(int $id, string $password) : boolean
{ {
$password = password_hash($password, PASSWORD_DEFAULT); $password = password_hash($password, PASSWORD_DEFAULT);
return (bool) $this->model_user->update_password($id, $password); return (bool) $this->model_user->update_password($id, $password);
} }
@ -70,10 +68,10 @@
* Update a user transfer property value * Update a user transfer property value
* @param string $id : User id * @param string $id : User id
* @param string $transfer : New value of property transfer * @param string $transfer : New value of property transfer
* @return boolean; * @return boolean;
*/ */
public function update_transfer (int $id, int $transfer) : boolean public function update_transfer(int $id, int $transfer) : boolean
{ {
return (bool) $this->model_user->update_transfer($id, $transfer); return (bool) $this->model_user->update_transfer($id, $transfer);
} }
@ -81,10 +79,10 @@
* Update user email * Update user email
* @param string $id : user id * @param string $id : user id
* @param string $email : new mail * @param string $email : new mail
* @return boolean; * @return boolean;
*/ */
public function update_email ($id, $email) public function update_email($id, $email)
{ {
return (bool) $this->model_user->update_email($id, $email); return (bool) $this->model_user->update_email($id, $email);
} }
@ -93,16 +91,16 @@
* @param string $email : L'email de l'utilisateur * @param string $email : L'email de l'utilisateur
* @return mixed boolean | array : false si pas de user pour le mail, le user sinon * @return mixed boolean | array : false si pas de user pour le mail, le user sinon
*/ */
public function get_by_email ($email) public function get_by_email($email)
{ {
return $model_user->get_by_email($email); return $model_user->get_by_email($email);
} }
/** /**
* Cette fonction met à jour une série de users * Cette fonction met à jour une série de users
* @return int : le nombre de ligne modifiées * @return int : le nombre de ligne modifiées
*/ */
public function update ($id, $email, $password, $admin, $transfer) public function update($id, $email, $password, $admin, $transfer)
{ {
$user = [ $user = [
'email' => $email, 'email' => $email,
@ -111,15 +109,15 @@
'transfer' => $transfer, 'transfer' => $transfer,
]; ];
return $model_user->update($id, $user); return $model_user->update($id, $user);
} }
/** /**
* Cette fonction insert une nouvelle usere * Cette fonction insert une nouvelle usere
* @param array $user : Un tableau représentant la usere à insérer * @param array $user : Un tableau représentant la usere à insérer
* @return mixed bool|int : false si echec, sinon l'id de la nouvelle usere insérée * @return mixed bool|int : false si echec, sinon l'id de la nouvelle usere insérée
*/ */
public function create ($email, $password, $admin, $transfer = false) public function create($email, $password, $admin, $transfer = false)
{ {
$user = [ $user = [
'email' => $email, 'email' => $email,
@ -130,13 +128,12 @@
$result = $model_user->insert($user); $result = $model_user->insert($user);
if (!$result) if (!$result) {
{
return false; return false;
} }
$internal_event->create('CONTACT_ADD', 'Ajout de l\'utilisateur : ' . $email . '.'); $internal_event->create('CONTACT_ADD', 'Ajout de l\'utilisateur : ' . $email . '.');
return $result; return $result;
} }
} }

View File

@ -3,7 +3,7 @@ namespace controllers\internals;
/** /**
* Classe des commandes * Classe des commandes
*/ */
class Command extends \InternalController class Command extends \descartes\InternalController
{ {
public function populate_database ($nb_entry = false, $page = false) public function populate_database ($nb_entry = false, $page = false)
@ -19,7 +19,7 @@ namespace controllers\internals;
$contact = [ $contact = [
'name' => 'Contact N°' . $i, 'name' => 'Contact N°' . $i,
'number' => '06' . rand(10,99) . rand(10,99) . rand(10,99) . rand(10,99), 'number' => '06' . rand(10,99) . rand(10,99) . rand(10,99) . rand(10,99),
] ];
if (!$id_contact = $internalContact->create($contact)) if (!$id_contact = $internalContact->create($contact))
{ {

View File

@ -1,11 +1,11 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
class Account extends \Controller class Account extends \descartes\Controller
{ {
public $internal_user; public $internal_user;
public function __construct () public function __construct()
{ {
$bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); $bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_user = new \controllers\internals\User($bdd); $this->internal_user = new \controllers\internals\User($bdd);
@ -13,46 +13,43 @@
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Show profile page * Show profile page
*/ */
public function show () public function show()
{ {
$this->render('account/show'); $this->render('account/show');
} }
/** /**
* Update connected user password * Update connected user password
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['password'] : The new password * @param string $_POST['password'] : The new password
* @return void; * @return void;
*/ */
public function update_password ($csrf) public function update_password($csrf)
{ {
$password = $_POST['password'] ?? false; $password = $_POST['password'] ?? false;
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
if (!$password) if (!$password) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner un mot de passe.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner un mot de passe.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$update_password_result = $this->internal_user->update_password($_SESSION['user']['id'], $password); $update_password_result = $this->internal_user->update_password($_SESSION['user']['id'], $password);
if (!$update_password_result) if (!$update_password_result) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour le mot de passe.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour le mot de passe.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le mot de passe a bien été mis à jour.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le mot de passe a bien été mis à jour.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
/** /**
@ -60,33 +57,30 @@
* @param $csrf : CSRF token * @param $csrf : CSRF token
* @param string $_POST['transfer'] : New transfer property value * @param string $_POST['transfer'] : New transfer property value
*/ */
public function update_transfer ($csrf) public function update_transfer($csrf)
{ {
$transfer = $_POST['transfer'] ?? false; $transfer = $_POST['transfer'] ?? false;
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
if ($transfer === false) if ($transfer === false) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez choisir une option parmis celles de la liste déroulante.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez choisir une option parmis celles de la liste déroulante.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$transfer_update_result = $this->internal_user->update_transfer($_SESSION['user']['id'], $transfer); $transfer_update_result = $this->internal_user->update_transfer($_SESSION['user']['id'], $transfer);
if (!$transfer_update_result) if (!$transfer_update_result) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$_SESSION['user']['transfer'] = $transfer; $_SESSION['user']['transfer'] = $transfer;
\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le transfert a bien été ' . ($transfer ? 'activé' : 'désactivé') . '.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le transfert a bien été ' . ($transfer ? 'activé' : 'désactivé') . '.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
/** /**
@ -95,67 +89,60 @@
* @param string $_POST['email'] : User new email * @param string $_POST['email'] : User new email
* @param string $_POST['verif_email'] : Verif email * @param string $_POST['verif_email'] : Verif email
*/ */
public function update_email ($csrf) public function update_email($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$email = $_POST['email'] ?? false; $email = $_POST['email'] ?? false;
if (!$email) if (!$email) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez fournir une adresse e-mail !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez fournir une adresse e-mail !');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'L\'adresse e-mail n\'est pas une adresse valide.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'L\'adresse e-mail n\'est pas une adresse valide.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$update_email_result = $this->internal_user->update_email($_SESSION['user']['id'], $email); $update_email_result = $this->internal_user->update_email($_SESSION['user']['id'], $email);
if (!$update_email_result) if (!$update_email_result) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$_SESSION['user']['email'] = $email; $_SESSION['user']['email'] = $email;
\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'email a bien été mis à jour.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'email a bien été mis à jour.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
/** /**
* Delete a user * Delete a user
* @param string $_POST['delete_account'] : Boolean to see if we want to delete * @param string $_POST['delete_account'] : Boolean to see if we want to delete
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$delete_account = $_POST['delete_account'] ?? false; $delete_account = $_POST['delete_account'] ?? false;
if (!$delete_account) if (!$delete_account) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Pour supprimer le compte, vous devez cocher la case correspondante.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Pour supprimer le compte, vous devez cocher la case correspondante.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
$delete_account_result = $this->internal_user->delete($_SESSION['user']['id']); $delete_account_result = $this->internal_user->delete($_SESSION['user']['id']);
if (!$delete_account_result) if (!$delete_account_result) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de supprimer le compte.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de supprimer le compte.');
return header('Location: ' . \Router::url('Account', 'show')); return header('Location: ' . \descartes\Router::url('Account', 'show'));
} }
return $this->logout(); return $this->logout();
@ -169,6 +156,6 @@
{ {
session_unset(); session_unset();
session_destroy(); session_destroy();
return header('Location: ' . \Router::url('Connect', 'login')); return header('Location: ' . \descartes\Router::url('Connect', 'login'));
} }
} }

View File

@ -1,14 +1,15 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des commandes /**
*/ * Page des commandes
class Command extends \Controller */
class Command extends \descartes\Controller
{ {
public $bdd; public $bdd;
public function __construct () public function __construct()
{ {
$bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); $bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
@ -18,133 +19,125 @@ namespace controllers\publics;
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les users, sous forme d'un tableau permettant l'administration de ces users * Cette fonction retourne tous les users, sous forme d'un tableau permettant l'administration de ces users
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$commands = $this->internal_command->list(25, $page); $commands = $this->internal_command->list(25, $page);
$this->render('command/list', ['commands' => $commands]); $this->render('command/list', ['commands' => $commands]);
} }
/** /**
* Cette fonction va supprimer une liste de commands * Cette fonction va supprimer une liste de commands
* @param array int $_GET['ids'] : Les id des commandes à supprimer * @param array int $_GET['ids'] : Les id des commandes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return false; return false;
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalCommand->delete($id); $this->internalCommand->delete($id);
} }
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return true; return true;
} }
/** /**
* Cette fonction retourne la page d'ajout d'une commande * Cette fonction retourne la page d'ajout d'une commande
*/ */
public function add() public function add()
{ {
$this->render('command/add'); $this->render('command/add');
} }
/** /**
* Cette fonction retourne la page d'édition des commandes * Cette fonction retourne la page d'édition des commandes
* @param array int $_GET['ids'] : Les id des commandes à editer * @param array int $_GET['ids'] : Les id des commandes à editer
*/ */
public function edit() public function edit()
{ {
global $db; global $db;
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
$commands = $this->internalCommand->get_by_ids($ids); $commands = $this->internalCommand->get_by_ids($ids);
$this->render('command/edit', array( $this->render('command/edit', array(
'commands' => $commands, 'commands' => $commands,
)); ));
} }
/** /**
* Cette fonction insert une nouvelle commande * Cette fonction insert une nouvelle commande
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom de la commande * @param string $_POST['name'] : Le nom de la commande
* @param string $_POST['script'] : Le script a appeler * @param string $_POST['script'] : Le script a appeler
* @param boolean $_POST['admin'] : Si la commande necessite les droits d'admin (par défaut non) * @param boolean $_POST['admin'] : Si la commande necessite les droits d'admin (par défaut non)
* @return boolean; * @return boolean;
*/ */
public function create($csrf) public function create($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return false; return false;
} }
$name = $_POST['name'] ?? false; $name = $_POST['name'] ?? false;
$script = $_POST['script'] ?? false; $script = $_POST['script'] ?? false;
$admin = (isset($_POST['admin']) ? $_POST['admin'] : false); $admin = (isset($_POST['admin']) ? $_POST['admin'] : false);
if (!$name || !$script) if (!$name || !$script) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Renseignez au moins un nom et un script.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Renseignez au moins un nom et un script.');
return header('Location: ' . \Router::url('Command', 'list')); return header('Location: ' . \descartes\Router::url('Command', 'list'));
} }
if (!$this->internalCommand->create($name, $script, $admin)) if (!$this->internalCommand->create($name, $script, $admin)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible créer cette commande.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible créer cette commande.');
return header('Location: ' . \Router::url('commands', 'add')); return header('Location: ' . \descartes\Router::url('commands', 'add'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'La commande a bien été crée.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'La commande a bien été crée.');
return header('Location: ' . \Router::url('Command', 'list')); return header('Location: ' . \descartes\Router::url('Command', 'list'));
} }
/** /**
* Cette fonction met à jour une commande * Cette fonction met à jour une commande
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param array $_POST['commands'] : Un tableau des commandes avec leur nouvelle valeurs * @param array $_POST['commands'] : Un tableau des commandes avec leur nouvelle valeurs
* @return boolean; * @return boolean;
*/ */
public function update($csrf) public function update($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return false; return false;
} }
$nb_commands_update = 0; $nb_commands_update = 0;
foreach ($_POST['commands'] as $command) foreach ($_POST['commands'] as $command) {
{
$update_command = $this->internalCommand->update($command['id'], $command['name'], $command['script'], $command['admin']); $update_command = $this->internalCommand->update($command['id'], $command['name'], $command['script'], $command['admin']);
$nb_commands_update += (int) $update_command; $nb_commands_update += (int) $update_command;
} }
if ($nb_commands_update != count($_POST['commands'])) if ($nb_commands_update != count($_POST['commands'])) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certaines commandes n\'ont pas pu êtres mises à jour.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certaines commandes n\'ont pas pu êtres mises à jour.');
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return false; return false;
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Toutes les commandes ont été modifiées avec succès.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Toutes les commandes ont été modifiées avec succès.');
header('Location: ' . \Router::url('Command', 'list')); header('Location: ' . \descartes\Router::url('Command', 'list'));
return true; return true;
} }
} }

View File

@ -2,15 +2,15 @@
namespace controllers\publics; namespace controllers\publics;
/** /**
* Page de connexion * Page de connexion
*/ */
class Connect extends \Controller class Connect extends \descartes\Controller
{ {
/** /**
* Cette fonction est appelée avant toute les autres : * Cette fonction est appelée avant toute les autres :
* @return void; * @return void;
*/ */
public function _before() public function _before()
{ {
global $bdd; global $bdd;
global $model; global $model;
@ -20,47 +20,46 @@
$this->internal_user = new \controllers\internals\User($this->bdd); $this->internal_user = new \controllers\internals\User($this->bdd);
} }
/** /**
* Cette fonction retourne la fenetre de connexion * Cette fonction retourne la fenetre de connexion
*/ */
public function login () public function login()
{ {
$this->render('connect/login'); $this->render('connect/login');
} }
/** /**
* Cette fonction connecte un utilisateur, et le redirige sur la page d'accueil * Cette fonction connecte un utilisateur, et le redirige sur la page d'accueil
* @param string $_POST['mail'] : L'email de l'utilisateur * @param string $_POST['mail'] : L'email de l'utilisateur
* @param string $_POST['password'] : Le mot de passe de l'utilisateur * @param string $_POST['password'] : Le mot de passe de l'utilisateur
* @return void * @return void
*/ */
public function connection() public function connection()
{ {
$email = $_POST['mail'] ?? false; $email = $_POST['mail'] ?? false;
$password = $_POST['password'] ?? false; $password = $_POST['password'] ?? false;
$user = $this->internal_user->check_credentials($email, $password); $user = $this->internal_user->check_credentials($email, $password);
if (!$user) if (!$user) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Email ou mot de passe invalide.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Email ou mot de passe invalide.');
return header('Location: ' . \Router::url('Connect', 'login')); return header('Location: ' . \descartes\Router::url('Connect', 'login'));
} }
$_SESSION['connect'] = true; $_SESSION['connect'] = true;
$_SESSION['user'] = $user; $_SESSION['user'] = $user;
$_SESSION['csrf'] = str_shuffle(uniqid().uniqid()); $_SESSION['csrf'] = str_shuffle(uniqid().uniqid());
return header('Location: ' . \Router::url('Dashboard', 'show')); return header('Location: ' . \descartes\Router::url('Dashboard', 'show'));
} }
/** /**
* Cette fonction retourne la fenetre de changement de password * Cette fonction retourne la fenetre de changement de password
* @return void; * @return void;
*/ */
public function forget_password() public function forget_password()
{ {
$this->render('connect/forget-password'); $this->render('connect/forget-password');
} }
/** /**
@ -68,29 +67,27 @@
* @param string $csrf : jeton csrf * @param string $csrf : jeton csrf
* @param string $_POST['email'] : L'email pour lequel on veut envoyer un nouveau password * @param string $_POST['email'] : L'email pour lequel on veut envoyer un nouveau password
*/ */
public function send_reset_password ($csrf) public function send_reset_password($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Connect', 'forget_password')); header('Location: ' . \descartes\Router::url('Connect', 'forget_password'));
return false; return false;
} }
$email = $_POST['email'] ?? false; $email = $_POST['email'] ?? false;
$user = $this->internal_user->get_by_email($email); $user = $this->internal_user->get_by_email($email);
if (!$email || !$user) if (!$email || !$user) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Aucun utilisateur n\'existe pour cette adresse mail.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Aucun utilisateur n\'existe pour cette adresse mail.');
header('Location: ' . \Router::url('Connect', 'forget_password')); header('Location: ' . \descartes\Router::url('Connect', 'forget_password'));
return false; return false;
} }
$Tokenista = new \Ingenerator\Tokenista(APP_SECRET); $Tokenista = new \Ingenerator\Tokenista(APP_SECRET);
$token = $Tokenista->generate(3600, ['user_id' => $user['id']]); $token = $Tokenista->generate(3600, ['user_id' => $user['id']]);
$reset_link = \Router::url('Connect', 'reset_password', ['user_id' => $user['id'], 'token' => $token]); $reset_link = \descartes\Router::url('Connect', 'reset_password', ['user_id' => $user['id'], 'token' => $token]);
\controllers\internals\Tool::send_email($email, EMAIL_RESET_PASSWORD, ['reset_link' => $reset_link]); \controllers\internals\Tool::send_email($email, EMAIL_RESET_PASSWORD, ['reset_link' => $reset_link]);
@ -103,34 +100,32 @@
* @param string $token : Le token permetttant de vérifier que l'opération est légitime * @param string $token : Le token permetttant de vérifier que l'opération est légitime
* @param optionnal $_POST['password'] : Le nouveau password à utiliser * @param optionnal $_POST['password'] : Le nouveau password à utiliser
*/ */
public function reset_password ($user_id, $token) public function reset_password($user_id, $token)
{ {
$password = $_POST['password'] ?? false; $password = $_POST['password'] ?? false;
$Tokenista = new \Ingenerator\Tokenista(APP_SECRET); $Tokenista = new \Ingenerator\Tokenista(APP_SECRET);
if (!$Tokenista->isValid($token, ['user_id' => $user_id])) if (!$Tokenista->isValid($token, ['user_id' => $user_id])) {
{
return $this->render('connect/reset-password-invalid'); return $this->render('connect/reset-password-invalid');
} }
if (!$password) if (!$password) {
{
return $this->render('connect/reset-password'); return $this->render('connect/reset-password');
} }
$this->internal_user->update_password($user_id, $password); $this->internal_user->update_password($user_id, $password);
return $this->render('connect/reset-password-done'); return $this->render('connect/reset-password-done');
} }
/** /**
* Cette fonction déconnecte un utilisateur et le renvoie sur la page d'accueil * Cette fonction déconnecte un utilisateur et le renvoie sur la page d'accueil
* @return void * @return void
*/ */
public function logout() public function logout()
{ {
session_unset(); session_unset();
session_destroy(); session_destroy();
header('Location: ' . \Router::url('Connect', 'login')); header('Location: ' . \descartes\Router::url('Connect', 'login'));
} }
} }

View File

@ -1,16 +1,17 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des contacts /**
*/ * Page des contacts
class Contact extends \Controller */
{ class Contact extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -18,55 +19,53 @@ namespace controllers\publics;
$this->internalContact = new \controllers\internals\Contact($this->bdd); $this->internalContact = new \controllers\internals\Contact($this->bdd);
$this->internalEvent = new \controllers\internals\Event($this->bdd); $this->internalEvent = new \controllers\internals\Event($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les contacts, sous forme d'un tableau permettant l'administration de ces contacts * Cette fonction retourne tous les contacts, sous forme d'un tableau permettant l'administration de ces contacts
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$contacts = $this->internalContact->get_list(25, $page); $contacts = $this->internalContact->get_list(25, $page);
$this->render('contact/list', ['contacts' => $contacts]); $this->render('contact/list', ['contacts' => $contacts]);
} }
/** /**
* Cette fonction va supprimer une liste de contacts * Cette fonction va supprimer une liste de contacts
* @param array int $_GET['ids'] : Les id des contactes à supprimer * @param array int $_GET['ids'] : Les id des contactes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Contact', 'list')); return header('Location: ' . \descartes\Router::url('Contact', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalContact->delete($id); $this->internalContact->delete($id);
} }
header('Location: ' . \Router::url('Contact', 'list')); header('Location: ' . \descartes\Router::url('Contact', 'list'));
return true; return true;
} }
/** /**
* Cette fonction retourne la page d'ajout d'un contact * Cette fonction retourne la page d'ajout d'un contact
*/ */
public function add() public function add()
{ {
$this->render('contact/add'); $this->render('contact/add');
} }
/** /**
* Cette fonction retourne la page d'édition des contacts * Cette fonction retourne la page d'édition des contacts
* @param int... $ids : Les id des contactes à supprimer * @param int... $ids : Les id des contactes à supprimer
*/ */
public function edit() public function edit()
{ {
global $db; global $db;
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
@ -78,47 +77,43 @@ namespace controllers\publics;
)); ));
} }
/** /**
* Cette fonction insert un nouveau contact * Cette fonction insert un nouveau contact
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom du contact * @param string $_POST['name'] : Le nom du contact
* @param string $_POST['phone'] : Le numero de téléphone du contact * @param string $_POST['phone'] : Le numero de téléphone du contact
*/ */
public function create($csrf) public function create($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Contact', 'add')); return header('Location: ' . \descartes\Router::url('Contact', 'add'));
} }
$name = $_POST['name'] ?? false; $name = $_POST['name'] ?? false;
$number = $_POST['number'] ?? false; $number = $_POST['number'] ?? false;
if (!$name || !$number) if (!$name || !$number) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !');
return header('Location: ' . \Router::url('Contact', 'add')); return header('Location: ' . \descartes\Router::url('Contact', 'add'));
} }
$number = \controllers\internals\Tool::parse_phone($number); $number = \controllers\internals\Tool::parse_phone($number);
if (!$number) if (!$number) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Numéro de téléphone incorrect.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Numéro de téléphone incorrect.');
return header('Location: ' . \Router::url('Contact', 'add')); return header('Location: ' . \descartes\Router::url('Contact', 'add'));
} }
if (!$this->internalContact->create($number, $name)) if (!$this->internalContact->create($number, $name)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce contact.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce contact.');
return header('Location: ' . \Router::url('Contact', 'add')); return header('Location: ' . \descartes\Router::url('Contact', 'add'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le contact a bien été créé.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le contact a bien été créé.');
return header('Location: ' . \Router::url('Contact', 'list')); return header('Location: ' . \descartes\Router::url('Contact', 'list'));
} }
/** /**
* Cette fonction met à jour une contacte * Cette fonction met à jour une contacte
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param array $_POST['contacts'] : Un tableau des contactes avec leur nouvelle valeurs * @param array $_POST['contacts'] : Un tableau des contactes avec leur nouvelle valeurs
@ -126,35 +121,32 @@ namespace controllers\publics;
*/ */
public function update($csrf) public function update($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Contact', 'list')); return header('Location: ' . \descartes\Router::url('Contact', 'list'));
} }
$nb_contacts_update = 0; $nb_contacts_update = 0;
foreach ($_POST['contacts'] as $contact) foreach ($_POST['contacts'] as $contact) {
{
$nb_contacts_update += $this->internalContact->update($contact['id'], $contact['number'], $contact['name']); $nb_contacts_update += $this->internalContact->update($contact['id'], $contact['number'], $contact['name']);
} }
if ($nb_contacts_update != count($_POST['contacts'])) if ($nb_contacts_update != count($_POST['contacts'])) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certais contacts n\'ont pas pu êtres mis à jour.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certais contacts n\'ont pas pu êtres mis à jour.');
return header('Location: ' . \Router::url('Contact', 'list')); return header('Location: ' . \descartes\Router::url('Contact', 'list'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les contacts ont été modifiés avec succès.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les contacts ont été modifiés avec succès.');
return header('Location: ' . \Router::url('Contact', 'list')); return header('Location: ' . \descartes\Router::url('Contact', 'list'));
} }
/** /**
* Cette fonction retourne la liste des contacts sous forme JSON * Cette fonction retourne la liste des contacts sous forme JSON
*/ */
public function json_list() public function json_list()
{ {
header('Content-Type: application/json'); header('Content-Type: application/json');
echo json_encode($this->internalContact->get_list()); echo json_encode($this->internalContact->get_list());
} }
} }

View File

@ -1,16 +1,17 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page d'index, qui gère l'affichage par défaut temporairement /**
*/ * Page d'index, qui gère l'affichage par défaut temporairement
class Dashboard extends \Controller */
{ class Dashboard extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -23,19 +24,19 @@ namespace controllers\publics;
$this->internalCommand = new \controllers\internals\Command($this->bdd); $this->internalCommand = new \controllers\internals\Command($this->bdd);
$this->internalEvent = new \controllers\internals\Event($this->bdd); $this->internalEvent = new \controllers\internals\Event($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction est un alias de show * Cette fonction est un alias de show
* @return void; * @return void;
*/ */
public function show () public function show()
{ {
//Creation de l'object de base de données //Creation de l'object de base de données
global $db; global $db;
//Recupération des nombres des 4 panneaux d'accueil //Recupération des nombres des 4 panneaux d'accueil
$nb_contacts = $this->internalContact->count(); $nb_contacts = $this->internalContact->count();
$nb_groupes = $this->internalGroupe->count(); $nb_groupes = $this->internalGroupe->count();
$nb_scheduleds = $this->internalScheduled->count(); $nb_scheduleds = $this->internalScheduled->count();
@ -43,78 +44,74 @@ namespace controllers\publics;
$nb_sendeds = $this->internalSended->count(); $nb_sendeds = $this->internalSended->count();
$nb_receiveds = $this->internalReceived->count(); $nb_receiveds = $this->internalReceived->count();
//Création de la date d'il y a une semaine //Création de la date d'il y a une semaine
$now = new \DateTime(); $now = new \DateTime();
$one_week = new \DateInterval('P7D'); $one_week = new \DateInterval('P7D');
$date = $now->sub($one_week); $date = $now->sub($one_week);
$formated_date = $date->format('Y-m-d'); $formated_date = $date->format('Y-m-d');
//Récupération des 10 derniers SMS envoyés, SMS reçus et evenements enregistrés. Par date. //Récupération des 10 derniers SMS envoyés, SMS reçus et evenements enregistrés. Par date.
$sendeds = $this->internalSended->get_lasts_by_date(10); $sendeds = $this->internalSended->get_lasts_by_date(10);
$receiveds = $this->internalReceived->get_lasts_by_date(10); $receiveds = $this->internalReceived->get_lasts_by_date(10);
$events = $this->internalEvent->get_lasts_by_date(10); $events = $this->internalEvent->get_lasts_by_date(10);
//Récupération du nombre de SMS envoyés et reçus depuis les 7 derniers jours //Récupération du nombre de SMS envoyés et reçus depuis les 7 derniers jours
$nb_sendeds_by_day = $this->internalSended->count_by_day_since($formated_date); $nb_sendeds_by_day = $this->internalSended->count_by_day_since($formated_date);
$nb_receiveds_by_day = $this->internalReceived->count_by_day_since($formated_date); $nb_receiveds_by_day = $this->internalReceived->count_by_day_since($formated_date);
//On va traduire ces données pour les afficher en graphique //On va traduire ces données pour les afficher en graphique
$array_area_chart = array(); $array_area_chart = array();
$today_less_7_day = new \DateTime(); $today_less_7_day = new \DateTime();
$today_less_7_day->sub(new \DateInterval('P7D')); $today_less_7_day->sub(new \DateInterval('P7D'));
$increment_day = new \DateInterval('P1D'); $increment_day = new \DateInterval('P1D');
$i = 0; $i = 0;
//On va construire un tableau avec la date en clef, et les données pour chaque date //On va construire un tableau avec la date en clef, et les données pour chaque date
while ($i < 7) while ($i < 7) {
{ $today_less_7_day->add($increment_day);
$today_less_7_day->add($increment_day); $i ++;
$i ++; $date_f = $today_less_7_day->format('Y-m-d');
$date_f = $today_less_7_day->format('Y-m-d'); $array_area_chart[$date_f] = array(
$array_area_chart[$date_f] = array( 'period' => $date_f,
'period' => $date_f, 'sendeds' => 0,
'sendeds' => 0, 'receiveds' => 0,
'receiveds' => 0, );
); }
}
$total_sendeds = 0; $total_sendeds = 0;
$total_receiveds = 0; $total_receiveds = 0;
//0n remplie le tableau avec les données adaptées //0n remplie le tableau avec les données adaptées
foreach ($nb_sendeds_by_day as $date => $nb_sended) foreach ($nb_sendeds_by_day as $date => $nb_sended) {
{
$array_area_chart[$date]['sendeds'] = $nb_sended; $array_area_chart[$date]['sendeds'] = $nb_sended;
$total_sendeds += $nb_sended; $total_sendeds += $nb_sended;
} }
foreach ($nb_receiveds_by_day as $date => $nb_received) foreach ($nb_receiveds_by_day as $date => $nb_received) {
{
$array_area_chart[$date]['receiveds'] = $nb_received; $array_area_chart[$date]['receiveds'] = $nb_received;
$total_receiveds += $nb_received; $total_receiveds += $nb_received;
} }
$avg_sendeds = round($total_sendeds / 7, 2); $avg_sendeds = round($total_sendeds / 7, 2);
$avg_receiveds = round($total_receiveds / 7, 2); $avg_receiveds = round($total_receiveds / 7, 2);
$array_area_chart = array_values($array_area_chart); $array_area_chart = array_values($array_area_chart);
$this->render('dashboard/show', array( $this->render('dashboard/show', array(
'nb_contacts' => $nb_contacts, 'nb_contacts' => $nb_contacts,
'nb_groupes' => $nb_groupes, 'nb_groupes' => $nb_groupes,
'nb_scheduleds' => $nb_scheduleds, 'nb_scheduleds' => $nb_scheduleds,
'nb_commands' => $nb_commands, 'nb_commands' => $nb_commands,
'nb_sendeds' => $nb_sendeds, 'nb_sendeds' => $nb_sendeds,
'nb_receiveds' => $nb_receiveds, 'nb_receiveds' => $nb_receiveds,
'avg_sendeds' => $avg_sendeds, 'avg_sendeds' => $avg_sendeds,
'avg_receiveds' => $avg_receiveds, 'avg_receiveds' => $avg_receiveds,
'sendeds' => $sendeds, 'sendeds' => $sendeds,
'receiveds' => $receiveds, 'receiveds' => $receiveds,
'events' => $events, 'events' => $events,
'datas_area_chart' => json_encode($array_area_chart), 'datas_area_chart' => json_encode($array_area_chart),
)); ));
}
} }
}

View File

@ -1,17 +1,18 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des discussions /**
*/ * Page des discussions
class Discussion extends \Controller */
{ class Discussion extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
{ public function _before()
{
global $bdd; global $bdd;
global $model; global $model;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -22,218 +23,204 @@ namespace controllers\publics;
$this->internalReceived = new \controllers\internals\Received($this->bdd); $this->internalReceived = new \controllers\internals\Received($this->bdd);
$this->internalContact = new \controllers\internals\Contact($this->bdd); $this->internalContact = new \controllers\internals\Contact($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne toutes les discussions, sous forme d'un tableau permettant l'administration de ces contacts * Cette fonction retourne toutes les discussions, sous forme d'un tableau permettant l'administration de ces contacts
*/ */
public function list () public function list()
{ {
$discussions = $this->internalReceived->get_discussions(); $discussions = $this->internalReceived->get_discussions();
foreach ($discussions as $key => $discussion) foreach ($discussions as $key => $discussion) {
{ if (!$contact = $this->internalContact->get_by_number($discussion['number'])) {
if (!$contact = $this->internalContact->get_by_number($discussion['number'])) continue;
{ }
continue;
}
$discussions[$key]['contact'] = $contact['name']; $discussions[$key]['contact'] = $contact['name'];
} }
$this->render('discussion/list', array( $this->render('discussion/list', array(
'discussions' => $discussions, 'discussions' => $discussions,
)); ));
} }
/** /**
* Cette fonction permet d'afficher la discussion avec un numero * Cette fonction permet d'afficher la discussion avec un numero
* @param string $number : La numéro de téléphone avec lequel on discute * @param string $number : La numéro de téléphone avec lequel on discute
*/ */
public function show ($number) public function show($number)
{ {
$contact = $this->internalContact->get_by_number($number); $contact = $this->internalContact->get_by_number($number);
$this->render('discussion/show', array( $this->render('discussion/show', array(
'number' => $number, 'number' => $number,
'contact' => $contact, 'contact' => $contact,
)); ));
} }
/** /**
* Cette fonction récupère l'ensemble des messages pour un numéro, recçus, envoyés, en cours * Cette fonction récupère l'ensemble des messages pour un numéro, recçus, envoyés, en cours
* @param string $number : Le numéro cible * @param string $number : Le numéro cible
* @param string $transaction_id : Le numéro unique de la transaction ajax (sert à vérifier si la requete doit être prise en compte) * @param string $transaction_id : Le numéro unique de la transaction ajax (sert à vérifier si la requete doit être prise en compte)
*/ */
function get_messages($number, $transaction_id) public function get_messages($number, $transaction_id)
{ {
$now = new \DateTime(); $now = new \DateTime();
$now = $now->format('Y-m-d H:i:s'); $now = $now->format('Y-m-d H:i:s');
$sendeds = $this->internalSended->get_by_target($number); $sendeds = $this->internalSended->get_by_target($number);
$receiveds = $this->internalReceived->get_by_send_by($number); $receiveds = $this->internalReceived->get_by_send_by($number);
$scheduleds = $this->internalScheduled->get_before_date_for_number($now, $number); $scheduleds = $this->internalScheduled->get_before_date_for_number($now, $number);
$messages = []; $messages = [];
foreach ($sendeds as $sended) foreach ($sendeds as $sended) {
{ $messages[] = array(
$messages[] = array( 'date' => htmlspecialchars($sended['at']),
'date' => htmlspecialchars($sended['at']), 'text' => htmlspecialchars($sended['content']),
'text' => htmlspecialchars($sended['content']), 'type' => 'sended',
'type' => 'sended', 'status' => ($sended['delivered'] ? 'delivered' : ($sended['failed'] ? 'failed' : '')),
'status' => ($sended['delivered'] ? 'delivered' : ($sended['failed'] ? 'failed' : '')), );
); }
}
foreach ($receiveds as $received) foreach ($receiveds as $received) {
{ $messages[] = array(
$messages[] = array( 'date' => htmlspecialchars($received['at']),
'date' => htmlspecialchars($received['at']), 'text' => htmlspecialchars($received['content']),
'text' => htmlspecialchars($received['content']), 'type' => 'received',
'type' => 'received', 'md5' => md5($received['at'] . $received['content']),
'md5' => md5($received['at'] . $received['content']), );
); }
}
foreach ($scheduleds as $scheduled) foreach ($scheduleds as $scheduled) {
{ $messages[] = array(
$messages[] = array( 'date' => htmlspecialchars($scheduled['at']),
'date' => htmlspecialchars($scheduled['at']), 'text' => htmlspecialchars($scheduled['content']),
'text' => htmlspecialchars($scheduled['content']), 'type' => 'inprogress',
'type' => 'inprogress', );
); }
}
//On va trier le tableau des messages //On va trier le tableau des messages
usort($messages, function($a, $b) { usort($messages, function ($a, $b) {
return strtotime($a["date"]) - strtotime($b["date"]); return strtotime($a["date"]) - strtotime($b["date"]);
}); });
//On récupère uniquement les 25 derniers messages sur l'ensemble //On récupère uniquement les 25 derniers messages sur l'ensemble
$messages = array_slice($messages, -25); $messages = array_slice($messages, -25);
echo json_encode(['transaction_id' => $transaction_id, 'messages' => $messages]); echo json_encode(['transaction_id' => $transaction_id, 'messages' => $messages]);
return true; return true;
} }
/** /**
* Cette fonction permet d'envoyer facilement un sms à un numéro donné * Cette fonction permet d'envoyer facilement un sms à un numéro donné
* @param string $csrf : Le jeton csrf * @param string $csrf : Le jeton csrf
* @param string $_POST['content'] : Le contenu du SMS * @param string $_POST['content'] : Le contenu du SMS
* @param string $_POST['numbers'] : Un tableau avec le numero des gens auxquel envoyer le sms * @param string $_POST['numbers'] : Un tableau avec le numero des gens auxquel envoyer le sms
* @return json : Le statut de l'envoi * @return json : Le statut de l'envoi
*/ */
function send ($csrf) public function send($csrf)
{ {
$return = ['success' => true, 'message' => '']; $return = ['success' => true, 'message' => ''];
//On vérifie que le jeton csrf est bon //On vérifie que le jeton csrf est bon
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{ $return['success'] = false;
$return['success'] = false; $return['message'] = 'Jeton CSRF invalide';
$return['message'] = 'Jeton CSRF invalide'; echo json_encode($return);
echo json_encode($return); return false;
return false; }
}
$now = new \DateTime(); $now = new \DateTime();
$now = $now->format('Y-m-d H:i:s'); $now = $now->format('Y-m-d H:i:s');
$scheduled = []; $scheduled = [];
$scheduled['at'] = $now; $scheduled['at'] = $now;
$scheduled['content'] = $_POST['content'] ?? ''; $scheduled['content'] = $_POST['content'] ?? '';
$numbers = $_POST['numbers'] ?? false; $numbers = $_POST['numbers'] ?? false;
if (!$numbers) if (!$numbers) {
{ $return['success'] = false;
$return['success'] = false;
$return['message'] = 'Vous devez renseigner un numéro valide'; $return['message'] = 'Vous devez renseigner un numéro valide';
echo json_encode($return); echo json_encode($return);
return false; return false;
} }
if (!$this->internalScheduled->create($scheduled, $numbers)) if (!$this->internalScheduled->create($scheduled, $numbers)) {
{ $return['success'] = false;
$return['success'] = false; $return['message'] = 'Impossible de créer le SMS';
$return['message'] = 'Impossible de créer le SMS'; echo json_encode($return);
echo json_encode($return); return false;
return false; }
}
echo json_encode($return); echo json_encode($return);
return true; return true;
} }
/** /**
* Cette fonction retourne les id des sms qui sont envoyés * Cette fonction retourne les id des sms qui sont envoyés
* @return json : Tableau des ids des sms qui sont envoyés * @return json : Tableau des ids des sms qui sont envoyés
*/ */
function checksendeds () public function checksendeds()
{ {
$_SESSION['discussion_wait_progress'] = isset($_SESSION['discussion_wait_progress']) ? $_SESSION['discussion_wait_progress'] : []; $_SESSION['discussion_wait_progress'] = isset($_SESSION['discussion_wait_progress']) ? $_SESSION['discussion_wait_progress'] : [];
$scheduleds = $this->internalScheduled->get_by_ids($_SESSION['discussion_wait_progress']); $scheduleds = $this->internalScheduled->get_by_ids($_SESSION['discussion_wait_progress']);
//On va chercher à chaque fois si on a trouvé le sms. Si ce n'est pas le cas c'est qu'il a été envoyé //On va chercher à chaque fois si on a trouvé le sms. Si ce n'est pas le cas c'est qu'il a été envoyé
$sendeds = []; $sendeds = [];
foreach ($_SESSION['discussion_wait_progress'] as $key => $id_scheduled) foreach ($_SESSION['discussion_wait_progress'] as $key => $id_scheduled) {
{ $found = false;
$found = false; foreach ($scheduleds as $scheduled) {
foreach ($scheduleds as $scheduled) if ($id == $scheduled['id']) {
{ $found = true;
if ($id == $scheduled['id']) }
{ }
$found = true;
}
}
if (!$found) if (!$found) {
{ unset($_SESSION['discussion_wait_progress'][$key]);
unset($_SESSION['discussion_wait_progress'][$key]); $sendeds[] = $id;
$sendeds[] = $id; }
} }
}
echo json_encode($sendeds); echo json_encode($sendeds);
return true; return true;
} }
/** /**
* Cette fonction retourne les messages reçus pour un numéro après la date $_SESSION['discussion_last_checkreceiveds'] * Cette fonction retourne les messages reçus pour un numéro après la date $_SESSION['discussion_last_checkreceiveds']
* @param string $number : Le numéro de téléphone pour lequel on veux les messages * @param string $number : Le numéro de téléphone pour lequel on veux les messages
* @return json : Un tableau avec les messages * @return json : Un tableau avec les messages
*/ */
function checkreceiveds ($number) public function checkreceiveds($number)
{ {
$now = new \DateTime(); $now = new \DateTime();
$now = $now->format('Y-m-d H:i'); $now = $now->format('Y-m-d H:i');
$_SESSION['discussion_last_checkreceiveds'] = isset($_SESSION['discussion_last_checkreceiveds']) ? $_SESSION['discussion_last_checkreceiveds'] : $now; $_SESSION['discussion_last_checkreceiveds'] = isset($_SESSION['discussion_last_checkreceiveds']) ? $_SESSION['discussion_last_checkreceiveds'] : $now;
$receiveds = $internalReceived->get_since_for_number_by_date($_SESSION['discussion_last_checkreceiveds'], $number); $receiveds = $internalReceived->get_since_for_number_by_date($_SESSION['discussion_last_checkreceiveds'], $number);
//On va gérer le cas des messages en double en stockant ceux déjà reçus et en eliminant les autres //On va gérer le cas des messages en double en stockant ceux déjà reçus et en eliminant les autres
$_SESSION['discussion_already_receiveds'] = isset($_SESSION['discussion_already_receiveds']) ? $_SESSION['discussion_already_receiveds'] : []; $_SESSION['discussion_already_receiveds'] = isset($_SESSION['discussion_already_receiveds']) ? $_SESSION['discussion_already_receiveds'] : [];
foreach ($receiveds as $key => $received) foreach ($receiveds as $key => $received) {
{ //Sms jamais recu
//Sms jamais recu if (array_search($received['id'], $_SESSION['discussion_already_receiveds']) === false) {
if (array_search($received['id'], $_SESSION['discussion_already_receiveds']) === false) $_SESSION['discussion_already_receiveds'][] = $received['id'];
{ continue;
$_SESSION['discussion_already_receiveds'][] = $received['id']; }
continue;
}
//Sms déjà reçu => on le supprime des resultats //Sms déjà reçu => on le supprime des resultats
unset($receiveds[$key]); unset($receiveds[$key]);
} }
//On met à jour la date de dernière verif //On met à jour la date de dernière verif
$_SESSION['discussion_last_checkreceiveds'] = $now; $_SESSION['discussion_last_checkreceiveds'] = $now;
echo json_encode($receiveds); echo json_encode($receiveds);
} }
} }

View File

@ -1,61 +1,59 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des events /**
*/ * Page des events
class Event extends \Controller */
{ class Event extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
$this->internalEvent = new \controllers\internals\Event($this->bdd); $this->internalEvent = new \controllers\internals\Event($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les events, sous forme d'un tableau permettant l'administration de ces events * Cette fonction retourne tous les events, sous forme d'un tableau permettant l'administration de ces events
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$limit = 25; $limit = 25;
$events = $this->internalEvent->get_list($limit, $page); $events = $this->internalEvent->get_list($limit, $page);
$this->render('event/list', ['events' => $events, 'limit' => $limit, 'page' => $page, 'nb_results' => count($events)]); $this->render('event/list', ['events' => $events, 'limit' => $limit, 'page' => $page, 'nb_results' => count($events)]);
} }
/** /**
* Cette fonction va supprimer une liste de events * Cette fonction va supprimer une liste de events
* @param array int $_GET['ids'] : Les id des eventes à supprimer * @param array int $_GET['ids'] : Les id des eventes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Event', 'list')); return header('Location: ' . \descartes\Router::url('Event', 'list'));
} }
if (!\controllers\internals\Tool::is_admin()) if (!\controllers\internals\Tool::is_admin()) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être admin pour pouvoir supprimer des events.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être admin pour pouvoir supprimer des events.');
return header('Location: ' . \Router::url('Event', 'list')); return header('Location: ' . \descartes\Router::url('Event', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalEvent->delete($id); $this->internalEvent->delete($id);
} }
return header('Location: ' . \Router::url('Event', 'list')); return header('Location: ' . \descartes\Router::url('Event', 'list'));
} }
} }

View File

@ -1,16 +1,17 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des groupes /**
*/ * Page des groupes
class Groupe extends \Controller */
{ class Groupe extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -19,68 +20,64 @@ namespace controllers\publics;
$this->internalContact = new \controllers\internals\Contact($this->bdd); $this->internalContact = new \controllers\internals\Contact($this->bdd);
$this->internalEvent = new \controllers\internals\Event($this->bdd); $this->internalEvent = new \controllers\internals\Event($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les groupes, sous forme d'un tableau permettant l'administration de ces groupes * Cette fonction retourne tous les groupes, sous forme d'un tableau permettant l'administration de ces groupes
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$groupes = $this->internalGroupe->get_list(25, $page); $groupes = $this->internalGroupe->get_list(25, $page);
foreach ($groupes as $key => $groupe) foreach ($groupes as $key => $groupe) {
{
$contacts = $this->internalGroupe->get_contact($groupe['id']); $contacts = $this->internalGroupe->get_contact($groupe['id']);
$groupes[$key]['nb_contacts'] = count($contacts); $groupes[$key]['nb_contacts'] = count($contacts);
} }
$this->render('groupe/list', ['groupes' => $groupes]); $this->render('groupe/list', ['groupes' => $groupes]);
} }
/** /**
* Cette fonction va supprimer une liste de groupes * Cette fonction va supprimer une liste de groupes
* @param array int $_GET['ids'] : Les id des groupes à supprimer * @param array int $_GET['ids'] : Les id des groupes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Groupe', 'list')); header('Location: ' . \descartes\Router::url('Groupe', 'list'));
return false; return false;
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
$this->internalGroupe->delete($ids); $this->internalGroupe->delete($ids);
header('Location: ' . \Router::url('Groupe', 'list')); header('Location: ' . \descartes\Router::url('Groupe', 'list'));
return true; return true;
} }
/** /**
* Cette fonction retourne la page d'ajout d'un groupe * Cette fonction retourne la page d'ajout d'un groupe
*/ */
public function add() public function add()
{ {
$this->render('groupe/add'); $this->render('groupe/add');
} }
/** /**
* Cette fonction retourne la page d'édition des groupes * Cette fonction retourne la page d'édition des groupes
* @param int... $ids : Les id des groupes à supprimer * @param int... $ids : Les id des groupes à supprimer
*/ */
public function edit() public function edit()
{ {
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
$groupes = $this->internalGroupe->get_by_ids $groupes = $this->internalGroupe->get_by_ids($ids);
($ids);
foreach ($groupes as $key => $groupe) foreach ($groupes as $key => $groupe) {
{
$groupes[$key]['contacts'] = $this->internalGroupe->get_contact($groupe['id']); $groupes[$key]['contacts'] = $this->internalGroupe->get_contact($groupe['id']);
} }
@ -89,79 +86,73 @@ namespace controllers\publics;
)); ));
} }
/** /**
* Cette fonction insert un nouveau groupe * Cette fonction insert un nouveau groupe
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom du groupe * @param string $_POST['name'] : Le nom du groupe
* @param array $_POST['contacts'] : Les ids des contacts à mettre dans le groupe * @param array $_POST['contacts'] : Les ids des contacts à mettre dans le groupe
*/ */
public function create ($csrf) public function create($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Groupe', 'add')); return header('Location: ' . \descartes\Router::url('Groupe', 'add'));
} }
$name = $_POST['name'] ?? false; $name = $_POST['name'] ?? false;
$contacts_ids = $_POST['contacts'] ?? false; $contacts_ids = $_POST['contacts'] ?? false;
if (!$name || !$contacts_ids) if (!$name || !$contacts_ids) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !');
return header('Location: ' . \Router::url('Groupe', 'add')); return header('Location: ' . \descartes\Router::url('Groupe', 'add'));
} }
$id_groupe = $this->internalGroupe->create($name, $contacts_ids); $id_groupe = $this->internalGroupe->create($name, $contacts_ids);
if (!$id_groupe) if (!$id_groupe) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce groupe.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce groupe.');
return header('Location: ' . \Router::url('Groupe', 'add')); return header('Location: ' . \descartes\Router::url('Groupe', 'add'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le groupe a bien été créé.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le groupe a bien été créé.');
return header('Location: ' . \Router::url('Groupe', 'list')); return header('Location: ' . \descartes\Router::url('Groupe', 'list'));
} }
/** /**
* Cette fonction met à jour une groupe * Cette fonction met à jour une groupe
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param array $_POST['groupes'] : Un tableau des groupes avec leur nouvelle valeurs & une entrée 'contacts_id' avec les ids des contacts pour chaque groupe * @param array $_POST['groupes'] : Un tableau des groupes avec leur nouvelle valeurs & une entrée 'contacts_id' avec les ids des contacts pour chaque groupe
* @return boolean; * @return boolean;
*/ */
public function update ($csrf) public function update($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
header('Location: ' . \Router::url('Groupe', 'list')); header('Location: ' . \descartes\Router::url('Groupe', 'list'));
return false; return false;
} }
$groupes = $_POST['groupes'] ?? []; $groupes = $_POST['groupes'] ?? [];
$nb_groupes_update = 0; $nb_groupes_update = 0;
foreach ($groupes as $id => $groupe) foreach ($groupes as $id => $groupe) {
{
$nb_groupes_update += (int) $this->internalGroupe->update($id, $groupe['name'], $groupe['contacts_ids']); $nb_groupes_update += (int) $this->internalGroupe->update($id, $groupe['name'], $groupe['contacts_ids']);
} }
if ($nb_groupes_update != count($groupes)) if ($nb_groupes_update != count($groupes)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains groupes n\'ont pas pu êtres mis à jour.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains groupes n\'ont pas pu êtres mis à jour.');
return header('Location: ' . \Router::url('Groupe', 'list')); return header('Location: ' . \descartes\Router::url('Groupe', 'list'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les groupes ont été modifiés avec succès.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les groupes ont été modifiés avec succès.');
return header('Location: ' . \Router::url('Groupe', 'list')); return header('Location: ' . \descartes\Router::url('Groupe', 'list'));
} }
/** /**
* Cette fonction retourne la liste des groupes sous forme JSON * Cette fonction retourne la liste des groupes sous forme JSON
*/ */
public function json_list() public function json_list()
{ {
header('Content-Type: application/json'); header('Content-Type: application/json');
echo json_encode($this->internalGroupe->get_list()); echo json_encode($this->internalGroupe->get_list());
} }
} }

View File

@ -1,16 +1,17 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des receiveds /**
*/ * Page des receiveds
class Received extends \Controller */
{ class Received extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -18,22 +19,20 @@ namespace controllers\publics;
$this->internalReceived = new \controllers\internals\Received($this->bdd); $this->internalReceived = new \controllers\internals\Received($this->bdd);
$this->internalContact = new \controllers\internals\Contact($this->bdd); $this->internalContact = new \controllers\internals\Contact($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les receiveds, sous forme d'un tableau permettant l'administration de ces receiveds * Cette fonction retourne tous les receiveds, sous forme d'un tableau permettant l'administration de ces receiveds
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$limit = 25; $limit = 25;
$receiveds = $this->internalReceived->get_list($limit, $page); $receiveds = $this->internalReceived->get_list($limit, $page);
foreach ($receiveds as $key => $received) foreach ($receiveds as $key => $received) {
{ if (!$contact = $this->internalContact->get_by_number($received['origin'])) {
if (!$contact = $this->internalContact->get_by_number($received['origin']))
{
continue; continue;
} }
@ -41,21 +40,19 @@ namespace controllers\publics;
} }
$this->render('received/list', ['receiveds' => $receiveds, 'page' => $page, 'limit' => $limit, 'nb_results' => count($receiveds)]); $this->render('received/list', ['receiveds' => $receiveds, 'page' => $page, 'limit' => $limit, 'nb_results' => count($receiveds)]);
} }
/** /**
* Cette fonction retourne tous les SMS reçus aujourd'hui pour la popup * Cette fonction retourne tous les SMS reçus aujourd'hui pour la popup
* @return json : Un tableau des SMS reçus * @return json : Un tableau des SMS reçus
*/ */
public function popup () public function popup()
{ {
$now = new \DateTime(); $now = new \DateTime();
$receiveds = $this->internalReceived->get_since_by_date($now->format('Y-m-d')); $receiveds = $this->internalReceived->get_since_by_date($now->format('Y-m-d'));
foreach ($receiveds as $key => $received) foreach ($receiveds as $key => $received) {
{ if (!$contact = $this->internalContact->get_by_number($received['origin'])) {
if (!$contact = $this->internalContact->get_by_number($received['origin']))
{
continue; continue;
} }
@ -64,8 +61,7 @@ namespace controllers\publics;
$nb_received = count($receiveds); $nb_received = count($receiveds);
if (!isset($_SESSION['popup_nb_receiveds']) || $_SESSION['popup_nb_receiveds'] > $nb_receiveds) if (!isset($_SESSION['popup_nb_receiveds']) || $_SESSION['popup_nb_receiveds'] > $nb_receiveds) {
{
$_SESSION['popup_nb_receiveds'] = $nb_received; $_SESSION['popup_nb_receiveds'] = $nb_received;
} }
@ -77,31 +73,28 @@ namespace controllers\publics;
return true; return true;
} }
/** /**
* Cette fonction va supprimer une liste de receiveds * Cette fonction va supprimer une liste de receiveds
* @param array int $_GET['ids'] : Les id des receivedes à supprimer * @param array int $_GET['ids'] : Les id des receivedes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Received', 'list')); return header('Location: ' . \descartes\Router::url('Received', 'list'));
} }
if (!\controllers\internals\Tool::is_admin()) if (!\controllers\internals\Tool::is_admin()) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour effectuer cette action.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour effectuer cette action.');
return header('Location: ' . \Router::url('Received', 'list')); return header('Location: ' . \descartes\Router::url('Received', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalReceived->delete($id); $this->internalReceived->delete($id);
} }
return header('Location: ' . \Router::url('Received', 'list')); return header('Location: ' . \descartes\Router::url('Received', 'list'));
} }
} }

View File

@ -1,23 +1,24 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des smsapis /**
*/ * Page des smsapis
class SMSAPI extends \Controller */
{ class SMSAPI extends \descartes\Controller
//On défini les constantes qui servent pour les retours d'API {
const API_ERROR_NO = 0; //On défini les constantes qui servent pour les retours d'API
const API_ERROR_BAD_ID = 1; const API_ERROR_NO = 0;
const API_ERROR_CREATION_FAILED = 2; const API_ERROR_BAD_ID = 1;
const API_ERROR_MISSING_FIELD = 3; const API_ERROR_CREATION_FAILED = 2;
const API_ERROR_MISSING_FIELD = 3;
/** /**
* Cette fonction est appelée avant toute les autres : * Cette fonction est appelée avant toute les autres :
* Elle vérifie que l'utilisateur est bien connecté * Elle vérifie que l'utilisateur est bien connecté
* @return void; * @return void;
*/ */
public function _before() public function _before()
{ {
global $bdd; global $bdd;
global $model; global $model;
@ -27,120 +28,111 @@ namespace controllers\publics;
$this->internal_user = new \controllers\internals\User($this->bdd); $this->internal_user = new \controllers\internals\User($this->bdd);
$this->internalContact = new \controllers\internals\Contact($this->bdd); $this->internalContact = new \controllers\internals\Contact($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction permet d'envoyer un SMS, en passant simplement des arguments à l'URL (ou pas $_GET) * Cette fonction permet d'envoyer un SMS, en passant simplement des arguments à l'URL (ou pas $_GET)
* @param string text = Le contenu du SMS * @param string text = Le contenu du SMS
* @param mixed numbers = Les numéros auxquels envoyer les SMS. Soit un seul numéro, et il s'agit d'un string. Soit plusieurs numéros, et il s'agit d'un tableau * @param mixed numbers = Les numéros auxquels envoyer les SMS. Soit un seul numéro, et il s'agit d'un string. Soit plusieurs numéros, et il s'agit d'un tableau
* @param mixed contacts = Les noms des contacts auxquels envoyer les SMS. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau * @param mixed contacts = Les noms des contacts auxquels envoyer les SMS. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau
* @param mixed groupes = Les noms des groupes auxquels envoyer les SMS. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau * @param mixed groupes = Les noms des groupes auxquels envoyer les SMS. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau
* @param optionnal string date = La date à laquelle doit être envoyé le SMS. Au format 'Y-m-d H:i'. Si non fourni, le SMS sera envoyé dans 2 minutes * @param optionnal string date = La date à laquelle doit être envoyé le SMS. Au format 'Y-m-d H:i'. Si non fourni, le SMS sera envoyé dans 2 minutes
*/ */
public function api () public function api()
{ {
//On récupère l'email et le password //On récupère l'email et le password
$email = isset($_GET['email']) ? $_GET['email'] : NULL; $email = isset($_GET['email']) ? $_GET['email'] : null;
$email = isset($_POST['email']) ? $_POST['email'] : $email; $email = isset($_POST['email']) ? $_POST['email'] : $email;
$password = isset($_GET['password']) ? $_GET['password'] : NULL; $password = isset($_GET['password']) ? $_GET['password'] : null;
$password = isset($_POST['password']) ? $_POST['password'] : $password; $password = isset($_POST['password']) ? $_POST['password'] : $password;
//Si les identifiants sont incorrect on retourne une erreur //Si les identifiants sont incorrect on retourne une erreur
$user = $internal_user->check_credentials($email, $password); $user = $internal_user->check_credentials($email, $password);
if (!$user) if (!$user) {
{ echo json_encode(array(
echo json_encode(array( 'error' => self::API_ERROR_BAD_ID,
'error' => self::API_ERROR_BAD_ID, ));
)); return true;
return true; }
}
//On map les variables $_GET //On map les variables $_GET
$get_numbers = isset($_GET['numbers']) ? $_GET['numbers'] : array(); $get_numbers = isset($_GET['numbers']) ? $_GET['numbers'] : array();
$get_contacts = isset($_GET['contacts']) ? $_GET['contacts'] : array(); $get_contacts = isset($_GET['contacts']) ? $_GET['contacts'] : array();
$get_groupes = isset($_GET['groupes']) ? $_GET['groupes'] : array(); $get_groupes = isset($_GET['groupes']) ? $_GET['groupes'] : array();
//On map les variables POST //On map les variables POST
$post_numbers = isset($_POST['numbers']) ? $_POST['numbers'] : array(); $post_numbers = isset($_POST['numbers']) ? $_POST['numbers'] : array();
$post_contacts = isset($_POST['contacts']) ? $_POST['contacts'] : array(); $post_contacts = isset($_POST['contacts']) ? $_POST['contacts'] : array();
$post_groupes = isset($_POST['groupes']) ? $_POST['groupes'] : array(); $post_groupes = isset($_POST['groupes']) ? $_POST['groupes'] : array();
//On map le texte et la date à part car c'est les seuls arguments qui ne sera jamais un tableau //On map le texte et la date à part car c'est les seuls arguments qui ne sera jamais un tableau
$text = isset($_GET['text']) ? $_GET['text'] : NULL; $text = isset($_GET['text']) ? $_GET['text'] : null;
$text = isset($_POST['text']) ? $_POST['text'] : $text; $text = isset($_POST['text']) ? $_POST['text'] : $text;
$date = isset($_GET['date']) ? $_GET['date'] : NULL; $date = isset($_GET['date']) ? $_GET['date'] : null;
$date = isset($_POST['date']) ? $_POST['date'] : $date; $date = isset($_POST['date']) ? $_POST['date'] : $date;
//On passe tous les paramètres GET en tableau //On passe tous les paramètres GET en tableau
$get_numbers = is_array($get_numbers) ? $get_numbers : ($get_numbers ? array($get_numbers) : array()); $get_numbers = is_array($get_numbers) ? $get_numbers : ($get_numbers ? array($get_numbers) : array());
$get_contacts = is_array($get_contacts) ? $get_contacts : array($get_contacts); $get_contacts = is_array($get_contacts) ? $get_contacts : array($get_contacts);
$get_groupes = is_array($get_groupes) ? $get_groupes : array($get_groupes); $get_groupes = is_array($get_groupes) ? $get_groupes : array($get_groupes);
//On passe tous les paramètres POST en tableau //On passe tous les paramètres POST en tableau
$post_numbers = is_array($post_numbers) ? $post_numbers : array($post_numbers); $post_numbers = is_array($post_numbers) ? $post_numbers : array($post_numbers);
$post_contacts = is_array($post_contacts) ? $post_contacts : array($post_contacts); $post_contacts = is_array($post_contacts) ? $post_contacts : array($post_contacts);
$post_groupes = is_array($post_groupes) ? $post_groupes : array($post_groupes); $post_groupes = is_array($post_groupes) ? $post_groupes : array($post_groupes);
//On merge les données reçus en GET, et celles en POST //On merge les données reçus en GET, et celles en POST
$numbers = array_merge($get_numbers, $post_numbers); $numbers = array_merge($get_numbers, $post_numbers);
$contacts = array_merge($get_contacts, $post_contacts); $contacts = array_merge($get_contacts, $post_contacts);
$groupes = array_merge($get_groupes, $post_groupes); $groupes = array_merge($get_groupes, $post_groupes);
//Pour chaque contact, on récupère l'id du contact //Pour chaque contact, on récupère l'id du contact
foreach ($contacts as $key => $contact) foreach ($contacts as $key => $contact) {
{ if (!$contact = $internalContact->get_by_name($contact)) {
if (!$contact = $internalContact->get_by_name($contact)) unset($contacts[$key]);
{ continue;
unset($contacts[$key]); }
continue;
}
$contacts[$key] = $contact['id']; $contacts[$key] = $contact['id'];
} }
//Pour chaque groupe, on récupère l'id du groupe //Pour chaque groupe, on récupère l'id du groupe
foreach ($groupes as $key => $name) foreach ($groupes as $key => $name) {
{ if (!$groupe = $internalContact->get_by_name($groupe)) {
if (!$groupe = $internalContact->get_by_name($groupe)) unset($groupes[$key]);
{ continue;
unset($groupes[$key]); }
continue;
}
$groupes[$key] = $groupe['id']; $groupes[$key] = $groupe['id'];
} }
//Si la date n'est pas définie, on la met à la date du jour //Si la date n'est pas définie, on la met à la date du jour
if (!$date) if (!$date) {
{ $now = new \DateTime();
$now = new \DateTime(); $date = $now->format('Y-m-d H:i');
$date = $now->format('Y-m-d H:i'); }
}
//Si il manque des champs essentiels, on leve une erreur //Si il manque des champs essentiels, on leve une erreur
if (!$text || (!$numbers && !$contacts && !$groupes)) if (!$text || (!$numbers && !$contacts && !$groupes)) {
{ echo json_encode(array(
echo json_encode(array( 'error' => self::API_ERROR_MISSING_FIELD,
'error' => self::API_ERROR_MISSING_FIELD, ));
)); return false;
return false; }
}
//On assigne les variable POST (après avoir vidé $_POST) en prévision de la création du SMS //On assigne les variable POST (après avoir vidé $_POST) en prévision de la création du SMS
if (!$this->internalScheduled->create(['at' => $date, 'content' => $text], $numbers, $contacts, $groupes)) if (!$this->internalScheduled->create(['at' => $date, 'content' => $text], $numbers, $contacts, $groupes)) {
{ echo json_encode(array(
echo json_encode(array(
'error' => self::API_ERROR_CREATION_FAILED, 'error' => self::API_ERROR_CREATION_FAILED,
)); ));
return false; return false;
} }
echo json_encode(array( echo json_encode(array(
'error' => self::API_ERROR_NO, 'error' => self::API_ERROR_NO,
)); ));
return true; return true;
} }
}
}

View File

@ -1,62 +1,59 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des smsstops /**
*/ * Page des smsstops
class SMSStop extends \Controller */
{ class SMSStop extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
$this->internalSMSStop = new \controllers\internals\SMSStop($this->bdd); $this->internalSMSStop = new \controllers\internals\SMSStop($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les smsstops, sous forme d'un tableau permettant l'administration de ces smsstops * Cette fonction retourne tous les smsstops, sous forme d'un tableau permettant l'administration de ces smsstops
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$limit = 25; $limit = 25;
$smsstops = $this->internalSMSStop->get_list($limit, $page); $smsstops = $this->internalSMSStop->get_list($limit, $page);
$this->render('smsstop/list', ['page' => $page, 'smsstops' => $smsstops, 'limit' => $limit, 'nb_results' => count($smsstops)]); $this->render('smsstop/list', ['page' => $page, 'smsstops' => $smsstops, 'limit' => $limit, 'nb_results' => count($smsstops)]);
} }
/** /**
* Cette fonction va supprimer une liste de smsstops * Cette fonction va supprimer une liste de smsstops
* @param array int $_GET['ids'] : Les id des smsstopes à supprimer * @param array int $_GET['ids'] : Les id des smsstopes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('SMSStop', 'list')); return header('Location: ' . \descartes\Router::url('SMSStop', 'list'));
} }
if (!\controllers\internals\Tool::is_admin()) if (!\controllers\internals\Tool::is_admin()) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour pouvoir supprimer un "STOP SMS" !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour pouvoir supprimer un "STOP SMS" !');
return header('Location: ' . \Router::url('SMSStop', 'list')); return header('Location: ' . \descartes\Router::url('SMSStop', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalSMSStop->delete($id); $this->internalSMSStop->delete($id);
} }
return header('Location: ' . \Router::url('SMSStop', 'list')); return header('Location: ' . \descartes\Router::url('SMSStop', 'list'));
} }
}
}

View File

@ -1,16 +1,17 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des scheduleds /**
*/ * Page des scheduleds
class Scheduled extends \Controller */
{ class Scheduled extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
@ -18,45 +19,43 @@ namespace controllers\publics;
$this->internalScheduled = new \controllers\internals\Scheduled($this->bdd); $this->internalScheduled = new \controllers\internals\Scheduled($this->bdd);
$this->internalEvent = new \controllers\internals\Event($this->bdd); $this->internalEvent = new \controllers\internals\Event($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les scheduleds, sous forme d'un tableau permettant l'administration de ces scheduleds * Cette fonction retourne tous les scheduleds, sous forme d'un tableau permettant l'administration de ces scheduleds
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$scheduleds = $this->internalScheduled->get_list(25, $page); $scheduleds = $this->internalScheduled->get_list(25, $page);
$this->render('scheduled/list', ['scheduleds' => $scheduleds]); $this->render('scheduled/list', ['scheduleds' => $scheduleds]);
} }
/** /**
* Cette fonction va supprimer une liste de scheduleds * Cette fonction va supprimer une liste de scheduleds
* @param array int $_GET['ids'] : Les id des scheduledes à supprimer * @param array int $_GET['ids'] : Les id des scheduledes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalScheduled->delete($id); $this->internalScheduled->delete($id);
} }
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
/** /**
* Cette fonction retourne la page d'ajout d'un scheduled * Cette fonction retourne la page d'ajout d'un scheduled
*/ */
public function add() public function add()
{ {
$now = new \DateTime(); $now = new \DateTime();
$less_one_minute = new \DateInterval('PT1M'); $less_one_minute = new \DateInterval('PT1M');
@ -65,41 +64,37 @@ namespace controllers\publics;
$this->render('scheduled/add', [ $this->render('scheduled/add', [
'now' => $now->format('Y-m-d H:i'), 'now' => $now->format('Y-m-d H:i'),
]); ]);
} }
/** /**
* Cette fonction retourne la page d'édition des scheduleds * Cette fonction retourne la page d'édition des scheduleds
* @param int... $ids : Les id des scheduledes à supprimer * @param int... $ids : Les id des scheduledes à supprimer
*/ */
public function edit() public function edit()
{ {
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
$scheduleds = $this->internalScheduled->get_by_ids($ids); $scheduleds = $this->internalScheduled->get_by_ids($ids);
//Pour chaque message on ajoute les numéros, les contacts & les groupes //Pour chaque message on ajoute les numéros, les contacts & les groupes
foreach ($scheduleds as $key => $scheduled) foreach ($scheduleds as $key => $scheduled) {
{
$scheduleds[$key]['numbers'] = []; $scheduleds[$key]['numbers'] = [];
$scheduleds[$key]['contacts'] = []; $scheduleds[$key]['contacts'] = [];
$scheduleds[$key]['groupes'] = []; $scheduleds[$key]['groupes'] = [];
$numbers = $this->internalScheduled->get_numbers($scheduled['id']); $numbers = $this->internalScheduled->get_numbers($scheduled['id']);
foreach ($numbers as $number) foreach ($numbers as $number) {
{
$scheduleds[$key]['numbers'][] = $number['number']; $scheduleds[$key]['numbers'][] = $number['number'];
} }
$contacts = $this->internalScheduled->get_contacts($scheduled['id']); $contacts = $this->internalScheduled->get_contacts($scheduled['id']);
foreach ($contacts as $contact) foreach ($contacts as $contact) {
{
$scheduleds[$key]['contacts'][] = (int) $contact['id']; $scheduleds[$key]['contacts'][] = (int) $contact['id'];
} }
$groupes = $this->internalScheduled->get_groupes($scheduled['id']); $groupes = $this->internalScheduled->get_groupes($scheduled['id']);
foreach ($groupes as $groupe) foreach ($groupes as $groupe) {
{
$scheduleds[$key]['groupes'][] = (int) $groupe['id']; $scheduleds[$key]['groupes'][] = (int) $groupe['id'];
} }
} }
@ -110,58 +105,52 @@ namespace controllers\publics;
)); ));
} }
/** /**
* Cette fonction insert un nouveau scheduled * Cette fonction insert un nouveau scheduled
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom du scheduled * @param string $_POST['name'] : Le nom du scheduled
* @param string $_POST['date'] : La date d'envoie du scheduled * @param string $_POST['date'] : La date d'envoie du scheduled
* @param string $_POST['numbers'] : Les numeros de téléphone du scheduled * @param string $_POST['numbers'] : Les numeros de téléphone du scheduled
* @param string $_POST['contacts'] : Les contacts du scheduled * @param string $_POST['contacts'] : Les contacts du scheduled
* @param string $_POST['groupes'] : Les groupes du scheduled * @param string $_POST['groupes'] : Les groupes du scheduled
*/ */
public function create($csrf) public function create($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Scheduled', 'add')); return header('Location: ' . \descartes\Router::url('Scheduled', 'add'));
} }
$date = $_POST['date'] ?? false; $date = $_POST['date'] ?? false;
$content = $_POST['content'] ?? false; $content = $_POST['content'] ?? false;
$numbers = $_POST['numbers'] ?? []; $numbers = $_POST['numbers'] ?? [];
$contacts = $_POST['contacts'] ?? []; $contacts = $_POST['contacts'] ?? [];
$groupes = $_POST['groupes'] ?? []; $groupes = $_POST['groupes'] ?? [];
if (!$content) if (!$content) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous ne pouvez pas créer un SMS sans message.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous ne pouvez pas créer un SMS sans message.');
return header('Location: ' . \Router::url('Scheduled', 'add')); return header('Location: ' . \descartes\Router::url('Scheduled', 'add'));
} }
if (!\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i:s') && !\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i')) if (!\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i:s') && !\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i')) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez fournir une date valide.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez fournir une date valide.');
return header('Location: ' . \Router::url('Scheduled', 'add')); return header('Location: ' . \descartes\Router::url('Scheduled', 'add'));
} }
foreach ($numbers as $key => $number) foreach ($numbers as $key => $number) {
{
$number = \controllers\internals\Tool::parse_phone($number); $number = \controllers\internals\Tool::parse_phone($number);
if (!$number) if (!$number) {
{
unset($numbers[$key]); unset($numbers[$key]);
continue; continue;
} }
$numbers[$key] = $number; $numbers[$key] = $number;
} }
if (!$numbers && !$contacts && !$groupes) if (!$numbers && !$contacts && !$groupes) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner au moins un destinataire pour le SMS.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner au moins un destinataire pour le SMS.');
return header('Location: ' . \Router::url('Scheduled', 'add')); return header('Location: ' . \descartes\Router::url('Scheduled', 'add'));
} }
$scheduled = [ $scheduled = [
@ -171,17 +160,16 @@ namespace controllers\publics;
'progress' => false, 'progress' => false,
]; ];
if (!$scheduled_id = $this->internalScheduled->create($scheduled, $numbers, $contacts, $groupes)) if (!$scheduled_id = $this->internalScheduled->create($scheduled, $numbers, $contacts, $groupes)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer le SMS.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer le SMS.');
return header('Location: ' . \Router::url('Scheduled', 'add')); return header('Location: ' . \descartes\Router::url('Scheduled', 'add'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le SMS a bien été créé pour le ' . $date . '.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le SMS a bien été créé pour le ' . $date . '.');
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
/** /**
* Cette fonction met à jour une schedulede * Cette fonction met à jour une schedulede
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param array $_POST['scheduleds'] : Un tableau des scheduledes avec leur nouvelle valeurs + les numbers, contacts et groupes liées * @param array $_POST['scheduleds'] : Un tableau des scheduledes avec leur nouvelle valeurs + les numbers, contacts et groupes liées
@ -189,52 +177,44 @@ namespace controllers\publics;
*/ */
public function update($csrf) public function update($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
$scheduleds = $_POST['scheduleds'] ?? []; $scheduleds = $_POST['scheduleds'] ?? [];
$all_update_ok = true; $all_update_ok = true;
foreach ($scheduleds as $id_scheduled => $scheduled) foreach ($scheduleds as $id_scheduled => $scheduled) {
{
$date = $scheduled['date'] ?? false; $date = $scheduled['date'] ?? false;
$content = $scheduled['content'] ?? false; $content = $scheduled['content'] ?? false;
$numbers = $scheduled['numbers'] ?? []; $numbers = $scheduled['numbers'] ?? [];
$contacts = $scheduled['contacts'] ?? []; $contacts = $scheduled['contacts'] ?? [];
$groupes = $scheduled['groupes'] ?? []; $groupes = $scheduled['groupes'] ?? [];
if (!$content) if (!$content) {
{
$all_update_ok = false; $all_update_ok = false;
continue; continue;
} }
if (!\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i:s') && !\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i')) if (!\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i:s') && !\controllers\internals\Tool::validate_date($date, 'Y-m-d H:i')) {
{
$all_update_ok = false; $all_update_ok = false;
continue; continue;
} }
foreach ($numbers as $key => $number) foreach ($numbers as $key => $number) {
{
$number = \controllers\internals\Tool::parse_phone($number); $number = \controllers\internals\Tool::parse_phone($number);
if (!$number) if (!$number) {
{
unset($numbers[$key]); unset($numbers[$key]);
continue; continue;
} }
$numbers[$key] = $number; $numbers[$key] = $number;
} }
if (!$numbers && !$contacts && !$groupes) if (!$numbers && !$contacts && !$groupes) {
{
$all_update_ok = false; $all_update_ok = false;
continue; continue;
} }
@ -252,20 +232,18 @@ namespace controllers\publics;
'groupes_ids' => $groupes, 'groupes_ids' => $groupes,
]; ];
if (!$this->internalScheduled->update([$scheduled])) if (!$this->internalScheduled->update([$scheduled])) {
{
$all_update_ok = false; $all_update_ok = false;
continue; continue;
} }
} }
if (!$all_update_ok) if (!$all_update_ok) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains SMS n\'ont pas pu êtres mis à jour.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains SMS n\'ont pas pu êtres mis à jour.');
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les SMS ont été mis à jour.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les SMS ont été mis à jour.');
return header('Location: ' . \Router::url('Scheduled', 'list')); return header('Location: ' . \descartes\Router::url('Scheduled', 'list'));
} }
} }

View File

@ -1,55 +1,54 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des sendeds /**
*/ * Page des sendeds
class Sended extends \Controller */
{ class Sended extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
global $bdd; global $bdd;
$this->bdd = $bdd; $this->bdd = $bdd;
$this->internalSended = new \controllers\internals\Sended($this->bdd); $this->internalSended = new \controllers\internals\Sended($this->bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les sendeds, sous forme d'un tableau permettant l'administration de ces sendeds * Cette fonction retourne tous les sendeds, sous forme d'un tableau permettant l'administration de ces sendeds
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$limit = 25; $limit = 25;
$sendeds = $this->internalSended->get_list($limit, $page); $sendeds = $this->internalSended->get_list($limit, $page);
$this->render('sended/list', ['sendeds' => $sendeds, 'page' => $page, 'limit' => $limit, 'nb_results' => count($sendeds)]); $this->render('sended/list', ['sendeds' => $sendeds, 'page' => $page, 'limit' => $limit, 'nb_results' => count($sendeds)]);
} }
/** /**
* Cette fonction va supprimer une liste de sendeds * Cette fonction va supprimer une liste de sendeds
* @param array int $_GET['ids'] : Les id des sendedes à supprimer * @param array int $_GET['ids'] : Les id des sendedes à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Sended', 'list')); return header('Location: ' . \descartes\Router::url('Sended', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internalSended->delete($id); $this->internalSended->delete($id);
} }
return header('Location: ' . \Router::url('Sended', 'list')); return header('Location: ' . \descartes\Router::url('Sended', 'list'));
} }
} }

View File

@ -1,13 +1,14 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des settings /**
*/ * Page des settings
class Setting extends \Controller */
class Setting extends \descartes\Controller
{ {
private $internal_setting; private $internal_setting;
public function __construct () public function __construct()
{ {
$bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); $bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_setting = new \controllers\internals\Setting($bdd); $this->internal_setting = new \controllers\internals\Setting($bdd);
@ -18,12 +19,12 @@ namespace controllers\publics;
/** /**
* Return all settings to administrate them * Return all settings to administrate them
*/ */
public function show () public function show()
{ {
return $this->render('setting/show'); return $this->render('setting/show');
} }
/** /**
* Update a setting value identified by his name * Update a setting value identified by his name
* @param string $setting_name : Name of the setting to modify * @param string $setting_name : Name of the setting to modify
@ -31,37 +32,32 @@ namespace controllers\publics;
* @param string $_POST['setting_value'] : Setting's new value * @param string $_POST['setting_value'] : Setting's new value
* @return boolean; * @return boolean;
*/ */
public function update (string $setting_name, string $csrf) public function update(string $setting_name, string $csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('Setting', 'show')); return header('Location: ' . \descartes\Router::url('Setting', 'show'));
} }
if (!\controllers\internals\Tool::is_admin()) if (!\controllers\internals\Tool::is_admin()) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour pouvoir modifier un réglage.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour pouvoir modifier un réglage.');
return header('Location: ' . \Router::url('Setting', 'show')); return header('Location: ' . \descartes\Router::url('Setting', 'show'));
} }
$setting_value = $_POST['setting_value'] ?? false; $setting_value = $_POST['setting_value'] ?? false;
if ($setting_value === false) if ($setting_value === false) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner une valeure pour le réglage.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner une valeure pour le réglage.');
return header('Location: ' . \Router::url('Setting', 'show')); return header('Location: ' . \descartes\Router::url('Setting', 'show'));
} }
$update_setting_result = $this->internal_setting->update($setting_name, $setting_value); $update_setting_result = $this->internal_setting->update($setting_name, $setting_value);
if ($update_setting_result === false) if ($update_setting_result === false) {
{
\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour ce réglage.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour ce réglage.');
return header('Location: ' . \Router::url('Setting', 'show')); return header('Location: ' . \descartes\Router::url('Setting', 'show'));
} }
\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le réglage a bien été mis à jour.'); \DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le réglage a bien été mis à jour.');
return header('Location: ' . \Router::url('Setting', 'show')); return header('Location: ' . \descartes\Router::url('Setting', 'show'));
} }
}
}

View File

@ -1,117 +1,110 @@
<?php <?php
namespace controllers\publics; namespace controllers\publics;
/**
* Page des users /**
*/ * Page des users
class User extends \Controller */
{ class User extends \descartes\Controller
/** {
* Cette fonction est appelée avant toute les autres : /**
* Elle vérifie que l'utilisateur est bien connecté * Cette fonction est appelée avant toute les autres :
* @return void; * Elle vérifie que l'utilisateur est bien connecté
*/ * @return void;
public function _before() */
public function _before()
{ {
$bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); $bdd = Model::connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_user = new \controllers\internals\User($bdd); $this->internal_user = new \controllers\internals\User($bdd);
\controllers\internals\Tool::verify_connect(); \controllers\internals\Tool::verify_connect();
} }
/** /**
* Cette fonction retourne tous les users, sous forme d'un tableau permettant l'administration de ces users * Cette fonction retourne tous les users, sous forme d'un tableau permettant l'administration de ces users
*/ */
public function list ($page = 0) public function list($page = 0)
{ {
$page = (int) $page; $page = (int) $page;
$users = $this->internal_user->list(25, $page); $users = $this->internal_user->list(25, $page);
$this->render('user/list', ['users' => $users]); $this->render('user/list', ['users' => $users]);
} }
/** /**
* Cette fonction va supprimer une liste de users * Cette fonction va supprimer une liste de users
* @param array int $_GET['ids'] : Les id des useres à supprimer * @param array int $_GET['ids'] : Les id des useres à supprimer
* @return boolean; * @return boolean;
*/ */
public function delete ($csrf) public function delete($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('User', 'list')); return header('Location: ' . \descartes\Router::url('User', 'list'));
} }
if (!\controllers\internals\Tool::is_admin()) if (!\controllers\internals\Tool::is_admin()) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour supprimer un utilisateur !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour supprimer un utilisateur !');
return header('Location: ' . \Router::url('User', 'list')); return header('Location: ' . \descartes\Router::url('User', 'list'));
} }
$ids = $_GET['ids'] ?? []; $ids = $_GET['ids'] ?? [];
foreach ($ids as $id) foreach ($ids as $id) {
{
$this->internal_user->delete($id); $this->internal_user->delete($id);
} }
return header('Location: ' . \Router::url('User', 'list')); return header('Location: ' . \descartes\Router::url('User', 'list'));
} }
/** /**
* Cette fonction retourne la page d'ajout d'un user * Cette fonction retourne la page d'ajout d'un user
*/ */
public function add() public function add()
{ {
return $this->render('user/add'); return $this->render('user/add');
} }
/** /**
* Cette fonction insert un nouveau user * Cette fonction insert un nouveau user
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['email'] : L'email de l'utilisateur * @param string $_POST['email'] : L'email de l'utilisateur
* @param string $_POST['email_confirm'] : Verif de l'email de l'utilisateur * @param string $_POST['email_confirm'] : Verif de l'email de l'utilisateur
* @param optional string $_POST['password'] : Le mot de passe de l'utilisateur (si vide, généré automatiquement) * @param optional string $_POST['password'] : Le mot de passe de l'utilisateur (si vide, généré automatiquement)
* @param optional string $_POST['password_confirm'] : Confirmation du mot de passe de l'utilisateur * @param optional string $_POST['password_confirm'] : Confirmation du mot de passe de l'utilisateur
* @param optional boolean $_POST['admin'] : Si vrai, l'utilisateur est admin, si vide non * @param optional boolean $_POST['admin'] : Si vrai, l'utilisateur est admin, si vide non
*/ */
public function create($csrf) public function create($csrf)
{ {
if (!$this->verifyCSRF($csrf)) if (!$this->verifyCSRF($csrf)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return header('Location: ' . \Router::url('User', 'add')); return header('Location: ' . \descartes\Router::url('User', 'add'));
} }
$email = $_POST['email'] ?? false; $email = $_POST['email'] ?? false;
$password = $_POST['password'] ?? \controllers\internals\Tool::generate_password(rand(6,12)); $password = $_POST['password'] ?? \controllers\internals\Tool::generate_password(rand(6, 12));
$admin = $_POST['admin'] ?? false; $admin = $_POST['admin'] ?? false;
if (!$email) if (!$email) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez au moins fournir une adresse e-mail pour l\'utilisateur.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez au moins fournir une adresse e-mail pour l\'utilisateur.');
return header('Location: ' . \Router::url('User', 'add')); return header('Location: ' . \descartes\Router::url('User', 'add'));
} }
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'L\'adresse e-mail n\'est pas valide.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'L\'adresse e-mail n\'est pas valide.');
return header('Location: ' . \Router::url('User', 'add')); return header('Location: ' . \descartes\Router::url('User', 'add'));
} }
$email_send = \controllers\internals\Tool::send_email($email, EMAIL_CREATE_USER, ['email' => $email, 'password' => $password]); $email_send = \controllers\internals\Tool::send_email($email, EMAIL_CREATE_USER, ['email' => $email, 'password' => $password]);
if (!$email_send) if (!$email_send) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible d\'envoyer l\'e-mail à l\'utilisateur, le compte n\'a donc pas été créé.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible d\'envoyer l\'e-mail à l\'utilisateur, le compte n\'a donc pas été créé.');
return header('Location: ' . \Router::url('User', 'add')); return header('Location: ' . \descartes\Router::url('User', 'add'));
} }
$user_id = $this->internal_user->create($email, $password, $admin); $user_id = $this->internal_user->create($email, $password, $admin);
if (!$user_id) if (!$user_id) {
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce user.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce user.');
return header('Location: ' . \Router::url('User', 'add')); return header('Location: ' . \descartes\Router::url('User', 'add'));
} }
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'utilisateur a bien été créé.'); \modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'utilisateur a bien été créé.');
return header('Location: ' . \Router::url('User', 'list')); return header('Location: ' . \descartes\Router::url('User', 'list'));
} }
} }