Rev 1862 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Service important des informations concernant COEL au format CSV.* Encodage en entrée : utf8* Encodage en sortie : utf8** @author Aurélien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version $Id$* @copyright 2014*/class CoelImport extends Coel {private $chemin_script = null;private $dossier_import_tmp = null;/*** Méthode appelée avec une requête de type GET.*/public function getElement($params = array()) {if(!empty($_SESSION['coel']['import_stat'])) {header('Content-type : application/json');echo json_encode($_SESSION['coel']['import_stat']);exit;}}/*** Méthode appelée pour ajouter un élément.*/public function createElement($params) {$this->chemin_script = $this->config['coel']['chemin_script_import'];$this->dossier_import_tmp = $this->config['coel']['dossier_import_tmp'];$erreurs = $this->verifierConditionsImport();if(!empty($erreurs)) {header('Content-type : application/json');echo json_encode($erreurs);exit;}// Normalement si on arrive ici, c'est que le fichier contient quelque chose$fichier = array_pop($_FILES);$nom_fichier = $fichier['name'];$type = $params['type'];// on peut imaginer d'autres types d'import que les publicationsswitch($type) {case 'publication':$retour = $this->importerPublications($nom_fichier);break;default:$retour = false;}// Suppression du fichier importéunlink($this->dossier_import_tmp.$fichier['name']);$retour_import = array("succes_import" => "1", "erreurs" => array(), "nb_elements_importes" => "0") ;// Les fonctions d'imports produisent le nombre de lignes importées// ou bien une ou des erreursif(is_numeric($retour)) {$retour_import['nb_elements_importes'] = $retour;} else {$retour_import['succes_import'] = "0";$retour_import['erreurs'] = $retour;}// Mise en session des résultats d'import// afin de pouvoir appeler le service en lecture pour obtenir les stats$_SESSION['coel']['import_stat'] = $retour_import;header('Content-type : application/json');echo json_encode($retour_import);exit;}private function verifierConditionsImport() {$erreurs = false;if(empty($_FILES)) {$erreurs[] = "Ce service requiert un fichier à uploader";}$fichier = reset($_FILES);if($fichier['error'] != UPLOAD_ERR_OK) {$erreurs[] = "Des erreurs sont survenues durant l'upload du fichier";}if($fichier['size'] == 0) {$erreurs[] = "Le fichier envoyé est vide";}$deplacement = move_uploaded_file($fichier['tmp_name'], $this->dossier_import_tmp.$fichier['name']);if(!$deplacement) {$erreurs[] = "Erreur du déplacement du fichier sur le serveur";}return $erreurs;}private function importerPublications($nom_fichier) {$utilisateur = array('id' => '', 'session' => session_id(), 'ip' => $_SERVER['REMOTE_ADDR']);if(!empty($utilisateur_connecte = $this->getUtilisateur())) {$utilisateur['id'] = $utilisateur_connecte['id'];}$retour = false;$script = sprintf($this->chemin_script, $nom_fichier, "'".json_encode($utilisateur)."'");exec($script, $retour);return array_pop($retour);}}