1,18 → 1,15 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
|
/** |
* Classe mère abstraite contenant les méthodes génériques des services. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Jean-Pascal MILCENT <jpm@clapas.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurélien Peronnet <aurelien@tela-botanica.org> |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright © 2012, 2013 Tela Botanica |
* @copyright © 2006-2014 Tela Botanica |
*/ |
require_once('Bdd2.php'); |
|
46,7 → 43,6 |
static $fallback_referentiel = 'autre'; |
|
public function __construct($config) { |
|
@session_start(); |
// Tableau contenant la config de Jrest |
$this->config = $config; |
73,14 → 69,19 |
} |
|
public static function db() { |
if(! self::$bdd) die('ERR: no DB available'); |
if (! self::$bdd) { |
die('ERREUR: aucune base de données de disponible.'); |
} |
return self::$bdd; |
} |
|
// TODO: delete wrappers, en attendant que $this->bdd soit remplacé par Cel::db() partout. |
public function __get($prop) { |
if($prop == 'bdd') return self::$bdd; |
return $this->$prop; |
$retour = $this->$prop; |
if ($prop == 'bdd') { |
$retour = self::$bdd; |
} |
return $retour; |
} |
|
protected function protegerTableau(Array $tableau) { |
157,6 → 158,12 |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION de l'ENVOI au NAVIGATEUR |
|
protected function envoyerMessageErreur($code, $msg) { |
http_response_code($code); |
header("Content-Type: text/plain; charset=utf-8"); |
die($msg); |
} |
|
protected function envoyerJson($donnees, $encodage = 'utf-8') { |
$encodage_json = true; |
$this->envoyer($donnees, 'application/json', $encodage, $encodage_json); |
175,7 → 182,7 |
protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = false) { |
// Traitements des messages d'erreurs et données |
if (count($this->messages) != 0) { |
header('HTTP/1.1 500 Internal Server Error'); |
http_response_code(500);// Internal Server Error |
$mime = 'application/json'; |
$json = true; |
$sortie = $this->messages; |
219,7 → 226,7 |
} |
|
static function envoyerAuth($message_accueil, $message_echec) { |
header('HTTP/1.0 401 Unauthorized'); |
http_response_code(401);// Unauthorized |
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"'); |
header('Content-type: text/plain; charset=UTF-8'); |
print $message_echec; |
281,23 → 288,24 |
} |
|
public function controleAppelIpAutorisee() { |
$ips_autorisees = explode(',', @$this->config['jrest_admin']['ip_autorisees']); |
if(!in_array($_SERVER['REMOTE_ADDR'], $ips_autorisees) && $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) { |
header('HTTP/1.0 401 Unauthorized'); |
exit('Accès interdit'); |
$ipsAutorisees = explode(',', $this->config['jrest_admin']['ip_autorisees']); |
$remoteIp = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP); |
$serverIp = filter_input(INPUT_SERVER, 'SERVER_ADDR', FILTER_VALIDATE_IP); |
if (!in_array($remoteIp, $ipsAutorisees) || $remoteIp != $serverIp) { |
$msg = "Accès interdit. \n". |
"Vous n'êtes pas autorisé à accéder à ce service depuis '$remoteIp' !\n"; |
$this->envoyerMessageErreur(401, $msg); |
} |
return true; |
} |
|
public function logger($index,$chaine = 'err') { |
if(!class_exists('Log')) { |
if (!class_exists('Log')) { |
Log::getInstance(); |
} |
|
Log::setCheminLog($this->config['log']['cheminlog']); |
Log::setTimeZone($this->config['log']['timezone']); |
Log::setTailleMax($this->config['log']['taillemax']); |
|
Log::ajouterEntree($index,$chaine); |
} |
|
343,48 → 351,59 |
} |
|
public function getInfosComplementairesUtilisateur($id_utilisateur) { |
$defaut_infos = array('prenom' => '', 'nom' => '', 'courriel' => ''); |
if(! is_numeric($id_utilisateur)) return $defaut_infos; |
$infos = array('prenom' => '', 'nom' => '', 'courriel' => ''); |
if (is_numeric($id_utilisateur)) { |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur); |
$requete = 'SELECT prenom, nom, courriel '. |
'FROM cel_utilisateurs '. |
"WHERE id_utilisateur = $idUtilisateurP ". |
' -- ' . __FILE__ . ':' . __LINE__; |
$resultat = Cel::db()->requeter($requete); |
|
$resultat_infos_utilisateur = Cel::db()->requeter( |
'SELECT prenom, nom, courriel FROM cel_utilisateurs' |
. ' WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur)); |
|
if($resultat_infos_utilisateur && count($resultat_infos_utilisateur)) return $resultat_infos_utilisateur[0]; |
return $defaut_infos; // autrement, info par défaut |
if ($resultat && count($resultat)) { |
$infos = $resultat[0]; |
} |
} |
return $infos; |
} |
|
public function getInfosComplementairesUtilisateurPourMail($mail_utilisateur) { |
$infos = array('prenom' => '', 'nom' => '', 'courriel' => $mail_utilisateur); |
|
$infos_utilisateur = array('prenom' => '', 'nom' => '', 'courriel' => $mail_utilisateur); |
$mailUtilisateurP = Cel::db()->proteger($mail_utilisateur); |
$requete = 'SELECT id_utilisateur as id, prenom, nom '. |
'FROM cel_utilisateurs '. |
"WHERE courriel = $mailUtilisateurP ". |
' -- ' . __FILE__ . ':' . __LINE__; |
|
$requete_infos_utilisateur = 'SELECT id_utilisateur as id, prenom, nom FROM cel_utilisateurs '. |
'WHERE courriel = '.Cel::db()->proteger($mail_utilisateur); |
$resultat = Cel::db()->requeter($requete); |
|
$resultat_infos_utilisateur = Cel::db()->requeter($requete_infos_utilisateur); |
|
if($resultat_infos_utilisateur && is_array($resultat_infos_utilisateur) && count($resultat_infos_utilisateur) > 0) { |
$infos_utilisateur = $resultat_infos_utilisateur; |
if ($resultat && is_array($resultat) && count($resultat) > 0) { |
$infos = $resultat; |
} |
|
return $infos_utilisateur; |
return $infos; |
} |
|
protected function controlerAccessibiliteWs() { |
if (self::ARRET_SERVICE) { |
$msg = "Les services du CEL sont temporairement désactivées."; |
$this->envoyerMessageErreur(503, $msg); |
} |
return true; |
} |
|
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICES |
|
protected function denullifierTableauValeurCel(&$tableau) { |
|
// Denullifiage |
foreach($tableau as $k=>$v) { |
if (($v=="null") || ($v=="000null")) { |
$row[$k]=""; |
foreach ($tableau as $k => $v) { |
if (($v == 'null') || ($v == '000null')) { |
$row[$k] = ''; |
} else { |
$row[$k] = utf8_decode($v); |
} |
else { |
$row[$k]=utf8_decode($v); |
} |
} |
|
return $tableau; |
} |
|
403,7 → 422,8 |
*/ |
protected function creerAuteurs(Array $courriels) { |
$auteurs = array(); |
if ($identites = $this->recupererUtilisateursIdentite($courriels)) { |
$identites = $this->recupererUtilisateursIdentite($courriels); |
if ($identites) { |
foreach ($identites as $courriel => $infos) { |
$auteurs[$courriel] = $infos['intitule']; |
} |
475,10 → 495,10 |
} |
|
protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){ |
$val = explode(' ', $date_heure_mysql); |
$date = explode('-', $val[0]); |
$heure = explode(':', $val[1]); |
return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]); |
$val = explode(' ', $date_heure_mysql); |
$date = explode('-', $val[0]); |
$heure = explode(':', $val[1]); |
return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]); |
} |
|
protected function etreNull($valeur) { |
499,12 → 519,10 |
} |
|
protected function convertirCodeZoneGeoVersDepartement($code_zone_geo) { |
|
$code_departement = ''; |
if($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = substr(ltrim($code_zone_geo,'INSEE-C:'),0,2); |
} |
|
return $code_departement; |
} |
|
513,23 → 531,27 |
} |
|
protected function convertirCodeZoneGeoVersCodeInsee($code_zone_geo) { |
|
$code_departement = ''; |
if($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = ltrim($code_zone_geo,'INSEE-C:'); |
} |
|
return $code_departement; |
} |
|
static function obtenirCodeInseeCommunePourNomEtDepartement($nom_commune, $code_insee) { |
$resultat = Cel::db()->requeter(sprintf( |
'SELECT id_zone_geo FROM cel_zones_geo WHERE nom LIKE %s AND id_zone_geo LIKE %s', |
Cel::db()->proteger($nom_commune), |
Cel::db()->proteger("INSEE-C:" . $code_insee . '%'))); |
$nomCommuneP = Cel::db()->proteger($nom_commune); |
$codeInseeP = Cel::db()->proteger("INSEE-C:$code_insee%"); |
$requete = 'SELECT id_zone_geo '. |
'FROM cel_zones_geo '. |
"WHERE nom LIKE $nomCommuneP AND id_zone_geo LIKE $codeInseeP ". |
' -- ' . __FILE__ . ':' . __LINE__; |
$resultat = Cel::db()->requeter($requete); |
|
if($resultat && count($resultat)) return $resultat[0]['id_zone_geo']; |
return $code_insee; // autrement retourne l'original |
$infos = $code_insee; // Par défaut retourne l'original |
if ($resultat && count($resultat)) { |
$infos = $resultat[0]['id_zone_geo']; |
} |
return $infos; |
} |
|
protected function encoderMotCle($mot_cle) { |
556,9 → 578,10 |
$requete = 'SELECT cmc_mot_cle as mot_cle '. |
"FROM $table ". |
"WHERE cmc_id_mot_cle_utilisateur IN ($mots_cles) ". |
"AND cmc_id_proprietaire = $utilisateur_id "; |
"AND cmc_id_proprietaire = $utilisateur_id ". |
' -- ' . __FILE__ . ':' . __LINE__; |
|
$elements = Cel::db()->executerRequete($requete); |
$elements = Cel::db()->requeter($requete); |
if (is_array($elements)) { |
foreach ($elements as $mot) { |
$mots[] = $mot['mot_cle']; |
682,3 → 705,4 |
return $contenu; |
} |
} |
?> |