diff --git a/core/module/user/ressource/.htaccess b/core/module/user/ressource/.htaccess new file mode 100644 index 00000000..e8a0ad3a --- /dev/null +++ b/core/module/user/ressource/.htaccess @@ -0,0 +1,8 @@ +# Bloque l'accès aux données +Order deny,allow +Deny from all +# Sauf l'accès au modèle csv + +Order Allow,Deny + Allow from all + \ No newline at end of file diff --git a/core/module/user/ressource/template.csv b/core/module/user/ressource/template.csv new file mode 100644 index 00000000..ff495590 --- /dev/null +++ b/core/module/user/ressource/template.csv @@ -0,0 +1,2 @@ +id;nom;prenom;email;groupe +jbon;Bon;Jean;jean.bon@email.fr;1 diff --git a/core/module/user/user.php b/core/module/user/user.php index 15143fc6..f6483a80 100644 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -33,6 +33,12 @@ class user extends common { public static $userLongtime = false; + public static $separators = [ + ';' => ';', + ',' => ',', + ':' => ':' + ]; + /** * Ajout */ @@ -543,41 +549,74 @@ class user extends common { * Importation CSV d'utilisateurs */ public function import() { + $notification = ''; + $success = true; // Soumission du formulaire if($this->isPost()) { // Lecture du CSV et construction du tableau - $file = helper::baseUrl(false) . self::FILE_DIR . 'source/' . $this->getInput('userImportCSVFile',helper::FILTER_STRING_SHORT, true); - $rows = array_map(function($row) { return str_getcsv($row, ';'); }, file($file)); - $header = array_shift($rows); - $csv = array(); - foreach($rows as $row) { - $csv[] = array_combine($header, $row); - } - // Stockage des données - foreach($csv as $item ) { - $userId = $item['id']; - if($this->getData(['user', $userId])) { - self::$inputNotices['userAddId'] = 'Identifiant déjà utilisé'; - $check=false; + $file = $this->getInput('userImportCSVFile',helper::FILTER_STRING_SHORT, true); + $filePath = helper::baseUrl(false) . self::FILE_DIR . 'source/' . $file; + if (file_exists ($filePath)) { + $rows = array_map(function($row) { return str_getcsv($row, $this->getInput('userImportSeparator') ); }, file($filePath)); + $header = array_shift($rows); + $csv = array(); + foreach($rows as $row) { + $csv[] = array_combine($header, $row); } - $this->setData([ - 'user', - $userId, - [ - 'firstname' => $item['prenom'], - 'forgot' => 0, - 'group' => $item['groupe'], - 'lastname' => $item['nom'], - 'mail' => $item['email'], - 'password' => uniqid() - ] - ]); + // Stockage des données + foreach($csv as $item ) { + // Nettoyage de l'identifiant + $userId = helper::filter($item['id'] , self::FILTER_ID); + // N'insére que les utilisateurs dont l'id n'existe pas + if( !$this->getData(['user', $userId]) ) { + // Vérifier la présence des champs + if ( $item['prenom'] + AND $item['nom'] + AND $item['groupe'] + AND $item['email'] + AND $userId ) + { + // Enregistre le user + $this->setData([ + 'user', + $userId, [ + 'firstname' => $item['prenom'], + 'forgot' => 0, + 'group' => $item['groupe'], + 'lastname' => $item['nom'], + 'mail' => $item['email'], + 'pseudo' => $item['prenom'], + 'signature' => 1, // Pseudo + 'password' => uniqid() // A modifier à la première connexion + ]]); + + // Création du tableau de confirmation + self::$users[] = [ + $userId, + $item['nom'], + $item['prenom'], + self::$groups[$item['groupe']], + $item['prenom'], + $item['email'] + ]; + $notification = 'Import efectué'; + $success = true; + } else { + $success = 3; + } + } + } + } else { + $notification = 'Erreur de lecture : ' . $file; + $success = false; } } // Valeurs en sortie $this->addOutput([ 'title' => 'Importation', - 'view' => 'import' + 'view' => 'import', + 'notification' => $notification, + 'state' => $success ]); } diff --git a/core/module/user/view/import/import.php b/core/module/user/view/import/import.php index 5a44029b..2b9bd631 100644 --- a/core/module/user/view/import/import.php +++ b/core/module/user/view/import/import.php @@ -17,17 +17,26 @@

Importation de fichier plat CSV

-
- bla bla expliquant le format d'import à respecter -
-
+
'Liste d\'utilisateurs :' ]); ?>
- +
+ 'Séparateur' + ]); ?> +
+
+

Les en-têtes obligatoires sont id, nom, prenom, email et groupe.

+

Valeurs de groupe : 1 membre - 2 éditeur - 3 administrateur

+

Modèle à ouvrir avec un tableur.

+
- \ No newline at end of file + + + + \ No newline at end of file diff --git a/site/export.csv b/site/export.csv deleted file mode 100644 index b841b3ee..00000000 --- a/site/export.csv +++ /dev/null @@ -1,4 +0,0 @@ -1;"Haddock";"Archibald";"Muséum d'histoire naturelle";"Décoratrice";"Rue de l'Ecole-de-Médecine ";1205;"Genève";111;"ah@free.fr"; -2;"Castafiore";"Bianca";"Musée de Saint-Imier";"Conservatrice";"Heideweg 45 ";2503;"Biel/Bienne";222;"bc@free.fr"; -3;"Lampion";"Séraphin";"Musée Charles Clos Olsommer";"Conservatrice et commissaire d'exposition";"Zudannazstrasse 4 ";3970;"Salgesch";333;"sl@laposte.net"; -4;"Tournesol";"Trypho";"Fondation de l'Hermitage";"Chargée de projets d'exposition";2;" route du Signal CP 42";1000;"Lausanne 8 Bellevaux";444;"tt@ac-toulouse.fr"