Fix style and add config file to php-cs-fixer

This commit is contained in:
osaajani 2019-10-30 00:30:39 +01:00
parent 485a0cb6fd
commit fab9e256ab
40 changed files with 2360 additions and 1128 deletions

View file

@ -1,10 +1,21 @@
<?php
namespace controllers\publics;
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
class Account extends \descartes\Controller
{
public $internal_user;
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
@ -14,7 +25,7 @@
}
/**
* Show profile page
* Show profile page.
*/
public function show()
{
@ -22,127 +33,161 @@
}
/**
* Update connected user password
* Update connected user password.
*
* @param $csrf : Le jeton CSRF
* @param string $_POST['password'] : The new password
*
* @return void;
*/
public function update_password($csrf)
{
$password = $_POST['password'] ?? false;
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
if (!$password) {
if (!$password)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner un mot de passe.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$update_password_result = $this->internal_user->update_password($_SESSION['user']['id'], $password);
if (!$update_password_result) {
if (!$update_password_result)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour le mot de passe.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le mot de passe a bien été mis à jour.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
/**
* Update user mail transfer property
* Update user mail transfer property.
*
* @param $csrf : CSRF token
* @param string $_POST['transfer'] : New transfer property value
*/
public function update_transfer($csrf)
{
$transfer = $_POST['transfer'] ?? false;
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
if ($transfer === false) {
if (false === $transfer)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez choisir une option parmis celles de la liste déroulante.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$transfer_update_result = $this->internal_user->update_transfer($_SESSION['user']['id'], $transfer);
if (!$transfer_update_result) {
if (!$transfer_update_result)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$_SESSION['user']['transfer'] = $transfer;
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le transfert a bien été ' . ($transfer ? 'activé' : 'désactivé') . '.');
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le transfert a bien été '.($transfer ? 'activé' : 'désactivé').'.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
/**
* Update user email
* Update user email.
*
* @param $csrf : Le jeton CSRF
* @param string $_POST['email'] : User new email
* @param string $_POST['email'] : User new email
* @param string $_POST['verif_email'] : Verif email
*/
public function update_email($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$email = $_POST['email'] ?? false;
if (!$email) {
if (!$email)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez fournir une adresse e-mail !');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
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 une adresse valide.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$update_email_result = $this->internal_user->update_email($_SESSION['user']['id'], $email);
if (!$update_email_result) {
if (!$update_email_result)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
;
}
$_SESSION['user']['email'] = $email;
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'email a bien été mis à jour.');
return $this->redirect(\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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$delete_account = $_POST['delete_account'] ?? false;
if (!$delete_account) {
if (!$delete_account)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Pour supprimer le compte, vous devez cocher la case correspondante.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
$delete_account_result = $this->internal_user->delete($_SESSION['user']['id']);
if (!$delete_account_result) {
if (!$delete_account_result)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de supprimer le compte.');
return $this->redirect(\descartes\Router::url('Account', 'show'));
}
@ -150,13 +195,13 @@
}
/**
* Logout a user and redirect to login page
* @return null
* Logout a user and redirect to login page.
*/
public function logout()
{
session_unset();
session_destroy();
return $this->redirect(\descartes\Router::url('Connect', 'login'));
}
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des commandes
* Page des commandes.
*/
class Command extends \descartes\Controller
{
@ -15,12 +26,14 @@ namespace controllers\publics;
$this->internal_command = new \controllers\internals\Command($bdd);
$this->internal_event = new \controllers\internals\Event($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
@ -30,29 +43,36 @@ namespace controllers\publics;
}
/**
* 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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Command', 'list'));
return false;
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_command->delete($id);
}
$this->redirect(\descartes\Router::url('Command', 'list'));
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()
{
@ -60,34 +80,39 @@ namespace controllers\publics;
}
/**
* 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
*/
public function edit()
{
global $db;
$ids = $_GET['ids'] ?? [];
$commands = $this->internal_command->get_by_ids($ids);
$this->render('command/edit', array(
$this->render('command/edit', [
'commands' => $commands,
));
]);
}
/**
* Cette fonction insert une nouvelle commande
* Cette fonction insert une nouvelle commande.
*
* @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 boolean $_POST['admin'] : Si la commande necessite les droits d'admin (par défaut non)
* @param bool $_POST['admin'] : Si la commande necessite les droits d'admin (par défaut non)
*
* @return boolean;
*/
public function create($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Command', 'list'));
return false;
}
@ -95,49 +120,61 @@ namespace controllers\publics;
$script = $_POST['script'] ?? 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.');
return $this->redirect(\descartes\Router::url('Command', 'list'));
}
if (!$this->internal_command->create($name, $script, $admin)) {
if (!$this->internal_command->create($name, $script, $admin))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible créer cette commande.');
return $this->redirect(\descartes\Router::url('commands', 'add'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'La commande a bien été crée.');
return $this->redirect(\descartes\Router::url('Command', 'list'));
}
/**
* Cette fonction met à jour une commande
* Cette fonction met à jour une commande.
*
* @param $csrf : Le jeton CSRF
* @param array $_POST['commands'] : Un tableau des commandes avec leur nouvelle valeurs
*
* @return boolean;
*/
public function update($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Command', 'list'));
return false;
}
$nb_commands_update = 0;
foreach ($_POST['commands'] as $command) {
foreach ($_POST['commands'] as $command)
{
$update_command = $this->internal_command->update($command['id'], $command['name'], $command['script'], $command['admin']);
$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.');
$this->redirect(\descartes\Router::url('Command', 'list'));
return false;
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Toutes les commandes ont été modifiées avec succès.');
$this->redirect(\descartes\Router::url('Command', 'list'));
return true;
}
}

View file

@ -1,39 +1,51 @@
<?php
namespace controllers\publics;
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page de connexion
* Page de connexion.
*/
class Connect extends \descartes\Controller
{
private $internal_user;
/**
* Cette fonction est appelée avant toute les autres :
* Cette fonction est appelée avant toute les autres :.
*
* @return void;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_user = new \controllers\internals\User($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* Cette fonction retourne la fenetre de connexion
* Cette fonction retourne la fenetre de connexion.
*/
public function login()
{
$this->render('connect/login');
}
/**
* Cette fonction connecte un utilisateur, et le redirige sur la page d'accueil
* @param string $_POST['mail'] : L'email de l'utilisateur
* 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['password'] : Le mot de passe de l'utilisateur
* @return void
*/
public function connection()
{
@ -41,21 +53,23 @@
$password = $_POST['password'] ?? false;
$user = $this->internal_user->check_credentials($email, $password);
if (!$user) {
if (!$user)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Email ou mot de passe invalide.');
return $this->redirect(\descartes\Router::url('Connect', 'login'));
}
$_SESSION['connect'] = true;
$_SESSION['user'] = $user;
$_SESSION['csrf'] = str_shuffle(uniqid().uniqid());
return $this->redirect(\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;
*/
public function forget_password()
@ -64,24 +78,29 @@
}
/**
* Cette fonction envoi un email contenant un lien pour re-générer un password oublié
* @param string $csrf : jeton csrf
* Cette fonction envoi un email contenant un lien pour re-générer un password oublié.
*
* @param string $csrf : jeton csrf
* @param string $_POST['email'] : L'email pour lequel on veut envoyer un nouveau password
*/
public function send_reset_password($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Connect', 'forget_password'));
return false;
}
$email = $_POST['email'] ?? false;
$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.');
$this->redirect(\descartes\Router::url('Connect', 'forget_password'));
return false;
}
@ -96,9 +115,10 @@
}
/**
* Cette fonction permet à un utilisateur de re-définir son mot de passe
* @param int $user_id : L'id du user dont on veut modifier le password
* @param string $token : Le token permetttant de vérifier que l'opération est légitime
* Cette fonction permet à un utilisateur de re-définir son mot de passe.
*
* @param int $user_id : L'id du user dont on veut modifier le password
* @param string $token : Le token permetttant de vérifier que l'opération est légitime
* @param optionnal $_POST['password'] : Le nouveau password à utiliser
*/
public function reset_password($user_id, $token)
@ -106,22 +126,24 @@
$password = $_POST['password'] ?? false;
$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');
}
if (!$password) {
if (!$password)
{
return $this->render('connect/reset-password');
}
$this->internal_user->update_password($user_id, $password);
return $this->render('connect/reset-password-done');
}
/**
* Cette fonction déconnecte un utilisateur et le renvoie sur la page d'accueil
* @return void
* Cette fonction déconnecte un utilisateur et le renvoie sur la page d'accueil.
*/
public function logout()
{

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des contacts
* Page des contacts.
*/
class Contact extends \descartes\Controller
{
@ -11,21 +22,24 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_contact = new \controllers\internals\Contact($bdd);
$this->internal_event = new \controllers\internals\Event($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
@ -33,30 +47,37 @@ namespace controllers\publics;
$contacts = $this->internal_contact->get_list(25, $page);
$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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Contact', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_contact->delete($id);
}
$this->redirect(\descartes\Router::url('Contact', 'list'));
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()
{
@ -64,7 +85,8 @@ namespace controllers\publics;
}
/**
* 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
*/
public function edit()
@ -74,77 +96,95 @@ namespace controllers\publics;
$contacts = $this->internal_contact->get_by_ids($ids);
$this->render('contact/edit', array(
$this->render('contact/edit', [
'contacts' => $contacts,
));
]);
}
/**
* Cette fonction insert un nouveau contact
* Cette fonction insert un nouveau contact.
*
* @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
*/
public function create($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Contact', 'add'));
}
$name = $_POST['name'] ?? false;
$number = $_POST['number'] ?? false;
if (!$name || !$number) {
if (!$name || !$number)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !');
return $this->redirect(\descartes\Router::url('Contact', 'add'));
}
$number = \controllers\internals\Tool::parse_phone($number);
if (!$number) {
if (!$number)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Numéro de téléphone incorrect.');
return $this->redirect(\descartes\Router::url('Contact', 'add'));
}
if (!$this->internal_contact->create($number, $name)) {
if (!$this->internal_contact->create($number, $name))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce contact.');
return $this->redirect(\descartes\Router::url('Contact', 'add'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le contact a bien été créé.');
return $this->redirect(\descartes\Router::url('Contact', 'list'));
}
/**
* Cette fonction met à jour une contacte
* Cette fonction met à jour une contacte.
*
* @param $csrf : Le jeton CSRF
* @param array $_POST['contacts'] : Un tableau des contactes avec leur nouvelle valeurs
*
* @return boolean;
*/
public function update($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Contact', 'list'));
}
$nb_contacts_update = 0;
foreach ($_POST['contacts'] as $contact) {
foreach ($_POST['contacts'] as $contact)
{
$nb_contacts_update += $this->internal_contact->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.');
return $this->redirect(\descartes\Router::url('Contact', 'list'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les contacts ont été modifiés avec succès.');
return $this->redirect(\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()
{

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\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 \descartes\Controller
{
@ -16,13 +27,14 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_sended = new \controllers\internals\Sended($bdd);
$this->internal_received = new \controllers\internals\Received($bdd);
$this->internal_contact = new \controllers\internals\Contact($bdd);
@ -30,19 +42,20 @@ namespace controllers\publics;
$this->internal_scheduled = new \controllers\internals\Scheduled($bdd);
$this->internal_command = new \controllers\internals\Command($bdd);
$this->internal_event = new \controllers\internals\Event($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* Cette fonction est un alias de show
* Cette fonction est un alias de show.
*
* @return void;
*/
public function show()
{
//Creation de l'object de base de données
global $db;
//Recupération des nombres des 4 panneaux d'accueil
$nb_contacts = $this->internal_contact->count();
$nb_groups = $this->internal_group->count();
@ -67,35 +80,38 @@ namespace controllers\publics;
$nb_receiveds_by_day = $this->internal_received->count_by_day_since($formated_date);
//On va traduire ces données pour les afficher en graphique
$array_area_chart = array();
$array_area_chart = [];
$today_less_7_day = new \DateTime();
$today_less_7_day->sub(new \DateInterval('P7D'));
$increment_day = new \DateInterval('P1D');
$i = 0;
//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);
$i ++;
++$i;
$date_f = $today_less_7_day->format('Y-m-d');
$array_area_chart[$date_f] = array(
$array_area_chart[$date_f] = [
'period' => $date_f,
'sendeds' => 0,
'receiveds' => 0,
);
];
}
$total_sendeds = 0;
$total_receiveds = 0;
//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;
$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;
$total_receiveds += $nb_received;
}
@ -105,8 +121,7 @@ namespace controllers\publics;
$array_area_chart = array_values($array_area_chart);
$this->render('dashboard/show', array(
$this->render('dashboard/show', [
'nb_contacts' => $nb_contacts,
'nb_groups' => $nb_groups,
'nb_scheduleds' => $nb_scheduleds,
@ -119,6 +134,6 @@ namespace controllers\publics;
'receiveds' => $receiveds,
'events' => $events,
'datas_area_chart' => json_encode($array_area_chart),
));
]);
}
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des discussions
* Page des discussions.
*/
class Discussion extends \descartes\Controller
{
@ -13,59 +24,63 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_sended = new \controllers\internals\Sended($bdd);
$this->internal_scheduled = new \controllers\internals\Scheduled($bdd);
$this->internal_received = new \controllers\internals\Received($bdd);
$this->internal_contact = new \controllers\internals\Contact($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* 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()
{
$discussions = $this->internal_received->get_discussions();
foreach ($discussions as $key => $discussion) {
if (!$contact = $this->internal_contact->get_by_number($discussion['number'])) {
foreach ($discussions as $key => $discussion)
{
if (!$contact = $this->internal_contact->get_by_number($discussion['number']))
{
continue;
}
$discussions[$key]['contact'] = $contact['name'];
}
$this->render('discussion/list', array(
$this->render('discussion/list', [
'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
*/
public function show($number)
{
$contact = $this->internal_contact->get_by_number($number);
$this->render('discussion/show', array(
$this->render('discussion/show', [
'number' => $number,
'contact' => $contact,
));
]);
}
/**
* 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
* 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 $transaction_id : Le numéro unique de la transaction ajax (sert à vérifier si la requete doit être prise en compte)
*/
public function get_messages($number, $transaction_id)
@ -79,49 +94,56 @@ namespace controllers\publics;
$messages = [];
foreach ($sendeds as $sended) {
$messages[] = array(
foreach ($sendeds as $sended)
{
$messages[] = [
'date' => htmlspecialchars($sended['at']),
'text' => htmlspecialchars($sended['content']),
'type' => 'sended',
'status' => ($sended['delivered'] ? 'delivered' : ($sended['failed'] ? 'failed' : '')),
);
];
}
foreach ($receiveds as $received) {
$messages[] = array(
foreach ($receiveds as $received)
{
$messages[] = [
'date' => htmlspecialchars($received['at']),
'text' => htmlspecialchars($received['content']),
'type' => 'received',
'md5' => md5($received['at'] . $received['content']),
);
'md5' => md5($received['at'].$received['content']),
];
}
foreach ($scheduleds as $scheduled) {
$messages[] = array(
foreach ($scheduleds as $scheduled)
{
$messages[] = [
'date' => htmlspecialchars($scheduled['at']),
'text' => htmlspecialchars($scheduled['content']),
'type' => 'inprogress',
);
];
}
//On va trier le tableau des messages
usort($messages, function ($a, $b) {
return strtotime($a["date"]) - strtotime($b["date"]);
usort($messages, function ($a, $b)
{
return strtotime($a['date']) - strtotime($b['date']);
});
//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]);
return true;
}
/**
* Cette fonction permet d'envoyer facilement un sms à un numéro donné
* @param string $csrf : Le jeton csrf
* Cette fonction permet d'envoyer facilement un sms à un numéro donné.
*
* @param string $csrf : Le jeton csrf
* @param string $_POST['content'] : Le contenu du Sms
* @param string $_POST['numbers'] : Un tableau avec le numero des gens auxquel envoyer le sms
*
* @return string : json string Le statut de l'envoi
*/
public function send($csrf)
@ -129,41 +151,49 @@ namespace controllers\publics;
$return = ['success' => true, 'message' => ''];
//On vérifie que le jeton csrf est bon
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
$return['success'] = false;
$return['message'] = 'Jeton CSRF invalide';
echo json_encode($return);
return false;
}
$now = new \DateTime();
$now = $now->format('Y-m-d H:i:s');
$scheduled = [];
$scheduled['at'] = $now;
$scheduled['content'] = $_POST['content'] ?? '';
$numbers = $_POST['numbers'] ?? false;
if (!$numbers) {
if (!$numbers)
{
$return['success'] = false;
$return['message'] = 'Vous devez renseigner un numéro valide';
echo json_encode($return);
return false;
}
if (!$this->internal_scheduled->create($scheduled, $numbers)) {
if (!$this->internal_scheduled->create($scheduled, $numbers))
{
$return['success'] = false;
$return['message'] = 'Impossible de créer le Sms';
echo json_encode($return);
return false;
}
echo json_encode($return);
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 string : json string Tableau des ids des sms qui sont envoyés
*/
public function checksendeds()
@ -174,34 +204,41 @@ namespace controllers\publics;
//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 = [];
foreach ($_SESSION['discussion_wait_progress'] as $key => $id_scheduled) {
foreach ($_SESSION['discussion_wait_progress'] as $key => $id_scheduled)
{
$found = false;
foreach ($scheduleds as $scheduled) {
if ($id_scheduled == $scheduled['id']) {
foreach ($scheduleds as $scheduled)
{
if ($id_scheduled === $scheduled['id'])
{
$found = true;
}
}
if (!$found) {
if (!$found)
{
unset($_SESSION['discussion_wait_progress'][$key]);
$sendeds[] = $id_scheduled;
}
}
echo json_encode($sendeds);
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
*
* @return string : json string Un tableau avec les messages
*/
public function checkreceiveds($number)
{
$now = new \DateTime();
$now = $now->format('Y-m-d H:i');
$_SESSION['discussion_last_checkreceiveds'] = isset($_SESSION['discussion_last_checkreceiveds']) ? $_SESSION['discussion_last_checkreceiveds'] : $now;
$receiveds = $this->internal_received->get_since_for_number_by_date($_SESSION['discussion_last_checkreceiveds'], $number);
@ -209,10 +246,13 @@ namespace controllers\publics;
//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'] : [];
foreach ($receiveds as $key => $received) {
foreach ($receiveds as $key => $received)
{
//Sms jamais recu
if (array_search($received['id'], $_SESSION['discussion_already_receiveds']) === false) {
if (false === array_search($received['id'], $_SESSION['discussion_already_receiveds'], true))
{
$_SESSION['discussion_already_receiveds'][] = $received['id'];
continue;
}
@ -222,7 +262,7 @@ namespace controllers\publics;
//On met à jour la date de dernière verif
$_SESSION['discussion_last_checkreceiveds'] = $now;
echo json_encode($receiveds);
}
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des events
* Page des events.
*/
class Event extends \descartes\Controller
{
@ -10,48 +21,59 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_event = new \controllers\internals\Event($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
$page = (int) $page;
$limit = 25;
$events = $this->internal_event->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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\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.');
return $this->redirect(\descartes\Router::url('Event', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_event->delete($id);
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des groups
* Page des groups.
*/
class Group extends \descartes\Controller
{
@ -12,13 +23,14 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
{
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_group = new \controllers\internals\Group($bdd);
$this->internal_contact = new \controllers\internals\Contact($bdd);
$this->internal_event = new \controllers\internals\Event($bdd);
@ -27,31 +39,39 @@ namespace controllers\publics;
}
/**
* Cette fonction retourne tous les groups, sous forme d'un tableau permettant l'administration de ces groups
* Cette fonction retourne tous les groups, sous forme d'un tableau permettant l'administration de ces groups.
*
* @param mixed $page
*/
public function list($page = 0)
{
$page = (int) $page;
$groups = $this->internal_group->get_list(25, $page);
foreach ($groups as $key => $group) {
foreach ($groups as $key => $group)
{
$contacts = $this->internal_group->get_contact($group['id']);
$groups[$key]['nb_contacts'] = count($contacts);
$groups[$key]['nb_contacts'] = \count($contacts);
}
$this->render('group/list', ['groups' => $groups]);
}
/**
* Cette fonction va supprimer une liste de groups
* Cette fonction va supprimer une liste de groups.
*
* @param array int $_GET['ids'] : Les id des groups à supprimer
* @param mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Group', 'list'));
return false;
}
@ -59,11 +79,12 @@ namespace controllers\publics;
$this->internal_group->delete($ids);
$this->redirect(\descartes\Router::url('Group', 'list'));
return true;
}
/**
* Cette fonction retourne la page d'ajout d'un group
* Cette fonction retourne la page d'ajout d'un group.
*/
public function add()
{
@ -71,7 +92,8 @@ namespace controllers\publics;
}
/**
* Cette fonction retourne la page d'édition des groups
* Cette fonction retourne la page d'édition des groups.
*
* @param int... $ids : Les id des groups à supprimer
*/
public function edit()
@ -80,78 +102,95 @@ namespace controllers\publics;
$groups = $this->internal_group->get_by_ids($ids);
foreach ($groups as $key => $group) {
foreach ($groups as $key => $group)
{
$groups[$key]['contacts'] = $this->internal_group->get_contact($group['id']);
}
$this->render('group/edit', array(
$this->render('group/edit', [
'groups' => $groups,
));
]);
}
/**
* Cette fonction insert un nouveau group
* Cette fonction insert un nouveau group.
*
* @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom du group
* @param array $_POST['contacts'] : Les ids des contacts à mettre dans le group
* @param string $_POST['name'] : Le nom du group
* @param array $_POST['contacts'] : Les ids des contacts à mettre dans le group
*/
public function create($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Group', 'add'));
}
$name = $_POST['name'] ?? false;
$contacts_ids = $_POST['contacts'] ?? false;
if (!$name || !$contacts_ids) {
if (!$name || !$contacts_ids)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Des champs sont manquants !');
return $this->redirect(\descartes\Router::url('Group', 'add'));
}
$id_group = $this->internal_group->create($name, $contacts_ids);
if (!$id_group) {
if (!$id_group)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer ce group.');
return $this->redirect(\descartes\Router::url('Group', 'add'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le group a bien été créé.');
return $this->redirect(\descartes\Router::url('Group', 'list'));
}
/**
* Cette fonction met à jour une group
* Cette fonction met à jour une group.
*
* @param $csrf : Le jeton CSRF
* @param array $_POST['groups'] : Un tableau des groups avec leur nouvelle valeurs & une entrée 'contacts_id' avec les ids des contacts pour chaque group
*
* @return boolean;
*/
public function update($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
$this->redirect(\descartes\Router::url('Group', 'list'));
return false;
}
$groups = $_POST['groups'] ?? [];
$nb_groups_update = 0;
foreach ($groups as $id => $group) {
foreach ($groups as $id => $group)
{
$nb_groups_update += (int) $this->internal_group->update($id, $group['name'], $group['contacts_ids']);
}
if ($nb_groups_update != count($groups)) {
if ($nb_groups_update !== \count($groups))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains groups n\'ont pas pu êtres mis à jour.');
return $this->redirect(\descartes\Router::url('Group', 'list'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les groups ont été modifiés avec succès.');
return $this->redirect(\descartes\Router::url('Group', 'list'));
}
/**
* Cette fonction retourne la liste des groups sous forme JSON
* Cette fonction retourne la liste des groups sous forme JSON.
*/
public function json_list()
{

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des receiveds
* Page des receiveds.
*/
class Received extends \descartes\Controller
{
@ -11,7 +22,8 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
@ -24,7 +36,9 @@ namespace controllers\publics;
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
@ -32,67 +46,82 @@ namespace controllers\publics;
$limit = 25;
$receiveds = $this->internal_received->get_list($limit, $page);
foreach ($receiveds as $key => $received) {
if (!$contact = $this->internal_contact->get_by_number($received['origin'])) {
foreach ($receiveds as $key => $received)
{
if (!$contact = $this->internal_contact->get_by_number($received['origin']))
{
continue;
}
$receiveds[$key]['send_by'] = $contact['name'] . ' (' . $received['origin'] . ')';
$receiveds[$key]['send_by'] = $contact['name'].' ('.$received['origin'].')';
}
$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 string : A JSON Un tableau des Sms reçus
*/
public function popup()
{
$now = new \DateTime();
$receiveds = $this->internal_received->get_since_by_date($now->format('Y-m-d'));
foreach ($receiveds as $key => $received) {
if (!$contact = $this->internal_contact->get_by_number($received['origin'])) {
foreach ($receiveds as $key => $received)
{
if (!$contact = $this->internal_contact->get_by_number($received['origin']))
{
continue;
}
$receiveds[$key]['origin'] = $contact['name'] . ' (' . $received['origin'] . ')';
$receiveds[$key]['origin'] = $contact['name'].' ('.$received['origin'].')';
}
$nb_received = count($receiveds);
if (!isset($_SESSION['popup_nb_receiveds']) || $_SESSION['popup_nb_receiveds'] > $nb_received) {
$nb_received = \count($receiveds);
if (!isset($_SESSION['popup_nb_receiveds']) || $_SESSION['popup_nb_receiveds'] > $nb_received)
{
$_SESSION['popup_nb_receiveds'] = $nb_received;
}
$newly_receiveds = array_slice($receiveds, $_SESSION['popup_nb_receiveds']);
$newly_receiveds = \array_slice($receiveds, $_SESSION['popup_nb_receiveds']);
$_SESSION['popup_nb_receiveds'] = $nb_received;
echo json_encode($newly_receiveds);
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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\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.');
return $this->redirect(\descartes\Router::url('Received', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_received->delete($id);
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des scheduleds
* Page des scheduleds.
*/
class Scheduled extends \descartes\Controller
{
@ -10,7 +21,8 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
@ -22,7 +34,9 @@ namespace controllers\publics;
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
@ -30,21 +44,27 @@ namespace controllers\publics;
$scheduleds = $this->internal_scheduled->get_list(25, $page);
$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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Scheduled', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_scheduled->delete($id);
}
@ -52,7 +72,7 @@ namespace controllers\publics;
}
/**
* Cette fonction retourne la page d'ajout d'un scheduled
* Cette fonction retourne la page d'ajout d'un scheduled.
*/
public function add()
{
@ -66,7 +86,8 @@ namespace controllers\publics;
}
/**
* 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
*/
public function edit()
@ -76,79 +97,93 @@ namespace controllers\publics;
$scheduleds = $this->internal_scheduled->get_by_ids($ids);
//Pour chaque message on ajoute les numéros, les contacts & les groups
foreach ($scheduleds as $key => $scheduled) {
foreach ($scheduleds as $key => $scheduled)
{
$scheduleds[$key]['numbers'] = [];
$scheduleds[$key]['contacts'] = [];
$scheduleds[$key]['groups'] = [];
$numbers = $this->internal_scheduled->get_numbers($scheduled['id']);
foreach ($numbers as $number) {
foreach ($numbers as $number)
{
$scheduleds[$key]['numbers'][] = $number['number'];
}
$contacts = $this->internal_scheduled->get_contacts($scheduled['id']);
foreach ($contacts as $contact) {
foreach ($contacts as $contact)
{
$scheduleds[$key]['contacts'][] = (int) $contact['id'];
}
$groups = $this->internal_scheduled->get_groups($scheduled['id']);
foreach ($groups as $group) {
foreach ($groups as $group)
{
$scheduleds[$key]['groups'][] = (int) $group['id'];
}
}
$this->render('scheduled/edit', array(
$this->render('scheduled/edit', [
'scheduleds' => $scheduleds,
));
]);
}
/**
* Cette fonction insert un nouveau scheduled
* Cette fonction insert un nouveau scheduled.
*
* @param $csrf : Le jeton CSRF
* @param string $_POST['name'] : Le nom 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['name'] : Le nom 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['contacts'] : Les contacts du scheduled
* @param string $_POST['groups'] : Les groups du scheduled
* @param string $_POST['groups'] : Les groups du scheduled
*/
public function create($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Scheduled', 'add'));
}
$date = $_POST['date'] ?? false;
$content = $_POST['content'] ?? false;
$numbers = $_POST['numbers'] ?? [];
$contacts = $_POST['contacts'] ?? [];
$groups = $_POST['groups'] ?? [];
if (!$content) {
if (!$content)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous ne pouvez pas créer un Sms sans message.');
return $this->redirect(\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.');
return $this->redirect(\descartes\Router::url('Scheduled', 'add'));
}
foreach ($numbers as $key => $number) {
foreach ($numbers as $key => $number)
{
$number = \controllers\internals\Tool::parse_phone($number);
if (!$number) {
if (!$number)
{
unset($numbers[$key]);
continue;
}
$numbers[$key] = $number;
}
if (!$numbers && !$contacts && !$groups) {
if (!$numbers && !$contacts && !$groups)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner au moins un destinataire pour le Sms.');
return $this->redirect(\descartes\Router::url('Scheduled', 'add'));
}
@ -159,62 +194,79 @@ namespace controllers\publics;
'progress' => false,
];
if (!$scheduled_id = $this->internal_scheduled->create($scheduled, $numbers, $contacts, $groups)) {
if (!$scheduled_id = $this->internal_scheduled->create($scheduled, $numbers, $contacts, $groups))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de créer le Sms.');
return $this->redirect(\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 $this->redirect(\descartes\Router::url('Scheduled', 'list'));
}
/**
* Cette fonction met à jour une schedulede
* Cette fonction met à jour une schedulede.
*
* @param $csrf : Le jeton CSRF
* @param array $_POST['scheduleds'] : Un tableau des scheduledes avec leur nouvelle valeurs + les numbers, contacts et groups liées
*
* @return boolean;
*/
public function update($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Scheduled', 'list'));
}
$scheduleds = $_POST['scheduleds'] ?? [];
$all_update_ok = true;
foreach ($scheduleds as $id_scheduled => $scheduled) {
foreach ($scheduleds as $id_scheduled => $scheduled)
{
$date = $scheduled['date'] ?? false;
$content = $scheduled['content'] ?? false;
$numbers = $scheduled['numbers'] ?? [];
$contacts = $scheduled['contacts'] ?? [];
$groups = $scheduled['groups'] ?? [];
if (!$content) {
if (!$content)
{
$all_update_ok = false;
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;
continue;
}
foreach ($numbers as $key => $number) {
foreach ($numbers as $key => $number)
{
$number = \controllers\internals\Tool::parse_phone($number);
if (!$number) {
if (!$number)
{
unset($numbers[$key]);
continue;
}
$numbers[$key] = $number;
}
if (!$numbers && !$contacts && !$groups) {
if (!$numbers && !$contacts && !$groups)
{
$all_update_ok = false;
continue;
}
@ -231,18 +283,23 @@ namespace controllers\publics;
'groups_ids' => $groups,
];
if (!$this->internal_scheduled->update([$scheduled])) {
if (!$this->internal_scheduled->update([$scheduled]))
{
$all_update_ok = false;
continue;
}
}
if (!$all_update_ok) {
if (!$all_update_ok)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Certains Sms n\'ont pas pu êtres mis à jour.');
return $this->redirect(\descartes\Router::url('Scheduled', 'list'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Tous les Sms ont été mis à jour.');
return $this->redirect(\descartes\Router::url('Scheduled', 'list'));
}
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des sendeds
* Page des sendeds.
*/
class Sended extends \descartes\Controller
{
@ -10,7 +21,8 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
@ -22,30 +34,38 @@ namespace controllers\publics;
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
$page = (int) $page;
$limit = 25;
$sendeds = $this->internal_sended->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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Sended', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_sended->delete($id);
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des settings
* Page des settings.
*/
class Setting extends \descartes\Controller
{
@ -13,51 +24,61 @@ namespace controllers\publics;
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$this->internal_setting = new \controllers\internals\Setting($bdd);
\controllers\internals\Tool::verifyconnect();
}
/**
* Return all settings to administrate them
* Return all settings to administrate them.
*/
public function 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 $csrf : CSRF token
* @param string $_POST['setting_value'] : Setting's new value
*
* @return boolean;
*/
public function update(string $setting_name, string $csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
if (!\controllers\internals\Tool::is_admin()) {
if (!\controllers\internals\Tool::is_admin())
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez être administrateur pour pouvoir modifier un réglage.');
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
$setting_value = $_POST['setting_value'] ?? false;
if ($setting_value === false) {
if (false === $setting_value)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Vous devez renseigner une valeure pour le réglage.');
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
$update_setting_result = $this->internal_setting->update($setting_name, $setting_value);
if ($update_setting_result === false) {
if (false === $update_setting_result)
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Impossible de mettre à jour ce réglage.');
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'Le réglage a bien été mis à jour.');
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
}

View file

@ -1,8 +1,19 @@
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des smsstops
* Page des smsstops.
*/
class SmsStop extends \descartes\Controller
{
@ -10,7 +21,8 @@ namespace controllers\publics;
/**
* 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;
*/
public function __construct()
@ -22,35 +34,45 @@ namespace controllers\publics;
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
$page = (int) $page;
$limit = 25;
$smsstops = $this->internal_sms_stop->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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\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" !');
return $this->redirect(\descartes\Router::url('SmsStop', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_sms_stop->delete($id);
}

View file

@ -1,16 +1,28 @@
<?php
namespace controllers\publics;
/**
* Page des users
*/
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\publics;
/**
* Page des users.
*/
class User extends \descartes\Controller
{
private $internal_user;
/**
* 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;
*/
public function __construct()
@ -22,7 +34,9 @@ class User extends \descartes\Controller
}
/**
* 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.
*
* @param mixed $page
*/
public function list($page = 0)
{
@ -30,26 +44,34 @@ class User extends \descartes\Controller
$users = $this->internal_user->list(25, $page);
$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 mixed $csrf
*
* @return boolean;
*/
public function delete($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\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 !');
return $this->redirect(\descartes\Router::url('User', 'list'));
}
$ids = $_GET['ids'] ?? [];
foreach ($ids as $id) {
foreach ($ids as $id)
{
$this->internal_user->delete($id);
}
@ -57,7 +79,7 @@ class User extends \descartes\Controller
}
/**
* Cette fonction retourne la page d'ajout d'un user
* Cette fonction retourne la page d'ajout d'un user.
*/
public function add()
{
@ -65,48 +87,60 @@ class User extends \descartes\Controller
}
/**
* Cette fonction insert un nouveau user
* Cette fonction insert un nouveau user.
*
* @param $csrf : Le jeton CSRF
* @param string $_POST['email'] : 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_confirm'] : Confirmation du mot de passe de l'utilisateur
* @param optional boolean $_POST['admin'] : Si vrai, l'utilisateur est admin, si vide non
* @param string $_POST['email'] : 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_confirm'] : Confirmation du mot de passe de l'utilisateur
* @param optional boolean $_POST['admin'] : Si vrai, l'utilisateur est admin, si vide non
*/
public function create($csrf)
{
if (!$this->verify_csrf($csrf)) {
if (!$this->verify_csrf($csrf))
{
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('danger', 'Jeton CSRF invalid !');
return $this->redirect(\descartes\Router::url('User', 'add'));
}
$email = $_POST['email'] ?? false;
$password = $_POST['password'] ?? \controllers\internals\Tool::generate_password(rand(6, 12));
$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.');
return $this->redirect(\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.');
return $this->redirect(\descartes\Router::url('User', 'add'));
}
$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éé.');
return $this->redirect(\descartes\Router::url('User', 'add'));
}
$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.');
return $this->redirect(\descartes\Router::url('User', 'add'));
}
\modules\DescartesSessionMessages\internals\DescartesSessionMessages::push('success', 'L\'utilisateur a bien été créé.');
return $this->redirect(\descartes\Router::url('User', 'list'));
}
}