Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 23 → Rev 24

/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,6 → 53,12
// 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!
*/
/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(
'method' => $mode,
$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);
'content' => http_build_query($donnees))));
$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");
}
}
}
}