Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1637 → Rev 1638

/trunk/jrest/services/ImportXLS.php
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"),