verif et tableau de confirmation

This commit is contained in:
Prof Langues 2020-10-05 16:56:30 +02:00
parent 7aad2deb53
commit 03568f6641
5 changed files with 90 additions and 36 deletions

View File

@ -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
<Files template.csv>
Order Allow,Deny
Allow from all
</Files>

View File

@ -0,0 +1,2 @@
id;nom;prenom;email;groupe
jbon;Bon;Jean;jean.bon@email.fr;1
1 id nom prenom email groupe
2 jbon Bon Jean jean.bon@email.fr 1

View File

@ -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
]);
}

View File

@ -17,17 +17,26 @@
<div class="block">
<h4>Importation de fichier plat CSV</h4>
<div class="row">
<div class="col6">
bla bla expliquant le format d'import à respecter
</div>
<div class="col6">
<div class="col5">
<?php echo template::file('userImportCSVFile', [
'label' => 'Liste d\'utilisateurs :'
]); ?>
</div>
<div class="col1">
<?php echo template::select('userImportSeparator', $module::$separators, [
'label' => 'Séparateur'
]); ?>
</div>
<div class="col6">
<p>Les en-têtes obligatoires sont id, nom, prenom, email et groupe.</p>
<p>Valeurs de groupe : 1 membre - 2 éditeur - 3 administrateur </p>
<p><a href="core/module/user/ressource/template.csv">Modèle</a> à ouvrir avec un tableur.</p>
</div>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>
<?php echo template::formClose(); ?>
<?php if ($module::$users): ?>
<?php echo template::table([1, 3, 3, 1, 1,3], $module::$users, ['Identifiant', 'Nom', 'Prénom','Groupe', 'Pseudo', 'eMail']); ?>
<?php endif;?>

View File

@ -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"
1 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 2 Castafiore Bianca Musée de Saint-Imier Conservatrice Heideweg 45 2503 Biel/Bienne 222 bc@free.fr
3 3 Lampion Séraphin Musée Charles Clos Olsommer Conservatrice et commissaire d'exposition Zudannazstrasse 4 3970 Salgesch 333 sl@laposte.net
4 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