* @license GPL v3 * @license CECILL v2 * @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 publications switch($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 erreurs if(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); } }