| 1497 | jpm | 1 | <?php
 | 
        
           |  |  | 2 | /**
 | 
        
           |  |  | 3 |  * Service fournissant la liste des projets et leurs informations
 | 
        
           |  |  | 4 |  * Encodage en entrée : utf8
 | 
        
           |  |  | 5 |  * Encodage en sortie : utf8
 | 
        
           |  |  | 6 |  *
 | 
        
           |  |  | 7 |  * @author Grégoire DUCHÉ <gregoire@tela-botanica.org>
 | 
        
           |  |  | 8 |  * @author Jean-Pascal MILECNT <jpm@tela-botanica.org>
 | 
        
           |  |  | 9 |  * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 10 |  * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           |  |  | 11 |  * @version $Id$
 | 
        
           |  |  | 12 |  * @copyright 2009
 | 
        
           |  |  | 13 |  */
 | 
        
           |  |  | 14 |   | 
        
           |  |  | 15 | class CoelProjet extends Coel {
 | 
        
           |  |  | 16 |   | 
        
           |  |  | 17 | 	protected $tables = array(115 => array(	'nom' => 'coel_projet',
 | 
        
           |  |  | 18 | 											'prefixe' => 'cpr',
 | 
        
           |  |  | 19 | 											'id' => array('cpr_id_projet')));
 | 
        
           |  |  | 20 |   | 
        
           |  |  | 21 | 	/**
 | 
        
           |  |  | 22 | 	 * Méthode appelée avec une requête de type GET.
 | 
        
           |  |  | 23 | 	 */
 | 
        
           |  |  | 24 | 	public function getElement($param = array()) {
 | 
        
           |  |  | 25 | 		// Initialisation de variables
 | 
        
           |  |  | 26 | 		$info = array();
 | 
        
           |  |  | 27 |   | 
        
           |  |  | 28 | 		// Pré traitement des paramêtres
 | 
        
           | 1636 | aurelien | 29 | 		$p = $this->traiterParametresUrl(array('id_projet', 'recherche'), $param);
 | 
        
           | 1497 | jpm | 30 |   | 
        
           |  |  | 31 | 		// Nous avons un identifiant de projet, nous récupérons seulement les informations du projet donné
 | 
        
           |  |  | 32 | 		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
 | 
        
           |  |  | 33 | 					'FROM coel_projet '.
 | 
        
           |  |  | 34 | 					((count($p) != 0) ? 'WHERE ' : '').
 | 
        
           | 1636 | aurelien | 35 | 					((isset($p['recherche'])) ? $this->construireWhereRecherche($p['recherche']) : '').
 | 
        
           | 1497 | jpm | 36 | 					((isset($p['id_projet'])) ? "AND cpr_id_projet = {$p['id_projet']} " : '').
 | 
        
           |  |  | 37 | 					'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cpr_id_projet ASC').' ';
 | 
        
           | 1636 | aurelien | 38 |   | 
        
           | 1497 | jpm | 39 | 		$requete = str_replace('WHERE AND', 'WHERE', $requete);
 | 
        
           |  |  | 40 | 		$requeteCount = $requete;
 | 
        
           |  |  | 41 | 		$requete .= "LIMIT $this->start, $this->limit ";
 | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 | 		// Récupération des résultats
 | 
        
           |  |  | 44 | 		try {
 | 
        
           |  |  | 45 | 			// SPÉCIAL :
 | 
        
           |  |  | 46 | 			// Lorsqu'on cherche un seul projet avec un id passé en paramêtre, nous devons renvoyer un objet
 | 
        
           | 1595 | aurelien | 47 | 			$donnees = ($this->formatRetour == 'objet' && isset($p['id_projet'])) ? $this->bdd->query($requete)->fetch(PDO::FETCH_OBJ) : $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
 | 
        
           | 1497 | jpm | 48 | 			if ($donnees === false) {
 | 
        
           |  |  | 49 | 				$this->messages[] = "La requête n'a retourné aucun résultat.";
 | 
        
           |  |  | 50 | 			}
 | 
        
           |  |  | 51 |   | 
        
           |  |  | 52 | 			$nbElements = $this->bdd->query($requeteCount)->rowCount();
 | 
        
           |  |  | 53 |   | 
        
           |  |  | 54 | 			$info['nbElements'] = $nbElements;
 | 
        
           |  |  | 55 | 			$info['projets'] = $donnees;
 | 
        
           |  |  | 56 | 		} catch (PDOException $e) {
 | 
        
           |  |  | 57 | 			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
 | 
        
           |  |  | 58 | 		}
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 		// Envoie sur la sortie standard
 | 
        
           |  |  | 61 | 		$this->envoyer($info);
 | 
        
           |  |  | 62 |   | 
        
           |  |  | 63 | 	}
 | 
        
           | 1636 | aurelien | 64 |   | 
        
           |  |  | 65 | 	private function construireWhereRecherche($recherche) {
 | 
        
           |  |  | 66 | 		$recherche = "AND ".
 | 
        
           |  |  | 67 | 					"(".
 | 
        
           |  |  | 68 | 						"cpr_nom LIKE {$recherche}  OR ".
 | 
        
           |  |  | 69 | 						"cpr_abreviation LIKE {$recherche}  OR ".
 | 
        
           |  |  | 70 | 						"cpr_resume LIKE {$recherche}  OR ".
 | 
        
           |  |  | 71 | 						"cpr_url LIKE {$recherche}  OR ".
 | 
        
           |  |  | 72 | 						"cpr_mot_cles LIKE {$recherche} ".
 | 
        
           |  |  | 73 | 					")";
 | 
        
           |  |  | 74 | 		return $recherche;
 | 
        
           |  |  | 75 | 	}
 | 
        
           | 1497 | jpm | 76 |   | 
        
           |  |  | 77 | 	 /**
 | 
        
           |  |  | 78 | 	  * Méthode appelée pour ajouter un élément.
 | 
        
           |  |  | 79 | 	  */
 | 
        
           |  |  | 80 | 	public function createElement($params) {
 | 
        
           |  |  | 81 | 		// Identification de l'utilisateur
 | 
        
           |  |  | 82 | 		list($id_utilisateur, $id_session) = $this->getIdentification($params);
 | 
        
           |  |  | 83 | 		// Contrôle du non détournement de l'utilisateur
 | 
        
           |  |  | 84 | 		if ($this->etreAutorise($id_utilisateur)) {
 | 
        
           |  |  | 85 | 			try {
 | 
        
           |  |  | 86 | 	   			// Vérification des tables à vraiment mettre à jour en fonction des données passées.
 | 
        
           |  |  | 87 | 	   			$tables_a_modifier = $this->recupererTablesAModifier($params);
 | 
        
           |  |  | 88 | 	   			reset($tables_a_modifier);
 | 
        
           |  |  | 89 |   | 
        
           |  |  | 90 | 	   			$id_projet = null;
 | 
        
           |  |  | 91 | 				while (list($table_id, $table) = each($tables_a_modifier)) {
 | 
        
           |  |  | 92 | 		   			if (!is_null($table['champs'])) {
 | 
        
           |  |  | 93 | 				   		if (!$this->avoirCleComplete($table)) {
 | 
        
           |  |  | 94 | 		   					// Ajout des données à la table des données
 | 
        
           |  |  | 95 | 		   					$id_projet = $this->ajouter($table);
 | 
        
           |  |  | 96 | 		   					if ($id_projet !== false) {
 | 
        
           |  |  | 97 | 								$table['champs_valeurs_id']['cpr_id_projet'] = $id_projet;
 | 
        
           |  |  | 98 | 								$table['champs_valeurs_brut']['cpr_id_projet'] = $id_projet;
 | 
        
           |  |  | 99 |   | 
        
           |  |  | 100 | 								// Historisation (Ajout des méta-données)
 | 
        
           |  |  | 101 | 								$etat = 1; // Ajout
 | 
        
           |  |  | 102 | 								$cle = $this->recupererCle($table);
 | 
        
           |  |  | 103 | 								$id_projet = $cle;
 | 
        
           |  |  | 104 | 								$info = $this->creerXmlHisto($table['champs_valeurs_brut']);
 | 
        
           |  |  | 105 | 								$id_meta = $this->historiser($table_id, $cle, $info, $id_utilisateur, $etat, $id_session);
 | 
        
           |  |  | 106 |   | 
        
           |  |  | 107 | 						   		// Liaison de la table des données à ses méta-données
 | 
        
           |  |  | 108 | 						   		$champ_meta = "{$table['prefixe']}_ce_meta";
 | 
        
           |  |  | 109 | 						   		$table['champs_valeurs_protege'] = array($champ_meta => $id_meta);
 | 
        
           |  |  | 110 | 						   		$this->modifier($table);
 | 
        
           |  |  | 111 | 		   					}
 | 
        
           |  |  | 112 | 			   			} else {
 | 
        
           |  |  | 113 | 			   				$this->mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table);
 | 
        
           |  |  | 114 | 			   			}
 | 
        
           |  |  | 115 | 		   			}
 | 
        
           |  |  | 116 | 				}
 | 
        
           |  |  | 117 | 			} catch (PDOException $e) {
 | 
        
           |  |  | 118 | 				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
 | 
        
           |  |  | 119 | 			}
 | 
        
           |  |  | 120 | 	   	} else {
 | 
        
           |  |  | 121 | 	   		$this->messages[] = "Il faut être identifié pour accéder à ce service";
 | 
        
           |  |  | 122 | 	   	}
 | 
        
           |  |  | 123 |   | 
        
           |  |  | 124 | 	   	$this->envoyer((string)$id_projet);
 | 
        
           |  |  | 125 | 	}
 | 
        
           |  |  | 126 |   | 
        
           |  |  | 127 | 	/**
 | 
        
           |  |  | 128 | 	 * Méthode appelée pour mettre à jour un élément
 | 
        
           |  |  | 129 | 	 */
 | 
        
           |  |  | 130 | 	public function updateElement($uid, $params) {
 | 
        
           |  |  | 131 | 		// Vérification de la présence des id passés par l'url
 | 
        
           |  |  | 132 | 		$id_projet = "0";
 | 
        
           |  |  | 133 | 		if (!isset($uid[0])) {
 | 
        
           |  |  | 134 | 			$this->messages[] = "Identifiant de projet manquant. Vous ne devriez pas avoir accès à ce service.";
 | 
        
           |  |  | 135 | 		} else {
 | 
        
           |  |  | 136 | 			// Identification de l'utilisateur
 | 
        
           |  |  | 137 | 			list($id_utilisateur, $id_session) = $this->getIdentification($params);
 | 
        
           |  |  | 138 |   | 
        
           |  |  | 139 | 			// Contrôle du non détournement de l'utilisateur
 | 
        
           |  |  | 140 | 			if ($this->etreAutorise($id_utilisateur)) {
 | 
        
           |  |  | 141 | 		   		try {
 | 
        
           |  |  | 142 | 		   			// Vérification des tables à vraiment mettre à jour en fonction des données passées.
 | 
        
           |  |  | 143 | 		   			$tables_a_modifier = $this->recupererTablesAModifier($params);
 | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 | 		   			// Pour chaque table du module nous lançons si nécessaire l'historisation puis la mise à jour
 | 
        
           |  |  | 146 | 			   		foreach ($tables_a_modifier as $table_id => $table) {
 | 
        
           |  |  | 147 | 						$this->mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table);
 | 
        
           |  |  | 148 | 					}
 | 
        
           |  |  | 149 | 				} catch (PDOException $e) {
 | 
        
           |  |  | 150 | 					$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
 | 
        
           |  |  | 151 | 				}
 | 
        
           | 1611 | aurelien | 152 | 				$id_projet  =  $uid[0] ;
 | 
        
           | 1497 | jpm | 153 | 		   	}
 | 
        
           |  |  | 154 | 		}
 | 
        
           |  |  | 155 |   | 
        
           |  |  | 156 | 		// Envoie sur la sortie standard
 | 
        
           |  |  | 157 | 		$this->envoyer();
 | 
        
           |  |  | 158 | 	}
 | 
        
           |  |  | 159 |   | 
        
           |  |  | 160 | 	/**
 | 
        
           |  |  | 161 | 	 *  Méthode appelée pour supprimer un élément
 | 
        
           |  |  | 162 | 	 */
 | 
        
           |  |  | 163 | 	public function deleteElement($uid) {
 | 
        
           |  |  | 164 | 	   	// NOTES : un projet ne peut pas être supprimé si il possède des éléments liés.
 | 
        
           |  |  | 165 | 		// Vérification de la présence des id passés par l'url
 | 
        
           |  |  | 166 | 		if (!isset($uid[0]) || !isset($uid[1])) {
 | 
        
           |  |  | 167 | 				$this->messages[] = "Identifiant de projet ou d'utilisateur manquant. Vous ne devriez pas avoir accès à ce service.";
 | 
        
           |  |  | 168 | 		} else {
 | 
        
           |  |  | 169 | 			// Identification de l'utilisateur
 | 
        
           |  |  | 170 | 			list($id_utilisateur, $id_session) = $this->getIdentification($uid[0]);
 | 
        
           |  |  | 171 |   | 
        
           |  |  | 172 | 			// Contrôle du non détournement de l'utilisateur
 | 
        
           |  |  | 173 | 			if ($this->etreAutorise($id_utilisateur)) {
 | 
        
           |  |  | 174 | 				// Récupération des id passés par l'url
 | 
        
           |  |  | 175 | 				$identifiants = explode(',', rtrim($uid[1], ','));
 | 
        
           |  |  | 176 |   | 
        
           |  |  | 177 | 		   		try {
 | 
        
           |  |  | 178 | 		   			if (count($identifiants) == 0) {
 | 
        
           |  |  | 179 | 		   				$this->messages[] = "Aucun enregistrement n'a été supprimé.";
 | 
        
           |  |  | 180 | 		   			} else {
 | 
        
           |  |  | 181 | 		   				$idsProjetsNonSupprimes = "";
 | 
        
           |  |  | 182 | 			   			foreach ($identifiants as $id_projet) {
 | 
        
           |  |  | 183 | 			   				$params = array('cpr_id_projet' => $id_projet);
 | 
        
           |  |  | 184 | 			   				$tables_a_modifier = $this->recupererTablesAModifier($params);
 | 
        
           |  |  | 185 |   | 
        
           |  |  | 186 | 			   				//Vérifions que le projet n'a aucune liaison
 | 
        
           |  |  | 187 | 			   				$existeLiaisons = false;
 | 
        
           |  |  | 188 | 			   				$i = 5;
 | 
        
           |  |  | 189 | 			   				while (!$existeLiaisons && $i > 0)	{
 | 
        
           |  |  | 190 | 			   					switch ($i)	{
 | 
        
           |  |  | 191 | 			   						case 5 :
 | 
        
           |  |  | 192 | 			   							$requete = "SELECT * FROM coel_collection WHERE cc_ce_projet = '{$id_projet}'  ";
 | 
        
           |  |  | 193 | 			   						break;
 | 
        
           |  |  | 194 | 			   						case 4 :
 | 
        
           |  |  | 195 | 			   							$requete = "SELECT * FROM coel_structure WHERE cs_ce_projet = '{$id_projet}'  ";
 | 
        
           |  |  | 196 | 			   						break;
 | 
        
           |  |  | 197 | 			   						case 3 :
 | 
        
           |  |  | 198 | 			   							$requete = "SELECT * FROM coel_commentaire WHERE ccm_ce_projet = '{$id_projet}'  ";
 | 
        
           |  |  | 199 | 			   						break;
 | 
        
           |  |  | 200 | 			   						case 2 :
 | 
        
           |  |  | 201 | 			   							$requete = "SELECT * FROM coel_publication WHERE cpu_ce_projet = '{$id_projet}'  ";
 | 
        
           |  |  | 202 | 			   						break;
 | 
        
           |  |  | 203 | 			   						case 1 :
 | 
        
           |  |  | 204 | 			   							$requete = "SELECT * FROM coel_personne WHERE cp_ce_projet = '{$id_projet}'  ";
 | 
        
           |  |  | 205 | 			   						break;
 | 
        
           |  |  | 206 | 			   					}
 | 
        
           |  |  | 207 |   | 
        
           |  |  | 208 | 			   					$resultat = $this->bdd->query($requete)->rowCount();
 | 
        
           |  |  | 209 | 			   					//$this->debug[] = $requete." => ".$resultat;
 | 
        
           |  |  | 210 | 			   					if ($resultat > 0)	{
 | 
        
           |  |  | 211 | 			   						$existeLiaisons = true;
 | 
        
           |  |  | 212 | 			   					}
 | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 | 			   					$i--;
 | 
        
           |  |  | 215 | 			   				}
 | 
        
           |  |  | 216 |   | 
        
           |  |  | 217 | 			   				if (!$existeLiaisons)	{
 | 
        
           |  |  | 218 | 								foreach ($tables_a_modifier as $table_id => $table) {
 | 
        
           |  |  | 219 | 						   			if ($this->avoirEnregistrement($table)) {
 | 
        
           |  |  | 220 | 						   				$resultat = $this->supprimer($table);
 | 
        
           |  |  | 221 | 										if ($resultat === true) {
 | 
        
           |  |  | 222 | 											// Historisation (Ajout des méta-données)
 | 
        
           |  |  | 223 | 											$cle = $this->recupererCle($table);
 | 
        
           |  |  | 224 | 											$this->historiser($table_id, $cle, 'NULL', $id_utilisateur, 3, $id_session);
 | 
        
           |  |  | 225 | 										}
 | 
        
           |  |  | 226 | 						   			}
 | 
        
           |  |  | 227 | 					   			}
 | 
        
           |  |  | 228 | 			   				}	else	{
 | 
        
           |  |  | 229 | 			   					$idsProjetsNonSupprimes .= $id_projet.",";
 | 
        
           |  |  | 230 | 			   				}
 | 
        
           |  |  | 231 | 			   			}
 | 
        
           |  |  | 232 | 		   			}
 | 
        
           |  |  | 233 | 			   	} catch (PDOException $e) {
 | 
        
           |  |  | 234 | 					$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
 | 
        
           |  |  | 235 | 				}
 | 
        
           |  |  | 236 | 		   	}
 | 
        
           |  |  | 237 | 		}
 | 
        
           |  |  | 238 |   | 
        
           |  |  | 239 | 		$info = null;
 | 
        
           |  |  | 240 | 		if ($idsProjetsNonSupprimes != "") {
 | 
        
           |  |  | 241 | 			$info = array();
 | 
        
           |  |  | 242 | 			$info[0] = $idsProjetsNonSupprimes;
 | 
        
           |  |  | 243 | 		}
 | 
        
           |  |  | 244 |   | 
        
           |  |  | 245 | 		// Envoie sur la sortie standard
 | 
        
           |  |  | 246 | 		$this->envoyer($info);
 | 
        
           |  |  | 247 | 	}
 | 
        
           |  |  | 248 | }
 | 
        
           |  |  | 249 | ?>
 |