/trunk/jrest/services/MigrationWiki.php |
---|
1,273 → 1,195 |
<?php |
class MigrationWiki extends ProjetService { |
const dry_run = false; |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
define('NL',"\n"); |
} |
private function executerRequeteManip($requete, $mode_fetch = false) { |
// Fonction de commodité pour afficher les requetes au lieu de les executer |
if (self::dry_run) { |
echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'; |
return true; |
} else { |
if($mode_fetch) { |
return $this->bdd->query($requete)->fetchAll($mode_fetch); |
} else { |
return $this->bdd->query($requete); |
} |
} |
} |
private function executerRequete($requete, $mode_fetch = false) { |
if (self::dry_run) { |
echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'.NL.NL; |
} |
return $this->bdd->query($requete)->fetchAll($mode_fetch); |
} |
public function getElement($uid){ |
$nom_admin = $this->config['appli']['nom_admin_wiki']; |
$mail_admin = $this->config['appli']['adresse_admin_wiki']; |
$pass_admin = $this->config['appli']['pass_admin_wiki']; |
$requete_projets_wikinis = 'SELECT * FROM gen_wikini'; |
$wikinis_projets = $this->executerRequete($requete_projets_wikinis, PDO::FETCH_ASSOC); |
foreach($wikinis_projets as $wikini) { |
// test sur un wiki |
/*if($wikini['gewi_code_alpha_wikini'] != 'bibliobota') { |
continue; |
}*/ |
$base = $wikini['gewi_bdd_nom']; |
$prefixe = $wikini['gewi_table_prefix']; |
$chemin_wiki_sur_site = $this->config['appli']['chemin_wikis_integres']; |
//$chemin_wiki = $wikini['gewi_chemin']; |
$chemin_wiki = '/home/aurelien/web/wikini/'.$wikini['gewi_code_alpha_wikini']; |
echo NL.'Traitement du wiki '.$chemin_wiki.NL; |
echo NL.$chemin_wiki.NL; |
if(!file_exists($chemin_wiki)) { |
echo 'Impossible de migrer le wikini '.$wikini['gewi_code_alpha_wikini'].' : le dossier n\'existe pas'.NL.NL.NL.NL; |
continue; |
} |
$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut']; |
$infos_admin = array('name' =>$nom_admin, 'email' => $mail_admin, 'password' => $pass_admin); |
if(!$this->verifierPresenceTableTriple($base, $prefixe)) { |
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].NL; |
$this->creerTableTriple($base, $prefixe); |
$this->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin); |
$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki); |
$this->changerVersionWakkaConfig($chemin_wiki); |
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].' effectuée '.NL.NL.NL.NL; |
} else { |
echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL; |
} |
$this->ajoutPageFormatees($chemin_wiki, $infos_admin); |
} |
} |
private function verifierPresenceTableTriple($base, $prefixe) { |
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'triples"'; |
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
$presence_table = false; |
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
return $presence_table; |
} |
private function creerTableTriple($base, $prefixe) { |
echo 'Création de la table triple '.NL; |
$requete_creation_table = 'CREATE TABLE '.$base.'.'.$prefixe.'triples (' . |
' id int(10) unsigned NOT NULL auto_increment,' . |
' resource varchar(255) NOT NULL default \'\',' . |
' property varchar(255) NOT NULL default \'\',' . |
' value text NOT NULL default \'\',' . |
' PRIMARY KEY (id),' . |
' KEY resource (resource),' . |
' KEY property (property)' . |
') TYPE=MyISAM'; |
return $this->executerRequeteManip($requete_creation_table); |
} |
private function verifierPresenceTableUsers($base, $prefixe) { |
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'users"'; |
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
$presence_table = false; |
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
return $presence_table; |
} |
private function ajouterUtilisateurAdmin($base, $prefixe, $infos_admin) { |
if(!$this->verifierPresenceTableUsers($base, $prefixe)) { |
echo 'Impossible d\'ajouter l\'adminwiki : '.$prefixe.'_users n\'existe_pas'.NL; |
return; |
} |
echo 'Ajout de l\'utilisateur wikiAdmin '.NL; |
$requete_suppression_si_admin_present = 'DELETE FROM '.$base.'.'.$prefixe.'users '. |
'WHERE name ="'.$infos_admin['name'].'"'; |
$this->executerRequeteManip($requete_suppression_si_admin_present); |
$requete_creation_admin = "insert into ".$base.'.'.$prefixe."users set ". |
"signuptime = now(), ". |
"name = '".$infos_admin['name']."', ". |
"email = '".$infos_admin['email']."', ". |
"password = md5('".$infos_admin['password']."')"; |
return $this->executerRequeteManip($requete_creation_admin); |
} |
private function changerVersionWakkaConfig($chemin_wikini) { |
if(file_exists($chemin_wikini.'wakka.config.php')) { |
$contenu_wakka_config = file_get_contents($chemin_wikini.'wakka.config.php'); |
$contenu_wakka_config_maj = str_replace('"wikini_version" => "0.4.3"','"wikini_version" => "0.5.0"',$contenu_wakka_config); |
$contenu_wakka_config_maj = str_replace("'wikini_version' => '0.4.3'","'wikini_version' => '0.5.0'",$contenu_wakka_config_maj); |
if(self::dry_run) { |
echo 'Wakka Config mis à jour '.$contenu_wakka_config_maj.NL; |
} else { |
//file_put_contents($chemin_wikini.'wakka.config.php', $contenu_wakka_config_maj); |
} |
echo 'Changement de la version de wikini '.NL; |
} else { |
echo 'Attention ! le fichier '.$chemin_wikini.'wakka.config.php n\'existe pas '.NL; |
} |
} |
private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) { |
if(self::dry_run) { |
echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL; |
$copie_recursive = true; |
} else { |
if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { |
$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest." 2>&1 " ); |
} |
} |
return $copie_recursive; |
} |
private function ajoutPageFormatees($chemin_wikini, $utilisateur) { |
$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut']; |
require_once($chemin_base_wiki_defaut.'wakka_class.php'); |
$nom_admin = $this->config['appli']['nom_admin_wiki']; |
$chemin_wikini = rtrim($chemin_wikini,'/'); |
require_once($chemin_wikini.'/wakka.config.php'); |
// la variable $wakkaConfig est contenu dans le fichier wakka.config.php |
$config = $wakkaConfig; |
$wiki = new Wiki($config); |
$wiki->SetGroupACL("admins", $nom_admin); |
$wiki->setUser($utilisateur); |
//insertion des pages de documentation et des pages standards |
$d = dir($chemin_base_wiki_defaut.'/setup/doc/'); |
while ($doc = $d->read()){ |
if (is_dir($doc) || substr($doc, -4) != '.txt') {continue;} |
$pagecontent = implode ('', file($chemin_base_wiki_defaut.'/setup/doc/'.$doc)); |
$pagecontent = mb_convert_encoding($pagecontent,'UTF-8','ISO-8859-15'); |
if ($doc=='_root_page.txt'){ |
$pagename = $config["root_page"]; |
}else{ |
$pagename = substr($doc,0,strpos($doc,'.txt')); |
} |
$base = $config['mysql_database']; |
$requete_existence_page = "Select tag from ".$base.".".$config['table_prefix']."pages where tag='$pagename'"; |
$existence_page = $this->executerRequete($requete_existence_page); |
if (is_array($existence_page) && count($existence_page) > 0) { |
echo 'la page '.$pagename.' existe déjà '.NL; |
} else { |
echo 'Ajout de la page '.$pagename.NL; |
$requete_maj_pages_anciennes = "UPDATE ".$base.".".$config['table_prefix']."pages ". |
"SET ". |
"latest = 'N'". |
"WHERE tag = '$pagename'"; |
$reussite = $this->executerRequeteManip($requete_maj_pages_anciennes); |
$requete_insertion_page = "INSERT INTO ".$base.".".$config['table_prefix']."pages ". |
"SET tag = '$pagename', ". |
"body = ".$this->bdd->quote($pagecontent).", ". |
"user = '".$nom_admin."', ". |
"owner = '".$nom_admin."', " . |
"time = now(), ". |
"latest = 'Y'"; |
$reussite = $this->executerRequeteManip($requete_insertion_page); |
if(!$reussite) { |
echo 'echec de l\'ajout de la page '.$pagename.NL; |
} else { |
// mise à jour des liens entre pages |
$wiki->SetPage($wiki->LoadPage($pagename,"",0)); |
$wiki->ClearLinkTable(); |
$wiki->StartLinkTracking(); |
$wiki->TrackLinkTo($pagename); |
$wiki->StopLinkTracking(); |
$wiki->WriteLinkTable(); |
$wiki->ClearLinkTable(); |
} |
} |
} |
} |
} |
?> |
<?php |
class MigrationWiki extends ProjetService { |
const dry_run = false; |
private function executerRequeteManip($requete, $mode_fetch = false) { |
// Fonction de commodité pour afficher les requetes au lieu de les executer |
if (self::dry_run) { |
echo str_replace('),','),'.NL, $requete); |
return true; |
} else { |
if($mode_fetch) { |
return $this->bdd->query($requete)->fetchAll($mode_fetch); |
} else { |
return $this->bdd->query($requete); |
} |
} |
} |
private function executerRequete($requete, $mode_fetch = false) { |
if (self::dry_run) { |
echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'; |
} |
$retour = $this->bdd->query($requete)->fetchAll($mode_fetch); |
return $retour; |
} |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
define('NL',"\n"); |
} |
public function getElement($uid){ |
exit; |
$requete_projets_wikinis = 'SELECT * FROM gen_wikini'; |
$wikinis_projets = $this->executerRequete($requete_projets_wikinis, PDO::FETCH_ASSOC); |
foreach($wikinis_projets as $wikini) { |
// test sur un wiki |
if($wikini['gewi_code_alpha_wikini'] != 'relais') { |
continue; |
} |
$base = $wikini['gewi_bdd_nom']; |
$prefixe = $wikini['gewi_table_prefix']; |
$chemin_wiki_sur_site = $this->config['appli']['chemin_wikis_integres']; |
$chemin_wiki = $wikini['gewi_chemin']; |
echo NL.'Traitement du wiki '.$chemin_wiki.NL; |
echo NL.$chemin_wiki.NL; |
if(!file_exists($chemin_wiki)) { |
echo 'Impossible de migrer le wikini '.$wikini['gewi_code_alpha_wikini'].' : le dossier n\'existe pas'.NL.NL.NL.NL; |
continue; |
} |
$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut']; |
$nom_admin = $this->config['appli']['nom_admin_wiki']; |
$mail_admin = $this->config['appli']['adresse_admin_wiki']; |
$pass_admin = $this->config['appli']['pass_admin_wiki']; |
$infos_admin = array('name' =>$nom_admin, 'email' => $mail_admin, 'password' => $pass_admin); |
//if(!$this->verifierPresenceTableTriple($base, $prefixe)) { |
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].NL; |
// $this->creerTableTriple($base, $prefixe); |
// $this->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin); |
$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki); |
$this->changerVersionWakkaConfig($chemin_wiki); |
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].' effectuée '.NL.NL.NL.NL; |
//} else { |
// echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL; |
//} |
} |
} |
private function verifierPresenceTableTriple($base, $prefixe) { |
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'triples"'; |
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
$presence_table = false; |
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
return $presence_table; |
} |
private function creerTableTriple($base, $prefixe) { |
echo 'Création de la table triple '.NL; |
$requete_creation_table = 'CREATE TABLE '.$base.'.'.$prefixe.'triples (' . |
' id int(10) unsigned NOT NULL auto_increment,' . |
' resource varchar(255) NOT NULL default \'\',' . |
' property varchar(255) NOT NULL default \'\',' . |
' value text NOT NULL default \'\',' . |
' PRIMARY KEY (id),' . |
' KEY resource (resource),' . |
' KEY property (property)' . |
') TYPE=MyISAM'; |
return $this->executerRequeteManip($requete_creation_table); |
} |
private function verifierPresenceTableUsers($base, $prefixe) { |
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'users"'; |
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
$presence_table = false; |
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
return $presence_table; |
} |
private function ajouterUtilisateurAdmin($base, $prefixe, $infos_admin) { |
if(!$this->verifierPresenceTableUsers($base, $prefixe)) { |
echo 'Impossible d\'ajouter l\'adminwiki : '.$prefixe.'_users n\'existe_pas'.NL; |
return; |
} |
echo 'Ajout de l\'utilisateur wikiAdmin '.NL; |
$requete_suppression_si_admin_present = 'DELETE FROM '.$base.'.'.$prefixe.'users '. |
'WHERE name ="'.$infos_admin['name'].'"'; |
$this->executerRequeteManip($requete_suppression_si_admin_present); |
$requete_creation_admin = "INSERT INTO ".$base.'.'.$prefixe."users SET ". |
"signuptime = now(), ". |
"name = '".$infos_admin['name']."', ". |
"email = '".$infos_admin['email']."', ". |
"password = md5('".$infos_admin['password']."')"; |
return $this->executerRequeteManip($requete_creation_admin); |
} |
private function changerVersionWakkaConfig($chemin_wikini) { |
if(file_exists($chemin_wikini.'/wakka.config.php')) { |
$contenu_wakka_config = file_get_contents($chemin_wikini.'/wakka.config.php'); |
$contenu_wakka_config_maj = str_replace('"wikini_version" => "0.4.3"','"wikini_version" => "0.5.0"',$contenu_wakka_config); |
$contenu_wakka_config_maj = str_replace("'wikini_version' => '0.4.3'","'wikini_version' => '0.5.0'",$contenu_wakka_config_maj); |
if(self::dry_run) { |
echo 'Wakka Config mis à jour '.$contenu_wakka_config_maj.NL; |
} else { |
file_put_contents($chemin_wikini.'/wakka.config.php', $contenu_wakka_config_maj); |
} |
echo 'Changement de la version de wikini '.NL; |
} else { |
echo 'Attention ! le fichier '.$chemin_wikini.'/wakka.config.php n\'existe pas '.NL; |
} |
} |
private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) { |
echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL; |
if(self::dry_run) { |
$copie_recursive = true; |
} else { |
if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { |
echo " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest."/ 2>&1 "; |
$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest."/ 2>&1 " ); |
} |
} |
return $copie_recursive; |
} |
} |
?> |
/trunk/jrest/services/Resume.php |
---|
1,108 → 1,107 |
<?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 Resume extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
public function getElement($uid){ |
$id_utilisateur = $uid[0]; |
$mail_utilisateur = $uid[1]; |
// on selectionne les projets les plus actifs |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet_statistiques'. |
' WHERE ps_ce_projet'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY ps_ce_projet'. |
' ORDER BY ps_msg_derniere_semaine DESC'. |
' LIMIT 0,5'; |
$resume = array(); |
$resume['titre'] = 'Vos projets les plus actifs'; |
$resume['lien_appli'] = '<a href="http://www.tela-botanica.org/page:liste_projets"> Voir tous les projets </a>'; |
$projets = $this->bdd->query($requete_projets)->fetchAll(); |
if(!$projets) { |
$resume['message'] = 'Vous n\'êtes inscrit à aucun projet'; |
} else { |
foreach($projets as $projet) { |
$requete_info_projet = 'SELECT p_titre'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($projet['ps_ce_projet']); |
$projet_infos = $this->bdd->query($requete_info_projet)->fetchAll(); |
$infos_messages = ''; |
if($projet['ps_msg_derniere_semaine'] > 0) { |
$infos_messages = ' (+ '.$projet['ps_msg_derniere_semaine'].' nouveaux messages) '; |
} else { |
$infos_messages = ' (aucun nouveau message) '; |
} |
$cible_lien = 'http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet['ps_ce_projet']; |
$resume_item = array('element' => $projet_infos[0]['p_titre'].$infos_messages, 'lien' => $cible_lien); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
public function gererInscription($id_utilisateur, $mail_utilisateur) { |
$requete_projets_utilisateur = 'SELECT * FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur); |
$resume = ''; |
$projets = $this->requeteTous($requete_projets_utilisateur); |
if($projets <= 0) { |
$resume = '<h3> Vous n\'êtes inscrit à aucun projet </h3>'; |
} else { |
$resume = '<h3> Vos projets </h3>'; |
$resume .= '<ul id="liste_projets">'; |
foreach($projets as $projet) { |
$requete_info_projet = 'SELECT *'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($projet['psu_id_projet']); |
$projet_infos = $this->requeteUn($requete_info_projet); |
$infos_messages = ''; |
$resume .= '<li> |
<a href="http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet_infos['p_id'].'" >'. |
'<b>'.$projet_infos['p_titre'].'</b> |
</a> |
<a onclick="javascript:return confirm(\'Se désinscrire du projet ?\');" href="http://www.tela-botanica.org/page:mes_preferences_des_projets?id_projet=7&act=26"> |
Se désinscrire du projet |
</a> |
</li>'; |
} |
$resume .= '</ul>'; |
} |
return $resume; |
} |
} |
<?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 Resume extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
public function getElement($uid){ |
$id_utilisateur = $uid[0]; |
$mail_utilisateur = $uid[1]; |
// on selectionne les projets les plus actifs |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet_statistiques'. |
' WHERE ps_ce_projet'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY ps_ce_projet'. |
' ORDER BY ps_msg_derniere_semaine DESC'; |
$resume = array(); |
$resume['titre'] = 'Mes projets les plus actifs'; |
$resume['lien_appli'] = '<a href="http://www.tela-botanica.org/page:liste_projets"> Voir tous les projets </a>'; |
$projets = $this->bdd->query($requete_projets)->fetchAll(); |
if(!$projets) { |
$resume['message'] = 'Vous n\'êtes inscrit à aucun projet'; |
} else { |
foreach($projets as $projet) { |
$requete_info_projet = 'SELECT p_titre'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($projet['ps_ce_projet']); |
$projet_infos = $this->bdd->query($requete_info_projet)->fetchAll(); |
$infos_messages = ''; |
if($projet['ps_msg_derniere_semaine'] > 0) { |
$infos_messages = ' (+ '.$projet['ps_msg_derniere_semaine'].' nouveaux messages) '; |
} else { |
$infos_messages = ' (aucun nouveau message) '; |
} |
$cible_lien = 'http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet['ps_ce_projet']; |
$resume_item = array('element' => $projet_infos[0]['p_titre'].$infos_messages, 'lien' => $cible_lien); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
public function gererInscription($id_utilisateur, $mail_utilisateur) { |
$requete_projets_utilisateur = 'SELECT * FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur); |
$resume = ''; |
$projets = $this->requeteTous($requete_projets_utilisateur); |
if($projets <= 0) { |
$resume = '<h3> Vous n\'êtes inscrit à aucun projet </h3>'; |
} else { |
$resume = '<h3> Vos projets </h3>'; |
$resume .= '<ul id="liste_projets">'; |
foreach($projets as $projet) { |
$requete_info_projet = 'SELECT *'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($projet['psu_id_projet']); |
$projet_infos = $this->requeteUn($requete_info_projet); |
$infos_messages = ''; |
$resume .= '<li> |
<a href="http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet_infos['p_id'].'" >'. |
'<b>'.$projet_infos['p_titre'].'</b> |
</a> |
<a onclick="javascript:return confirm(\'Se désinscrire du projet ?\');" href="http://www.tela-botanica.org/page:mes_preferences_des_projets?id_projet=7&act=26"> |
Se désinscrire du projet |
</a> |
</li>'; |
} |
$resume .= '</ul>'; |
} |
return $resume; |
} |
} |
?> |
/trunk/jrest/services/DesinscriptionProjet.php |
---|
1,45 → 1,45 |
<?php |
Class DesinscriptionProjet extends ProjetService { |
public function getElement($uid) { |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
$id_projet = (isset($_GET['id_projet'])) ? $_GET['id_projet'] : false; |
if(!$id_utilisateur || !$id_projet) { |
return false; |
} |
// et on le supprime du projet |
$suppression_participant = $this->supprimerParticipantAProjet($id_utilisateur, $id_projet); |
// ainsi que des listes associées |
if($mail) { |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
$id_liste = $listes[0]['pl_id_liste']; |
$suppression_liste = $this->supprimerInscriptionAListeProjet($id_utilisateur, $id_liste); |
// on supprime l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->desinscriptionListe($nom_liste, $mail)) { |
$this->envoyer("false"); |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
<?php |
Class DesinscriptionProjet extends ProjetService { |
public function getElement($uid) { |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
$id_projet = (isset($_GET['id_projet'])) ? $_GET['id_projet'] : false; |
if(!$id_utilisateur || !$id_projet) { |
return false; |
} |
// et on le supprime du projet |
$suppression_participant = $this->supprimerParticipantAProjet($id_utilisateur, $id_projet); |
// ainsi que des listes associées |
if($mail) { |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
$id_liste = $listes[0]['pl_id_liste']; |
$suppression_liste = $this->supprimerInscriptionAListeProjet($id_utilisateur, $id_liste); |
// on supprime l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->desinscriptionListe($nom_liste, $mail)) { |
$this->envoyer("false"); |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
?> |
/trunk/jrest/services/Documents.php |
---|
1,63 → 1,65 |
<?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 Documents extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
public function getElement($uid){ |
$id_utilisateur = $uid[1]; |
$mail_utilisateur = $uid[2]; |
if($id_utilisateur == "") { |
return; |
} |
// on selectionne les projets les plus actifs |
$requete_docs_projets = 'SELECT * FROM projet_documents WHERE pd_ce_utilisateur = '.$this->bdd->quote($id_utilisateur).' '. |
'AND pd_ce_type != 0 AND pd_visibilite = "public" '. |
'ORDER BY pd_date_de_mise_a_jour DESC '. |
'LIMIT 0,5'; |
$resume = array(); |
$resume['titre'] = 'Vos derniers documents déposés'; |
//$resume['lien_appli'] = '<a href="http://www.tela-botanica.org/page:liste_projets"> Voir tous les projets </a>'; |
$docs = $this->bdd->query($requete_docs_projets)->fetchAll(); |
if(!$docs) { |
$resume['message'] = 'Vous n\'avez déposé aucun document'; |
} else { |
foreach($docs as $doc) { |
$infos_projet = $this->obtenirInformationsProjet($doc['pd_ce_projet']); |
$nom_projet = $infos_projet[0]['p_titre']; |
$date_formatee = strftime( "%d/%m/%Y" , strtotime( $doc['pd_date_de_mise_a_jour'] ) ); |
$infos_messages = ' ('.$nom_projet.' le '.$date_formatee.') '; |
$cible_lien = 'http://www.tela-botanica.org/projets/'.$doc['pd_ce_projet'].'/telechargement/'.$doc['pd_id']; |
$resume_item = array('element' => $doc['pd_nom'].$infos_messages, 'lien' => $cible_lien); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
} |
<?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 Documents extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
public function getElement($uid){ |
$id_utilisateur = $uid[1]; |
$mail_utilisateur = $uid[2]; |
if($id_utilisateur == "") { |
return; |
} |
// on selectionne les projets les plus actifs |
$requete_docs_projets = 'SELECT * FROM projet_documents WHERE pd_ce_utilisateur = '.$this->bdd->quote($id_utilisateur).' '. |
'AND pd_ce_type != 0 AND pd_visibilite = "public" '. |
'ORDER BY pd_date_de_mise_a_jour DESC '. |
'LIMIT 0,5'; |
$resume = array(); |
$resume['titre'] = 'Mes derniers documents déposés'; |
//$resume['lien_appli'] = '<a href="http://www.tela-botanica.org/page:liste_projets"> Voir tous les projets </a>'; |
$docs = $this->bdd->query($requete_docs_projets)->fetchAll(); |
if(!$docs) { |
$resume['message'] = 'Vous n\'avez déposé aucun document'; |
} else { |
foreach($docs as $doc) { |
$infos_projet = $this->obtenirInformationsProjet($doc['pd_ce_projet']); |
//print_r($infos_projet); |
$nom_projet = $infos_projet[0]['p_titre']; |
$date_formatee = strftime( "%d/%m/%Y" , strtotime( $doc['pd_date_de_mise_a_jour'] ) ); |
$infos_messages = ' ('.$nom_projet.' le '.$date_formatee.') '; |
$cible_lien = 'http://www.tela-botanica.org/projets/'.$doc['pd_ce_projet'].'/telechargement/'.$doc['pd_id']; |
$resume_item = array('element' => $doc['pd_nom'].$infos_messages, 'lien' => $cible_lien); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
} |
?> |
/trunk/jrest/services/Inscription.php |
---|
1,21 → 1,21 |
<?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 Inscription extends JRestService { |
public function getElement($uid){ |
$this->envoyer("OK"); |
} |
} |
<?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 Inscription extends JRestService { |
public function getElement($uid){ |
$this->envoyer("OK"); |
} |
} |
?> |
/trunk/jrest/services/ProjetService.php |
---|
1,174 → 1,149 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class ProjetService extends JRestService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
protected function obtenirProjetsPourParticipant($id_utilisateur) { |
// on selectionne la liste des projets auxquel on est inscrit |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY p_id'; |
try { |
$projets = $this->bdd->query($requete_projets)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return array(); |
} |
// pas de projets ? alors c'est fait ! |
if(!$projets || count($projets) <= 0) { |
return array(); |
} |
return $projets; |
} |
protected function obtenirInformationsProjet($id_projet) { |
$requete_informations_projet = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($id_projet) ; |
try { |
$projet = $this->bdd->query($requete_informations_projet)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return false; |
} |
// pas de projets ? alors c'est fait ! |
if(!$projet) { |
return false; |
} |
return $projet; |
} |
protected function obtenirListesAssocieesAuProjet($id_projet) { |
$requete_liste_projets = 'SELECT * FROM projet_liste '. |
'WHERE pl_id_liste IN '. |
'(SELECT pl_id_liste from projet_lien_liste '. |
'WHERE pl_id_projet='.$this->bdd->quote($id_projet).')' ; |
try { |
$listes_projets = $this->bdd->query($requete_liste_projets)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return array(); |
} |
if(!$listes_projets || count($listes_projets) <= 0) { |
return array(); |
} |
return $listes_projets; |
} |
protected function obtenirListesExternesAssocieesAuProjet($id_projet) { |
$requete_liste_projets = 'SELECT * FROM agora '. |
'WHERE plle_id_liste IN '. |
'(SELECT plle_id_liste from projet_lien_liste_externe '. |
'WHERE plle_id_projet='.$this->bdd->quote($id_projet).')' ; |
try { |
$listes_projets = $this->bdd->query($requete_liste_projets)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return array(); |
} |
if(!$listes_projets || count($listes_projets) <= 0) { |
return array(); |
} |
return $listes_projets; |
} |
protected function supprimerInscriptionAListeProjet($id_utilisateur, $id_liste) { |
$requete_suppression_liste = 'DELETE FROM projet_inscription_liste '. |
'WHERE pil_id_utilisateur='.$this->bdd->quote($id_utilisateur).' and pil_id_liste='.$this->bdd->quote($id_liste); |
try { |
$requete_suppression_liste = $this->bdd->query($requete_suppression_liste); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage().' '.$requete_suppression_liste); |
return false; |
} |
} |
protected function supprimerParticipantAProjet($id_utilisateur, $id_projet) { |
$requete_suppression_projets = 'DELETE FROM projet_statut_utilisateurs '. |
'WHERE psu_id_utilisateur='.$this->bdd->quote($id_utilisateur).' and psu_id_projet='.$this->bdd->quote($id_projet); |
try { |
$requete_suppression_projets = $this->bdd->query($requete_suppression_projets); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage().' '.$requete_suppression_projets); |
return false; |
} |
return true; |
} |
protected function estAbonneAListe($nom_liste, $mail) { |
try { |
$est_abonne = '0' ; |
// TODO: externaliser l'adresse |
$xml_abonne = new SimpleXMLElement(file_get_contents('http://vpopmail.tela-botanica.org/est_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail)) ; |
$est_abonne = $xml_abonne[0] ; |
if($est_abonne == '1') { |
return true; |
} else { |
return false; |
} |
} |
catch(Exception $e) { |
trigger_error($e->getMessage()) ; |
return false; |
} |
} |
protected function modifierMailPourListe($nom_liste, $ancien_mail, $nouveau_mail) { |
return ($this->desinscriptionListe($nom_liste, $ancien_mail) && $this->inscriptionListe($nom_liste, $nouveau_mail)); |
} |
protected function inscriptionListe($nom_liste, $mail) { |
// TODO: externaliser l'adresse |
return $inscription_abonne = file_get_contents('http://vpopmail.tela-botanica.org/ajout_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail) ; |
} |
protected function desinscriptionListe($nom_liste, $mail) { |
// TODO: externaliser l'adresse |
return $suppression_abonne = file_get_contents('http://vpopmail.tela-botanica.org/suppression_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail) ; |
} |
} |
?> |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class ProjetService extends JRestService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
protected function obtenirProjetsPourParticipant($id_utilisateur) { |
// on selectionne la liste des projets auxquel on est inscrit |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY p_id'; |
try { |
$projets = $this->bdd->query($requete_projets)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return array(); |
} |
// pas de projets ? alors c'est fait ! |
if(!$projets || count($projets) <= 0) { |
return array(); |
} |
return $projets; |
} |
protected function obtenirInformationsProjet($id_projet) { |
$requete_informations_projet = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id = '.$this->bdd->quote($id_projet) ; |
try { |
$projet = $this->bdd->query($requete_informations_projet)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return false; |
} |
// pas de projets ? alors c'est fait ! |
if(!$projet) { |
return false; |
} |
return $projet; |
} |
protected function obtenirListesAssocieesAuProjet($id_projet) { |
$requete_liste_projets = 'SELECT * FROM projet_liste '. |
'WHERE pl_id_liste IN '. |
'(SELECT pl_id_liste from projet_lien_liste '. |
'WHERE pl_id_projet='.$this->bdd->quote($id_projet).')' ; |
try { |
$listes_projets = $this->bdd->query($requete_liste_projets)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage()); |
return array(); |
} |
if(!$listes_projets || count($listes_projets) <= 0) { |
return array(); |
} |
return $listes_projets; |
} |
protected function supprimerInscriptionAListeProjet($id_utilisateur, $id_liste) { |
$requete_suppression_liste = 'DELETE FROM projet_inscription_liste '. |
'WHERE pil_id_utilisateur='.$this->bdd->quote($id_utilisateur).' and pil_id_liste='.$this->bdd->quote($id_liste) ; |
try { |
$requete_suppression_liste = $this->bdd->query($requete_suppression_liste); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage().' '.$requete_suppression_liste); |
return false; |
} |
} |
protected function supprimerParticipantAProjet($id_utilisateur, $id_projet) { |
$requete_suppression_projets = 'DELETE FROM projet_statut_utilisateurs '. |
'WHERE psu_id_utilisateur='.$this->bdd->quote($id_utilisateur).' and psu_id_projet='.$this->bdd->quote($id_projet) ; |
try { |
$requete_suppression_projets = $this->bdd->query($requete_suppression_projets); |
} catch (PDOException $e) { |
Log::getInstance()->ajouterEntree('projet','Fichier: '.$e->getFile().' Ligne: '.$e->getLine().' '.$e->getMessage().' '.$requete_suppression_projets); |
return false; |
} |
return true; |
} |
protected function estAbonneAListe($nom_liste, $mail) { |
try { |
$est_abonne = '0' ; |
$xml_abonne = new SimpleXMLElement(file_get_contents('http://vpopmail.tela-botanica.org/est_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail)) ; |
$est_abonne = $xml_abonne[0] ; |
if($est_abonne == '1') { |
return true; |
} else { |
return false; |
} |
} |
catch(Exception $e) { |
trigger_error($e->getMessage()) ; |
return false; |
} |
} |
protected function modifierMailPourListe($nom_liste, $ancien_mail, $nouveau_mail) { |
return ($this->desinscriptionListe($nom_liste, $ancien_mail) && $this->inscriptionListe($nom_liste, $nouveau_mail)); |
} |
protected function inscriptionListe($nom_liste, $mail) { |
return $inscription_abonne = file_get_contents('http://vpopmail.tela-botanica.org/ajout_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail) ; |
} |
protected function desinscriptionListe($nom_liste, $mail) { |
return $suppression_abonne = file_get_contents('http://vpopmail.tela-botanica.org/suppression_abonne.php?domaine=tela-botanica.org&liste='.$nom_liste.'&mail='.$mail) ; |
} |
} |
?> |
/trunk/jrest/services/Modification.php |
---|
1,69 → 1,69 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class Modification extends ProjetService { |
public function getElement($uid){ |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
$nouveau_mail = (isset($_GET['nouveau_mail'])) ? $_GET['nouveau_mail'] : false; |
if(!$mail || !$id_utilisateur) { |
$this->envoyer("false"); |
} |
$ancien_mail = $mail; |
$nouveau_mail = $nouveau_mail; |
// si le mail n'a pas changé, on ne change rien |
if($ancien_mail == $nouveau_mail) { |
$this->envoyer("OK"); |
return; |
} |
$projets = $this->obtenirProjetsPourParticipant($id_utilisateur); |
// si pas de projets, rien à faire |
if(count($projets) <= 0) { |
$this->envoyer("OK"); |
return; |
} |
// sinon on récupère la liste associée à chaque projet |
foreach($projets as $projet) { |
$id_projet = $projet['p_id']; |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
// on modifie l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->modifierMailPourListe($nom_liste, $ancien_mail, $nouveau_mail)) { |
$this->envoyer("false"); |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
?> |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class Modification extends ProjetService { |
public function getElement($uid){ |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
$nouveau_mail = (isset($_GET['nouveau_mail'])) ? $_GET['nouveau_mail'] : false; |
if(!$mail || !$id_utilisateur) { |
$this->envoyer("false"); |
} |
$ancien_mail = $mail; |
$nouveau_mail = $nouveau_mail; |
// si le mail n'a pas changé, on ne change rien |
if($ancien_mail == $nouveau_mail) { |
$this->envoyer("OK"); |
return; |
} |
$projets = $this->obtenirProjetsPourParticipant($id_utilisateur); |
// si pas de projets, rien à faire |
if(count($projets) <= 0) { |
$this->envoyer("OK"); |
return; |
} |
// sinon on récupère la liste associée à chaque projet |
foreach($projets as $projet) { |
$id_projet = $projet['p_id']; |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
// on modifie l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->modifierMailPourListe($nom_liste, $ancien_mail, $nouveau_mail)) { |
$this->envoyer("false"); |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
?> |
/trunk/jrest/services/Gestion.php |
---|
1,52 → 1,52 |
<?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]; |
// on selectionne la liste des projets auxquel on est inscrit |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY p_id'; |
$resume = array(); |
$resume['titre'] = 'Gestion de mes projets'; |
$resume['info'] = 'Vous souhaitez vous inscrire à d\'autres projets ? <a href="http://www.tela-botanica.org/page:liste_projets" > Consultez la liste des projets et forums </a>'; |
$projets = $this->bdd->query($requete_projets)->fetchAll(); |
if(!$projets) { |
$resume['message'] = 'Vous n\'êtes inscrit à aucun projet'; |
} else { |
foreach($projets as $projet) { |
$cible_lien_desinscrire = 'http://www.tela-botanica.org/client/projet/jrest/DesinscriptionProjet/?id_projet='.$projet['p_id'].'&id_utilisateur='.$id_utilisateur.'&mail='.$mail_utilisateur; |
$cible_lien = 'http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet['p_id']; |
$resume_item = array('element' => $projet['p_titre'], 'lien_desinscrire' => $cible_lien_desinscrire, 'lien' => $cible_lien, 'intitule_lien' => 'Se désinscrire'); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
} |
<?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]; |
// on selectionne la liste des projets auxquel on est inscrit |
$requete_projets = 'SELECT DISTINCT *'. |
' FROM projet'. |
' WHERE p_id'. |
' IN '. |
'(SELECT psu_id_projet FROM projet_statut_utilisateurs'. |
' WHERE psu_id_utilisateur = '.$this->bdd->quote($id_utilisateur).')'. |
' GROUP BY p_id'; |
$resume = array(); |
$resume['titre'] = 'Gestion de mes projets'; |
$resume['info'] = 'Vous souhaitez vous inscrire à d\'autres projets ? <a href="http://www.tela-botanica.org/page:liste_projets" > Consultez la liste des projets et forums </a>'; |
$projets = $this->bdd->query($requete_projets)->fetchAll(); |
if(!$projets) { |
$resume['message'] = 'Vous n\'êtes inscrit à aucun projet'; |
} else { |
foreach($projets as $projet) { |
$cible_lien_desinscrire = 'http://www.tela-botanica.org/client/projet/jrest/DesinscriptionProjet/?id_projet='.$projet['p_id'].'&id_utilisateur='.$id_utilisateur.'&mail='.$mail_utilisateur; |
$cible_lien = 'http://www.tela-botanica.org/page:liste_projets?id_projet='.$projet['p_id']; |
$resume_item = array('element' => $projet['p_titre'], 'lien_desinscrire' => $cible_lien_desinscrire, 'lien' => $cible_lien, 'intitule_lien' => 'Se désinscrire'); |
$resume['elements'][] = $resume_item; |
} |
} |
$this->envoyer($resume); |
} |
} |
?> |
/trunk/jrest/services/JRestService.php |
---|
1,238 → 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; |
} |
} |
<?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; |
} |
} |
?> |
/trunk/jrest/services/ProjetSyndication.php |
---|
New file |
0,0 → 1,342 |
<?php |
/** |
* Service fournissant des informations concernant PROJET au format RSS1, RSS2 ou ATOM. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Grégoire Duché <gregoire@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: CoelSyndication.php 381 2010-05-17 17:10:37Z jpm $ |
* @copyright 2009 |
*/ |
class ProjetSyndication extends ProjetService { |
private $format = null; |
private $service = null; |
private $squelette = null; |
private $squelette_dossier = null; |
private $squelette_diff = null; |
private $flux = array(); |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($param = array()) { |
// Initialisation des variables |
$info = array(); |
$contenu = ''; |
// Pré traitement des paramètres |
$pour_bdd = false; |
$p = $this->traiterParametresUrl(array('service', 'format'), $param, $pour_bdd); |
// Récupération de la liste des flux |
$this->chargerListeDesFlux(); |
// Chargement du bon type de service demandé |
if (isset($p['service'])) { |
$this->service = strtolower($p['service']); |
$methode = $this->getNomMethodeService(); |
if (method_exists($this, $methode)) { |
if ($this->service != 'liste_des_flux') { |
if (isset($p['format']) && preg_match('/^(?:rss1|rss2|atom)$/i', $p['format'])) { |
// Multiplication par deux de la limite car nous récupérons deux lignes par item |
$this->limit = $this->limit*2; |
// Mise en minuscule de l'indication du format |
$this->format = strtolower($p['format']); |
// Définition du fichier squelette demandé |
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR; |
$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml'; |
$this->squelette_diff = $this->squelette_dossier.'diff.tpl.html'; |
} else { |
$this->format = ''; |
$this->messages[] = "Le service Projet Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom."; |
} |
} |
// Récupération du contenu à renvoyer |
$contenu = $this->$methode(); |
} else { |
$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Le service Projet Syndication nécessite d'indiquer en premier paramètre le type d'information demandé."; |
} |
// Envoie sur la sortie standard |
$encodage = 'utf-8'; |
$mime = $this->getTypeMime(); |
$formatage_json = $this->getFormatageJson(); |
$this->envoyer($contenu, $mime, $encodage, $formatage_json); |
} |
private function getUrlServiceBase() { |
$url_service = $this->config['coel']['urlBaseJrest'].'CoelSyndication/'.$this->service.'/'.$this->format; |
return $url_service; |
} |
private function getNomMethodeService() { |
$methode = ''; |
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('_', $this->service)))); |
$methode = 'getService'.$service_formate; |
return $methode; |
} |
private function getTypeMime() { |
$mime = ''; |
switch ($this->format) { |
case 'atom' : |
$mime = 'application/atom+xml'; |
break; |
case 'rss1' : |
case 'rss2' : |
$mime = 'application/rss+xml'; |
break; |
default: |
$mime = 'text/html'; |
} |
return $mime; |
} |
private function getFormatageJson() { |
$json = false; |
switch ($this->service) { |
case 'liste_des_flux' : |
$json = true; |
break; |
default: |
$json = false; |
} |
return $json; |
} |
private function getFlux($nom) { |
$nom = strtolower($nom); |
return isset($this->flux[$nom]) ? $this->flux[$nom] : array(); |
} |
private function setFlux($nom, $titre, $description) { |
$url_base = $this->config['appli']['urlBaseJrest'].'ProjetSyndication/'; |
$formats = array('atom', 'rss2', 'rss1'); |
$flux = array(); |
foreach ($formats as $format) { |
$url = $url_base.$nom.'/'.$format; |
$flux[$format] = $url; |
} |
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux); |
} |
private function chargerListeDesFlux() { |
$this->setFlux('actifs', 'Flux de syndication des projets les plus actifs', |
'Ce flux fournit des informations sur les projets les plus actifs de l\'espace projet'); |
$this->setFlux('derniers_messages', 'Flux de syndication des derniers messages', |
'Ce flux fournit des informations sur les derniers messages de l\'espace projet'); |
} |
private function getServiceListeDesFlux() { |
return $this->flux; |
} |
private function getServiceActifs() { |
// Construction de la requête |
$requete_projets = ' select p_id, p_titre as titre, p_resume as description, pl_id_liste, plle_id_liste, p_avoir_document, ps_nombre_inscrit, ps_pourcent,'. |
' p_wikini, ps_doc_derniere_semaine, p_avoir_document, ps_nombre_inscrit_derniere_semaine, '. |
' ps_nombre_membre_yahoo, ps_msg_derniere_semaine, ps_modifwiki_derniere_semaine, p_en_dormance from'. |
' projet left join projet_lien_liste on p_id=pl_id_projet'. |
' left join projet_lien_liste_externe on p_id=plle_id_projet'. |
' left join projet_statistiques on p_id=ps_ce_projet and ps_dernier=1'. |
' WHERE p_en_dormance = 0'. |
' group by p_id order by ps_pourcent desc'; |
$elements = $this->executerRequete($requete_projets); |
// Création du contenu |
$contenu = $this->executerService('cpr_nom', $elements); |
return $contenu; |
} |
private function getServiceDerniersMessages() { |
/*include_once("lib/ezmlmAccessObject.class.php"); |
$xml_parser = &new ezmlmAccessObject('list_info', 'tela-botanica.org', |
'determination_plantes', 'fr', 'http://localhost') ; |
$xml_parser->load(); |
ob_start(); |
$resultat = $xml_parser->parse() ; |
$calendrier = ob_get_contents(); |
ob_end_clean();*/ |
} |
private function executerRequete($requete) { |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
return $infos; |
} |
private function executerService($champ_titre, $elements) { |
// Prétraitement des données |
$donnees = $this->construireDonneesCommunesAuFlux($elements); |
foreach ($elements as $element) { |
//$xml = $this->getXmlHisto($element); |
//$enrg = $this->getTableauDepuisXmlHisto($xml); |
//$diff = $this->getDiffInfos($element); |
//$diff['differences'] = $this->getDiff($element); |
//$diff_html = (!is_null($diff['differences'])) ? Coel::traiterSquelettePhp($this->squelette_diff, $diff) : ''; |
$item = $this->construireDonneesCommunesAuxItems($element); |
$item['titre'] = $this->creerTitre($champ_titre, $element, $enrg); |
$item['guid'] = sprintf($this->config['appli']['guid'], 'projet', $element['p_id']); |
$item['lien'] = $this->config['appli']['url_base_projet'].'?id_projet='.urlencode($element['p_id']); |
$item['description'] = "<h4>".$element['ps_nombre_inscrit'].' inscrits - '.$element['ps_msg_derniere_semaine'].' nouveaux messages</h4>'; |
$item['description'] .= '<p>'.$this->creerDescription($element, $enrg).'</p>'; |
$item['description'] .= $diff_html; |
$item['description'] = $this->nettoyerTexte($item['description']); |
$item['description_encodee'] = htmlspecialchars($item['description']); |
$donnees['items'][] = $item; |
} |
// Création du contenu à partir d'un template PHP |
$contenu = ProjetService::traiterSquelettePhp($this->squelette, $donnees); |
return $contenu; |
} |
private function creerTitre($champ, $element, $enrg) { |
$titre = ''; |
if (isset($element['titre'])) { |
$titre = $element['titre']; |
} else if (isset($element[$champ])) { |
$titre = $element[$champ]; |
} else if (isset($enrg[$champ])) { |
$titre = $enrg[$champ]; |
} |
$titre = $this->nettoyerTexte($titre); |
return $titre; |
} |
private function creerDescription($element, $enrg) { |
$description = ''; |
if (isset($element['description'])) { |
$description = strip_tags($element['description']); |
} |
return $description; |
} |
private function nettoyerNomChamps($infos) { |
$sortie = array(); |
foreach ($infos as $champ => $valeur) { |
if (preg_match('/^__(.+)$/', $champ, $match)) { |
$sortie[$match[1]] = $valeur; |
} else { |
$sortie[$champ] = $valeur; |
} |
} |
return $sortie; |
} |
private function traiterInfosPrecedentes($infos_courantes, $infos_precedentes) { |
$infos_precedentes_traitees = array(); |
foreach ($infos_precedentes as $champ => $valeur) { |
if ($champ == 'cmhl_date_modification') { |
$infos_precedentes_traitees['date_prec'] = $valeur; |
} else if ($champ == 'cmhl_enregistrement') { |
$infos_precedentes_traitees['enrg_prec'] = $valeur; |
} else if (preg_match('/^__(.+)$/', $champ, $match)) { |
$infos_precedentes_traitees[$match[1].'_prec'] = $valeur; |
} |
} |
$sortie = array_merge($infos_courantes, $infos_precedentes_traitees); |
return $sortie; |
} |
private function nettoyerTexte($txt) { |
$txt = preg_replace('/&(?!amp;)/i', '&', $txt, -1); |
return $txt; |
} |
private function getMessageModif($item) { |
$message = $item['etat'].' le '.$item['date_maj_simple'].' par '.$item['modifier_par'].' depuis l\'IP '.$item['ip']; |
return $message; |
} |
private function construireDonneesCommunesAuxItems($info) { |
$item = array(); |
$date_modification_timestamp = strtotime($info['cmhl_date_modification']); |
$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp); |
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$item['guid'] = $info['cmhl_id_historique_ligne']; |
$item['cle'] = $info['cmhl_cle_ligne']; |
$item['ip'] = $info['cmhl_ip']; |
$item['modifier_par'] = $info['modifier_par']; |
$item['etat'] = isset($info['cmhl_ce_etat']) ? $this->getTexteEtat($info['cmhl_ce_etat']) : ''; |
return $item; |
} |
private function getTexteEtat($code) { |
$etat = ''; |
switch ($code) { |
case '1' : |
$etat = 'Ajouté'; |
break; |
case '2' : |
$etat = 'Modifié'; |
break; |
case '3' : |
$etat = 'Supprimé'; |
break; |
default : |
$etat = '!Problème!'; |
$e = "Le champ cmhl_ce_etat possède une valeur innatendue : $code"; |
$this->messages[] = $e; |
} |
return $etat; |
} |
private function construireDonneesCommunesAuFlux($infos) { |
$donnees = $this->getFlux($this->service); |
$donnees['guid'] = $this->getUrlServiceBase(); |
$donnees['lien_service'] = $this->creerUrlService(); |
$donnees['lien_projet'] = $this->config['appli']['url_base_projet']; |
$donnees['editeur'] = $this->config['coel']['editeur']; |
$derniere_info_en_date = reset($infos); |
$date_modification_timestamp = strtotime($derniere_info_en_date['cmhl_date_modification']); |
$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$donnees['annee_courante'] = date('Y'); |
$donnees['generateur'] = 'COEL - Jrest'; |
preg_match('/([0-9]+)/', '$Revision: 381 $', $match); |
$donnees['generateur_version'] = $match[1]; |
return $donnees; |
} |
private function creerUrlService() { |
$url_service = $this->getUrlServiceBase(); |
if (isset($this->start) || isset($this->limit)) { |
$arguments = array(); |
if (isset($this->start) && isset($_GET['start'])) { |
$arguments[] = 'start='.$this->start; |
} |
if (isset($this->limit) && isset($_GET['limit'])) { |
$arguments[] = 'limit='.($this->limit/2); |
} |
if (count($arguments) > 0) { |
$url_service .= '?'.implode('&', $arguments); |
} |
} |
return $url_service; |
} |
} |
/trunk/jrest/services/squelettes/rss2.tpl.xml |
---|
New file |
0,0 → 1,22 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
<channel> |
<title><?=$titre?></title> |
<link><?=$lien_projet?></link> |
<atom:link href="<?=$lien_service?>" rel="self" type="application/rss+xml" /> |
<description><?=$description?></description> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<item> |
<guid><?=$item['guid']?></guid> |
<title><?=$item['titre']?></title> |
<link><?=$item['lien']?></link> |
<description><?=$item['description_encodee']?></description> |
<pubDate><?=$item['date_maj_RSS']?></pubDate> |
</item> |
<?php endforeach; ?> |
<?php endif; ?> |
</channel> |
</rss> |
/trunk/jrest/services/squelettes/diff.tpl.html |
---|
New file |
0,0 → 1,36 |
<table style="border:1px solid black;border-collapse:collapse;" summary="Différences entre les données du <?=$date_ancienne?> et du <?=$date_nouvelle?>."> |
<caption style="text-align:left;font-weight:bold;">Différences</caption> |
<thead style="border:1px solid black;"> |
<tr> |
<th rowspan="2" style="border:1px dotted;">Champ</th> |
<th rowspan="2" style="border:1px dotted;">Type</th> |
<th <?=(($etat == 'M') ? 'colspan="2"' : '');?> style="border:1px dotted;">Valeur</th> |
</tr> |
<tr> |
<?php if ($etat == 'M') : ?> |
<th style="border:1px dotted;">Ancienne (<?=$date_ancienne?>)</th> |
<?php endif; ?> |
<th style="border:1px dotted;">Nouvelle (<?=$date_nouvelle?>)</th> |
</tr> |
</thead> |
<tbody> |
<?php foreach ($differences as $champ => $diff) : ?> |
<?php if ($diff['type'] == 'A') : |
$couleur = CFC; |
elseif ($diff['type'] == 'M') : |
$couleur = FFC; |
elseif ($diff['type'] == 'S') : |
$couleur = F99; |
endif; ?> |
<tr style="background-color:#<?=$couleur?>;"> |
<td style="border:1px dotted;"><?=$champ?></td> |
<td style="text-align:center;border:1px dotted;"><?=$diff['type_txt']?></td> |
<?php if ($etat == 'M') : ?> |
<td style="border:1px dotted;"><?=$diff['ancien']?></td> |
<?php endif; ?> |
<td style="border:1px dotted;"><?=$diff['nouveau']?></td> |
</tr> |
<?php endforeach; ?> |
</tbody> |
</table> |
/trunk/jrest/services/squelettes/atom.tpl.xml |
---|
New file |
0,0 → 1,33 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<feed xmlns="http://www.w3.org/2005/Atom"> |
<title><?=$titre?></title> |
<link href="<?=$lien_coel?>" rel="alternate" type="text/html" hreflang="fr" /> |
<link href="<?=$lien_service?>" rel="self" type="application/atom+xml"/> |
<updated><?=$date_maj_ATOM?></updated> |
<author> |
<name><?=$editeur?></name> |
</author> |
<id><?=$guid?></id> |
<rights>Copyright (c) <?=$annee_courante?>, <?=$editeur?></rights> |
<generator uri="<?=$lien_coel?>" version="<?=$generateur_version?>"><?=$generateur?></generator> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<entry> |
<id><?=$item['lien']?></id> |
<title><?=$item['titre']?></title> |
<link href="<?=$item['lien']?>"/> |
<updated><?=$item['date_maj_ATOM']?></updated> |
<author><name><?=$item['modifier_par']?></name></author> |
<content type="xhtml" xml:lang="fr"> |
<div xmlns="http://www.w3.org/1999/xhtml"> |
<?=$item['description'];?> |
</div> |
</content> |
</entry> |
<?php endforeach; ?> |
<?php endif; ?> |
</feed> |
/trunk/jrest/services/squelettes/rss1.tpl.xml |
---|
New file |
0,0 → 1,45 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<!DOCTYPE rdf:RDF [ |
<!ENTITY % HTMLlat1 PUBLIC |
"-//W3C//ENTITIES Latin 1 for XHTML//EN" |
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> |
%HTMLlat1; |
]> |
<rdf:RDF |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
xmlns:dc="http://purl.org/dc/elements/1.1/" |
xmlns="http://purl.org/rss/1.0/"> |
<channel rdf:about="<?=$guid?>"> |
<title><?=$titre?></title> |
<link><?=$lien_coel?></link> |
<description><?=$description?></description> |
<dc:publisher><?=$editeur?></dc:publisher> |
<dc:date><?=$date_maj_W3C?></dc:date> |
<?php if (isset($items)) : ?> |
<items> |
<rdf:Seq> |
<?php foreach ($items as $item) : ?> |
<rdf:li resource="<?=$item['guid']?>" /> |
<?php endforeach; ?> |
</rdf:Seq> |
</items> |
<?php endif; ?> |
</channel> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<item rdf:about="<?=$item['guid']?>"> |
<title><?=$item['titre']?></title> |
<link><?=$item['lien']?></link> |
<description><?=$item['description_encodee']?></description> |
<dc:date><?=$item['date_maj_W3C']?></dc:date> |
</item> |
<?php endforeach; ?> |
<?php endif; ?> |
</rdf:RDF> |
/trunk/jrest/services/DocumentsRss.php |
---|
1,81 → 1,81 |
<?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 DocumentsRss extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
// TODO: gérer plusieurs format et utiliser les mêmes classes communes que |
// celles du cel |
public function getElement($uid){ |
$format = 'rss2'; |
// on selectionne les projets les plus actifs |
$requete_docs_projets = 'SELECT * FROM projet_documents '. |
'WHERE pd_ce_type != 0 AND pd_visibilite = "public" '. |
'ORDER BY pd_date_de_mise_a_jour DESC '. |
'LIMIT 0,5'; |
$resume = array(); |
$titre = htmlspecialchars('Derniers documents publics '); |
$lien = 'http://www.tela-botanica.org/page:liste_projets'; |
$docs = $this->bdd->query($requete_docs_projets)->fetchAll(); |
$rss = '<?xml version="1.0" encoding="UTF-8"?>'. |
'<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
<channel> |
<title>'.$titre.'</title> |
<link>'.$lien.'</link> |
<atom:link href="" rel="self" type="application/rss+xml" /> |
<description>'.$titre.'</description>'; |
foreach($docs as $doc) { |
$infos_projet = $this->obtenirInformationsProjet($doc['pd_ce_projet']); |
$date_modification_timestamp = strtotime($doc['pd_date_de_mise_a_jour']); |
$date_maj_doc = date(DATE_RSS, $date_modification_timestamp); |
$nom_projet = 'Dans le projet '.$infos_projet[0]['p_titre']; |
$id_doc = $doc['pd_id']; |
$nom_doc = $doc['pd_nom']; |
$description = preg_replace('/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i', '&', $nom_projet); |
$description = preg_replace('/000null/i', '', $nom_projet); |
$description = htmlspecialchars($description); |
$lien_doc = 'http://www.tela-botanica.org/projets/'.$doc['pd_ce_projet'].'/telechargement/'.$doc['pd_id']; |
$rss .='<item> |
<guid>'.$id_doc.'</guid> |
<title>'.$nom_doc.'</title> |
<link>'.$lien_doc.'</link> |
<description>'.$description.'</description> |
<category>Document</category> |
<pubDate>'.$date_maj_doc.'</pubDate> |
</item>'; |
} |
$rss .= '</channel>'. |
'</rss>'; |
echo $rss; |
} |
} |
<?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 DocumentsRss extends ProjetService { |
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
} |
// TODO: gérer plusieurs format et utiliser les mêmes classes communes que |
// celles du cel |
public function getElement($uid){ |
$format = 'rss2'; |
// on selectionne les projets les plus actifs |
$requete_docs_projets = 'SELECT * FROM projet_documents '. |
'WHERE pd_ce_type != 0 AND pd_visibilite = "public" '. |
'ORDER BY pd_date_de_mise_a_jour DESC '. |
'LIMIT 0,5'; |
$resume = array(); |
$titre = htmlspecialchars('Derniers documents publics '); |
$lien = 'http://www.tela-botanica.org/page:liste_projets'; |
$docs = $this->bdd->query($requete_docs_projets)->fetchAll(); |
$rss = '<?xml version="1.0" encoding="UTF-8"?>'. |
'<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
<channel> |
<title>'.$titre.'</title> |
<link>'.$lien.'</link> |
<atom:link href="" rel="self" type="application/rss+xml" /> |
<description>'.$titre.'</description>'; |
foreach($docs as $doc) { |
$infos_projet = $this->obtenirInformationsProjet($doc['pd_ce_projet']); |
$date_modification_timestamp = strtotime($doc['pd_date_de_mise_a_jour']); |
$date_maj_doc = date(DATE_RSS, $date_modification_timestamp); |
$nom_projet = 'Dans le projet '.$infos_projet[0]['p_titre']; |
$id_doc = $doc['pd_id']; |
$nom_doc = $doc['pd_nom']; |
$description = preg_replace('/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i', '&', $nom_projet); |
$description = preg_replace('/000null/i', '', $nom_projet); |
$description = htmlspecialchars($description); |
$lien_doc = 'http://www.tela-botanica.org/projets/'.$doc['pd_ce_projet'].'/telechargement/'.$doc['pd_id']; |
$rss .='<item> |
<guid>'.$id_doc.'</guid> |
<title>'.$nom_doc.'</title> |
<link>'.$lien_doc.'</link> |
<description>'.$description.'</description> |
<category>Document</category> |
<pubDate>'.$date_maj_doc.'</pubDate> |
</item>'; |
} |
$rss .= '</channel>'. |
'</rss>'; |
echo $rss; |
} |
} |
?> |
/trunk/jrest/services/Suppression.php |
---|
1,69 → 1,69 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class Suppression extends ProjetService { |
public function getElement($uid) { |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
if(!$id_utilisateur) { |
return false; |
} |
// on selectionne la liste des projets auxquel on est inscrit |
$projets = $this->obtenirProjetsPourParticipant($id_utilisateur); |
// si pas de projets, rien à faire |
if(count($projets) <= 0) { |
$this->envoyer("OK"); |
return; |
} |
// sinon on itère sur chaque projet |
foreach($projets as $projet) { |
$id_projet = $projet['p_id']; |
// et on le supprime du projet |
$suppression_participant = $this->supprimerParticipantAProjet($id_utilisateur, $id_projet); |
// ainsi que des listes associées |
if($mail) { |
$id_projet = $projet['p_id']; |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
$id_liste = $listes[0]['pl_id_liste']; |
$suppression_liste = $this->supprimerInscriptionAListeProjet($id_utilisateur, $id_liste); |
// on supprime l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->desinscriptionListe($nom_liste, $mail)) { |
$this->envoyer("false"); |
} |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
?> |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package projet_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/projet_bp/ |
*/ |
class Suppression extends ProjetService { |
public function getElement($uid) { |
$id_utilisateur = (isset($_GET['id_utilisateur'])) ? $_GET['id_utilisateur'] : false; |
$mail = (isset($_GET['mail'])) ? $_GET['mail'] : false; |
if(!$id_utilisateur) { |
return false; |
} |
// on selectionne la liste des projets auxquel on est inscrit |
$projets = $this->obtenirProjetsPourParticipant($id_utilisateur); |
// si pas de projets, rien à faire |
if(count($projets) <= 0) { |
$this->envoyer("OK"); |
return; |
} |
// sinon on itère sur chaque projet |
foreach($projets as $projet) { |
$id_projet = $projet['p_id']; |
// et on le supprime du projet |
$suppression_participant = $this->supprimerParticipantAProjet($id_utilisateur, $id_projet); |
// ainsi que des listes associées |
if($mail) { |
$id_projet = $projet['p_id']; |
$listes = $this->obtenirListesAssocieesAuProjet($id_projet); |
// si pas de liste, rien à faire |
if(count($listes) <= 0) { |
continue; |
} |
$nom_liste = $listes[0]['pl_nom_liste']; |
$id_liste = $listes[0]['pl_id_liste']; |
$suppression_liste = $this->supprimerInscriptionAListeProjet($id_utilisateur, $id_liste); |
// on supprime l'abonnement |
if($this->estAbonneAListe($nom_liste, $mail)) { |
if(!$this->desinscriptionListe($nom_liste, $mail)) { |
$this->envoyer("false"); |
} |
} |
} |
} |
$this->envoyer("OK"); |
return; |
} |
} |
?> |