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 |
)))) . |
')' |
); |