Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 208 → Rev 209

/tags/v1.1-andromede/jrest/services/ExecuteurLien.php
New file
0,0 → 1,49
<?php
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
 
Class ExecuteurLien extends JRestService {
 
public function getElement($uid){
 
if(isset($uid[0])) {
$lien_code = $uid[0];
$lien = base64_decode(str_replace('_','/',$lien_code));
} else {
return;
}
 
if(!isset($uid[1])) {
$retour_ajax = true;
} else {
$adresse_retour = base64_decode(str_replace('_','/',$uid[1]));
}
echo $lien;
exit;
 
$requete = file_get_contents($lien);
 
if($retour_ajax) {
if($requete) {
$resultat = 'ok';
} else {
$resultat = false;
}
$this->envoyer($resultat);
} else {
header('Location: http://'.$adresse_retour);
exit;
}
}
}
?>
/tags/v1.1-andromede/jrest/services/InformationsUtilisateur.php
New file
0,0 → 1,27
<?php
/**
* PHP Version 5
*
* @category PHP
* @package annuaire
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/annuaire/
*/
 
Class InformationsUtilisateur extends JRestService {
 
public function getElement($uid){
 
$mail_utilisateur = $uid[0];
$id_annuaire = Config::get('annuaire_defaut');
 
$controleur = new AnnuaireControleur();
$valeurs = $controleur->obtenirInfosUtilisateurOpenId($id_annuaire,$mail_utilisateur, true);
 
$this->envoyer($valeurs);
}
}
?>
/tags/v1.1-andromede/jrest/services/EnvoiMessage.php
New file
0,0 → 1,44
<?php
 
Class EnvoiMessage extends JRestService {
 
public function getElement($uid){
$identificateur = new IdentificationControleur();
$login = $identificateur->obtenirLoginUtilisateurParCookie();
$identification = $login;
if(!$identification || trim($identification) == '') {
print "false";
return;
}
$id_annuaire = Config::get('annuaire_defaut');
$contenu_message = $_GET['contenu_message'];
$sujet_message = $_GET['sujet_message'];
$destinataire = $_GET['destinataire'];
$messagerie = new MessageControleur();
// on remplace les identifiants par leurs destinataires
$destinataire_mail = $messagerie->obtenirMailParTableauId($id_annuaire, array($destinataire));
if(empty($destinataire_mail)) {
print "false";
return;
}
$destinataire_mail = $destinataire_mail[0];
$retour = $messagerie->envoyerMail($identification, $destinataire_mail, $sujet_message, $contenu_message);
 
if($retour) {
print "OK";
} else {
print "false";
}
}
}
 
?>
/tags/v1.1-andromede/jrest/services/GestionLettreActu.php
New file
0,0 → 1,38
<?php
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
 
Class GestionLettreActu extends JRestService {
 
public function getElement($uid){
 
// TODO : rajouter controle d'accès !
 
$id_utilisateur = $uid[0];
$mail_utilisateur = $uid[1];
 
if(isset($uid[2])) {
$id_annuaire = $uid[2];
} else {
$id_annuaire = Config::get('annuaire_defaut');
}
 
$controleur = new LettreControleur();
$est_abonne = $controleur->estAbonneLettreActualite($id_annuaire,$id_utilisateur);
 
$changement = $controleur->abonnerDesabonnerLettreActualite($id_annuaire, $id_utilisateur, !$est_abonne);
 
echo 'OK';
 
}
}
?>
/tags/v1.1-andromede/jrest/services/StatistiquesAnnuaire.php
New file
0,0 → 1,30
<?php
/**
* PHP Version 5
*
* @category PHP
* @package annuaire
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/annuaire/
*/
 
Class StatistiquesAnnuaire extends JRestService {
 
public function getElement($uid){
 
if(!isset($uid[0])) {
$id_annuaire = $uid[0];
} else {
$id_annuaire = Config::get('annuaire_defaut');
}
 
$controleur = new StatistiquesControleur();
$valeurs = $controleur->obtenirGraphiques($id_annuaire);
 
$this->envoyer($valeurs);
}
}
?>
/tags/v1.1-andromede/jrest/services/InscritsRss.php
New file
0,0 → 1,74
<?php
/**
* PHP Version 5
*
* @category PHP
* @package annuaire
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/annuaire/
*/
 
Class InscritsRss extends JRestService {
 
public function getElement($uid){
 
$mail_utilisateur = $uid[0];
$admin = (isset($uid[1])) ? $uid[1] : false;
$id_annuaire = Config::get('annuaire_defaut');
if($admin) {
$this->authentifier();
}
 
$controleur = new RSSControleur();
$inscrits = $controleur->obtenirDerniersInscritsRSS($id_annuaire, $admin);
 
$this->envoyer($inscrits, 'text/xml',Config::get('sortie_encodage'), false);
}
public function authentifier() {
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
header('HTTP/1.0 401 Unauthorized');
header('Content-type: text/html; charset=UTF-8');
echo 'Accès interdit';
exit;
} else {
if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) {
return ;
}
else
{
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
header('HTTP/1.0 401 Unauthorized');
header('Content-type: text/html; charset=UTF-8');
echo 'Accès interdit';
exit ;
}
}
}
 
public function verifierAcces($id) {
$query="SELECT ".$this->config['database_ident']['ann_id']." as name FROM ".$this->config['database_ident']['database'].'.'.$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." =".$this->bdd->quote($id)
." AND ".$this->config['database_ident']['ann_pwd']." = ".$this->config['database_ident']['pass_crypt_funct']."(".$this->bdd->quote($_SERVER['PHP_AUTH_PW']).")" ;
 
$res = $this->bdd->query($query);
if($res == "") {
return false ;
}
 
if (DB::isError($res)) {
die($res->getMessage());
}
 
return true ;
 
}
}
?>
/tags/v1.1-andromede/jrest/services/Gestion.php
New file
0,0 → 1,54
<?php
/**
* PHP Version 5
*
* @category PHP
* @package papyrus_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/papyrus_bp/
*/
 
Class Gestion extends JRestService {
 
public function getElement($uid){
 
$id_utilisateur = $uid[0];
$mail_utilisateur = $uid[1];
 
if(isset($uid[2])) {
$id_annuaire = $uid[2];
} else {
$id_annuaire = Config::get('annuaire_defaut');
}
 
$controleur = new LettreControleur();
$est_abonne = $controleur->estAbonneLettreActualite($id_annuaire,$id_utilisateur);
 
$resume['titre'] = 'Lettre d\'actualit&eacute;';
 
if($est_abonne == '1') {
$message = 'Vous &ecirc;tes abonn&eacute; &agrave; la lettre d\'actualit&eacute;';
$intitule_lien = 'Se desinscrire';
} else {
$message = 'Vous n\'&ecirc;tes pas abonn&eacute; &agrave; la lettre d\'actualit&eacute;';
$intitule_lien = 'S\'inscrire';
}
$base_url_application = $controleur->getUrlBaseComplete();
$cible_lien_desinscrire = $base_url_application.'/jrest/GestionLettreActu/'.$id_utilisateur.DS.$mail_utilisateur.DS.$id_annuaire;
$cible_lien = $base_url_application.'/jrest/GestionLettreActu/'.$id_utilisateur.DS.$mail_utilisateur.DS.$id_annuaire;
$resume_item = array('element' => $message, 'intitule_lien' => $intitule_lien, 'lien_desinscrire' => $cible_lien_desinscrire, 'lien' => $cible_lien);
$resume['elements'][] = $resume_item;
 
$this->envoyer($resume);
}
 
public function updateElement($uid, $pairs) {
 
}
}
?>
/tags/v1.1-andromede/jrest/services/JRestService.php
New file
0,0 → 1,238
<?php
/**
* 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@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 2009
*/
abstract class JRestService {
 
public $config;
protected $bdd;
protected $log = array();
protected $messages = array();
protected $debug = array();
protected $distinct = false;
protected $orderby = null;
protected $formatRetour = 'objet';
protected $start = 0;
protected $limit = 150;
 
public function __construct($config, $demarrer_session = true) {
// Tableau contenant la config de Jrest
$this->config = $config;
 
// Connection à la base de données
$this->bdd = $this->connecterPDO($this->config, 'appli');
 
// Nettoyage du $_GET (sécurité)
if (isset($_GET)) {
$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
foreach ($get_params as $get) {
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
if (isset($_GET[$get]) && $_GET[$get] != '') {
$this->$get = $_GET[$get];
} else {
$_GET[$get] = null;
}
}
}
}
 
/**
* Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
*/
public function getRessource() {
$this->getElement(array());
}
 
protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
// Traitements des messages d'erreurs et données
if (count($this->messages) != 0) {
header('HTTP/1.1 500 Internal Server Error');
$mime = 'text/html';
$encodage = 'utf-8';
$json = true;
$sortie = $this->messages;
} else {
$sortie = $donnees;
if (is_null($donnees)) {
$sortie = 'OK';
}
}
 
// Gestion de l'envoie du déboguage
$this->envoyerDebogage();
 
// Encodage au format et JSON et envoie sur la sortie standard
$contenu = $json ? json_encode($sortie) : $sortie;
$this->envoyerContenu($encodage, $mime, $contenu);
}
 
protected function envoyerDebogage() {
if (!is_array($this->debug)) {
$this->debug[] = $this->debug;
}
if (count($this->debug) != 0) {
foreach ($this->debug as $cle => $val) {
if (is_array($val)) {
$this->debug[$cle] = print_r($val, true);
}
}
header('X-DebugJrest-Data:'.json_encode($this->debug));
}
}
 
protected function envoyerContenu($encodage, $mime, $contenu) {
header("Content-Type: $mime; charset=$encodage");
print $contenu;
}
 
private function connecterPDO($config, $base = 'database') {
$cfg = $config[$base];
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
}
// Passe en UTF-8 la connexion à la BDD
$PDO->exec("SET NAMES 'utf8'");
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $PDO;
}
 
protected function getTxt($id) {
$sortie = '';
switch ($id) {
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
default : $sortie = $id;
}
return $sortie;
}
 
protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
$sortie = array();
foreach ($params_attendu as $num => $nom) {
if (isset($params[$num]) && $params[$num] != '*') {
if ($pourBDD) {
$params[$num] = $this->bdd->quote($params[$num]);
}
$sortie[$nom] = $params[$num];
}
}
return $sortie;
}
 
protected function traiterParametresPost($params) {
$sortie = array();
foreach ($params as $cle => $valeur) {
$sortie[$cle] = $this->bdd->quote($valeur);
}
return $sortie;
}
 
protected function getIdentification(&$params) {
// Initialisation des variables
$utilisateur = array(0, session_id());
 
// L'id utilisateur est soit passé par le POST soit dans l'url
if (is_array($params) && isset($params['cmhl_ce_modifier_par'])) {
$utilisateur[0] = $params['cmhl_ce_modifier_par'];
unset($params['cmhl_ce_modifier_par']);
} else if (is_string($params)) {
$utilisateur[0] = $params;
}
 
return $utilisateur;
}
 
protected function etreAutorise($id_utilisateur) {
$autorisation = false;
if (($_SESSION['coel_utilisateur'] != '') && $_SESSION['coel_utilisateur']['id'] != $id_utilisateur) {
$this->messages[] = 'Accès interdit.';
} else if ($_SESSION['coel_utilisateur'] == '') {
$this->messages[] = 'Veuillez vous identifiez pour accéder à cette fonction.';
} else {
$autorisation = true;
}
return $autorisation;
}
 
private function gererIdentificationPermanente() {
// Pour maintenir l'utilisateur tjrs réellement identifié nous sommes obligé de recréer une SESSION et de le recharger depuis la bdd
if ($this->getUtilisateur() == ''
&& isset($_COOKIE['coel_login'])
&& ($utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login'], $_COOKIE['coel_mot_de_passe']))) {
$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
}
}
 
protected function getUtilisateur() {
return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
}
 
/**
* Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
* en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
*
* @param String $fichier le chemin du fichier du squelette
* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette.
*
* @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
*/
public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
$sortie = false;
if (file_exists($fichier)) {
// Extraction des variables du tableau de données
extract($donnees);
// Démarage de la bufferisation de sortie
ob_start();
// Si les tags courts sont activés
if ((bool) @ini_get('short_open_tag') === true) {
// Simple inclusion du squelette
include $fichier;
} else {
// Sinon, remplacement des tags courts par la syntaxe classique avec echo
$html_et_code_php = self::traiterTagsCourts($fichier);
// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
$html_et_code_php = '?>'.$html_et_code_php;
// Interprétation du html et du php dans le buffer
echo eval($html_et_code_php);
}
// Récupèration du contenu du buffer
$sortie = ob_get_contents();
// Suppression du buffer
@ob_end_clean();
} else {
$msg = "Le fichier du squelette '$fichier' n'existe pas.";
trigger_error($msg, E_USER_WARNING);
}
// Retourne le contenu
return $sortie;
}
 
/**
* Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
*
* @param String $chemin_squelette le chemin du fichier du squelette
*
* @return string le contenu du fichier du squelette php avec les tags courts remplacés.
*/
private static function traiterTagsCourts($chemin_squelette) {
$contenu = file_get_contents($chemin_squelette);
// Remplacement de tags courts par un tag long avec echo
$contenu = str_replace('<?=', '<?php echo ', $contenu);
// Ajout systématique d'un point virgule avant la fermeture php
$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
return $contenu;
}
}
?>
/tags/v1.1-andromede/jrest/services/TestLoginMdp.php
New file
0,0 → 1,36
<?php
/**
* PHP Version 5
*
* @category PHP
* @package annuaire
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/annuaire/
*/
 
Class TestLoginMdp extends JRestService {
 
public function getElement($uid){
 
if(!isset($uid[0]) || $uid[0] == '' || !isset($uid[1]) || $uid[1] == '') {
$this->envoyer(false);
return;
}
 
$mail_utilisateur = $uid[0];
$pass = $uid[1];
 
// TODO vérifier que le mot de passe est crypté !
 
$id_annuaire = Config::get('annuaire_defaut');
 
$controleur = new AnnuaireControleur();
$id_match_pass = $controleur->comparerIdentifiantMotDePasse($id_annuaire,$mail_utilisateur, $pass, true, true);
 
$this->envoyer($id_match_pass);
}
}
?>
/tags/v1.1-andromede/jrest/services/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2010,5,25,17,11,22
 
[Settings]
ShowDotFiles=true
/tags/v1.1-andromede/jrest/services/UtilisateurExiste.php
New file
0,0 → 1,27
<?php
/**
* PHP Version 5
*
* @category PHP
* @package annuaire
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/annuaire/
*/
 
Class UtilisateurExiste extends JRestService {
 
public function getElement($uid){
 
$mail_utilisateur = $uid[0];
$id_annuaire = Config::get('annuaire_defaut');
 
$controleur = new AnnuaireControleur();
$existe = $controleur->UtilisateurExiste($id_annuaire,$mail_utilisateur, true);
 
$this->envoyer($existe);
}
}
?>