Subversion Repositories eFlore/Applications.cel

Rev

Rev 3030 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3030 Rev 3077
Line 30... Line 30...
30
error_reporting(-1);
30
error_reporting(-1);
31
ini_set('html_errors', 0);
31
ini_set('html_errors', 0);
32
ini_set('xdebug.cli_color', 2);
32
ini_set('xdebug.cli_color', 2);
33
date_default_timezone_set('Europe/Paris');
33
date_default_timezone_set('Europe/Paris');
34
require_once 'lib/PHPExcel/Classes/PHPExcel.php';
34
require_once 'lib/PHPExcel/Classes/PHPExcel.php';
-
 
35
require_once 'bibliotheque/GestionMotsClesChemin.php';
Line 35... Line 36...
35
 
36
 
36
// nombre d'INSERT à cumuler par requête SQL
37
// nombre d'INSERT à cumuler par requête SQL
37
// (= nombre de lignes XLS à bufferiser)
38
// (= nombre de lignes XLS à bufferiser)
38
//define('NB_LIRE_LIGNE_SIMUL', 30);
39
//define('NB_LIRE_LIGNE_SIMUL', 30);
Line 282... Line 283...
282
					}
283
					}
283
					$donnees[] = array_diff_key($tab, $filtre->exclues);
284
					$donnees[] = array_diff_key($tab, $filtre->exclues);
284
				}
285
				}
285
			}
286
			}
Line 286... Line 287...
286
 
287
 
287
			list($enregistrements, $images, $mots_cle, $champs_etendus) = self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre);
288
			list($enregistrements, $images, $mots_cle, $champs_etendus) = self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre, $config);
288
			if (! $enregistrements) {
289
			if (! $enregistrements) {
289
				break;
290
				break;
Line 290... Line 291...
290
			}
291
			}
Line 305... Line 306...
305
				$donnees = array_merge($donnees, array_values($e));
306
				$donnees = array_merge($donnees, array_values($e));
306
			}
307
			}
Line 307... Line 308...
307
 
308
 
Line -... Line 309...
-
 
309
			$stmt->execute($donnees);
-
 
310
 
-
 
311
			# @TODO lier les mots-clées de l'arbre à l'obs nouvellement insérée, sinon seuls les mots-clés texte
-
 
312
			# seront à jour, et ils seront écrasés à la prochaine modification de mots-clés pour cette obs...
308
			$stmt->execute($donnees);
313
			# => nécessite d'insérer les obs une par une pour avoir le dernier id inséré
309
 
314
 
Line 310... Line 315...
310
			$dernier_autoinc = Cel::db()->lastInsertId();
315
			$dernier_autoinc = Cel::db()->lastInsertId();
311
			Cel::db()->commit();
316
			Cel::db()->commit();
Line 529... Line 534...
529
	}
534
	}
Line 530... Line 535...
530
 
535
 
531
	/*
536
	/*
532
	 * charge un groupe de lignes
537
	 * charge un groupe de lignes
533
	 */
538
	 */
534
	static function chargerLignes($cel, $lignes, $colonnes_statiques, &$dernier_ordre) {
539
	static function chargerLignes($cel, $lignes, $colonnes_statiques, &$dernier_ordre, $config) {
535
		$enregistrement = NULL;
540
		$enregistrement = NULL;
536
		$enregistrements = array();
541
		$enregistrements = array();
537
		$toutes_images = array();
542
		$toutes_images = array();
538
		$tous_mots_cle = array();
543
		$tous_mots_cle = array();
Line 547... Line 552...
547
			// on a besoin des NULL pour éviter des notice d'index indéfini
552
			// on a besoin des NULL pour éviter des notice d'index indéfini
548
			if (! array_filter($ligne, '__anonyme_3')) {
553
			if (! array_filter($ligne, '__anonyme_3')) {
549
				continue;
554
				continue;
550
			}
555
			}
Line 551... Line 556...
551
 
556
 
552
			if ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel)) {
557
			if ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel, $config)) {
553
				// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement);
558
				// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement);
554
				if ($enregistrement['latitude'] == NULL && $enregistrement['longitude'] == NULL) {
559
				if ($enregistrement['latitude'] == NULL && $enregistrement['longitude'] == NULL) {
555
					if (isset($enregistrement['_champs_etendus']['latitudeDebutRue'])) {
560
					if (isset($enregistrement['_champs_etendus']['latitudeDebutRue'])) {
556
						$enregistrement['latitude'] = $enregistrement['_champs_etendus']['latitudeDebutRue'];
561
						$enregistrement['latitude'] = $enregistrement['_champs_etendus']['latitudeDebutRue'];
Line 600... Line 605...
600
		foreach ($enregistrements as &$enregistrement) {
605
		foreach ($enregistrements as &$enregistrement) {
601
			$enregistrement = self::sortArrayByArray($enregistrement, self::$ordre_BDD);
606
			$enregistrement = self::sortArrayByArray($enregistrement, self::$ordre_BDD);
602
		}
607
		}
603
	}
608
	}
Line 604... Line 609...
604
 
609
 
605
	static function stockerMotsCle($enregistrements, $tous_mots_cle, $lastid) {
610
	static function stockerMotsCle($enregistrements, $tous_mots_cle) {
606
		$c = 0;
611
		$c = 0;
607
		// debug: var_dump($tous_mots_cle);die;
612
		// debug: var_dump($tous_mots_cle);die;
608
		foreach ($tous_mots_cle as $v) {
613
		foreach ($tous_mots_cle as $v) {
609
			$c += count($v['mots_cle']['to_insert']);
614
			$c += count($v['mots_cle']['to_insert']);
Line 648... Line 653...
648
	 Aucune des valeurs présentes dans $enregistrement n'est quotée
653
	 Aucune des valeurs présentes dans $enregistrement n'est quotée
649
	 cad aucune des valeurs retournée par traiter{Espece|Localisation}()
654
	 cad aucune des valeurs retournée par traiter{Espece|Localisation}()
650
	 car ce tableau est passé à un PDO::preparedStatement() qui applique
655
	 car ce tableau est passé à un PDO::preparedStatement() qui applique
651
	  proprement les règle d'échappement.
656
	  proprement les règle d'échappement.
652
	*/
657
	*/
653
	static function chargerLigne($ligne, $dernier_ordre, $cel) {
658
	static function chargerLigne($ligne, $dernier_ordre, $cel, $config) {
654
		// évite des notices d'index lors des trigger_error()
659
		// évite des notices d'index lors des trigger_error()
655
		$ref_ligne = !empty($ligne[C_NOM_SEL]) ? trim($ligne[C_NOM_SEL]) : '';
660
		$ref_ligne = !empty($ligne[C_NOM_SEL]) ? trim($ligne[C_NOM_SEL]) : '';
Line 656... Line 661...
656
 
661
 
657
		// en premier car le résultat est utile pour
662
		// en premier car le résultat est utile pour
Line 737... Line 742...
737
		if (@$ligne[C_IMAGES]) {
742
		if (@$ligne[C_IMAGES]) {
738
			self::traiterImage($ligne[C_IMAGES], $cel->id_utilisateur, $enregistrement);
743
			self::traiterImage($ligne[C_IMAGES], $cel->id_utilisateur, $enregistrement);
739
		}
744
		}
Line 740... Line 745...
740
 
745
 
741
		if (@$ligne[C_MOTS_CLES_TEXTE]) {
746
		if (@$ligne[C_MOTS_CLES_TEXTE]) {
742
			self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel->id_utilisateur, $enregistrement);
747
			self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel->id_utilisateur, $enregistrement, $config);
Line 743... Line 748...
743
		}
748
		}
744
 
749
 
745
		$champs_etendus = self::traiterChampsEtendus($ligne, self::$indexes_colonnes_etendues);
750
		$champs_etendus = self::traiterChampsEtendus($ligne, self::$indexes_colonnes_etendues);
Line 774... Line 779...
774
		if ($resultat) {
779
		if ($resultat) {
775
			$enregistrement['_images'] = $resultat;
780
			$enregistrement['_images'] = $resultat;
776
		}
781
		}
777
	}
782
	}
Line 778... Line 783...
778
 
783
 
779
	static function traiterMotsCle($str, $id_utilisateur, &$enregistrement) {
784
	static function traiterMotsCle($str, $id_utilisateur, &$enregistrement, $config) {
780
		$liste_mots_cle = $liste_mots_cle_recherche = array_map('trim', array_unique(array_filter(explode(',', $str))));
785
		$liste_mots_cle = $liste_mots_cle_recherche = array_map('trim', array_unique(array_filter(explode(',', $str))));
Line 781... Line 786...
781
		array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4'));
786
		array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4'));
-
 
787
 
782
 
788
		#if (self::$gestion_mots_cles == null) {
783
		if (self::$gestion_mots_cles == null) {
789
		if (true) {
-
 
790
			$gestion_mots_cles = new GestionMotsClesChemin($config, 'obs');
-
 
791
		}
784
			$gestion_mots_cles = new GestionMotsCles($this->config, 'obs');
792
 
-
 
793
		// Recherche des IDs des mots-cles
785
		}
794
		$mots_cles_ids = $gestion_mots_cles->obtenirIdsMotClesPourMotsCles($liste_mots_cle, $id_utilisateur);
786
		$mots_cles_ids = $gestion_mots_cles->obtenirIdsMotClesPourMotsCles($liste_mots_cle, $id_utilisateur);
795
		// Y aura-t-il des nouvaux mots-cles
787
		foreach ($mots_cles_ids as $mot_cle) {
796
		foreach ($mots_cles_ids as $mot_cle) {
-
 
797
			$resultat[$mot_cle['id_mot_cle']] = $mot_cle['mot_cle'];
-
 
798
		}
-
 
799
		if ($resultat == null) {
-
 
800
			// array_diff() ne gère pas les NULL en entrée
-
 
801
			$nouveaux_mots_cles = $liste_mots_cle;
-
 
802
		} else {
-
 
803
			$nouveaux_mots_cles = array_diff($liste_mots_cle, $resultat);
-
 
804
		}
-
 
805
		// Ajout des mots-cles inexistants dans l'arbre
-
 
806
		if (count($nouveaux_mots_cles) > 0) {
-
 
807
			foreach ($nouveaux_mots_cles as $nmc) {
-
 
808
				$gestion_mots_cles->insererParChemin($nmc, '/', $id_utilisateur);
-
 
809
			}
-
 
810
			// Mise à jour des ids de mots-cles après ajout
Line 788... Line 811...
788
			$resultat[$mot_cle['id_mot_cle']] = $mot_cle['mot_cle'];
811
			$mots_cles_ids = $gestion_mots_cles->obtenirIdsMotClesPourMotsCles($liste_mots_cle, $id_utilisateur);
789
		}
812
		}
790
 
813
 
791
		$enregistrement['mots_cles_texte'] = implode(',', $liste_mots_cle);
814
		$enregistrement['mots_cles_texte'] = implode(',', $liste_mots_cle);
-
 
815
		$enregistrement['_mots_cle'] = array(
792
		$enregistrement['_mots_cle'] = array(
816
			'existing' => $resultat,
Line 793... Line 817...
793
			'existing' => $resultat,
817
			'to_insert' => $nouveaux_mots_cles
794
			'to_insert' => array_diff($liste_mots_cle, $resultat));
818
		);