Update database creation to support multi-user paradigm
This commit is contained in:
parent
922e6c1c3b
commit
493859a688
138
SmsApi.php
138
SmsApi.php
|
@ -1,138 +0,0 @@
|
|||
<?php
|
||||
namespace controllers\publics;
|
||||
|
||||
/**
|
||||
* Page des smsapis
|
||||
*/
|
||||
class SmsAPI extends \descartes\Controller
|
||||
{
|
||||
//On défini les constantes qui servent pour les retours d'API
|
||||
const API_ERROR_NO = 0;
|
||||
const API_ERROR_BAD_ID = 1;
|
||||
const API_ERROR_CREATION_FAILED = 2;
|
||||
const API_ERROR_MISSING_FIELD = 3;
|
||||
|
||||
|
||||
/**
|
||||
* Cette fonction est appelée avant toute les autres :
|
||||
* Elle vérifie que l'utilisateur est bien connecté
|
||||
* @return void;
|
||||
*/
|
||||
public function _before()
|
||||
{
|
||||
global $bdd;
|
||||
global $model;
|
||||
$this->bdd = $bdd;
|
||||
$this->model = $model;
|
||||
|
||||
$this->internal_user = new \controllers\internals\User($this->bdd);
|
||||
$this->internalContact = new \controllers\internals\Contact($this->bdd);
|
||||
|
||||
\controllers\internals\Tool::verifyconnect();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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 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
|
||||
*/
|
||||
public function api()
|
||||
{
|
||||
//On récupère l'email et le password
|
||||
$email = isset($_GET['email']) ? $_GET['email'] : null;
|
||||
$email = isset($_POST['email']) ? $_POST['email'] : $email;
|
||||
$password = isset($_GET['password']) ? $_GET['password'] : null;
|
||||
$password = isset($_POST['password']) ? $_POST['password'] : $password;
|
||||
|
||||
//Si les identifiants sont incorrect on retourne une erreur
|
||||
$user = $internal_user->check_credentials($email, $password);
|
||||
|
||||
if (!$user) {
|
||||
echo json_encode(array(
|
||||
'error' => self::API_ERROR_BAD_ID,
|
||||
));
|
||||
return true;
|
||||
}
|
||||
|
||||
//On map les variables $_GET
|
||||
$get_numbers = isset($_GET['numbers']) ? $_GET['numbers'] : array();
|
||||
$get_contacts = isset($_GET['contacts']) ? $_GET['contacts'] : array();
|
||||
$get_groupes = isset($_GET['groupes']) ? $_GET['groupes'] : array();
|
||||
|
||||
//On map les variables POST
|
||||
$post_numbers = isset($_POST['numbers']) ? $_POST['numbers'] : array();
|
||||
$post_contacts = isset($_POST['contacts']) ? $_POST['contacts'] : 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
|
||||
$text = isset($_GET['text']) ? $_GET['text'] : null;
|
||||
$text = isset($_POST['text']) ? $_POST['text'] : $text;
|
||||
$date = isset($_GET['date']) ? $_GET['date'] : null;
|
||||
$date = isset($_POST['date']) ? $_POST['date'] : $date;
|
||||
|
||||
//On passe tous les paramètres GET en tableau
|
||||
$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_groupes = is_array($get_groupes) ? $get_groupes : array($get_groupes);
|
||||
|
||||
//On passe tous les paramètres POST en tableau
|
||||
$post_numbers = is_array($post_numbers) ? $post_numbers : array($post_numbers);
|
||||
$post_contacts = is_array($post_contacts) ? $post_contacts : array($post_contacts);
|
||||
$post_groupes = is_array($post_groupes) ? $post_groupes : array($post_groupes);
|
||||
|
||||
//On merge les données reçus en GET, et celles en POST
|
||||
$numbers = array_merge($get_numbers, $post_numbers);
|
||||
$contacts = array_merge($get_contacts, $post_contacts);
|
||||
$groupes = array_merge($get_groupes, $post_groupes);
|
||||
|
||||
//Pour chaque contact, on récupère l'id du contact
|
||||
foreach ($contacts as $key => $contact) {
|
||||
if (!$contact = $internalContact->get_by_name($contact)) {
|
||||
unset($contacts[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$contacts[$key] = $contact['id'];
|
||||
}
|
||||
|
||||
//Pour chaque groupe, on récupère l'id du groupe
|
||||
foreach ($groupes as $key => $name) {
|
||||
if (!$groupe = $internalContact->get_by_name($groupe)) {
|
||||
unset($groupes[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$groupes[$key] = $groupe['id'];
|
||||
}
|
||||
|
||||
//Si la date n'est pas définie, on la met à la date du jour
|
||||
if (!$date) {
|
||||
$now = new \DateTime();
|
||||
$date = $now->format('Y-m-d H:i');
|
||||
}
|
||||
|
||||
//Si il manque des champs essentiels, on leve une erreur
|
||||
if (!$text || (!$numbers && !$contacts && !$groupes)) {
|
||||
echo json_encode(array(
|
||||
'error' => self::API_ERROR_MISSING_FIELD,
|
||||
));
|
||||
return false;
|
||||
}
|
||||
|
||||
//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)) {
|
||||
echo json_encode(array(
|
||||
'error' => self::API_ERROR_CREATION_FAILED,
|
||||
));
|
||||
return false;
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
'error' => self::API_ERROR_NO,
|
||||
));
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -6,18 +6,23 @@ USE raspisms;
|
|||
CREATE TABLE IF NOT EXISTS setting
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
value VARCHAR(1000) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS scheduled
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
send_by VARCHAR(25) DEFAULT NULL,
|
||||
at DATETIME NOT NULL,
|
||||
text VARCHAR(1000) NOT NULL,
|
||||
flash BOOLEAN NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
@ -32,7 +37,7 @@ CREATE TABLE IF NOT EXISTS received
|
|||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sent
|
||||
CREATE TABLE IF NOT EXISTS sended
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
at DATETIME NOT NULL,
|
||||
|
@ -46,29 +51,32 @@ CREATE TABLE IF NOT EXISTS sent
|
|||
|
||||
CREATE TABLE IF NOT EXISTS contact
|
||||
(
|
||||
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
number VARCHAR(20) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS groupe
|
||||
CREATE TABLE IF NOT EXISTS group
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS groupe_contact
|
||||
CREATE TABLE IF NOT EXISTS group_contact
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_groupe INT NOT NULL,
|
||||
id_group INT NOT NULL,
|
||||
id_contact INT NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_groupe) REFERENCES groupe (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (id_group) REFERENCES group (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (id_contact) REFERENCES contact (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
|
@ -82,14 +90,14 @@ CREATE TABLE IF NOT EXISTS scheduled_contact
|
|||
FOREIGN KEY (id_contact) REFERENCES contact (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS scheduled_groupe
|
||||
CREATE TABLE IF NOT EXISTS scheduled_group
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_scheduled INT NOT NULL,
|
||||
id_groupe INT NOT NULL,
|
||||
id_group INT NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_scheduled) REFERENCES scheduled (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (id_groupe) REFERENCES groupe (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
FOREIGN KEY (id_group) REFERENCES group (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS scheduled_number
|
||||
|
@ -104,19 +112,23 @@ CREATE TABLE IF NOT EXISTS scheduled_number
|
|||
CREATE TABLE IF NOT EXISTS command
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
name VARCHAR(25) NOT NULL,
|
||||
script VARCHAR(100) NOT NULL,
|
||||
admin BOOLEAN NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS event
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
type VARCHAR(25) NOT NULL,
|
||||
at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
text VARCHAR(255) NOT NULL,
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
@ -131,11 +143,35 @@ CREATE TABLE IF NOT EXISTS user
|
|||
UNIQUE (email)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_number
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
phone_number VARCHAR(25) NOT NULL,
|
||||
platform VARCHAR(100) NOT NULL,
|
||||
platform_datas JSON NOT NULL,
|
||||
CHECK (JSON_VALID(platform_datas)),
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
#Table to ensure external validation process by mailing or other
|
||||
CREATE TABLE IF NOT EXISTS validation
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
token VARCHAR(200) NOT NULL,
|
||||
random VARCHAR(32) NOT NULL,
|
||||
action VARCHAR(200) NOT NULL,
|
||||
datas JSON NOT NULL,
|
||||
CHECK (JSON_VALID(datas)),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE(token)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS transfer
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_received INT NOT NULL,
|
||||
progress BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_received) REFERENCES received (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
@ -143,16 +179,20 @@ CREATE TABLE IF NOT EXISTS transfer
|
|||
CREATE TABLE IF NOT EXISTS smsstop
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
number VARCHAR(20) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
UNIQUE (number)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS webhook
|
||||
(
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
id_user INT NOT NULL,
|
||||
url VARCHAR(250) NOT NULL,
|
||||
type INT NOT NULL,
|
||||
FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
@ -161,16 +201,5 @@ CREATE TABLE IF NOT EXISTS webhook_querie
|
|||
id INT NOT NULL AUTO_INCREMENT,
|
||||
url VARCHAR(250) NOT NULL,
|
||||
datas VARCHAR(10000) NOT NULL,
|
||||
progress BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
#On insert les données par défaut dans les settings
|
||||
INSERT INTO setting (name, value)
|
||||
VALUES ('transfer', '1'),
|
||||
('smsstops', '1'),
|
||||
('detect_url', '1'),
|
||||
('default_phone_country', 'fr'),
|
||||
('preferred_phone_country', 'fr,be,ca'),
|
||||
('sms_flash', '0'),
|
||||
('sms_reception_sound', '1');
|
||||
|
|
Loading…
Reference in New Issue