Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 25 → Rev 26

/trunk/interfaces/index.php
33,12 → 33,12
 
<link rel="stylesheet" type="text/css" media="print" href="http://www.tela-botanica.org/sites/commun/fr/styles/impression.css" />
 
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/referentiel/referentiel.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/humanity/jquery-ui-1.8.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/referentiel/debogage.css" />
<link rel="stylesheet" type="text/css" media="screen" href="interfaces/squelettes/css/referentiel/referentiel.css" />
<link rel="stylesheet" type="text/css" media="screen" href="interfaces/squelettes/css/humanity/jquery-ui-1.8.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="interfaces/squelettes/css/referentiel/debogage.css" />
<script type="text/javascript" src="squelettes/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript" src="interfaces/squelettes/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="interfaces/squelettes/js/jquery-ui-1.8.custom.min.js"></script>
</head>
<body xml:lang="fr" lang="fr">
<div id="reducteur">
/trunk/interfaces/controleurs/AppliControleur.php
17,11 → 17,15
const RENDU_CORPS = 'corps';
const RENDU_PIED = 'pied';
private $sortie = array();
private $parametres = array();
// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
protected $url = null;
private $parametres = array();
private $sortie = array();
private $messages = null;
//+----------------------------------------------------------------------------------------------------------------+
// Constructeur
public function __construct() {
$registre = Registre::getInstance();
$this->parametres = $registre->get('parametres');
29,7 → 33,17
parent::__construct();
}
//+----------------------------------------------------------------------------------------------------------------+
// Accesseurs
 
/**
* Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
*/
public function getSortie() {
return $this->sortie;
}
 
/**
* Attribue à la bonne position de sortie un contenu.
*/
protected function setSortie($position, $contenu, $fusionner = false) {
43,6 → 57,25
}
/**
* Retourne le tableau des messages
*/
protected function getMessages() {
return $this->messages;
}
/**
* Ajoute un message
*/
protected function addMessage($message) {
if ('' != $message) {
$this->messages[] = $message;
}
}
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
* @param string la position à tester.
* @return bool true si la position est valide, sinon false.
59,13 → 92,6
}
/**
* Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
*/
public function getSortie() {
return $this->sortie;
}
 
/**
* Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
*/
protected function executerAction($ClasseModule, $action) {
/trunk/interfaces/controleurs/Test.php
17,7 → 17,6
private $referentiel = null;
private $traitementDao = null;
private $messages = null;
public function __construct() {
parent::__construct();
53,17 → 52,17
// 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);
$resultat = $this->traitementDao->getTraitementsEnCours($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.";
$this->addMessage("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).";
$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
}
$donnees['messages'] = $this->messages;
$donnees['messages'] = $this->getMessages();
$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);
}
72,7 → 71,7
*/
public function demanderTraitement() {
$this->ajouterTraitement();
//$this->afficherInterface();
$this->afficherInterface();
}
/**
80,17 → 79,55
*/
private function ajouterTraitement() {
if (!isset($this->referentiel)) {
$this->messages[] = "Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).";
$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
} else {
// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.
$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);
Debug::printr($resultat);
if ($resultat != false) {
$this->messages[] = "Le traitement #'' a été ajouté.";
$this->addMessage("Le traitement #'$resultat' a été ajouté.");
$this->lancerScript();
} else {
$this->messages[] = "Un problème est survenu lors de la tentative d'ajout du traitement.";
$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
}
}
}
/**
* Lance le script d'execution des traitements
*/
private function lancerScript() {
$php = Config::get('chemin_bin_php');
$exe = Config::get('chemin_script');
$script = 'tests';
$projet = $this->referentiel;
$action = 'tout';
$log = Config::get('chemin_script_log');
$commande = "$php -f $exe $script -p $projet -a $action > $log &";
 
$message_erreur_tpl = "%s\n.".
"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
"La commande à lancer est : <code>$commande</code>";
if ($this->verifierSafeModeOff() === false) {
$e = "Le safe_mode est actif sur ce serveur.";
$this->addMessage(sprintf($message_erreur_tpl, $e));
} else if ($this->verifierAccesFonctionExec() === false) {
$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
$this->addMessage(sprintf($message_erreur_tpl, $e));
} else {
Debug::printr($commande);
$this->addMessage("Lancement du script effectuant les traitements.");
exec($commande);
}
}
private function verifierSafeModeOff() {
return ('1' == ini_get('safe_mode')) ? false : true;
}
private function verifierAccesFonctionExec() {
$disabled = explode(', ', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
}
?>
/trunk/interfaces/framework.php
1,6 → 1,6
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquyer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '../../framework/framework/autoload.inc.php';
// Indiquyer ci-dessous le chemin absolu vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/home/jpm/web/framework/framework/autoload.inc.php';
?>
/trunk/interfaces/framework.defaut.php
1,6 → 1,6
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquyer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/framework/0.2/autoload.inc.php';
// Indiquyer ci-dessous le chemin absolu vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/home/referentiel/www/commun/tbframework/0.2/autoload.inc.php';
?>
/trunk/services/modules/Ref.php
89,7 → 89,7
$this->messages[$cle] = print_r($val, true);
}
}
header('X-MessageJrest-Data:'.json_encode($this->messages));
header('X-MessageJrest-Data: '.json_encode($this->messages));
}
}
103,7 → 103,7
$this->debug[$cle] = print_r($val, true);
}
}
header('X-DebugJrest-Data:'.json_encode($this->debug));
header('X-DebugJrest-Data: '.json_encode($this->debug));
}
}
167,5 → 167,18
}
return $sortie;
}
protected function traiterBddClauseIn($chaine) {
$sortie = '';
$chaine = trim($chaine, " '");
if ($chaine != '') {
$valeurs = explode(',', $chaine);
foreach ($valeurs as $id => $valeur) {
$valeurs[$id] = $this->bdd->quote($valeur);
}
$sortie = implode(',', $valeurs);
}
return $sortie;
}
}
?>
/trunk/services/modules/Traitement.php
17,12 → 17,12
/**
* Méthode principale appelée avec une requête de type GET.
*/
public function getElement($param = array()) {
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'), $param, false);
$p = $this->traiterParametresUrl(array('type', 'projet'), $params_url, false);
$type = $p['type'];
$projet = $p['projet'];
49,6 → 49,32
}
/**
* 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ésultats
try {
$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) {
73,13 → 99,54
}
/**
* 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) {
$params_proteges = $this->traiterParametresPost(array('referentiel_code'), $params);
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['referentiel_code']} - $meta_date_creation");
$nom = $this->bdd->quote("Traitement {$params_post['referentiel_code']} - $meta_date_creation");
$meta_date_creation = $this->bdd->quote($meta_date_creation);
try {
99,5 → 166,91
$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'url
extract($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);
}
}
?>
/trunk/scripts/scripts.conf.php
27,5 → 27,8
define('ES_CHEMIN_PEAR', '/opt/lampp/lib/php/');
 
// Chargement de base pour l'autoload
$GLOBALS['chemins_autoload'] = array(dirname(realpath(__FILE__)).DS.'bibliotheque'.DS);
$GLOBALS['chemins_autoload'] = array(
dirname(realpath(__FILE__)).DS.'bibliotheque'.DS,
dirname(realpath(__FILE__)).DS.'..'.DS.'bibliotheque'.DS.'dao'.DS,
);
?>
/trunk/scripts/modules/tests/Tests.php
26,6 → 26,13
$this->projet = $this->getParam('p');
$this->manuel = parse_ini_file($this->getModuleChemin().DS.'configurations'.DS.'referentiel_v2.1.ini');
$traitementDao = new TraitementDao();
$traitement = $traitementDao->getDernierTraitement($this->projet);
Debug::printr($traitement);
Debug::printr('Debute:'.$traitementDao->debuterTraitement($traitement['id_traitement']));
$traitements_obsoletes = $traitementDao->getTraitementsObsoletes($this->projet);
Debug::printr('Supp. obsoletes:'.$traitementDao->supprimer($traitements_obsoletes));
// Lancement du test demandé
$cmd = $this->getParam('a');
switch ($cmd) {
40,6 → 47,8
public function lancerTests() {
$donnees = array();
$donnees['tests'] = array();
/*
// Récupération des données à tester
$colonnes = $this->tableStructureDao->getColonnes($this->projet);
136,10 → 145,7
$donnees['tests'][] = $this->testerStatutOrigineSyntaxe($noms);
$donnees['tests'][] = $this->testerStatutIntroductionSyntaxe($noms);
$donnees['tests'][] = $this->testerStatutCultureSyntaxe($noms);
*/
//Debug::printr($this->manuel);
$this->setSortie(self::RENDU_CORPS, $this->getVue('test', $donnees));
*/
}
//+--------------------------------------------------------------------------------------------------------------+//
/trunk/scripts/script.php
46,7 → 46,7
// Gestion des classes principales des modules
$module = strtolower(str_replace(' ', '_', preg_replace('/([a-z])([A-Z])/', '$1 $2',$classe)));
$fichier = ES_CHEMIN_MODULE.$module.DS.$classe.'.class.php';
$fichier = ES_CHEMIN_MODULE.$module.DS.$classe.'.php';
if (file_exists($fichier)) {
require_once $fichier;
}
53,35 → 53,49
// Gestion des bibliothèques des scripts
foreach ($GLOBALS['chemins_autoload'] as $chemin) {
$fichiers = array( $chemin.$classe.'.class.php',
$chemin.$classe.'.php');
$fichier = $chemin.$classe.'.php';
foreach ($fichiers as $fichier) {
if (file_exists($fichier)) {
require_once $fichier;
break;
}
if (file_exists($fichier)) {
require_once $fichier;
break;
}
}
}
 
/**
* récupération du nom de la commande et éventuellement du nom de l'application
*/
if ($_SERVER['argc'] < 2){
die("Erreur: pas de commande. Voir '".$_SERVER['argv'][0]." help'.\n");
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application.
// Sinon, rien ne sera chargé.
// Chemin du fichier chargeant le framework requis
$framework = dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'interfaces'.DIRECTORY_SEPARATOR.'framework.php';
if (!file_exists($framework)) {
$e = "Veuillez paramêtrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once $framework;
// Ajout d'information concernant cette application
Application::setChemin(__FILE__);// Obligatoire
Application::setInfo(Config::get('info'));
 
/**
* récupération du nom de la commande et éventuellement du nom de l'application
*/
if ($_SERVER['argc'] < 2){
die("Erreur: pas de commande. Voir '".$_SERVER['argv'][0]." help'.\n");
}
$argv = $_SERVER['argv'];
$script_nom = array_shift($argv); // shift le nom du script
$commande_nom = array_shift($argv); // prend le nom de la commande
// Chargement de la commande
$Script = Script::charger($commande_nom);
$parametres = Script::getParametres($argv);
// Lancement de la commande
$Script->initialiser($parametres);
$Script->executer();
// Affichage des execptions et erreurs générées par le script
echo GestionnaireException::getExceptions();
}
 
$argv = $_SERVER['argv'];
$script_nom = array_shift($argv); // shift le nom du script
$commande_nom = array_shift($argv); // prend le nom de la commande
 
// Chargement de la commande
$Script = Script::charger($commande_nom);
$parametres = Script::getParametres($argv);
 
// Lancement de la commande
$Script->initialiser($parametres);
$Script->executer();
 
?>
/trunk/scripts/bibliotheque/ScriptCommande.php
112,7 → 112,6
}
$tab_fichiers_ini = array( ES_CHEMIN_CONFIG.'bdd.ini', // Paramêtres de la base de données
ES_CHEMIN_CONFIG.'commun.ini', // Paramêtres communs aux différents projets
ES_CHEMIN_CONFIG.$this->getParam('p').'.ini',// Ancien emplacement du fichier ini du projet, dans le dossier configuration global
$this->getModuleChemin().$this->getParam('p').'.ini',
$this->getModuleChemin().DS.'configurations'.DS.$this->getParam('p').'.ini');
125,7 → 124,7
}
// Chargement du fichier ini du projet
$erreur_ini_projet = true;
for ($i = 2; $i < 7 ; $i++) {
for ($i = 2; $i < 4 ; $i++) {
if ($this->parserFichierIni($tab_fichiers_ini[$i])) {
$erreur_ini_projet = false;
}
491,6 → 490,7
*
* @param string le chemin et le nom du fichier.
* @param string le contenu à stocker dans le fichier.
* @param boolean true pour compresser (gz) le fichier. Par défaut vaut false.
* @return string le message d'erreur formaté.
*/
protected function creerFichier($fichier, $contenu, $compression = false) {
572,4 → 572,4
}
}
}
?>
?>
/trunk/bibliotheque/dao/TraitementDao.php
15,14 → 15,21
class TraitementDao extends Dao {
const SERVICE = 'Traitement';
private $url = null;
public function __construct() {
parent::__construct();
$this->url = $this->url_jrest.self::SERVICE;
}
/**
* 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.
* @param string le code du projet de référentiel.
* @return array un tableau contenant les informations sur les traitements en cours ou en attente.
*/
public function getTraitementEnCours($code_projet) {
$url = $this->url_jrest.self::SERVICE."/EnCours/$code_projet";
public function getTraitementsEnCours($code_projet) {
$url = $this->url."/EnCours/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
30,22 → 37,79
}
/**
* Ajoute une demande de traitment pour une référentiel donné.
* Retourne les ids de l'ensemble des traitements obsolètes.
*
* @param string le code du projet de référentiel.
* @return array un tableau contenant les ids des traitements obsolètes.
*/
public function getTraitementsObsoletes($code_projet) {
$url = $this->url."/Obsolete/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Retourne le dernier traitement demandé et non traité pour un projet donné.
*
* @param string le code du projet de référentiel.
* @return array un tableau contenant les informations sur le dernier traitement demandé et non traité.
*/
public function getDernierTraitement($code_projet) {
$url = $this->url."/DerniereDemande/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Ajoute une demande de traitement pour une référentiel donné.
*
* @param string le code du référentiel.
* @return mixed l'id du traitement ou false en cas d'échec.
*/
public function ajouterTraitement($code_projet) {
// Pré-paration des données à passer par POST
// Préparation des données à passer par POST
$donnees['referentiel_code'] = $code_projet;
// Création de l'url du service
$url = $this->url_jrest.self::SERVICE;
 
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteAjout($url, $donnees);
$json = $this->envoyerRequeteAjout($this->url, $donnees);
$id = json_decode($json, true);
return $id;
}
/**
* Modifie un traitement pour indiquer qu'il est débuté.
*
* @param integer l'id du traitement
* @return boolean true en cas de succés sinon false.
*/
public function debuterTraitement($id_traitement) {
$url = $this->url."/$id_traitement";
$donnees['action'] = 'Debuter';
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteModif($url, $donnees);
$ok = json_decode($json, true);
return $ok;
}
/**
* Supprime des traitments en fonction de leur id.
*
* @param array le tableau des id des traitements à supprimer
* @return boolean true en cas de succès ou false en cas d'échec.
*/
public function supprimer(Array $ids) {
// Préparation de l'url
$url = $this->url.'/'.implode(',', $ids);
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteSuppression($url);
$ok = json_decode($json, true);
return $ok;
}
}
?>
/trunk/bibliotheque/dao/Dao.php
19,7 → 19,7
protected $url_jrest = null;
public function __construct() {
$this->url_jrest = config::get('url_jrest');
$this->url_jrest = Config::get('url_jrest');
}
//+----------------------------------------------------------------------------------------------------------------+
66,7 → 66,7
return $retour;
}
protected function envoyerRequeteModif($url, $donnees) {
protected function envoyerRequeteModif($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'POST', $donnees);
return $retour;
}