Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 232 Rev 233
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
3
 * Exemple de lancement du script : /opt/lampp/bin/php cli.php ontologie -a analyser
3
 * Exemple de lancement du script : /opt/lampp/bin/php cli.php ontologie -a analyser
4
 *
4
 *
5
 */
5
 */
-
 
6
require_once dirname(__FILE__).DS.'Traduction.php';
-
 
7
 
6
class Prometheus extends EfloreScript {
8
class Prometheus extends EfloreScript {
Line -... Line 9...
-
 
9
 
7
 
10
	private $projetDossier = '';
8
	private $lecteur = null;
11
	private $lecteur = null;
9
	private $fichier = '';
12
	private $fichier = '';
10
	private $lotsTermes = array();
13
	private $lotsTermes = array();
11
	private $lotsRelations = array();
14
	private $lotsRelations = array();
Line 34... Line 37...
34
		'GENERIC_STRUCTURES' => 17);
37
		'GENERIC_STRUCTURES' => 17);
Line 35... Line 38...
35
 
38
 
36
	public function executer() {
39
	public function executer() {
37
		try {
40
		try {
-
 
41
			$this->initialiserProjet('prometheus');
Line 38... Line 42...
38
			$this->initialiserProjet('prometheus');
42
			$this->projetDossier = Config::get('dossierTsv');
39
 
43
 
40
			$this->fichier = realpath(dirname(__FILE__)).'/../../../donnees/prometheus/v1.00_2003-02-18/Ontology.xml';
44
			$this->fichier = $this->projetDossier.'Ontology.xml';
41
			// Lancement de l'action demandée
45
			// Lancement de l'action demandée
42
			$cmd = $this->getParametre('a');
46
			$cmd = $this->getParametre('a');
43
		    switch ($cmd) {
47
		    switch ($cmd) {
Line 50... Line 54...
50
		    		break;
54
		    		break;
51
		    	case 'analyser' :
55
		    	case 'analyser' :
52
					$this->vider();
56
					$this->vider();
53
		    		$this->lireFichierXml();
57
		    		$this->lireFichierXml();
54
					break;
58
					break;
-
 
59
				case 'chargerTraductions' :
-
 
60
					$this->viderTraductions();
-
 
61
					$this->chargerTraductions();
-
 
62
					break;
55
		    	case 'vider' :
63
		    	case 'vider' :
56
		    		$this->vider();
64
		    		$this->vider();
-
 
65
		    	case 'viderTraductions' :
-
 
66
		    		$this->viderTraductions();
-
 
67
		    		break;
57
		    	case 'supprimerTous' :
68
		    	case 'supprimerTous' :
58
		    		$this->supprimerTous();
69
		    		$this->supprimerTous();
59
		    		break;
70
		    		break;
60
				default :
71
				default :
61
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
72
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
Line 513... Line 524...
513
 
524
 
514
	private function proteger($chaine) {
525
	private function proteger($chaine) {
515
		return $this->getBdd()->proteger($chaine);
526
		return $this->getBdd()->proteger($chaine);
Line -... Line 527...
-
 
527
	}
-
 
528
 
-
 
529
	private function viderTraductions() {
-
 
530
		$requete = 'UPDATE prometheus_ontologies_terme_v1_00 '.
-
 
531
			'SET nom = NULL, description = NULL, notes = NULL';
-
 
532
		$this->executerSql($requete);
-
 
533
	}
-
 
534
 
-
 
535
	private function chargerTraductions() {
-
 
536
		$dossier = $this->projetDossier.'traductions'.DS;
-
 
537
		$pointeur = opendir($dossier);
-
 
538
		while ($fichierNom = readdir($pointeur)) {
-
 
539
			if (preg_match('/^[.]{1,2}/', $fichierNom) == false) {
-
 
540
				$fichierChemin = $dossier.$fichierNom;
-
 
541
				$lecteur = new LecteurExcel($fichierChemin);
-
 
542
				//$this->verifierStructureFichierExcel($lecteur);
-
 
543
				for ($ligne = 2; $ligne < $lecteur->getNbreLignes(); $ligne++) {
-
 
544
					$traduction = new Traduction();
-
 
545
					$traduction->type = $lecteur->getValeur($ligne, 1);
-
 
546
					$traduction->en = $lecteur->getValeur($ligne, 2);
-
 
547
					$traduction->fr = $lecteur->getValeur($ligne, 3);
-
 
548
					$traduction->sourcesTraduction = $lecteur->getValeur($ligne, 4);
-
 
549
					$traduction->remarques = $lecteur->getValeur($ligne, 5);
-
 
550
					$traduction->sources = $lecteur->getValeur($ligne, 6);
-
 
551
					$traduction->relectureRemarques = $lecteur->getValeur($ligne, 7);
-
 
552
					$this->genererNotes($traduction);
-
 
553
 
-
 
554
					$this->insererTraduction($traduction);
-
 
555
				}
-
 
556
			}
-
 
557
		}
-
 
558
		closedir($pointeur);
-
 
559
	}
-
 
560
 
-
 
561
	private function verifierStructureFichierExcel($lecteur) {
-
 
562
		$messages = array();
-
 
563
		$colonnes = array("Type d'élément", "Élément en anglais", "Traduction en français", "Sources de la traduction", "Remarques", "Sources", "Relecture/ Remarques");
-
 
564
		foreach ($colonnes as $numero => $intitule) {
-
 
565
			$valeurBrute = $lecteur->getValeur(1, ($numero + 1));
-
 
566
			if ($valeurBrute != $intitule) {
-
 
567
				$messages[] = "Le fichier {$lecteur->getFichier()} ne contient pas la bonne colonne #$numero : $intitule != $valeurBrute";
-
 
568
			}
-
 
569
		}
-
 
570
		if (count($messages) > 0) {
-
 
571
			throw new Exception(implode("\n", $messages));
-
 
572
		}
-
 
573
	}
-
 
574
 
-
 
575
	private function genererNotes(Traduction $traduction) {
-
 
576
		$notes = array();
-
 
577
		if ($this->etreVide($traduction->sourcesTraduction) === false) {
-
 
578
			$notes[] = "Sources de la traduction : ".$traduction->sourcesTraduction;
-
 
579
		}
-
 
580
		if ($this->etreVide($traduction->remarques) === false) {
-
 
581
			$notes[] = "Remarques : ".$traduction->remarques;
-
 
582
		}
-
 
583
		if ($this->etreVide($traduction->sources) === false) {
-
 
584
			$notes[] = "Sources : ".$traduction->sources;
-
 
585
		}
-
 
586
		if ($this->etreVide($traduction->relectureRemarques) === false) {
-
 
587
			$notes[] = "Remarques sur la relecture : ".$traduction->relectureRemarques;
-
 
588
		}
-
 
589
		if (count($notes) > 0) {
-
 
590
			$traduction->notes = implode("\n", $notes);
-
 
591
		}
-
 
592
	}
-
 
593
 
-
 
594
	private function insererTraduction($traduction) {
-
 
595
		$requete = null;
-
 
596
		$notes = $traduction->notes;
-
 
597
		if ($traduction->type == 'term') {
-
 
598
			$notes = $this->proteger("Nom :\n".$notes);
-
 
599
			$nom = $this->proteger($traduction->fr);
-
 
600
			$nomEn = $this->proteger($traduction->en);
-
 
601
			$requete = "UPDATE prometheus_ontologies_terme_v1_00 ".
-
 
602
				"SET nom = $nom, notes = $notes ".
-
 
603
				"WHERE nom_en = $nomEn ";
-
 
604
		} else if ($traduction->type == 'DEFINITION') {
-
 
605
			$notes = $this->proteger("Description :\n".$notes);
-
 
606
			$description = $this->proteger($traduction->fr);
-
 
607
			$descriptionEn = $this->proteger($traduction->en);
-
 
608
			$requete = "UPDATE prometheus_ontologies_terme_v1_00 ".
-
 
609
				"SET description = $description, notes = CONCAT(notes, '\n', $notes) ".
-
 
610
				"WHERE description_en = $descriptionEn ";
-
 
611
		}
-
 
612
		if ($requete != null) {
-
 
613
			$this->executerSql($requete);
-
 
614
		}
516
	}
615
	}
517
 
616
 
518
	private function vider() {
617
	private function vider() {
519
		$requete = 'TRUNCATE TABLE prometheus_ontologies_auteur_v1_00';
618
		$requete = 'TRUNCATE TABLE prometheus_ontologies_auteur_v1_00';
520
		$this->executerSql($requete);
619
		$this->executerSql($requete);