Subversion Repositories eFlore/Applications.coel

Rev

Rev 1862 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1857 aurelien 1
<?php
2
 
3
/**
4
 * Service important des informations concernant COEL au format CSV.
5
 * Encodage en entrée : utf8
6
 * Encodage en sortie : utf8
7
 *
8
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
9
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
 * @version $Id$
12
 * @copyright 2014
13
 */
14
class CoelImport extends Coel {
15
 
16
	private $chemin_script = null;
17
	private $dossier_import_tmp = null;
18
 
19
	/**
20
	 * Méthode appelée avec une requête de type GET.
21
	 */
1882 aurelien 22
	public function getElement($params = array()) {
1857 aurelien 23
		if(!empty($_SESSION['coel']['import_stat'])) {
24
			header('Content-type : application/json');
25
			echo json_encode($_SESSION['coel']['import_stat']);
26
			exit;
27
		}
28
	}
29
 
30
	/**
31
	 * Méthode appelée pour ajouter un élément.
32
	 */
33
	public function createElement($params) {
34
 
35
		$this->chemin_script = $this->config['coel']['chemin_script_import'];
36
		$this->dossier_import_tmp = $this->config['coel']['dossier_import_tmp'];
37
 
38
		$erreurs = $this->verifierConditionsImport();
39
		if(!empty($erreurs)) {
40
			header('Content-type : application/json');
41
			echo json_encode($erreurs);
42
			exit;
43
		}
44
 
45
		// Normalement si on arrive ici, c'est que le fichier contient quelque chose
46
		$fichier = array_pop($_FILES);
47
		$nom_fichier = $fichier['name'];
48
 
49
		$type = $params['type'];
50
		// on peut imaginer d'autres types d'import que les publications
51
		switch($type) {
52
			case 'publication':
53
				$retour = $this->importerPublications($nom_fichier);
54
			break;
55
 
56
			default:
57
				$retour = false;
58
		}
59
 
60
		// Suppression du fichier importé
61
		unlink($this->dossier_import_tmp.$fichier['name']);
62
 
1862 aurelien 63
		$retour_import = array("succes_import" => "1", "erreurs" => array(), "nb_elements_importes" => "0") ;
1857 aurelien 64
 
65
		// Les fonctions d'imports produisent le nombre de lignes importées
66
		// ou bien une ou des erreurs
67
		if(is_numeric($retour)) {
68
			$retour_import['nb_elements_importes'] = $retour;
69
		} else {
70
			$retour_import['succes_import'] = "0";
71
			$retour_import['erreurs'] = $retour;
72
		}
73
 
74
		// Mise en session des résultats d'import
75
		// afin de pouvoir appeler le service en lecture pour obtenir les stats
76
		$_SESSION['coel']['import_stat'] = $retour_import;
77
 
78
		header('Content-type : application/json');
79
		echo json_encode($retour_import);
80
		exit;
81
	}
82
 
83
	private function verifierConditionsImport() {
84
		$erreurs = false;
85
 
86
		if(empty($_FILES)) {
87
			$erreurs[] = "Ce service requiert un fichier à uploader";
88
		}
89
 
90
		$fichier = reset($_FILES);
91
		if($fichier['error'] != UPLOAD_ERR_OK) {
92
			$erreurs[] = "Des erreurs sont survenues durant l'upload du fichier";
93
		}
94
 
95
		if($fichier['size'] == 0) {
96
			$erreurs[] = "Le fichier envoyé est vide";
97
		}
98
 
99
		$deplacement = move_uploaded_file($fichier['tmp_name'], $this->dossier_import_tmp.$fichier['name']);
100
		if(!$deplacement) {
101
			$erreurs[] = "Erreur du déplacement du fichier sur le serveur";
102
		}
103
 
104
		return $erreurs;
105
	}
106
 
107
 
108
	private function importerPublications($nom_fichier) {
1882 aurelien 109
 
110
		$utilisateur = array('id' => '', 'session' => session_id(), 'ip' => $_SERVER['REMOTE_ADDR']);
111
		if(!empty($utilisateur_connecte = $this->getUtilisateur())) {
112
			$utilisateur['id'] = $utilisateur_connecte['id'];
113
		}
114
 
1857 aurelien 115
		$retour = false;
1882 aurelien 116
		$script = sprintf($this->chemin_script, $nom_fichier, "'".json_encode($utilisateur)."'");
1857 aurelien 117
		exec($script, $retour);
118
		return array_pop($retour);
119
	}
120
}