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"