Rev 24 | Rev 33 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Service permettant d'enregistrer une demande de traitement ou de consulter les infos sur les traitements.* Encodage en entrée : utf8* Encodage en sortie : utf8** @category Php 5.2* @package Referentiel* @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>* @copyright 2010 Tela-Botanica* @version $Id$*/class Traitement extends Ref {/*** Méthode principale appelée avec une requête de type GET.*/public function getElement($params_url = array()) {// Initialisation des variables$info = array();// Nour recherchons le type de requête demandé$p = $this->traiterParametresUrl(array('type', 'projet'), $params_url, false);$type = $p['type'];$projet = $p['projet'];if (!is_null($type)) {if (!is_null($projet)) {$methode = 'getElement'.$type;if (method_exists($this, $methode)) {//array_shift($param);$info = $this->$methode($projet);} else {$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";}} else {$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff).";}} else {$this->messages[] = "Veuillez préciser le type de requête.";}// Envoie sur la sortie standard$this->envoyer($info);}/*** Retourne les infos sur la dernière demande de traitement pour un projet donné.*/public function getElementDerniereDemande($projet) {$projet = $this->bdd->quote($projet);$requete = ($this->distinct ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM ref_traitement '."WHERE referentiel_code = $projet ".' AND date_fin IS NULL '.'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'meta_date_creation DESC').' '.'LIMIT 0,1 ';$this->debug[] = $requete;// Récupération des résultatstry {$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);if ($donnees === 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 $donnees;}/*** Retourne les infos sur les traitements en cours ou en attentes.*/public function getElementEnCours($projet) {$projet = $this->bdd->quote($projet);$requete = ($this->distinct ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM ref_traitement '."WHERE referentiel_code = $projet ".' AND date_fin IS NULL '.'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'meta_date_creation DESC').' ';$this->debug[] = $requete;// Récupération des résultatstry {$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);if ($donnees === 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 $donnees;}/*** Retourne les id des demandes de traitements obsolètes.*/public function getElementObsolete($projet) {$projet = $this->bdd->quote($projet);try {$requete = 'SELECT MAX(date_debut) '.'FROM ref_traitement '."WHERE referentiel_code = $projet ".' AND date_debut IS NOT NULL '.'GROUP BY referentiel_code ';$date_max = $this->bdd->query($requete)->fetchColumn();if ($date_max === false) {$this->messages[] = "La requête de récupération de la date de début max a échouée.";} else {$date_max = $this->bdd->quote($date_max);$requete = 'SELECT id_traitement '.'FROM ref_traitement '."WHERE referentiel_code = $projet ".' AND date_debut IS NULL '.' AND date_fin IS NULL '." AND meta_date_creation < $date_max ";$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);if ($donnees === 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());}// Pos-traitement$sortie = array();if ($donnees != false) {foreach ($donnees as $donnee) {$sortie[] = $donnee['id_traitement'];}}return $sortie;}/*** Méthode appelée pour ajouter un traitement.* Retour l'id du nouvel enregistrement ou false!*/public function createElement($params_post) {$params_proteges = $this->traiterParametresPost(array('referentiel_code'), $params_post);$meta_date_creation = date ("Y-m-d H:i:s");$nom = $this->bdd->quote("Traitement {$params_post['referentiel_code']} - $meta_date_creation");$meta_date_creation = $this->bdd->quote($meta_date_creation);try {$requete = "INSERT INTO ref_traitement ".' (referentiel_code, nom, meta_date_creation) '." VALUES ({$params_proteges['referentiel_code']}, $nom, $meta_date_creation) ";$resultat = $this->bdd->exec($requete);if ($resultat === false) {$id = false;$this->debug[] = "Traitement NON ajouté.";} else {$id = $this->bdd->lastInsertId();}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);}$this->envoyer($id);}/*** Méthode principale appelée avec une requête de type POST.*/public function updateElement($params_url, $params_post) {// Initialisation des variables$info = array();// Nour recherchons le type de requête demandéextract($this->traiterParametresUrl(array('id'), $params_url, true));extract($this->traiterParametresPost(array('action'), $params_post, false));if (!is_null($id)) {if (!is_null($action)) {$methode = 'updateElement'.$action;if (method_exists($this, $methode)) {//array_shift($param);$info = $this->$methode($id, $params_post);} else {$this->messages[] = "Le type de mise à jour demandé '$action' n'est pas disponible.";}} else {$this->messages[] = "Veuillez préciser le type de mise à jour à faire.";// TODO : coder une mise à jour générique dans une méthode updateElementDefaut($id, $params_post);}} else {$this->messages[] = "Veuillez préciser l'id du traitement comme premier paramêtre dans l'url.";}// Envoie sur la sortie standard$this->envoyer($info);}/*** Méthode pour indiquer le démarage d'un traitement.*/public function updateElementDebuter($id, $params_post) {$ok = true;try {$requete = 'UPDATE ref_traitement '.'SET date_debut = NOW() '."WHERE id_traitement = $id ";$this->debug[] = "$requete";$resultat = $this->bdd->exec($requete);if ($resultat === false) {$ok = false;$this->messages[] = "Traitement NON modifié.";}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);}return $ok;}/*** Méthode principale appelée avec une requête de type DELETE.*/public function deleteElement($params_url) {// Initialisation des variables$ok = true;// Extraction des paramètres de l'urlextract($this->traiterParametresUrl(array('ids'), $params_url, true));if (!is_null($ids)) {try {$in_ids = $this->traiterBddClauseIn($ids);$requete = 'DELETE FROM ref_traitement '."WHERE id_traitement IN ($in_ids) ";$this->debug[] = "$requete";$resultat = $this->bdd->exec($requete);if ($resultat === false) {$ok = false;$this->messages[] = "Traitement(s) NON supprimé(s).";}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);}} else {$this->messages[] = "Veuillez préciser un ou plusieurs id de traitement séparés par des virgules comme premier paramètre dans l'url.";}// Envoie sur la sortie standard$this->envoyer($ok);}}?>