Merge remote-tracking branch 'RaspbianFrance/master'

This commit is contained in:
memento 2015-09-23 10:59:46 +02:00
commit cd38351c4c
18 changed files with 570 additions and 31 deletions

View file

@ -85,6 +85,7 @@
'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' : '')),
); );
} }

View file

@ -132,22 +132,41 @@
} }
} }
$smsStops = $db->getFromTableWhere('sms_stop');
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
if (RASPISMS_SETTINGS_SMS_STOP)
{
foreach ($smsStops as $smsStop)
{
if (!($number == $smsStop['number']))
{
continue;
}
echo "Un SMS destiné au " . $number . " a été bloqué par SMS STOP\n";
continue(2); //On passe au numéro suivant !
}
}
echo " Envoi d'un SMS au " . $number . "\n"; echo " Envoi d'un SMS au " . $number . "\n";
//On ajoute le SMS aux SMS envoyés //On ajoute le SMS aux SMS envoyés
//Pour plus de précision, on remet la date à jour en réinstanciant l'objet DateTime (et on reformatte la date, bien entendu) //Pour plus de précision, on remet la date à jour en réinstanciant l'objet DateTime (et on reformatte la date, bien entendu)
$now = new DateTime(); $now = new DateTime();
$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']])) 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";
} }
$id_sended = $db->lastId(); $id_sended = $db->lastId();
//Commande qui envoie le SMS //Commande qui envoie le SMS
$commande_send_sms = 'gammu-smsd-inject TEXT ' . escapeshellarg($number) . ' -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;
//Commande qui s'assure de passer le SMS dans ceux envoyés, et de lui donner le bon statut //Commande qui s'assure de passer le SMS dans ceux envoyés, et de lui donner le bon statut
//On va liée les deux commandes pour envoyer le SMS puis le passer en echec //On va liée les deux commandes pour envoyer le SMS puis le passer en echec
@ -183,6 +202,8 @@
continue; continue;
} }
echo "Analyse du SMS " . $dir . "\n";
//On récupère la date du SMS à la seconde près grâce au nom du fichier (Cf. parseSMS.sh) //On récupère la date du SMS à la seconde près grâce au nom du fichier (Cf. parseSMS.sh)
//Il faut mettre la date au format Y-m-d H:i:s //Il faut mettre la date au format Y-m-d H:i:s
$date = substr($dir, 0, 4) . '-' . substr($dir, 4, 2) . '-' . substr($dir, 6, 2) . ' ' . substr($dir, 8, 2) . ':' . substr($dir, 10, 2) . ':' . substr($dir, 12, 2); $date = substr($dir, 0, 4) . '-' . substr($dir, 4, 2) . '-' . substr($dir, 6, 2) . ' ' . substr($dir, 8, 2) . ':' . substr($dir, 10, 2) . ':' . substr($dir, 12, 2);
@ -217,6 +238,54 @@
$number = internalTools::parsePhone($number); $number = internalTools::parsePhone($number);
$text = $content_file[1]; $text = $content_file[1];
//On gère les SMS STOP
if (trim($text) == 'STOP')
{
echo 'STOP SMS detected ' . $number . "\n";
$this->wlog('STOP SMS detected ' . $number);
$db->insertIntoTable('sms_stop', ['number' => $number]);
continue;
}
//On gère les accusés de reception
if (trim($text) == 'Delivered' || trim($text) == 'Failed')
{
echo 'Delivered or Failed SMS for ' . $number . "\n";
$this->wlog('Delivered or Failed SMS for ' . $number);
//On récupère les SMS pas encore validé, uniquement sur les dernières 12h
$now = new DateTime();
$interval = new DateInterval('P12H');
$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))
{
continue;
}
$sended = $sendeds[0];
//On gère les echecs
if (trim($text) == 'Failed')
{
$db->updateTableWhere('sendeds', ['before_delivered' => 0, 'failed' => true], ['id' => $sended['id']]);
echo "Sended SMS id " . $sended['id'] . " pass to failed status\n";
continue;
}
//On gère le cas des messages de plus de 160 caractères, lesquels impliquent plusieurs accusés
if ($sended['before_delivered'] > 1)
{
$db->updateTableWhere('sendeds', ['before_delivered' => $sended['before_delivered'] - 1], ['id' => $sended['id']]);
echo "Sended SMS id " . $sended['id'] . " before_delivered decrement\n";
continue;
}
//Si tout est bon, que nous avons assez d'accusés, nous validons !
$db->updateTableWhere('sendeds', ['before_delivered' => 0, 'delivered' => true], ['id' => $sended['id']]);
echo "Sended SMS id " . $sended['id'] . " to delivered status\n";
continue;
}
if (!$number) if (!$number)
{ {

View file

@ -30,7 +30,7 @@
/** /**
* Cette fonction permet de mettre à jour l'activation ou la désactivation du transfer des SMS * Cette fonction permet de mettre à jour l'activation ou la désactivation du transfer des SMS
* @param $csrf : Le jeton CSRF * @param $csrf : Le jeton CSRF
* @param string $_POST['transfer'] : Le nouveau transfer de l'utilisateur * @param string $_POST['transfer'] : Le nouveau transfer
* @return void; * @return void;
*/ */
public function changeTransfer($csrf) public function changeTransfer($csrf)
@ -66,4 +66,84 @@
header('Location: ' . $this->generateUrl('settings')); header('Location: ' . $this->generateUrl('settings'));
return true; return true;
} }
/**
* Cette fonction permet de mettre à jour l'activation ou la désactivation de SMS-STOP
* @param $csrf : Le jeton CSRF
* @param string $_POST['stop'] : Le nouveau stop
* @return void;
*/
public function changeSmsStop($csrf)
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
//Creation de l'object de base de données
global $db;
if (!isset($_POST['sms_stop']))
{
$_SESSION['errormessage'] = 'Vous devez renseigner un valeur';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$stop = (int)$_POST['sms_stop'];
if (!$db->updateTableWhere('settings', ['value' => $stop], ['name' => 'sms_stop']))
{
$_SESSION['errormessage'] = 'Impossible de mettre les données à jour.';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$_SESSION['successmessage'] = 'Les données ont été mises à jour.';
header('Location: ' . $this->generateUrl('settings'));
return true;
}
/**
* Cette fonction permet de mettre à jour l'activation ou la désactivation de la detection d'URL dans les discussions
* @param $csrf : Le jeton CSRF
* @param string $_POST['detect_url'] : Le nouveau stop
* @return void;
*/
public function changeDetectionUrl($csrf)
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
//Creation de l'object de base de données
global $db;
if (!isset($_POST['detect_url']))
{
$_SESSION['errormessage'] = 'Vous devez renseigner un valeur';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$detectUrl = (int)$_POST['detect_url'];
if (!$db->updateTableWhere('settings', ['value' => $detectUrl], ['name' => 'detect_url']))
{
$_SESSION['errormessage'] = 'Impossible de mettre les données à jour.';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$_SESSION['successmessage'] = 'Les données ont été mises à jour.';
header('Location: ' . $this->generateUrl('settings'));
return true;
}
} }

49
controllers/smsstop.php Executable file
View file

@ -0,0 +1,49 @@
<?php
/**
* Page des SMS STOP
*/
class smsstop extends Controller
{
/**
* Cette fonction est appelée avant toute les autres :
* Elle vérifie que l'utilisateur est bien connecté
* @return void;
*/
public function before()
{
internalTools::verifyConnect();
}
/**
* Cette fonction est alias de showAll()
*/
public function byDefault()
{
$this->showAll();
}
/**
* Cette fonction retourne tous les numéros sous sms stop, sous forme d'un tableau permettant l'administration de ces numéros
* @param int $page : La page à consulter. Par défaut 0
* @return void;
*/
public function showAll($page = 0)
{
//Creation de l'object de base de données
global $db;
$page = (int)($page < 0 ? $page = 0 : $page);
$limit = 25;
$offset = $limit * $page;
//Récupération des sms-stop, par paquets de $limit, en ignorant les $offset premiers
$smsStops = $db->getFromTableWhere('sms_stop', [], false, true, $limit, $offset);
$this->render('smsstop/default', array(
'smsStops' => $smsStops,
'page' => $page,
'limit' => $limit,
'nbResults' => count($smsStops),
));
}
}

View file

@ -27,6 +27,9 @@ CREATE TABLE IF NOT EXISTS sendeds
at DATETIME NOT NULL, at DATETIME NOT NULL,
target VARCHAR(12) NOT NULL, target VARCHAR(12) NOT NULL,
content VARCHAR(1000) NOT NULL, content VARCHAR(1000) NOT NULL,
before_delivered INT NOT NULL,
delivered BOOLEAN NOT NULL DEFAULT FALSE,
failed BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (id) PRIMARY KEY (id)
); );
@ -135,6 +138,16 @@ CREATE TABLE IF NOT EXISTS transfers
FOREIGN KEY (id_received) REFERENCES receiveds (id) ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY (id_received) REFERENCES receiveds (id) ON DELETE CASCADE ON UPDATE CASCADE
); );
CREATE TABLE IF NOT EXISTS sms_stop
(
id INT NOT NULL AUTO_INCREMENT,
number VARCHAR(12) NOT NULL,
PRIMARY KEY (id),
UNIQUE (number)
);
#On insert les données par défaut dans les settings #On insert les données par défaut dans les settings
INSERT INTO settings (name, value) INSERT INTO settings (name, value)
VALUES ('transfer', '1'); VALUES ('transfer', '1'),
('sms_stop', '1'),
('detect_url', '1');

View file

@ -8,6 +8,16 @@
padding: 0 !important; padding: 0 !important;
} }
.small-text
{
font-size: 0.7em;
}
.italic
{
font-style: italic;
}
/** POPUPS ALERT **/ /** POPUPS ALERT **/
.popup-alerts-container .popup-alerts-container
{ {

10
js/Autolinker.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -131,9 +131,11 @@
foreach ($fields as $field) foreach ($fields as $field)
{ {
$fieldInfo = array(); $fieldInfo = array();
$fieldInfo['NAME'] = $field['Field'];
$fieldInfo['NULL'] = $field['Null'] == 'NO' ? false : true; $fieldInfo['NULL'] = $field['Null'] == 'NO' ? false : true;
$fieldInfo['AUTO_INCREMENT'] = $field['Extra'] == 'auto_increment' ? true : false; $fieldInfo['AUTO_INCREMENT'] = $field['Extra'] == 'auto_increment' ? true : false;
$fieldInfo['PRIMARY'] = $field['Key'] == 'PRI' ? true : false; $fieldInfo['PRIMARY'] = $field['Key'] == 'PRI' ? true : false;
$fieldInfo['FOREIGN'] = $field['Key'] == 'MUL' ? true : false;
$fieldInfo['UNIQUE'] = $field['Key'] == 'UNI' ? true : false; $fieldInfo['UNIQUE'] = $field['Key'] == 'UNI' ? true : false;
$fieldInfo['TYPE'] = mb_convert_case(preg_replace('#[^a-z]#ui', '', $field['Type']), MB_CASE_UPPER); $fieldInfo['TYPE'] = mb_convert_case(preg_replace('#[^a-z]#ui', '', $field['Type']), MB_CASE_UPPER);
$fieldInfo['SIZE'] = filter_var($field['Type'], FILTER_SANITIZE_NUMBER_INT); $fieldInfo['SIZE'] = filter_var($field['Type'], FILTER_SANITIZE_NUMBER_INT);
@ -145,6 +147,53 @@
return $return; return $return;
} }
/**
* Cette finction retourne la table et le champs référent pour un champ avec une foreign key
* @param string $table : Le nom de la table qui contient le champ
* @param string $field : Le nom du champ
* @return mixed : False en cas d'erreur, un tableau avec 'table' en index pour la table et 'field' pour le champ
*/
public function getReferenceForForeign ($table, $field)
{
if (!$this->fieldExist($field, $table))
{
return false;
}
$query = 'SELECT referenced_table_name as table_name, referenced_column_name as field_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_name = :table AND column_name = :field AND referenced_table_name IS NOT NULL';
$params = array(
'table' => $table,
'field' => $field,
);
return $this->runQuery($query, $params, self::FETCH);
}
/**
* Cette fonction retourne les valeurs possibles pour un champ muni d'une clef étrangère
* @param string $table : Le nom de la table qui contient le champ
* @param string $field : Le nom du champ
* @return mixed : Retourne les valeurs possible sous forme d'un tableau
*/
public function getPossibleValuesForForeign ($table, $field)
{
if (!$this->fieldExist($field, $table))
{
return false;
}
//On recupère le champs référence pour la foreign key
if (!$reference = $this->getReferenceForForeign($table, $field))
{
return false;
}
//On recupère les valeurs possible de la table
$query = 'SELECT DISTINCT ' . $reference['field_name'] . ' as possible_value FROM ' . $reference['table_name'];
return $this->runQuery($query);
}
/** /**
* Cette fonction permet de compter le nombre de ligne d'une table * Cette fonction permet de compter le nombre de ligne d'une table
* @param string $table : Le nom de la table à compter * @param string $table : Le nom de la table à compter
@ -246,8 +295,8 @@
/** /**
* Cette fonction permet de récupérer des lignes en fonction de restrictions * Cette fonction permet de récupérer des lignes en fonction de restrictions
* @param string $table : Le nom de la table dans laquelle on veux recuperer la ligne * @param string $table : Le nom de la table dans laquelle on veux recuperer la ligne
* @param array $restrictions : Les restrictions que l'on veux appliquer * @param array $restrictions : Les restrictions sous la forme "label" => "valeur". Un operateur '<, >, <=, >=, !' peux précder le label pour modifier l'opérateur par défaut (=)
* @param string $order_by : Le nom de la colonne par laquelle on veux trier les résultats. Si non fourni, tri automatique * @param mixed $order_by : Le nom de la colonne par laquelle on veux trier les résultats ou son numero. Si non fourni, tri automatique
* @param string $desc : L'ordre de tri (asc ou desc). Si non défini, ordre par défaut (ASC) * @param string $desc : L'ordre de tri (asc ou desc). Si non défini, ordre par défaut (ASC)
* @param string $limit : Le nombre maximum de résultats à récupérer (par défaut pas le limite) * @param string $limit : Le nombre maximum de résultats à récupérer (par défaut pas le limite)
* @param string $offset : Le nombre de résultats à ignorer (par défaut pas de résultats ignorés) * @param string $offset : Le nombre de résultats à ignorer (par défaut pas de résultats ignorés)
@ -266,27 +315,66 @@
//On gère les restrictions //On gère les restrictions
$wheres = array(); $wheres = array();
$params = array(); $params = array();
$i = 0;
foreach ($restrictions as $label => $value) foreach ($restrictions as $label => $value)
{ {
//Pour chaque restriction, on essaye de detecter un "! ou < ou > ou <= ou >="
$first_char = mb_substr($label, 0, 1);
$second_char = mb_substr($label, 1, 1);
switch(true)
{
//Important de traiter <= & >= avant < & >
case ('<=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '<=';
break;
case ('>=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '>=';
break;
case ('!' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '!=';
break;
case ('<' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '<';
break;
case ('>' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '>';
break;
default :
$trueLabel = $label;
$operator = '=';
}
//Si le champs pour la restriction n'existe pas on retourne false //Si le champs pour la restriction n'existe pas on retourne false
if (!array_key_exists($label, $fields)) if (!array_key_exists($trueLabel, $fields))
{ {
return false; return false;
} }
//On ajoute la restriction au WHERE //On ajoute la restriction au WHERE
$params['where_' . $label] = $value; $params['where_' . $trueLabel . $i] = $value;
$wheres[] = $label . ' = :where_' . $label . ' '; $wheres[] = $trueLabel . ' ' . $operator . ' :where_' . $trueLabel . $i . ' ';
$i++;
} }
$query = "SELECT " . $this->getColumnsForTable($table) . " FROM " . $table . " WHERE 1 " . (count($wheres) ? 'AND ' : '') . implode('AND ', $wheres); $query = "SELECT * FROM " . $table . " WHERE 1 " . (count($wheres) ? 'AND ' : '') . implode('AND ', $wheres);
if ($order_by) if ($order_by)
{ {
if ($this->fieldExist($order_by, $table)) //Si le champs existe ou si c'est un numeric inférieur ou egale au nombre de champs dispo
if (array_key_exists($order_by, $fields) || (is_numeric($order_by) && $order_by <= count($fields)))
{ {
$query .= ' ORDER BY '. $order_by; $query .= ' ORDER BY ' . $order_by;
if ($desc) if ($desc)
{ {
$query .= ' DESC'; $query .= ' DESC';
@ -307,9 +395,11 @@
if ($limit !== false) if ($limit !== false)
{ {
$limit = (int)$limit;
$req->bindParam(':limit', $limit, PDO::PARAM_INT); $req->bindParam(':limit', $limit, PDO::PARAM_INT);
if ($offset !== false) if ($offset !== false)
{ {
$offset = (int)$offset;
$req->bindParam(':offset', $offset, PDO::PARAM_INT); $req->bindParam(':offset', $offset, PDO::PARAM_INT);
} }
} }
@ -322,6 +412,7 @@
$req->setFetchMode(PDO::FETCH_ASSOC); $req->setFetchMode(PDO::FETCH_ASSOC);
$req->execute(); $req->execute();
return $req->fetchAll(); return $req->fetchAll();
} }
@ -330,7 +421,7 @@
* @param string $table : Le nom de la table dans laquelle on veux insérer des données * @param string $table : Le nom de la table dans laquelle on veux insérer des données
* @param string $primary : La clef primaire qui sert à identifier la ligne a modifier * @param string $primary : La clef primaire qui sert à identifier la ligne a modifier
* @param array $datas : Les données à insérer au format "champ" => "valeur" * @param array $datas : Les données à insérer au format "champ" => "valeur"
* @param array $restrictions : Un tableau des restrictions à appliquer sous forme "champ" => "valeur". Par défaut un tableau vide * @param array $restrictions : Les restrictions pour la mise à jour sous la forme "label" => "valeur". Un operateur '<, >, <=, >=, !' peux précder le label pour modifier l'opérateur par défaut (=)
* @return mixed : False en cas d'erreur, sinon le nombre de lignes modifiées * @return mixed : False en cas d'erreur, sinon le nombre de lignes modifiées
*/ */
public function updateTableWhere ($table, $datas, $restrictions = array()) public function updateTableWhere ($table, $datas, $restrictions = array())
@ -365,17 +456,56 @@
//On gère les restrictions //On gère les restrictions
$wheres = array(); $wheres = array();
$i = 0;
foreach ($restrictions as $label => $value) foreach ($restrictions as $label => $value)
{ {
//Pour chaque restriction, on essaye de detecter un "! ou < ou > ou <= ou >="
$first_char = mb_substr($label, 0, 1);
$second_char = mb_substr($label, 1, 1);
switch(true)
{
//Important de traiter <= & >= avant < & >
case ('<=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '<=';
break;
case ('>=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '>=';
break;
case ('!' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '!=';
break;
case ('<' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '<';
break;
case ('>' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '>';
break;
default :
$trueLabel = $label;
$operator = '=';
}
//Si le champs pour la restriction n'existe pas on retourne false //Si le champs pour la restriction n'existe pas on retourne false
if (!array_key_exists($label, $fields)) if (!array_key_exists($trueLabel, $fields))
{ {
return false; return false;
} }
//On ajoute la restriction au WHERE //On ajoute la restriction au WHERE
$params['where_' . $label] = $value; $params['where_' . $trueLabel . $i] = $value;
$wheres[] = $label . ' = :where_' . $label . ' '; $wheres[] = $trueLabel . ' ' . $operator . ' :where_' . $trueLabel . $i . ' ';
$i++;
} }
//On fabrique la requete //On fabrique la requete
@ -388,7 +518,7 @@
/** /**
* Cette fonction permet de supprimer des lignes d'une table en fonctions de restrictions * Cette fonction permet de supprimer des lignes d'une table en fonctions de restrictions
* @param string $table : Le nom de la table dans laquelle on veux supprimer la ligne * @param string $table : Le nom de la table dans laquelle on veux supprimer la ligne
* @param array $restrictions : Les restrictions pour la suppression sous la forme "label" => "valeur" * @param array $restrictions : Les restrictions pour la suppression sous la forme "label" => "valeur". Un operateur '<, >, <=, >=, !' peux précder le label pour modifier l'opérateur par défaut (=)
* @return mixed : False en cas d'erreur, sinon le nombre de lignes supprimées * @return mixed : False en cas d'erreur, sinon le nombre de lignes supprimées
*/ */
public function deleteFromTableWhere($table, $restrictions = array()) public function deleteFromTableWhere($table, $restrictions = array())
@ -403,22 +533,59 @@
//On gère les restrictions //On gère les restrictions
$wheres = array(); $wheres = array();
$params = array(); $params = array();
$i = 0;
foreach ($restrictions as $label => $value) foreach ($restrictions as $label => $value)
{ {
//Pour chaque restriction, on essaye de detecter un "! ou < ou > ou <= ou >="
$first_char = mb_substr($label, 0, 1);
$second_char = mb_substr($label, 1, 1);
switch(true)
{
//Important de traiter <= & >= avant < & >
case ('<=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '<=';
break;
case ('>=' == $first_char . $second_char) :
$trueLabel = mb_substr($label, 2);
$operator = '>=';
break;
case ('!' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '!=';
break;
case ('<' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '<';
break;
case ('>' == $first_char) :
$trueLabel = mb_substr($label, 1);
$operator = '>';
break;
default :
$trueLabel = $label;
$operator = '=';
}
//Si le champs pour la restriction n'existe pas on retourne false //Si le champs pour la restriction n'existe pas on retourne false
if (!array_key_exists($label, $fields)) if (!array_key_exists($trueLabel, $fields))
{ {
return false; return false;
} }
//On ajoute la restriction au WHERE //On ajoute la restriction au WHERE
$params['where_' . $label] = $value; $params['where_' . $trueLabel . $i] = $value;
$wheres[] = $label . ' = :where_' . $label . ' '; $wheres[] = $trueLabel . ' ' . $operator . ' :where_' . $trueLabel . $i . ' ';
$i++;
} }
$query = "DELETE FROM " . $table . " WHERE 1 AND " . implode('AND ', $wheres); $query = "DELETE FROM " . $table . " WHERE 1 AND " . implode('AND ', $wheres);
return $this->runQuery($query, $params, self::ROWCOUNT); return $this->runQuery($query, $params, self::ROWCOUNT);
} }

View file

@ -46,7 +46,7 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Numéro de téléphone du contact</label> <label>Numéro de téléphone du contact<span class="italic small-text text-danger"> - Vous devriez utiliser un numéro international (Ex. : +33612345678)</span></label>
<div class="form-group input-group"> <div class="form-group input-group">
<span class="input-group-addon"><span class="fa fa-phone"></span></span> <span class="input-group-addon"><span class="fa fa-phone"></span></span>
<input name="phone" class="form-control" type="text" placeholder="Numéro du contact" pattern="(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8}" required> <input name="phone" class="form-control" type="text" placeholder="Numéro du contact" pattern="(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8}" required>

View file

@ -50,7 +50,7 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Numéro de téléphone du contact</label> <label>Numéro de téléphone du contact<span class="italic small-text text-danger"> - Vous devriez utiliser un numéro international (Ex. : +33612345678)</span></label>
<div class="form-group input-group"> <div class="form-group input-group">
<span class="input-group-addon"><span class="fa fa-phone"></span></span> <span class="input-group-addon"><span class="fa fa-phone"></span></span>
<input name="contacts[<?php secho($contact['id']); ?>][phone]" class="form-control" type="text" placeholder="Numéro du contact" pattern="(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8}" required value="<?php secho($contact['number']); ?>"> <input name="contacts[<?php secho($contact['id']); ?>][phone]" class="form-control" type="text" placeholder="Numéro du contact" pattern="(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8}" required value="<?php secho($contact['number']); ?>">

View file

@ -65,6 +65,11 @@
$.each(data.messages, function(key, message) { $.each(data.messages, function(key, message) {
<?php if (RASPISMS_SETTINGS_DETECT_URL) { ?>
//On ajoute la detection de lien dans le texte du message
message.text = Autolinker.link(message.text, {newWindow:true});
<?php } ?>
switch (message.type) switch (message.type)
{ {
case 'received' : case 'received' :
@ -81,7 +86,7 @@
'<div class="clearfix message-container">' + '<div class="clearfix message-container">' +
'<div class="discussion-message message-sended">' + '<div class="discussion-message message-sended">' +
'<div class="discussion-message-text">' + message.text + '</div>' + '<div class="discussion-message-text">' + message.text + '</div>' +
'<div class="discussion-message-date">' + message.date + '</div>' + '<div class="discussion-message-date">' + message.date + (message.status ? (message.status == 'delivered' ? ' <span class="fa fa-check-circle fa-fw text-success"></span>' : '<span class="fa fa-times-circle fa-fw text-danger"></span>' ) : '' ) + '</div>' +
'</div>' + '</div>' +
'</div>'; '</div>';
break; break;

View file

@ -23,6 +23,7 @@
<script src="<?php echo HTTP_PWD; ?>js/bootstrap.min.js"></script> <script src="<?php echo HTTP_PWD; ?>js/bootstrap.min.js"></script>
<script src="<?php echo HTTP_PWD; ?>js/plugins/morris/raphael.min.js"></script> <script src="<?php echo HTTP_PWD; ?>js/plugins/morris/raphael.min.js"></script>
<script src="<?php echo HTTP_PWD; ?>js/plugins/morris/morris.min.js"></script> <script src="<?php echo HTTP_PWD; ?>js/plugins/morris/morris.min.js"></script>
<script src="<?php echo HTTP_PWD; ?>js/Autolinker.min.js"></script>
<!-- Magic Suggest JS and CSS --> <!-- Magic Suggest JS and CSS -->
<script src="<?php echo HTTP_PWD; ?>js/magicsuggest.min.js"></script> <script src="<?php echo HTTP_PWD; ?>js/magicsuggest.min.js"></script>
<link href="<?php echo HTTP_PWD; ?>css/magicsuggest.css" rel="stylesheet"> <link href="<?php echo HTTP_PWD; ?>css/magicsuggest.css" rel="stylesheet">

View file

@ -60,6 +60,9 @@
<li <?php echo $page == 'receiveds' ? 'class="active"' : ''; ?>> <li <?php echo $page == 'receiveds' ? 'class="active"' : ''; ?>>
<a href="<?php echo $this->generateUrl('receiveds'); ?>"><i class="fa fa-fw fa-download"></i> SMS reçus</a> <a href="<?php echo $this->generateUrl('receiveds'); ?>"><i class="fa fa-fw fa-download"></i> SMS reçus</a>
</li> </li>
<li <?php echo $page == 'smsstop' ? 'class="active"' : ''; ?>>
<a href="<?php echo $this->generateUrl('smsstop'); ?>"><i class="fa fa-fw fa-ban"></i> SMS STOP</a>
</li>
<li <?php echo $page == 'events' ? 'class="active"' : ''; ?>> <li <?php echo $page == 'events' ? 'class="active"' : ''; ?>>
<a href="<?php echo $this->generateUrl('events'); ?>"><i class="fa fa-fw fa-clock-o"></i> Évènements</a> <a href="<?php echo $this->generateUrl('events'); ?>"><i class="fa fa-fw fa-clock-o"></i> Évènements</a>
</li> </li>

View file

@ -47,7 +47,7 @@
<input name="date" class="form-control form-datetime" type="text" value="<?php secho($now); ?>" readonly> <input name="date" class="form-control form-datetime" type="text" value="<?php secho($now); ?>" readonly>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Numéros cibles</label> <label>Numéros cibles <span class="italic small-text text-danger"> - Vous devriez utiliser un numéro international (Ex. : +33612345678)</span></label>
<input class="add-numbers form-control" name="numbers[]"/> <input class="add-numbers form-control" name="numbers[]"/>
</div> </div>
<div class="form-group"> <div class="form-group">

View file

@ -72,7 +72,7 @@
<input name="scheduleds[<?php secho($scheduled['id']); ?>][date]" class="form-control form-datetime" type="text" value="<?php secho($scheduled['at']); ?>" readonly> <input name="scheduleds[<?php secho($scheduled['id']); ?>][date]" class="form-control form-datetime" type="text" value="<?php secho($scheduled['at']); ?>" readonly>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Numéros cibles</label> <label>Numéros cibles <span class="italic small-text text-danger"> - Vous devriez utiliser un numéro international (Ex. : +33612345678)</span></label>
<input class="add-numbers form-control" name="scheduleds[<?php secho($scheduled['id']); ?>][numbers][]" value="<?php secho($numbers); ?>"/> <input class="add-numbers form-control" name="scheduleds[<?php secho($scheduled['id']); ?>][numbers][]" value="<?php secho($numbers); ?>"/>
</div> </div>
<div class="form-group"> <div class="form-group">

View file

@ -42,6 +42,7 @@
<th>Numéro</th> <th>Numéro</th>
<th>Message</th> <th>Message</th>
<th>Date</th> <th>Date</th>
<th>Delivré</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -54,6 +55,7 @@
<td><?php secho($send['target']); ?></td> <td><?php secho($send['target']); ?></td>
<td><?php secho($send['content']); ?></td> <td><?php secho($send['content']); ?></td>
<td><?php secho($send['at']); ?></td> <td><?php secho($send['at']); ?></td>
<td><?php secho($send['delivered'] ? 'Oui' : 'Non'); ?></td>
</tr> </tr>
<?php <?php
} }

View file

@ -54,8 +54,46 @@
</form> </form>
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title"><i class="fa fa-link fa-fw"></i> Détection des URL dans les discussions</h4>
</div>
<div class="panel-body">
<form action="<?php echo $this->generateUrl('settings', 'changeDetectionUrl', [$_SESSION['csrf']]); ?>" method="POST">
<div class="form-group">
<label>Détection activé : </label>
<select name="detect_url" class="form-control">
<option value="0">Non</option>
<option value="1" <?php echo RASPISMS_SETTINGS_DETECT_URL ? 'selected' : ''; ?>>Oui</option>
</select>
</div>
<div class="text-center">
<button class="btn btn-success">Mettre à jour les données</button>
</div>
</form>
</div>
</div>
</div> </div>
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title"><i class="fa fa-ban fa-fw"></i> Activation de SMS-STOP</h4>
</div>
<div class="panel-body">
<form action="<?php echo $this->generateUrl('settings', 'changeSmsStop', [$_SESSION['csrf']]); ?>" method="POST">
<div class="form-group">
<label>SMS STOP activé : </label>
<select name="sms_stop" class="form-control">
<option value="0">Non</option>
<option value="1" <?php echo RASPISMS_SETTINGS_SMS_STOP ? 'selected' : ''; ?>>Oui</option>
</select>
</div>
<div class="text-center">
<button class="btn btn-success">Mettre à jour les données</button>
</div>
</form>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

91
templates/smsstop/default.php Executable file
View file

@ -0,0 +1,91 @@
<?php
//Template dashboard
$incs = new internalIncs();
$incs->head('SMS STOP - Show All');
?>
<div id="wrapper">
<?php
$incs->nav('smsstop');
?>
<div id="page-wrapper">
<div class="container-fluid">
<!-- Page Heading -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
Dashboard <small>SMS STOP</small>
</h1>
<ol class="breadcrumb">
<li>
<i class="fa fa-dashboard"></i> <a href="<?php echo $this->generateUrl('dashboard'); ?>">Dashboard</a>
</li>
<li class="active">
<i class="fa fa-ban"></i> SMS STOP
</li>
</ol>
</div>
</div>
<!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-ban fa-fw"></i> Liste SMS STOP</h3>
</div>
<div class="panel-body">
<div class="table-events">
<table class="table table-bordered table-hover table-striped" id="table-sms-stop">
<thead>
<tr>
<th>#</th>
<th>Numéro</th>
</tr>
</thead>
<tbody>
<?php
foreach ($smsStops as $smsStop)
{
?>
<tr>
<td><?php secho($smsStop['id']); ?></td>
<td><?php secho($smsStop['number']); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<nav>
<ul class="pager">
<?php
if ($page)
{
?>
<li><a href="<?php echo $this->generateUrl('smsstop', 'showAll', array('page' => $page - 1)); ?>"><span aria-hidden="true">&larr;</span> Précèdents</a></li>
<?php
}
$numero_page = 'Page : ' . ($page + 1);
secho($numero_page);
if ($limit == $nbResults)
{
?>
<li><a href="<?php echo $this->generateUrl('smsstop', 'showAll', array('page' => $page + 1)); ?>">Suivants <span aria-hidden="true">&rarr;</span></a></li>
<?php
}
?>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
$incs->footer();