raspisms/controllers/internals/Tool.php

209 lines
6.8 KiB
PHP
Raw Normal View History

2019-10-29 14:57:13 +01:00
<?php
/*
2019-11-10 17:48:54 +01:00
* This file is part of RaspiSMS.
*
2019-11-10 17:48:54 +01:00
* (c) Pierre-Lin Bonnemaison <plebwebsas@gmail.com>
*
2019-11-10 17:48:54 +01:00
* This source file is subject to the GPL-3.0 license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\internals;
2019-10-29 14:57:13 +01:00
/**
* Some tools frequently used.
* Not a standard controller as it's not linked to a model in any way
*/
2019-10-29 18:36:25 +01:00
class Tool extends \descartes\InternalController
{
/**
* Cette fonction parse un numéro pour le retourner sans espaces, etc.
*
2019-10-29 18:36:25 +01:00
* @param string $number : Le numéro de téléphone à parser
*
2019-10-29 18:36:25 +01:00
* @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux
*/
public static function parse_phone($number)
{
$number = preg_replace('#[^-0-9+]#', '', $number);
if (preg_match('#^(0|\+[1-9]{1,3}|\+1\-[0-9]{3})[1-9][0-9]{8,10}$#', $number))
{
2019-10-29 18:36:25 +01:00
return $number;
}
2019-10-29 18:36:25 +01:00
return false;
}
2019-10-29 14:57:13 +01:00
2019-10-29 18:36:25 +01:00
/**
* Cette fonction parse un numéro pour le retourner avec des espaces, etc.
*
2019-10-29 18:36:25 +01:00
* @param string $number : Le numéro de téléphone à parser
*
2019-10-29 18:36:25 +01:00
* @return mixed : Si le numéro est bien un numéro de téléphone, on retourne le numéro parsé. Sinon, on retourne faux
*/
2019-11-10 01:17:28 +01:00
public static function phone_format($number)
2019-10-29 18:36:25 +01:00
{
2019-11-10 01:17:28 +01:00
$phone_number_util = \libphonenumber\PhoneNumberUtil::getInstance();
$phone_number_o = $phone_number_util->parse($number, null);
2019-11-10 17:36:42 +01:00
2019-11-10 01:17:28 +01:00
return $phone_number_util->format($phone_number_o, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);
2019-10-29 18:36:25 +01:00
}
2019-10-29 14:57:13 +01:00
/**
* Format a number and make a link to a discussion with this number
* @param string $number : Number to format and make a link for
* @return string : Link to the number
*/
public static function phone_link ($number)
{
$number_format = \controllers\internals\Tool::phone_format($number);
$url = \descartes\Router::url('Discussion', 'show', ['number' => $number]);
return '<a href="' . self::s($url, false, true, false) . '">' . self::s($number_format, false, true, false) . '</a>';
}
2019-10-29 18:36:25 +01:00
/**
* Cette fonction fait la correspondance entre un type d'evenement et une icone font awesome.
*
2019-10-29 18:36:25 +01:00
* @param string $type : Le type de l'évenement à analyser
*
2019-10-29 18:36:25 +01:00
* @return string : Le nom de l'icone à afficher (ex : fa-user)
*/
public static function event_type_to_icon($type)
{
switch ($type) {
case 'USER_ADD':
$logo = 'fa-user';
2019-10-29 18:36:25 +01:00
break;
case 'CONTACT_ADD':
$logo = 'fa-user';
2019-10-29 18:36:25 +01:00
break;
case 'GROUP_ADD':
$logo = 'fa-group';
2019-10-29 18:36:25 +01:00
break;
case 'SCHEDULED_ADD':
$logo = 'fa-calendar';
2019-10-29 18:36:25 +01:00
break;
case 'COMMAND_ADD':
$logo = 'fa-terminal';
2019-10-29 18:36:25 +01:00
break;
default:
$logo = 'fa-question';
}
2019-10-29 14:57:13 +01:00
2019-10-29 18:36:25 +01:00
return $logo;
}
2019-10-29 14:57:13 +01:00
2019-10-29 18:36:25 +01:00
/**
* Cette fonction vérifie une date.
*
* @param string $date : La date a valider
2019-10-29 18:36:25 +01:00
* @param string $format : Le format de la date
*
* @return bool : Vrai si la date et valide, faux sinon
2019-10-29 18:36:25 +01:00
*/
public static function validate_date($date, $format)
{
$objectDate = \DateTime::createFromFormat($format, $date);
return $objectDate && $objectDate->format($format) === $date;
2019-10-29 18:36:25 +01:00
}
2019-10-29 14:57:13 +01:00
2019-10-29 18:36:25 +01:00
/**
* Cette fonction parse un texte, pour en extraire des données contenu dans des drapeaux au format [FLAG:contenu du drapeau].
*
2019-10-29 18:36:25 +01:00
* @param string $texte : Le texte à parser
*
2019-10-29 18:36:25 +01:00
* @return mixed : Tableau de la forme 'FLAG' => 'contenu du drapeau'. si on trouve une forme correcte (Le contenu de FLAG sera mis en majuscule automatiquement). Sinon le tableau vide.
*/
public static function parse_for_flag($texte)
{
$returns = [];
$results = [];
while (preg_match('#\[(.*)(?<!\\\):(.*)(?<!\\\)\]#Uui', $texte, $results))
{ //Tant qu'on recuèpre un flag
2019-10-29 18:36:25 +01:00
$returns[mb_strtoupper($results[1])] = $results[2];
$texte = str_replace($results[0], '', $texte);
}
2019-10-29 18:36:25 +01:00
return $returns;
}
2019-10-29 14:57:13 +01:00
2019-10-29 18:36:25 +01:00
/**
* Cette fonction retourne un mot de passe généré aléatoirement.
*
2019-10-29 18:36:25 +01:00
* @param int $length : Taille du mot de passe à générer
*
2019-10-29 18:36:25 +01:00
* @return string : Le mot de passe aléatoire
*/
public static function generate_password($length)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-@()?.:!%*$&/';
$password = '';
$chars_length = mb_strlen($chars) - 1;
$i = 0;
while ($i < $length)
{
++$i;
2019-10-29 18:36:25 +01:00
$password .= $chars[rand(0, $chars_length)];
}
2019-10-29 18:36:25 +01:00
return $password;
}
/**
* Cette fonction vérifie si un utilisateur et connecté, et si il ne l'est pas, redirige sur la page de connexion.
2019-10-29 18:36:25 +01:00
*/
public static function verifyconnect()
2019-10-29 18:36:25 +01:00
{
if (!isset($_SESSION['connect']) || !$_SESSION['connect'])
{
2019-10-29 18:36:25 +01:00
header('Location: /');
die();
}
2019-10-29 14:57:13 +01:00
}
2019-11-11 00:22:40 +01:00
/**
* Check if the user connected.
*
* @return bool : True if connected, False else
*/
public static function is_connected()
{
return (bool) ($_SESSION['connect'] ?? false);
}
2019-10-29 14:57:13 +01:00
/**
* Check if the user is admin.
*
* @return bool : True if admin, False else
2019-10-29 18:36:25 +01:00
*/
public static function is_admin()
{
return (bool) ($_SESSION['user']['admin'] ?? false);
2019-10-29 14:57:13 +01:00
}
/**
* Cette fonction s'occupe d'envoyer les emails.
*
* @param string $to : L'adresse mail à laquelle envoyer le mail
* @param array $settings : Les settings du mail, type, sujet, template
* @param array $datas : Les données à fournir au template du mail
2019-10-29 14:57:13 +01:00
*/
public static function send_email($to, $settings, $datas = [])
2019-10-29 14:57:13 +01:00
{
$controller = new \descartes\Controller();
ob_start();
$controller->render($settings['template'], $datas);
$content = ob_get_clean();
2019-11-10 17:36:42 +01:00
return mail($to, $settings['subject'], $content);
2019-10-29 14:57:13 +01:00
}
2019-10-29 18:36:25 +01:00
}