13,7 → 13,7 |
* Service d'import de données d'observation du CEL au format XLS |
*/ |
|
// sont define()'d commme n° de colonne tous les slugs retournés par ExportXLS::fieldSetsToColumns() |
// sont define()'d commme n° de colonne tous les abbrevs retournés par ExportXLS::nom_d_ensemble_vers_liste_de_colonnes() |
// préfixés par C_ cf: detectionEntete() |
|
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib'); |
25,11 → 25,11 |
require_once('ExportXLS.php'); |
|
class MyReadFilter implements PHPExcel_Reader_IReadFilter { |
public $excludes = array(); |
public $exclues = array(); |
public function __construct() {} |
public function readCell($column, $row, $worksheetName = '') { |
if(@$this->excludes[$column]) return false; |
if($row == 1) return false; |
public function readCell($colonne, $ligne, $worksheetName = '') { |
if(@$this->exclues[$colonne]) return false; |
if($ligne == 1) return false; |
return true; |
} |
} |
78,40 → 78,40 |
$infos_fichier = array_pop($_FILES); |
|
/*$objPHPExcel = PHPExcel_IOFactory::load($infos_fichier['tmp_name']); |
$sheetData = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE);*/ |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE);*/ |
|
/*$objReader = PHPExcel_IOFactory::createReader("Excel5"); |
$objReader->setReadDataOnly(true); |
$objPHPExcel = $objReader->load($infos_fichier['tmp_name']);*/ |
|
//var_dump($sheetData); |
//var_dump($donnees); |
|
$objReader = PHPExcel_IOFactory::createReader("Excel5"); |
$objReader->setReadDataOnly(true); |
$objPHPExcel = $objReader->load($infos_fichier['tmp_name']); |
$sheetData = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE); |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE); |
|
$filterSubset = new MyReadFilter(); |
$filterSubset->excludes = self::detectionEntete($sheetData[1]); |
$objReader->setReadFilter($filterSubset); |
$filtre_colonnes = new MyReadFilter(); |
$filtre_colonnes->exclues = self::detectionEntete($donnees[1]); |
$objReader->setReadFilter($filtre_colonnes); |
|
// recharge avec le filtre sur colonnes actif |
// (exclue les colonnes inutiles/inutilisables) |
$objPHPExcel = $objReader->load($infos_fichier['tmp_name']); |
$sheetData = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE); |
self::charger($sheetData); |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL,FALSE,FALSE,TRUE); |
self::charger($donnees); |
} |
|
static function detectionEntete($entete) { |
$colonnes_reconnues = Array(); |
$cols = ExportXLS::fieldSetsToColumns('standard'); |
$cols = ExportXLS::nom_d_ensemble_vers_liste_de_colonnes('standard'); |
foreach($entete as $k => $v) { |
$entete_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($v))); |
foreach($cols as $col) { |
$entete_officiel_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($col['nom']))); |
$entete_officiel_slug = $col['slug']; |
if($entete_simple == $entete_officiel_simple || $entete_simple == $entete_officiel_slug) { |
define("C_" . strtoupper($entete_officiel_slug), $k); |
$entete_officiel_abbrev = $col['abbrev']; |
if($entete_simple == $entete_officiel_simple || $entete_simple == $entete_officiel_abbrev) { |
define("C_" . strtoupper($entete_officiel_abbrev), $k); |
$colonnes_reconnues[$k] = 1; |
break; |
} |
125,7 → 125,7 |
// ne conserve que le nom long pour matcher avec la ligne XLS d'entête |
array_walk($colonnes_automatiques, function(&$v) { $v = $v['nom']; }); |
$colonnesID_a_exclure = array_intersect($entete, $colonnes_automatiques); |
// TODO: pourquoi ne pas comparer avec les slugs aussi |
// TODO: pourquoi ne pas comparer avec les abbrevs aussi |
|
return array_merge($colonnesID_non_reconnues, $colonnesID_a_exclure); |
} |
132,12 → 132,12 |
|
static function charger($donnees) { |
// TODO: chunkfilter |
$chunks = 30; |
$morceaux = 30; |
$i = 2; |
$end = $i + $chunks; |
while($i < $end && isset($donnees[$i])) { |
$record = self::chargerLigne($donnees[$i]); |
$req = implode(', ', self::sortArrayByArray($record, self::$ordre_BDD)); |
$fin = $i + $morceaux; |
while($i < $fin && isset($donnees[$i])) { |
$enregistrement = self::chargerLigne($donnees[$i]); |
$req = implode(', ', self::sortArrayByArray($enregistrement, self::$ordre_BDD)); |
$i++; |
} |
} |
174,7 → 174,7 |
"commentaire" => trim($ligne[C_COMMENTAIRE]), |
|
// XXX: fixe |
"transmission" => 0, // cf commentaire dans ExportXLS::fieldSetsToColumns() |
"transmission" => 0, // cf commentaire dans ExportXLS::nom_d_ensemble_vers_liste_de_colonnes() |
"date_creation" => date("Y-m-d H:i:s"), |
"date_modification" => date("Y-m-d H:i:s"), |
|