Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1674 → Rev 1675

/trunk/jrest/services/ImportXLS.php
40,7 → 40,7
 
// Numbers of days between January 1, 1900 and 1970 (including 19 leap years)
// see traiterDateObs()
define("MIN_DATES_DIFF", 25569);
// define("MIN_DATES_DIFF", 25569);
 
 
class MyReadFilter implements PHPExcel_Reader_IReadFilter {
64,6 → 64,14
}
}
 
// XXX: PHP 5.3
function __anonyme_1($v) { return !$v['importable']; }
function __anonyme_2(&$v) { $v = $v['nom']; }
function __anonyme_3($cell) { return !is_null($cell); };
function __anonyme_4($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); }
function __anonyme_5($item) { return is_null($item) ? '?' : $item; }
function __anonyme_6() { return NULL; }
 
class ImportXLS extends Cel {
 
static $ordre_BDD = Array(
244,7 → 252,6
self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre);
if(! $enregistrements) break;
 
echo "===chunk\n";
self::trierColonnes($enregistrements);
// normalement: NB_LIRE_LIGNE_SIMUL, sauf si une enregistrement ne semble pas valide
// ou bien lors du dernier chunk
314,10 → 321,10
 
// des colonnes de FormateurGroupeColonne::nomEnsembleVersListeColonnes()
// ne retient que celles marquées "importables"
$colonnes_automatiques = array_filter($cols, function($v) { return !$v['importable']; });
$colonnes_automatiques = array_filter($cols, '__anonyme_1');
 
// ne conserve que le nom long pour matcher avec la ligne XLS d'entête
array_walk($colonnes_automatiques, function(&$v) { $v = $v['nom']; });
array_walk($colonnes_automatiques, '__anonyme_2');
 
// intersect ( Array ( N => Milieu, S => Ordre ), Array ( ordre => Ordre, phenologie => Phénologie ) )
// ==> Array ( S => Ordre, AA => Phénologie )
341,7 → 348,7
//$ligne = array_filter($ligne, function($cell) { return !is_null($cell); });
//if(!$ligne) continue;
// on a besoin des NULL pour éviter des notice d'index indéfini
if(! array_filter($ligne, function($cell) { return !is_null($cell); })) continue;
if(! array_filter($ligne, '__anonyme_3')) continue;
 
if( ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel)) ) {
// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement);
423,7 → 430,8
self::traiterLocalisation($ligne, $localisation, $cel);
 
// $transmission est utilisé pour date_transmission
$transmission = in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0;
// XXX: @ contre "Undefined index"
@$transmission = in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0;
 
 
// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne.
451,7 → 459,8
"milieu" => trim($ligne[C_MILIEU]),
 
"mots_cles_texte" => NULL, // TODO: foreign-key
"commentaire" => trim($ligne[C_COMMENTAIRE]),
// XXX: @ contre "Undefined index"
"commentaire" => @trim($ligne[C_COMMENTAIRE]),
 
"transmission" => $transmission,
"date_transmission" => $transmission ? date("Y-m-d H:i:s") : NULL, // pas de fonction SQL dans un PDO statement, <=> now()
478,8 → 487,9
 
static function traiterImage($str, $cel, &$enregistrement) {
$liste_images = array_filter(explode("/", $str));
 
array_walk($liste_images,
function($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); },
'__anonyme_4',
$cel);
$requete = sprintf(
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
741,10 → 751,10
implode(', ', array_values(
// 2) garde les valeurs fixes (de $colonnes_statiques),
// mais remplace les NULL par des "?"
array_map(function($item) { return is_null($item) ? '?' : $item; },
array_map('__anonyme_5',
// 1) créé un tableau genre (nom_sel_nn => NULL) depuis self::$ordre_BDD
// et écrase certaines valeurs avec $colonnes_statiques (initilisé avec les données utilisateur)
array_merge(array_map(function() { return NULL; }, array_flip(self::$ordre_BDD)), $colonnes_statiques
array_merge(array_map('__anonyme_6', array_flip(self::$ordre_BDD)), $colonnes_statiques
)))) .
')'
);