Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2460 → Rev 2461

/trunk/jrest/bibliotheque/Bdd2.php
File deleted
\ No newline at end of file
/trunk/jrest/bibliotheque/Bdd.php
New file
0,0 → 1,142
<?php
// declare(encoding='UTF-8');
/**
* Classe de gestion de la base de données.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@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 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Bdd extends PDO {
 
const SQL_MODE_ASSOC = PDO::FETCH_ASSOC;
const SQL_MODE_OBJET = PDO::FETCH_OBJ;
const SQL_RETOUR_COMPLET = 'All';
const SQL_RETOUR_LIGNE = 'Row';
const SQL_RETOUR_COLONNE = 'Column';
const SQL_RETOUR_BRUT = 'Raw';
 
public function __construct($config, $base = 'database_cel') {
$cfg = $config[$base];
// ATTENTION : la connexin à la bdd peut échouer si l'host vaut localhost. Utiliser 127.0.0.1 à la place.
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
// Création de la connexion en UTF-8 à la BDD
parent::__construct($dsn, $cfg['username'], $cfg['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affichée)
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échoué : ' .$dsn . "\n". $e->getMessage();
}
}
 
/**
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
* Puis execute la requete.
* @see protegerRequete()
* @param unknown_type $requete
*/
public function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, $retour, $mode);
}
 
/**
* Execute la requete retournant une seule ligne de résultat.
* @param String $requete
*/
public function requeterLigne($requete, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, self::SQL_RETOUR_LIGNE, $mode);
}
 
/**
* Execute la requete retournant une seule colone de résultat.
* @param String $requete
*/
public function requeterValeurUnique($requete, $mode = PDO::FETCH_ASSOC) {
return $this->executerRequete($requete, self::SQL_RETOUR_COLONNE, $mode);
}
 
public function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
$resultat = false;
try {
switch ($retour) {
case self::SQL_RETOUR_COMPLET :
$resultat = $this->query($requete)->fetchAll($mode);// Retourne toutes les lignes
break;
case self::SQL_RETOUR_LIGNE :
$resultat = $this->query($requete)->fetch($mode);// Retourne la première ligne
break;
case self::SQL_RETOUR_COLONNE :
$resultat = $this->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne
break;
case self::SQL_RETOUR_BRUT :
$resultat = $this->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach
break;
default:
$this->debug[] = "Le type de retour '$retour' est inconnu.";
}
if ($resultat === false) {
$this->debug[] = "La requête a retourné aucun résultat : $requete";
}
} catch (PDOException $e) {
$msgTpl = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s";
$this->debug[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
 
/**
* Execute la requete retournant l'objet brut de résultat pour l'utiliser dans un foreach.
* @param String $requete
*/
public function requeterBrut($requete) {
return $this->executerRequete($requete, self::SQL_RETOUR_BRUT);
}
 
public function executer($requete) {
try {
$resultat = $this->exec($requete);
if ($resultat === false) {
$this->debug[] = "La requête a échoué : $requete";
}
} catch (PDOException $e) {
$message = "Fichier : {$e->getFile()} \nLigne : {$e->getLine()} \nMessage : {$e->getMessage()} \nRequête : $requete";
$code = E_USER_ERROR;
throw new Exception($message, $code);
}
return $resultat;
}
 
public function proteger($donnees) {
if (is_array($donnees)) {
$retour = $this->protegerTableau($donnees);
} else {
$retour = $this->quote($donnees);
}
return $retour;
}
 
private function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
if (is_array($val)) {
$tableau[$id] = $this->protegerTableau($val);
} else {
$tableau[$id] = $this->proteger($val);
}
}
return $tableau;
}
 
public function obtenirDernierId() {
return $this->lastInsertId();
}
}
Property changes:
Added: svn:mergeinfo
Merged /branches/v1.7-croissant/jrest/lib/Bdd2.php:r1855,1879-1880,1885-1886,1917,1923,1983
Merged /branches/v2.0-elagueuse/jrest/lib/Bdd2.php:r2099-2100
Merged /branches/topic-dbsingleton/jrest/lib/Bdd2.php:r1720-1764
Merged /branches/v1.8-debroussailleuse/jrest/lib/Bdd2.php:r1981,1987,1992
/trunk/jrest/bibliotheque/Cel.php
16,8 → 16,6
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
// TODO : il faudrait déplacer les méthodes des sections de cette classe dans des classes séparées chargées via un Conteneur.
require_once('Bdd2.php');
 
abstract class Cel {
const ARRET_SERVICE = false;
 
25,12 → 23,12
const TYPE_IMG = 'image';
 
// TODO: delete wrappers
const SQL_MODE_ASSOC = Bdd2::SQL_MODE_ASSOC;
const SQL_MODE_OBJET = Bdd2::SQL_MODE_OBJET;
const SQL_RETOUR_COMPLET = Bdd2::SQL_RETOUR_COMPLET;
const SQL_RETOUR_LIGNE = Bdd2::SQL_RETOUR_LIGNE;
const SQL_RETOUR_COLONNE = Bdd2::SQL_RETOUR_COLONNE;
const SQL_RETOUR_BRUT = Bdd2::SQL_RETOUR_BRUT;
const SQL_MODE_ASSOC = Bdd::SQL_MODE_ASSOC;
const SQL_MODE_OBJET = Bdd::SQL_MODE_OBJET;
const SQL_RETOUR_COMPLET = Bdd::SQL_RETOUR_COMPLET;
const SQL_RETOUR_LIGNE = Bdd::SQL_RETOUR_LIGNE;
const SQL_RETOUR_COLONNE = Bdd::SQL_RETOUR_COLONNE;
const SQL_RETOUR_BRUT = Bdd::SQL_RETOUR_BRUT;
 
public $config;
private $ressources;
58,7 → 56,7
 
// Connection à la base de données
if (self::$bdd === null) { // singleton à l'arrache
self::$bdd = new Bdd2($this->config, 'database_cel');
self::$bdd = new Bdd($this->config, 'database_cel');
}
 
// Nettoyage du _GET (sécurité)
72,7 → 70,7
 
//+----------------------------------------------------------------------------------------------------------------+
protected function connecterPDO($config, $base = 'database_cel') {
return new Bdd2($config, $base);
return new Bdd($config, $base);
}
 
public static function db() {
/trunk/jrest/bibliotheque/FormateurGroupeColonne.php
1,19 → 1,27
<?php
 
// declare(encoding='UTF-8');
/**
* @category PHP
* @package jrest
* @author Raphaël Droz <raphael@tela-botania.org>
* @copyright 2013 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
*/
define('SEPARATEUR_IMAGES', " / ");
define('PREFIX_CHAMPS_ETENDUS', "ext:");
* Classe métier de mise en forme des groupes de colonnes pour les exports.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botania.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@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 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
define('SEPARATEUR_IMAGES', ' / ');
define('PREFIX_CHAMPS_ETENDUS', 'ext:');
// utilisé par formaterUrlUser() [ nécessaire pour le widget d'export)
define('USER_BASEURL', 'http://www.tela-botanica.org/profil:%d');
 
Class FormateurGroupeColonne {
class FormateurGroupeColonne {
 
// cache pour les données des fonctions
static $cache = Array();
33,62 → 41,61
// les données baseflor à récupérer: colonnes présentes dans cel_references
// et intitulés associés
static $baseflor_col = array(
"ve_lumiere" => "Lumière",
"ve_temperature" => "Température",
"ve_continentalite" => "Continentalité",
"ve_humidite_atmos" => "Humidité Atmosphérique",
"ve_humidite_edaph" => "Humidité",
"ve_reaction_sol" => "Réaction (pH)",
"ve_nutriments_sol" => "Nutriments",
"ve_salinite" => "Salinité",
"ve_texture_sol" => "Texture" ,
"ve_mat_org_sol" => "Matière Organique",
"catminat_code" => "Code Catminat",
"syntaxon" => "Syntaxon",
've_lumiere' => 'Lumière',
've_temperature' => 'Température',
've_continentalite' => 'Continentalité',
've_humidite_atmos' => 'Humidité Atmosphérique',
've_humidite_edaph' => 'Humidité',
've_reaction_sol' => 'Réaction (pH)',
've_nutriments_sol' => 'Nutriments',
've_salinite' => 'Salinité',
've_texture_sol' => 'Texture' ,
've_mat_org_sol' => 'Matière Organique',
'catminat_code' => 'Code Catminat',
'syntaxon' => 'Syntaxon',
);
 
// TODO: dirty, ordre des champs étendus... souhaité pour florilèges:
static $ordre_champ_etendus_Florileges = array(
"personneStructure",
"personneService",
"personneFonction",
"adresse",
"latitudeDebutRue",
"longitudeDebutRue",
"latitudeFinRue",
"longitudeFinRue",
"typoUrbaine",
"revetementSol",
"presenceZoneVegetalise",
"hauteurBatimentAvoisinant",
"intensiteGestion",
"periodiciteTraitementPhyto",
"dateArretTraitementPhyto",
"itineraireGestion",
"dateDerniereIntervention",
"hauteurPlante",
"resistanceTraitementPhyto",
"vitesseCroissance",
"perceptionTechnicien",
"perceptionRiverainMauvaise",
'personneStructure',
'personneService',
'personneFonction',
'adresse',
'latitudeDebutRue',
'longitudeDebutRue',
'latitudeFinRue',
'longitudeFinRue',
'typoUrbaine',
'revetementSol',
'presenceZoneVegetalise',
'hauteurBatimentAvoisinant',
'intensiteGestion',
'periodiciteTraitementPhyto',
'dateArretTraitementPhyto',
'itineraireGestion',
'dateDerniereIntervention',
'hauteurPlante',
'resistanceTraitementPhyto',
'vitesseCroissance',
'perceptionTechnicien',
'perceptionRiverainMauvaise',
);
 
static function colGroupsValidation($groupe_de_champs = 'standard,avance') {
if(! $groupe_de_champs) return FALSE;
if(is_string($groupe_de_champs)) {
if (! $groupe_de_champs) return FALSE;
if (is_string($groupe_de_champs)) {
$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
}
elseif(is_array($groupe_de_champs)) {
} elseif(is_array($groupe_de_champs)) {
$groupe_de_champs = array_flip($groupe_de_champs);
} else {
return null;
}
else {
return NULL;
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs);
if (!$groupe_de_champs) {
return false;
}
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups),
$groupe_de_champs);
if(!$groupe_de_champs) return FALSE;
// toujours ajouter standard
$groupe_de_champs['standard'] = TRUE;
$groupe_de_champs['standard'] = true;
return implode(',', array_keys($groupe_de_champs));
}
 
104,26 → 111,25
* Si la colonne n'utilise pas de fonction de récupération particulière
* (ie: si le champ exportés [ou importé] correspond exactement au champ dans la base de donnée)
* Alors 'abbrev' doit avoir la même valeur que le nom de la colonne dans la table mysql `cel_obs`.
*
*/
static function nomEnsembleVersListeColonnes($groupe_de_champs = 'standard') {
if(! $groupe_de_champs) $groupe_de_champs = 'standard';
if(is_string($groupe_de_champs)) {
if (! $groupe_de_champs) {
$groupe_de_champs = 'standard';
}
if (is_string($groupe_de_champs)) {
$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
}
elseif(is_array($groupe_de_champs)) {
} elseif(is_array($groupe_de_champs)) {
$groupe_de_champs = array_flip($groupe_de_champs);
} else {
return null;
}
else {
return NULL;
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs);
if (!$groupe_de_champs) {
return null;
}
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups),
$groupe_de_champs);
if(!$groupe_de_champs) return NULL;
 
$colonnes = Array();
 
if(isset($groupe_de_champs['standard'])) {
$colonnes = array();
if (isset($groupe_de_champs['standard'])) {
$colonnes += Array(
'nom_sel' => self::GenColInfo(Array('abbrev' => 'nom_sel',
'nom' => 'Espèce')),
249,11 → 255,12
'extra' => 1,
'fonction_data' => 'getNomCommun_v3'),
'importable' => FALSE), */
'nom-commun' => self::GenColInfo(Array('abbrev' => 'nom-commun',
'nom' => 'Nom Commun',
'extra' => 1,
'fonction_data' => NULL /* cas particu 'getNomCommun_v4' */,
'preload' => array(__CLASS__, 'getNomCommun_preload')))
'nom-commun' => self::GenColInfo(array(
'abbrev' => 'nom-commun',
'nom' => 'Nom Commun',
'extra' => 1,
'fonction_data' => null /* cas particu 'getNomCommun_v4' */,
'preload' => array(__CLASS__, 'getNomCommun_preload')))
);
}
 
260,44 → 267,48
if(isset($groupe_de_champs['baseflor'])) {
$colonnes += array(
// champ dynamique
'baseflor' => self::GenColInfo(Array('abbrev' => 'baseflor',
'nom' => '',
'extra' => 1,
'importable' => FALSE,
'preload' => array(__CLASS__, 'baseflor_preload'),
'dyna' => array(__CLASS__, 'baseflor_ligne'))),
'baseflor' => self::GenColInfo(array(
'abbrev' => 'baseflor',
'nom' => '',
'extra' => 1,
'importable' => false,
'preload' => array(__CLASS__, 'baseflor_preload'),
'dyna' => array(__CLASS__, 'baseflor_ligne'))),
);
}
 
if(isset($groupe_de_champs['etendu'])) {
if (isset($groupe_de_champs['etendu'])) {
$colonnes += array(
// champ dynamique
'etendu' => self::GenColInfo(Array('abbrev' => 'etendu',
'nom' => '',
'extra' => 1,
'importable' => FALSE,
'preload' => array(__CLASS__, 'champsEtendus_preload'),
'dyna' => array(__CLASS__, 'champsEtendus_ligne'))),
'etendu' => self::GenColInfo(array(
'abbrev' => 'etendu',
'nom' => '',
'extra' => 1,
'importable' => false,
'preload' => array(__CLASS__, 'champsEtendus_preload'),
'dyna' => array(__CLASS__, 'champsEtendus_ligne'))),
);
}
 
if(isset($groupe_de_champs['auteur'])) {
if (isset($groupe_de_champs['auteur'])) {
$colonnes += array(
'observateur' => self::GenColInfo(Array('abbrev' => 'observateur',
'nom' => 'Observateur',
'extra' => 1,
'fonction_data' => 'formaterUrlUser',
'importable' => FALSE)),
'observateur' => self::GenColInfo(array(
'abbrev' => 'observateur',
'nom' => 'Observateur',
'extra' => 1,
'fonction_data' => 'formaterUrlUser',
'importable' => false)),
);
}
 
return $colonnes;
}
 
static function preload($colonnes, $cel, $ids) {
$result = array();
foreach($colonnes as $abbrev => $colonne) {
if(!$colonne['preload']) continue;
foreach ($colonnes as $abbrev => $colonne) {
if (!$colonne['preload']) {
continue;
}
$result[$abbrev] = call_user_func($colonne['preload'], $cel, $ids);
}
return $result;
316,45 → 327,46
$ligne_formatee = array();
foreach($colonnes as $abbrev => $colonne) {
$valeur = null;
if($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) continue;
if ($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) {
continue;
}
 
// valeur directe depuis cel_obs ?
if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
if (isset($obs[$abbrev])) {
$valeur = $obs[$abbrev];
}
 
// pré-processeur des champs
if(function_exists($colonne['fonction'])) {
if (function_exists($colonne['fonction'])) {
$valeur = $colonne['fonction']($valeur);
} elseif(method_exists(__CLASS__, $colonne['fonction'])) {
} else if(method_exists(__CLASS__, $colonne['fonction'])) {
$valeur = call_user_func(array(__CLASS__, $colonne['fonction']), $valeur);
} elseif($colonne['fonction']) {
} else if($colonne['fonction']) {
die("méthode {$colonne['fonction']} introuvable");
}
// fonction pour obtenir des champs (étendus)
elseif(function_exists($colonne['fonction_data'])) {
} else if(function_exists($colonne['fonction_data'])) {// fonction pour obtenir des champs (étendus)
$valeur = $colonne['fonction_data']($obs);
}
elseif(method_exists(__CLASS__, $colonne['fonction_data'])) {
} else if(method_exists(__CLASS__, $colonne['fonction_data'])) {
$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs);
}
 
// // cette section devrait être vide:
// // cas particuliers ingérable avec l'architecture actuelle:
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
if (false && $abbrev == 'date_observation' && $valeur == '0000-00-00') {
/* blah */
}
// ici à cause du passage de $cel ($this->utilisateur)
if($abbrev == 'images') {
if ($abbrev == 'images') {
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
}
if($abbrev == 'nom-commun') {
if ($abbrev == 'nom-commun') {
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
}
 
if($valeur == null) {
$valeur = "";
if ($valeur == null) {
$valeur = '';
}
 
// // fin de section "cas particuliers"
// fin de section "cas particuliers"
$ligne_formatee[] = $valeur;
}
 
361,12 → 373,11
// uniquement les champs dynamiques
foreach($colonnes as $abbrev => $colonne) {
$valeur = null;
if(is_null($colonne['dyna'])) continue;
// XXX: PHP-5.3
call_user_func_array($colonne['dyna'],
array($obs, &$ligne_formatee));
if (is_null($colonne['dyna'])) {
continue;
}
call_user_func_array($colonne['dyna'], array($obs, &$ligne_formatee));
}
 
return $ligne_formatee;
}
 
409,14 → 420,15
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
*/
static function GenColInfo($args) {
$default = Array('abbrev' => NULL,
'nom' => NULL,
'extra' => 0,
'fonction' => NULL,
'fonction_data' => NULL,
'importable' => TRUE,
'preload' => NULL,
'dyna' => NULL);
$default = array(
'abbrev' => null,
'nom' => null,
'extra' => 0,
'fonction' => null,
'fonction_data' => null,
'importable' => true,
'preload' => null,
'dyna' => null);
$ret = array_intersect_key($args, $default);
return array_merge($default, $ret);
}
423,7 → 435,9
 
static function formaterDate($date_heure_mysql) {
//return "";
if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return NULL;
if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") {
return null;
}
// malheureusement pas disponible en php < 5.3
//$date_format = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql);
$val = explode(' ', $date_heure_mysql);
430,13 → 444,17
$date = explode('-', $val[0]);
$heure = explode(':', $val[1]);
$timestamp = mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
if(!$timestamp) return NULL;
if (!$timestamp) {
return null;
}
// TODO: les widgets ne font malheureusement pas usage de l'heure dans le CEL
// TODO: si modification, ne pas oublier de modifier le format d'import correspondant
// dans ImportXLS, traiterDateObs() (actuellement: "Y/m/d" car utilisation de strtotime() qui ne lit pas tout)
// $date_formatee = strftime('%d/%m/%Y', $timestamp);
$date_formatee = strftime('%Y/%m/%d', $timestamp);
if(!$date_formatee) return "00/00/0000";
if (!$date_formatee) {
return '00/00/0000';
}
return $date_formatee;
}
 
443,14 → 461,14
static function formaterUrlUser($obs) {
$is_id = is_numeric($obs['ce_utilisateur']);
return sprintf("%s %s <%s>%s",
$obs['prenom_utilisateur'],
$obs['nom_utilisateur'],
preg_replace(';@.*;', '@...', $obs['courriel_utilisateur']),
$is_id ? sprintf(' (' . USER_BASEURL . ')', $obs['ce_utilisateur']) : '');
$obs['prenom_utilisateur'],
$obs['nom_utilisateur'],
preg_replace(';@.*;', '@...', $obs['courriel_utilisateur']),
$is_id ? sprintf(' (' . USER_BASEURL . ')', $obs['ce_utilisateur']) : '');
}
 
static function getImages_preload($cel, $obsids) {
if(!$obsids) return;
if (!$obsids) return;
$rec = Cel::db()->requeter(
sprintf("SELECT o.id_observation, GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i " .
"FROM cel_images i LEFT JOIN cel_obs o ON (i.ce_observation = o.id_observation) " .
459,10 → 477,10
SEPARATEUR_IMAGES,
$cel->id_utilisateur,
implode(',', $obsids)));
foreach($rec as $v) {
foreach ($rec as $v) {
self::$cache['getImages'][$v['id_observation']] = $v['i'];
}
return NULL;
return null;
}
 
static function getImages($obs, $id_utilisateur) {
504,7 → 522,6
return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester);
}
 
 
// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
// Par exemple, la variable pour "nva" ?
853,5 → 870,4
}
return $ordered + $array;
}
 
}
}
/trunk/jrest/bibliotheque/GestionImage.php
146,6 → 146,20
return ($resultat !== false);
}
 
public function modifierTransmissionParObs($idsObs, $publier) {
$ids_obs_proteges = Cel::db()->proteger($idsObs);
$idsObsConcat = is_array($ids_obs_proteges) ? implode(', ', $ids_obs_proteges) : $ids_obs_proteges;
$etatTransmission = $publier ? 1 : 0;
$dateTransmission = $publier ? 'NOW()' : 'NULL';
 
$requete = "UPDATE cel_images ".
"SET transmission = $etatTransmission, date_transmission = $dateTransmission ".
"WHERE ce_observation IN ($idsObsConcat) ".
' -- ' . __FILE__ . ':' . __LINE__;
$resultat = Cel::db()->executer($requete);
return $resultat;
}
 
/**
* Assemble la requete de mise à jour des champs de metadonnées
*