/trunk/bibliotheque/dao/TraitementDao.php |
---|
16,6 → 16,20 |
const SERVICE = 'Traitement'; |
/** |
* Retourne l'ensemble des traitements en instance. |
* |
* @param string le nom de la table. |
* @return array un tableau contenant les informations sur les colonnes de la table. |
*/ |
public function getTraitementEnCours($code_projet) { |
$url = $this->url_jrest.self::SERVICE."/EnCours/$code_projet"; |
$json = $this->envoyerRequeteConsultation($url); |
$traitements = json_decode($json, true); |
return $traitements; |
} |
/** |
* Ajoute une demande de traitment pour une référentiel donné. |
* |
* @param string le code du référentiel. |
/trunk/bibliotheque/dao/Dao.php |
---|
55,34 → 55,102 |
//+----------------------------------------------------------------------------------------------------------------+ |
// MÉTHODES |
protected function envoyerRequeteConsultation($url) { |
$retour = $this->envoyerRequete($url, 'GET'); |
return $retour; |
} |
protected function envoyerRequeteAjout($url, Array $donnees) { |
$retour = $this->envoyerRequete($url, $donnees, 'PUT'); |
$retour = $this->envoyerRequete($url, 'PUT', $donnees); |
return $retour; |
} |
protected function envoyerRequeteModif($url, $donnees) { |
$retour = $this->envoyerRequete($url, $donnees, 'POST'); |
$retour = $this->envoyerRequete($url, 'POST', $donnees); |
return $retour; |
} |
protected function envoyerRequeteSuppression($url) { |
$retour = $this->envoyerRequete($url, $donnees, 'DELETE'); |
$retour = $this->envoyerRequete($url, 'DELETE', $donnees); |
return $retour; |
} |
private function envoyerRequete($url, Array $donnees, $mode) { |
$retour = false; |
if ($mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') { |
private function envoyerRequete($url, $mode, Array $donnees = array()) { |
$contenu = false; |
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') { |
$e = "Le mode de requête '$mode' n'est pas accepté!"; |
trigger_error($e, E_USER_WARNING); |
} else { |
$contexte = stream_context_create( |
array('http' => array( |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => $mode, |
'header' => "Content-type: application/x-www-form-urlencoded\r\n", |
'content' => http_build_query($donnees)))); |
$retour = file_get_contents($url, false, $contexte); |
$flux = @fopen($url, 'r', false, $contexte); |
if (!$flux) { |
$this->traiterEntete($http_response_header, $url); |
$e = "L'ouverture de l'url '$url' a échoué!"; |
trigger_error($e, E_USER_WARNING); |
} else { |
// Informations sur les en-têtes et métadonnées du flux |
$entetes = stream_get_meta_data($flux); |
$this->traiterEntete($entetes, $url); |
// Contenu actuel de $url |
$contenu = stream_get_contents($flux); |
fclose($flux); |
} |
return $retour; |
} |
return $contenu; |
} |
private function traiterEntete($entetes, $uri) { |
$infos = $this->analyserEntete($entetes, $uri); |
$this->traiterEnteteDebug($infos); |
$this->traiterEnteteMessage($infos); |
} |
private function analyserEntete($entetes, $uri) { |
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null); |
if (isset($entetes['wrapper_data'])) { |
$entetes = $entetes['wrapper_data']; |
} |
foreach ($entetes as $entete) { |
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) { |
$infos['debugs'] = json_decode($match[1]); |
} |
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) { |
$infos['messages'] = json_decode($match[1]); |
} |
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) { |
$infos['date'] = $match[1]; |
} |
} |
return $infos; |
} |
private function traiterEnteteDebug($entetes) { |
if (isset($entetes['debugs'])) { |
$date = $entetes['date']; |
$uri = $entetes['uri']; |
$debugs = $entetes['debugs']; |
foreach ($debugs as $debug) { |
Debug::printr("DEBUG : $date - $uri :\n$debug"); |
} |
} |
} |
private function traiterEnteteMessage($entetes) { |
if (isset($entetes['messages'])) { |
$date = $entetes['date']; |
$uri = $entetes['uri']; |
$messages = $entetes['messages']; |
foreach ($messages as $message) { |
Debug::printr("MESSAGE : $date - $uri :\n$message"); |
} |
} |
} |
} |
/trunk/interfaces/squelettes/form_traitement.tpl.html |
---|
15,4 → 15,10 |
<label id="ref-dem-label"for="ref-dem-ok">Faire une demande de traitement</label> |
<input id="ref-dem-ok" type="submit" value="Demander" /> |
</form> |
<?php endif; ?> |
<?php if (isset($traitements)) : ?> |
<?php foreach ($traitements as $traitement) : ?> |
<p class="information"><?=$traitement['nom'];?></p> |
<?php endforeach; ?> |
<?php endif; ?> |
/trunk/interfaces/controleurs/Test.php |
---|
53,7 → 53,13 |
// Traitement de l'info sur le code du référentiel |
if (isset($this->referentiel)) { |
$donnees['ref'] = $this->referentiel; |
$resultat = $this->traitementDao->getTraitementEnCours($this->referentiel); |
if ($resultat != false) { |
$donnees['traitements'] = $resultat; |
} else { |
$this->messages[] = "Un problème est survenu lors de la tentative de récupération des traitements en cours."; |
} |
} else { |
$this->messages[] = "Aucun code de projet de référentiel n'est indiqué (Ex. bdnff)."; |
} |
/trunk/services/modules/Ref.php |
---|
56,10 → 56,14 |
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'); |
header('HTTP/1.1 424 Method failure'); |
$mime = 'text/html'; |
$encodage = 'utf-8'; |
$sortie = $this->messages; |
// En plus de la réponse, nous passons les messages dans l'entete car la réponse ne peut pas être récupérée |
// avec ce type d'erreur HTTP en php.. |
// FIXME : comment récupérer en php le contenu de la réponse portant le code HTTP 424 ou 500 |
$this->envoyerEnteteMessage(); |
} else { |
$sortie = $donnees; |
if (is_null($donnees)) { |
68,7 → 72,7 |
} |
// Gestion de l'envoie du déboguage |
$this->envoyerDebogage(); |
$this->envoyerEnteteDebogage(); |
// Encodage au format et JSON et envoie sur la sortie standard |
$contenu = $json ? json_encode($sortie) : $sortie; |
75,7 → 79,21 |
$this->envoyerContenu($encodage, $mime, $contenu); |
} |
protected function envoyerDebogage() { |
protected function envoyerEnteteMessage() { |
if (!is_array($this->messages)) { |
$this->messages[] = $this->messages; |
} |
if (count($this->messages) != 0) { |
foreach ($this->messages as $cle => $val) { |
if (is_array($val)) { |
$this->messages[$cle] = print_r($val, true); |
} |
} |
header('X-MessageJrest-Data:'.json_encode($this->messages)); |
} |
} |
protected function envoyerEnteteDebogage() { |
if (!is_array($this->debug)) { |
$this->debug[] = $this->debug; |
} |
/trunk/services/modules/Traitement.php |
---|
13,6 → 13,7 |
* @version $Id$ |
*/ |
class Traitement extends Ref { |
/** |
* Méthode principale appelée avec une requête de type GET. |
*/ |
48,6 → 49,30 |
} |
/** |
* 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ésultats |
try { |
$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; |
} |
/** |
* Méthode appelée pour ajouter un traitement. |
* Retour l'id du nouvel enregistrement ou false! |
*/ |