Subversion Repositories eFlore/Applications.cel

Rev

Rev 3077 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3077 Rev 3474
Line 331... Line 331...
331
		restore_error_handler();
331
		restore_error_handler();
Line 332... Line 332...
332
 
332
 
333
		// le cast en string des nombres permet d'unifier le parsing du retour
333
		// le cast en string des nombres permet d'unifier le parsing du retour
334
		// car il n'est destiné qu'à être affiché 
334
		// car il n'est destiné qu'à être affiché 
335
		$retour = array(
335
		$retour = array(
336
					'import_obs_ajoutees' => (string)$obs_ajouts,
336
					'import_obs_ajoutees' => (string)$obs_ajouts,
337
					'import_images_ajoutees' => (string)$nb_images_ajoutees,
337
					'import_images_ajoutees' => (string)$nb_images_ajoutees,
338
					'import_mots_cles_ajoutes' => (string)$nb_mots_cle_ajoutes,
338
					'import_mots_cles_ajoutes' => (string)$nb_mots_cle_ajoutes,
339
					'import_colonnes_non_traitees' => implode(', ', $filtre->exclues)
339
					'import_colonnes_non_traitees' => implode(', ', $filtre->exclues)
340
		);
340
		);
341
		// Ajout d'éventuelles erreurs
341
		// Ajout d'éventuelles erreurs
342
		if ($this->bilan) {
342
		if ($this->bilan) {
343
			$retour += array('import_erreurs' => implode("\n", $this->bilan) . "\n");
343
			$retour += array('import_erreurs' => implode("\n", $this->bilan) . "\n");
344
		}
344
		}
345
		// Dans le cas où le client ne sait pas lire le retour d'upload
345
		// Dans le cas où le client ne sait pas lire le retour d'upload
346
		// on stocke les stats en session pour les appeler plus tard
346
		// on stocke les stats en session pour les appeler plus tard
347
		// car ceci peut poser notamment problème pour les requêtes CORS
347
		// car ceci peut poser notamment problème pour les requêtes CORS
Line 350... Line 350...
350
		// les lire directement après l'upload
350
		// les lire directement après l'upload
351
		$this->envoyerJson($retour);
351
		$this->envoyerJson($retour);
352
		die();
352
		die();
353
	}
353
	}
Line 354... Line 354...
354
	
354
	
355
	public function getElement($uid) {
355
	public function getElement($uid) {
Line 356... Line 356...
356
		if($uid[0] == "template") {
356
		if($uid[0] == "template") {
357
 
357
 
Line 358... Line 358...
358
			$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
358
			$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
359
			$tpl = $tpl_dir.'modele_import.xls';
359
			$tpl = $tpl_dir.'modele_import.xls';
360
 
360
 
Line 361... Line 361...
361
			$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
361
			$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
362
			$classeur_tpl = $lecteur->load($tpl);
362
			$classeur_tpl = $lecteur->load($tpl);
363
			$feuille_tpl = $classeur_tpl->getActiveSheet();
363
			$feuille_tpl = $classeur_tpl->getActiveSheet();
364
			
364
			
365
			// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
365
			// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
366
			// Si un groupe est demandé
366
			// Si un groupe est demandé
Line 367... Line 367...
367
			$lettre_colonne_max = $feuille_tpl->getHighestColumn();
367
			$lettre_colonne_max = $feuille_tpl->getHighestColumn();
368
			$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);		
368
			$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);		
Line 379... Line 379...
379
			for($i = 0; $i < $nb_colonne_max; $i++) {
379
			for($i = 0; $i < $nb_colonne_max; $i++) {
380
				$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
380
				$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
381
				$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
381
				$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
Line 382... Line 382...
382
				
382
				
383
				if(!empty($descriptions[$champ_obl])) {
383
				if(!empty($descriptions[$champ_obl])) {
384
					$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
384
					$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
385
					$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400); 
385
					$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400); 
386
				}
386
				}
Line 387... Line 387...
387
			}
387
			}
Line 393... Line 393...
393
				$champs = Cel::db()->requeter($requete);
393
				$champs = Cel::db()->requeter($requete);
Line 394... Line 394...
394
 
394
 
395
				foreach($champs as $champ) {	
395
				foreach($champs as $champ) {	
396
					$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
396
					$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
397
					// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
397
					// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
398
					// l'import ignore les noms de colonnes qu'il ne connait pas
398
					// l'import ignore les noms de colonnes qu'il ne connait pas
399
					$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
399
					$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
400
					// Ajout de la description dans le commentaire si elle est présente
400
					// Ajout de la description dans le commentaire si elle est présente
401
					if(!empty($descriptions[$champ['champ']])) { 
401
					if(!empty($descriptions[$champ['champ']])) { 
402
						$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
402
						$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
403
						$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
403
						$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
Line 404... Line 404...
404
					}
404
					}
405
					
405
					
406
					$nb_colonne_en_cours++;
406
					$nb_colonne_en_cours++;
407
				}		
407
				}		
Line 408... Line 408...
408
				$nom_fichier .= '_'.$_GET['groupe'];
408
				$nom_fichier .= '_'.$_GET['groupe'];
409
			}
409
			}
410
			
410
			
411
			// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
411
			// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
412
			// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
412
			// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
413
			header('Content-type: application/vnd.ms-excel');	
413
			header('Content-type: application/vnd.ms-excel');	
Line 414... Line 414...
414
			header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
414
			header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
415
			$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
415
			$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
416
			$generateur->save('php://output');
416
			$generateur->save('php://output');
Line 435... Line 435...
435
		}
435
		}
Line 436... Line 436...
436
		
436
		
437
		return $descriptions;
437
		return $descriptions;
Line 438... Line 438...
438
	}
438
	}
439
	
439
	
440
	public function getRessource() {
440
	public function getRessource() {
441
		return self::getStatsDernierUpload();
441
		return self::getStatsDernierUpload();
442
	}
442
	}
443
	
443
	
444
	static function getStatsDernierUpload() {
444
	static function getStatsDernierUpload() {
445
		// renvoi des statistiques du dernier envoi de fichier
445
		// renvoi des statistiques du dernier envoi de fichier
446
		$stats = !empty($_SESSION['upload_stats']) ? $_SESSION['upload_stats'] : null;
446
		$stats = !empty($_SESSION['upload_stats']) ? $_SESSION['upload_stats'] : null;
447
		header("Content-Type: application/json; charset=utf-8");
447
		header("Content-Type: application/json; charset=utf-8");
448
		echo json_encode($stats);
448
		echo json_encode($stats);
Line 449... Line 449...
449
		die();
449
		die();
450
	}
450
	}
451
 
451
 
Line 1129... Line 1129...
1129
				// XXX: insère t'on des valeurs vides ?
1129
				// XXX: insère t'on des valeurs vides ?
1130
				$valeur = $champ;
1130
				$valeur = $champ;
1131
				$cle = $label;
1131
				$cle = $label;
Line 1132... Line 1132...
1132
 
1132
 
1133
				if (!empty($cle) && !empty($valeur)) {
1133
				if (!empty($cle) && !empty($valeur)) {
1134
					$champ_etendu_a_inserer = new ChampEtendu();
1134
					$champ_etendu_a_inserer = new ObsEtendue();
1135
					$champ_etendu_a_inserer->id = $id_obs;
1135
					$champ_etendu_a_inserer->id = $id_obs;
1136
					$champ_etendu_a_inserer->cle = $cle;
1136
					$champ_etendu_a_inserer->cle = $cle;
Line 1137... Line 1137...
1137
					$champ_etendu_a_inserer->valeur = $valeur;
1137
					$champ_etendu_a_inserer->valeur = $valeur;