Rev 383 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*vim: set expandtab tabstop=4 shiftwidth=4: */// +------------------------------------------------------------------------------------------------------+// | PHP version 5.1 |// +------------------------------------------------------------------------------------------------------+// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) |// +------------------------------------------------------------------------------------------------------+// | This file is part of eflore_bp. |// | |// | eflore_bp is free software; you can redistribute it and/or modify |// | it under the terms of the GNU General Public License as published by |// | the Free Software Foundation; either version 2 of the License, or |// | (at your option) any later version. |// | |// | eflore_bp is distributed in the hope that it will be useful, |// | but WITHOUT ANY WARRANTY; without even the implied warranty of |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |// | GNU General Public License for more details. |// | |// | You should have received a copy of the GNU General Public License |// | along with Foobar; if not, write to the Free Software |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |// +------------------------------------------------------------------------------------------------------+// CVS : $Id: RecueilDeDonnees.class.php,v 1.5 2007-07-25 17:45:19 jp_milcent Exp $/*** eflore_bp - ReccueilDeDonnee.php** Description :**@package eflore_bp//Auteur original :*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>//Autres auteurs :*@author Aucun*@copyright Tela-Botanica 1999-2007*@version $Revision: 1.5 $ $Date: 2007-07-25 17:45:19 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTÊTE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+// +------------------------------------------------------------------------------------------------------+// | CORPS du PROGRAMME |// +------------------------------------------------------------------------------------------------------+class Wikini extends aModule {private $bdd_principale = SC_BDD_NOM_PRINCIPALE;private $bdd_options = array('debug' => 3);private $bdd_dsn = SC_DSN_PRINCIPAL;private $connexion = null;private $sites = array('http://www.tela-botanica.org', 'http://www.outils-reseaux.org');public function __construct(){$this->connexion = DB::connect($this->bdd_dsn, $this->bdd_options);if (PEAR::isError($this->connexion)) {$e = $this->connexion->getMessage();trigger_error($e, E_USER_ERROR);}parent::__construct();}// La méthode executer est appellé par défautpublic function executer(){$this->poursuivreVers('config_fichier');}private function rechercherWikini($chemin = null, $methode){if (isset($chemin)) {if (preg_match('/wakka\.config\.php$/', $chemin)) {$this->$methode($chemin);} else if (is_dir($chemin)) {// Nettoyage et ajout d'un slash final$chemin = rtrim(trim($chemin), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;// Nous vérifions que le dossier indiqué est un dossier de wikini$fichier = $chemin.'wakka.config.php';$this->$methode($fichier);// Nous regardons si le dossier indiqué contient d'autres dossiers wikiniforeach (scandir($chemin) as $dossier) {if (is_dir($chemin.$dossier.DIRECTORY_SEPARATOR) && $dossier != '..' && $dossier != '.') {$fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php';$this->$methode($fichier);}}} else {trigger_error('Le chemin suivant n\'est ni un dossier, ni un fichier wakka.config.php :'.$chemin, E_USER_WARNING);}}}public function executerConfigFichier(){// Initialisation des variables$this->setChrono('debut');$aso_donnees = $this->getRegistre()->get('squelette_donnees');// Gestion de l'url de l'envoie de mail$url = clone $GLOBALS['_SCRIPT_']['url'];$url->addQueryString('module', 'wikini');$url->addQueryString('action', 'config_fichier_maj');$aso_donnees['url'] = $url->getUrl();// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);$this->setChrono('fin');}public function executerConfigFichierMaj(){// Initialisation des variables$this->setChrono('debut');// Récupération des infos pour conpléter le squelette du courriel$this->rechercherWikini($_POST['sc_chemin'], 'modifierConfigFichier');// Nous ajoutons une action à éxecuter avant de rendre la main$this->poursuivreVers('config_fichier');// Fin de l'action$this->setChrono('fin');}private function modifierConfigFichier($fichier){if (file_exists($fichier)) {$aso_donnees = $this->getRegistre()->get('squelette_donnees');$arrFile = file($fichier);$handle = fopen($fichier, 'w');if($handle != false){// Définition des compteurs$currentLine = 0;$cntFile = count($arrFile);// Nombre de ligne// Write contents, inserting $item as first itemwhile ($currentLine <= $cntFile){if (isset($arrFile[$currentLine])) {foreach ($_POST as $cle => $val) {if ($val != '') {if(preg_match('/"'.preg_replace('/^sc_/', '', $cle).'" =>/', $arrFile[$currentLine])) {$arrFile[$currentLine] = preg_replace('/=> ".*"/', '=> "'.$val.'"', $arrFile[$currentLine]);}}}fwrite($handle, $arrFile[$currentLine]);if (preg_match('/^\?>$/', $arrFile[$currentLine])) {fclose($handle);$currentLine = $cntFile;}}$currentLine++;}} else {trigger_error('Fichier '.$fichier.' impossible à ouvrir', E_USER_WARNING);}// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);}}public function executerSupprimerUtilisateur(){// Initialisation des variables$this->setChrono('debut');$aso_donnees = $this->getRegistre()->get('squelette_donnees');// Gestion de l'url de l'envoie de mail$url = clone $GLOBALS['_SCRIPT_']['url'];$url->addQueryString('module', 'wikini');$url->addQueryString('action', 'supprimer_utilisateur_maj');$aso_donnees['url'] = $url->getUrl();// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);$this->setChrono('fin');}public function executerSupprimerUtilisateurMaj(){// Initialisation des variables$this->setChrono('debut');// Récupération des infos pour conpléter le squelette du courriel$this->rechercherWikini($_POST['sc_chemin'], 'modifierSupprimerUtilisateur');// Nous ajoutons une action à éxecuter avant de rendre la main$this->poursuivreVers('supprimer_utilisateur');// Fin de l'action$this->setChrono('fin');}private function modifierSupprimerUtilisateur($fichier){if (file_exists($fichier)) {// Initialisation de variables$aso_donnees = $this->getRegistre()->get('squelette_donnees');$wakka_config = array();$requetes = array();// Récupération de la config du wikini$tab_fichier = file($fichier);foreach ($tab_fichier as $ligne_num => $ligne) {if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {//trigger_error(print_r($match, true), E_USER_NOTICE);$wakka_config[$match[1]] = $match[2];}}//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {// Connexion à la base de données$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];$this->connexion = DB::connect($dsn, $this->bdd_options);if (PEAR::isError($this->connexion)) {$e = $this->connexion->getMessage();trigger_error($e, E_USER_ERROR);}// Traitement de la chaine utilisateur$tab_utilisateurs = explode(',', trim($_POST['sc_utilisateur']));$chaine_utilisateur = '';foreach ($tab_utilisateurs as $utilisateur) {$chaine_utilisateur .= '"'.trim($utilisateur).'", ';}$chaine_utilisateur = trim($chaine_utilisateur, ', ');// Suppression de l'utilisateur$requete = 'DELETE FROM '.$wakka_config['table_prefix'].'users '.'WHERE name IN ('.$chaine_utilisateur.')';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}// Stockage des requetesif (count($requetes) > 0 ) {$aso_donnees['wikinis'][] = array( 'dossier' => $fichier,'nom' => $wakka_config['wakka_name'],'version' => $wakka_config['wikini_version'],'requetes' => $requetes);}} else {trigger_error(print_r($wakka_config, true), E_USER_NOTICE);}// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);}}public function executerConfigBdd(){// Initialisation des variables$this->setChrono('debut');$aso_donnees = $this->getRegistre()->get('squelette_donnees');// Gestion de l'url de l'envoie de mail$url = clone $GLOBALS['_SCRIPT_']['url'];$url->addQueryString('module', 'wikini');$url->addQueryString('action', 'config_bdd_maj');$aso_donnees['url'] = $url->getUrl();// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);// Fin de l'action$this->setChrono('fin');}public function executerConfigBddMaj(){// Initialisation des variables$this->setChrono('debut');// Récupération des infos pour conpléter le squelette du courriel$this->rechercherWikini($_POST['sc_chemin'], 'modifierConfigBdd');// Nous ajoutons une action à éxecuter avant de rendre la main$this->poursuivreVers('config_bdd');// Fin de l'action$this->setChrono('fin');}private function modifierConfigBdd($fichier){if (file_exists($fichier)) {// Initialisation de variables$aso_donnees = $this->getRegistre()->get('squelette_donnees');$wakka_config = array();$requetes = array();// Récupération de la config du wikini$tab_fichier = file($fichier);foreach ($tab_fichier as $ligne_num => $ligne) {if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {//trigger_error(print_r($match, true), E_USER_NOTICE);$wakka_config[$match[1]] = $match[2];}}//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {// Connexion à la base de données$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];$this->connexion = DB::connect($dsn, $this->bdd_options);if (PEAR::isError($this->connexion)) {$e = $this->connexion->getMessage();trigger_error($e, E_USER_ERROR);}// Mise à jour des droits$requete = 'UPDATE '.$wakka_config['table_prefix'].'acls '.'SET list = "'.$wakka_config['default_write_acl'].'" '.'WHERE privilege = "write" ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}$requete = 'UPDATE '.$wakka_config['table_prefix'].'acls '.'SET list = "'.$wakka_config['default_read_acl'].'" '.'WHERE privilege = "read" ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}$requete = 'UPDATE '.$wakka_config['table_prefix'].'acls '.'SET list = "'.$wakka_config['default_comment_acl'].'" '.'WHERE privilege = "comment" ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}$requete = 'DELETE FROM '.$wakka_config['table_prefix'].'acls '.'WHERE page_tag = "ParametresUtilisateur"';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}$requete = 'INSERT INTO '.$wakka_config['table_prefix'].'acls '.'VALUES ("ParametresUtilisateur", "write", "*") ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}// Stockage des requetesif (count($requetes) > 0 ) {$aso_donnees['wikinis'][] = array( 'dossier' => $fichier,'nom' => $wakka_config['wakka_name'],'version' => $wakka_config['wikini_version'],'requetes' => $requetes);}} else {trigger_error(print_r($wakka_config, true), E_USER_NOTICE);}// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);}}public function executerNettoyage(){// Initialisation des variables$this->setChrono('debut');$aso_donnees = $this->getRegistre()->get('squelette_donnees');// Gestion de l'url de l'envoie de mail$url = clone $GLOBALS['_SCRIPT_']['url'];$url->addQueryString('module', 'wikini');$url->addQueryString('action', 'nettoyage_maj');$aso_donnees['url'] = $url->getUrl();// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);$this->setChrono('fin');}public function executerNettoyageMaj(){// Initialisation des variables$this->setChrono('debut');// Récupération des infos pour conpléter le squelette du courriel$this->rechercherWikini($_POST['sc_chemin'], 'lancerNettoyage');// Nous ajoutons une action à éxecuter avant de rendre la main$this->poursuivreVers('nettoyage');// Fin de l'action$this->setChrono('fin');}public function lancerNettoyage($fichier){if (file_exists($fichier)) {// Initialisation de variables$aso_donnees = $this->getRegistre()->get('squelette_donnees');$wakka_config = array();$requetes = array();// Récupération de la config du wikini$tab_fichier = file($fichier);foreach ($tab_fichier as $ligne_num => $ligne) {if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {//trigger_error(print_r($match, true), E_USER_NOTICE);$wakka_config[$match[1]] = $match[2];}}if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {// Connexion à la base de données$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];$this->connexion = DB::connect($dsn, $this->bdd_options);if (PEAR::isError($this->connexion)) {$e = $this->connexion->getMessage();trigger_error($e, E_USER_ERROR);}// Ajout des nouveaux referrers à ceux par défautif (!empty($_POST['sc_referrers'])) {$this->sites = array_merge(preg_split("~,~", $_POST['sc_referrers'], -1, PREG_SPLIT_NO_EMPTY), $this->sites);}// +---------------------------------------------------------------------------------------------------+// Referrers$site_nbre = count($this->sites);$site_0 = $this->sites[0];$requete = 'DELETE FROM '.$wakka_config['table_prefix'].'referrers '.'WHERE referrer NOT LIKE "'.$site_0.'%" ';for ($i = 1; $i < $site_nbre; $i++) {$requete .= 'AND referrer NOT LIKE "'.$this->sites[$i].'%" ';}$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {die($res->getMessage());}// +---------------------------------------------------------------------------------------------------+// Pages : commentaires$requete = 'SELECT tag FROM '.$wakka_config['table_prefix'].'pages '.'WHERE tag LIKE "Comment%" ';$requetes[] = $requete."\n";$aso_pages = $this->connexion->getAll($requete, null, DB_FETCHMODE_ASSOC);if (PEAR::isError($aso_pages)) {die($aso_pages->getMessage());}if (count($aso_pages) > 0) {$tab_pages = array();foreach ($aso_pages as $page) {if (preg_match('/^Comment\d+$/', $page['tag'])){$tab_pages[] = $page['tag'];}}if (count($tab_pages) > 0) {$requete = 'DELETE FROM '.$wakka_config['table_prefix'].'pages '.'WHERE tag IN ("'.implode('","', $tab_pages).'") ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {die($res->getMessage());}// +---------------------------------------------------------------------------------------------------+// ACLs : commentaires$requete = 'DELETE FROM '.$wakka_config['table_prefix'].'acls '.'WHERE page_tag LIKE "Comment%" ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {die($res->getMessage());}$requete = 'UPDATE '.$wakka_config['table_prefix'].'acls '.'SET list = "+" '.'WHERE privilege = "comment" ';$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {die($res->getMessage());}}}// +---------------------------------------------------------------------------------------------------+// Stockage des requetesif (count($requetes) > 0 ) {$aso_donnees['wikinis'][] = array( 'dossier' => $fichier,'nom' => $wakka_config['wakka_name'],'version' => $wakka_config['wikini_version'],'requetes' => $requetes);}}// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);}}public function executerProprietaire(){// Initialisation des variables$this->setChrono('debut');$aso_donnees = $this->getRegistre()->get('squelette_donnees');// Gestion de l'url de l'envoie de mail$url = clone $GLOBALS['_SCRIPT_']['url'];$url->addQueryString('module', 'wikini');$url->addQueryString('action', 'proprietaire_maj');$aso_donnees['url'] = $url->getUrl();// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);$this->setChrono('fin');}public function executerProprietaireMaj(){// Initialisation des variables$this->setChrono('debut');// Récupération des infos pour conpléter le squelette du courriel$this->rechercherWikini($_POST['sc_chemin'], 'modifierProprietaire');// Nous ajoutons une action à éxecuter avant de rendre la main$this->poursuivreVers('proprietaire');// Fin de l'action$this->setChrono('fin');}public function modifierProprietaire($fichier){if (file_exists($fichier)) {// Initialisation de variables$aso_donnees = $this->getRegistre()->get('squelette_donnees');$wakka_config = array();$requetes = array();// Récupération de la config du wikini$tab_fichier = file($fichier);foreach ($tab_fichier as $ligne_num => $ligne) {if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {//trigger_error(print_r($match, true), E_USER_NOTICE);$wakka_config[$match[1]] = $match[2];}}//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {// Connexion à la base de données$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];$this->connexion = DB::connect($dsn, $this->bdd_options);if (PEAR::isError($this->connexion)) {$e = $this->connexion->getMessage();trigger_error($e, E_USER_ERROR);}// Mise à jour des droits$requete = 'UPDATE '.$wakka_config['table_prefix'].'pages '.'SET owner = "'.$_POST['sc_owner'].'" '.((!empty($_POST['sc_page'])) ? 'WHERE tag IN ("'.implode('","', preg_split("~,~", $_POST['sc_page'], -1, PREG_SPLIT_NO_EMPTY)).'") ' : '');$requetes[] = $requete."\n";$res = $this->connexion->query($requete);if (PEAR::isError($res)) {$requetes[] = $res->getMessage().$res->getDebugInfo();trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);}// Stockage des requetesif (count($requetes) > 0 ) {$aso_donnees['wikinis'][] = array( 'dossier' => $fichier,'nom' => $wakka_config['wakka_name'],'version' => $wakka_config['wikini_version'],'requetes' => $requetes);}}// Attribution des données pour remplir le squelette$this->getRegistre()->set('squelette_donnees', $aso_donnees);}}}/* +--Fin du code ----------------------------------------------------------------------------------------+** $Log: RecueilDeDonnees.class.php,v $* Revision 1.5 2007-07-25 17:45:19 jp_milcent* Corrections des champs obligatoires.** Revision 1.4 2007-07-24 14:31:57 jp_milcent* Ajout dans les fichiers de configuration de l'hôte smtp.** Revision 1.3 2007-07-11 13:11:06 jp_milcent* Ajout de la vérification des donnés du formulaire côté serveur.** Revision 1.2 2007-07-10 16:47:30 jp_milcent* Ajout de l'identification et améliorations diverses.** Revision 1.1 2007-07-09 19:29:26 jp_milcent* Ajout du module Recueil de données** Revision 1.1 2007-07-09 15:45:59 jp_milcent* Début ajout du module de Reccueil de Données.*** +-- Fin du code ----------------------------------------------------------------------------------------+*/?>