users : Filtre et import

This commit is contained in:
Fred Tempez 2023-11-30 13:30:10 +01:00
parent 2e839715b5
commit eeb96186c1
10 changed files with 181 additions and 93 deletions

View File

@ -1,5 +1,5 @@
id;nom;prenom;email;groupe
jm1;Membre1;Jean;jean.membre1@email.fr;1
am2;Membre2;Albert;albert.membre2@email.fr;1
jrediteur;Editeur;Robert;robert.editeur@email.fr;2
padmin;Dupuis;Admin;paul.admin@email.fr;3
id;nom;prenom;email;groupe;profil;passe;tags
jm1;Membre1;Jean;jean.membre1@email.fr;1;1;jEan05;"adhérent"
am2;Membre2;Albert;albert.membre2@email.fr;1;1;alBertAG;"adhérent"
jrediteur;Editeur;Robert;robert.editeur@email.fr;2;1;roBert54;"trésorier"
padmin;Dupuis;Admin;paul.admin@email.fr;3;0;paul32Mirabel32;"président"
1 id nom prenom email groupe profil passe tags
2 jm1 Membre1 Jean jean.membre1@email.fr 1 1 jEan05 adhérent
3 am2 Membre2 Albert albert.membre2@email.fr 1 1 alBertAG adhérent
4 jrediteur Editeur Robert robert.editeur@email.fr 2 1 roBert54 trésorier
5 padmin Dupuis Admin paul.admin@email.fr 3 0 paul32Mirabel32 président

View File

@ -75,8 +75,8 @@ class user extends common
public static $alphabet = [];
public static $courseGroups = [
'all' => 'Tout'
public static $usersGroups = [
'all' => 'Tous'
];
/**
@ -133,6 +133,7 @@ class user extends common
'accessTimer' => null,
'accessCsrf' => null,
'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT),
'tags' => ''
]
]);
@ -343,6 +344,7 @@ class user extends common
'accessCsrf' => $this->getData(['user', $this->getUrl(2), 'accessCsrf']),
'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN),
'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT),
'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT),
]
]);
// Redirection spécifique si l'utilisateur change son mot de passe
@ -447,20 +449,22 @@ class user extends common
public function index()
{
// Liste des groupes et des profils
$courseGroups = $this->getData(['profil']);
foreach ($courseGroups as $groupId => $groupValue) {
$usersGroups = $this->getData(['profil']);
foreach ($usersGroups as $groupId => $groupValue) {
switch ($groupId) {
case "-1":
case "0":
break;
case "3":
self::$courseGroups['30'] = 'Administrateur';
self::$usersGroups['30'] = 'Administrateur';
$profils['30'] = 0;
break;
case "1":
case "2":
foreach ($groupValue as $profilId => $profilValue) {
if ($profilId) {
self::$courseGroups[$groupId . $profilId] = sprintf(helper::translate('Groupe %s - Profil %s'), self::$groupPublics[$groupId], $profilValue['name']);
self::$usersGroups[$groupId . $profilId] = sprintf(helper::translate('Groupe %s - Profil %s'), self::$groupPublics[$groupId], $profilValue['name']);
$profils[$groupId . $profilId] = 0;
}
}
}
@ -470,13 +474,17 @@ class user extends common
self::$alphabet = range('A', 'Z');
$alphabet = range('A', 'Z');
self::$alphabet = array_combine($alphabet, self::$alphabet);
self::$alphabet = array_merge(['all' => 'Tout'], self::$alphabet);
self::$alphabet = array_merge(['all' => 'Toute'], self::$alphabet);
// Liste des membres
$userIdsLastNames = helper::arrayColumn($this->getData(['user']), 'lastname');
ksort($userIdsLastNames);
foreach ($userIdsLastNames as $userId => $userLastNames) {
if ($this->getData(['user', $userId, 'group'])) {
// Compte les rôles
$profils[$this->getData(['user', $userId, 'group']) . $this->getData(['user', $userId, 'profil'])]++;
// Filtres
if ($this->isPost()) {
// Groupe et profils
@ -503,6 +511,8 @@ class user extends common
continue;
}
// Formatage de la liste
self::$users[] = [
$userId,
@ -511,6 +521,7 @@ class user extends common
empty($this->getData(['profil', $this->getData(['user', $userId, 'group']), $this->getData(['user', $userId, 'profil']), 'name']))
? helper::translate(self::$groups[(int) $this->getData(['user', $userId, 'group'])])
: $this->getData(['profil', $this->getData(['user', $userId, 'group']), $this->getData(['user', $userId, 'profil']), 'name']),
$this->getData(['user', $userId, 'tags']),
template::button('userEdit' . $userId, [
'href' => helper::baseUrl() . 'user/edit/' . $userId,
'value' => template::ico('pencil'),
@ -523,6 +534,16 @@ class user extends common
'help' => 'Supprimer'
])
];
}
}
// Ajoute les effectifs aux profils du sélecteur
foreach (self::$usersGroups as $groupId => $groupValue) {
if ($groupId === 'all') {
self::$usersGroups['all'] = self::$usersGroups['all'] . ' (' . array_sum($profils) . ')';
} else {
self::$usersGroups[$groupId] = self::$usersGroups[$groupId] . ' (' . $profils[$groupId] . ')';
}
}
@ -702,10 +723,16 @@ class user extends common
self::$sharePath = array_merge(['./site/file/source/' => 'Tous les dossiers'], self::$sharePath);
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
// Chemin vers les dossiers du gestionnaire de fichier
self::$sharePath = $this->getSubdirectories('./site/file/source');
self::$sharePath = array_flip(self::$sharePath);
self::$sharePath = array_merge(['./site/file/source/' => 'Tous les dossiers'], self::$sharePath);
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
// Liste des modules installés
self::$listModules = helper::getModules();
self::$listModules = array_keys(self::$listModules);
// Charge les dialogues du module pour afficher les traductions
foreach (self::$listModules as $moduleId) {
if (
@ -868,7 +895,7 @@ class user extends common
// Liste des modules installés
self::$listModules = helper::getModules();
self::$listModules = array_keys(self::$listModules);
// Charge les dialogues du module pour afficher les traductions
foreach (self::$listModules as $moduleId) {
if (
@ -1177,17 +1204,22 @@ class user extends common
and array_key_exists('prenom', $item)
and array_key_exists('nom', $item)
and array_key_exists('groupe', $item)
and array_key_exists('profil', $item)
and array_key_exists('email', $item)
and array_key_exists('passe', $item)
and $item['nom']
and $item['prenom']
and $item['id']
and $item['email']
and $item['groupe']
and $item['passe']
and array_key_exists('tags', $item)
and isset($item['id'])
and isset($item['nom'])
and isset($item['prenom'])
and isset($item['email'])
and isset($item['groupe'])
and isset($item['profil'])
and isset($item['passe'])
and isset($item['tags'])
) {
// Validation du groupe
$item['groupe'] = (int) $item['groupe'];
$item['profil'] = (int) $item['profil'];
$item['groupe'] = ($item['groupe'] >= self::GROUP_BANNED and $item['groupe'] <= self::GROUP_ADMIN)
? $item['groupe'] : 1;
// L'utilisateur existe
@ -1200,8 +1232,12 @@ class user extends common
$item['nom'],
$item['prenom'],
self::$groups[$item['groupe']],
($this->getData(['profil', $item['groupe'], $item['profil'], 'name']) !== null )
? $this->getData(['profil', $item['groupe'], $item['profil'], 'name'])
: $item['profil'],
$item['prenom'],
helper::filter($item['email'], helper::FILTER_MAIL),
$item['tags'],
$item['notification']
];
// L'utilisateur n'existe pas
@ -1216,6 +1252,7 @@ class user extends common
'firstname' => $item['prenom'],
'forgot' => 0,
'group' => $item['groupe'],
'profil' => $item['profil'],
'lastname' => $item['nom'],
'mail' => $item['email'],
'pseudo' => $item['prenom'],
@ -1227,7 +1264,8 @@ class user extends common
"connectTimeout" => null,
"accessUrl" => null,
"accessTimer" => null,
"accessCsrf" => null
"accessCsrf" => null,
'tags' => $item['tags']
]
]);
// Icône de notification
@ -1253,17 +1291,23 @@ class user extends common
}
}
// Création du tableau de confirmation
var_dump( $item['profil']);
self::$users[] = [
$userId,
$item['nom'],
$item['prenom'],
self::$groups[$item['groupe']],
($this->getData(['profil', $item['groupe'], $item['profil'], 'name']) !== null )
? $this->getData(['profil', $item['groupe'], $item['profil'], 'name'])
: $item['profil'],
$item['prenom'],
$item['email'],
$item['tags'],
$item['notification']
];
}
}
}
if (empty(self::$users)) {
$notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect');

View File

@ -46,13 +46,28 @@
]); ?>
</div>
</div>
<?php echo template::mail('userAddMail', [
'autocomplete' => 'off',
'label' => 'Adresse électronique'
]); ?>
<?php echo template::select('userAddLanguage', $module::$languagesInstalled, [
'label' => 'Langues'
]); ?>
<div class="row">
<div class="col6">
<?php echo template::mail('userAddMail', [
'autocomplete' => 'off',
'label' => 'Adresse électronique'
]); ?>
</div>
<div class="col6">
<?php echo template::select('userAddLanguage', $module::$languagesInstalled, [
'label' => 'Langues'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<?php echo template::text('userAddTags', [
'label' => 'Etiquettes',
'value' => $this->getData(['user', $this->getUrl(2), 'tags']),
'help' => 'Le séparateur d\'étiquettes est l\'espace'
]); ?>
</div>
</div>
</div>
</div>
<div class="col6">
@ -110,21 +125,23 @@
</div>
</div>
<div class="row">
<div id="userCommentProfil<?php echo self::GROUP_MEMBER; ?>" class="col12 displayNone userCommentProfil">
<div id="userCommentProfil<?php echo self::GROUP_MEMBER; ?>"
class="col12 displayNone userCommentProfil">
<?php echo template::textarea('useraddProfilComment' . self::GROUP_MEMBER, [
"value" => implode("\n",$module::$userProfilsComments[self::GROUP_MEMBER])
"value" => implode("\n", $module::$userProfilsComments[self::GROUP_MEMBER])
]);
?>
</div>
<div id="userCommentProfil<?php echo self::GROUP_EDITOR; ?>" class="col12 displayNone userCommentProfil">
<div id="userCommentProfil<?php echo self::GROUP_EDITOR; ?>"
class="col12 displayNone userCommentProfil">
<?php echo template::textarea('useraddProfilComment2' . self::GROUP_EDITOR, [
"value" => implode("\n",$module::$userProfilsComments[self::GROUP_EDITOR])
"value" => implode("\n", $module::$userProfilsComments[self::GROUP_EDITOR])
]);
?>
</div>
<div id="userCommentProfil<?php echo self::GROUP_ADMIN; ?>" class="col12 displayNone userCommentProfil">
<?php echo template::textarea('useraddProfilComment' . self::GROUP_ADMIN, [
"value" => implode("\n",$module::$userProfilsComments[self::GROUP_ADMIN])
"value" => implode("\n", $module::$userProfilsComments[self::GROUP_ADMIN])
]);
?>
</div>

View File

@ -58,15 +58,30 @@
]); ?>
</div>
</div>
<?php echo template::mail('userEditMail', [
'autocomplete' => 'off',
'label' => 'Adresse électronique',
'value' => $this->getData(['user', $this->getUrl(2), 'mail'])
]); ?>
<?php echo template::select('userEditLanguage', $module::$languagesInstalled, [
'label' => 'Langue',
'selected' => $this->getData(['user', $this->getUrl(2), 'language'])
]); ?>
<div class="row">
<div class="col6">
<?php echo template::mail('userEditMail', [
'autocomplete' => 'off',
'label' => 'Adresse électronique',
'value' => $this->getData(['user', $this->getUrl(2), 'mail'])
]); ?>
</div>
<div class="col6">
<?php echo template::select('userEditLanguage', $module::$languagesInstalled, [
'label' => 'Langue',
'selected' => $this->getData(['user', $this->getUrl(2), 'language'])
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<?php echo template::text('userEditTags', [
'label' => 'Etiquettes',
'value' => $this->getData(['user', $this->getUrl(2), 'tags']),
'help' => 'Le séparateur d\'étiquettes est l\'espace'
]); ?>
</div>
</div>
</div>
</div>
<div class="col6">

View File

@ -7,20 +7,20 @@
'value' => template::ico('left')
]); ?>
</div>
<?php /**echo template::button('userHelp', [
'href' => 'https://doc.zwiicms.fr/importation-d-une-liste-d-utilisateurs',
'target' => '_blank',
'value' => template::ico('help'),
'class' => 'buttonHelp',
'help' => 'Consulter l\'aide en ligne'
]);*/ ?>
<?php /**echo template::button('userHelp', [
'href' => 'https://doc.zwiicms.fr/importation-d-une-liste-d-utilisateurs',
'target' => '_blank',
'value' => template::ico('help'),
'class' => 'buttonHelp',
'help' => 'Consulter l\'aide en ligne'
]);*/?>
<div class="col1 offset8">
<?php echo template::button('userImporTemplate', [
<?php echo template::button('userImporTemplate', [
'href' => helper::baseUrl() . 'user/template',
'value' => template::ico('table'),
'help' => 'Télécharger un modèle'
]); ?>
]); ?>
</div>
<div class="col2">
<?php echo template::submit('userImportSubmit', [
@ -31,7 +31,8 @@
<div class="row">
<div class="col12">
<div class="block">
<h4><?php echo helper::translate('Importation de fichier plat CSV'); ?>
<h4>
<?php echo helper::translate('Importation de fichier plat CSV'); ?>
</h4>
<div class="row">
<div class="col10">
@ -57,11 +58,13 @@
</div>
</div>
<?php echo template::formClose(); ?>
<?php if ($module::$users) : ?>
<?php if ($module::$users): ?>
<div class="row">
<div class="col12 textAlignCenter">
<?php echo template::table([1, 3, 3, 1, 1, 2, 1], $module::$users, ['Id', 'Nom', 'Prénom', 'Groupe', 'Pseudo', 'eMail', '']); ?>
<?php echo template::ico('check'); ?> Compte créé | <?php echo template::ico('mail'); ?> Compte créé et notifié | <?php echo template::ico('cancel'); ?> Erreur dans le fichier, compte non créé.
<?php echo template::table([1, 2, 2, 1, 1, 1, 2, 1, 1], $module::$users, ['Id', 'Nom', 'Prénom', 'Groupe', 'Profil', 'Pseudo', 'eMail', 'Etiquettes', '']); ?>
<?php echo template::ico('check'); ?> Compte créé |
<?php echo template::ico('mail'); ?> Compte créé et notifié |
<?php echo template::ico('cancel'); ?> Erreur dans le fichier ou le compte existe.
</div>
</div>
<?php endif; ?>

View File

@ -10,6 +10,7 @@
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
* @link http://zwiicms.fr/
*/
$(document).ready((function () {
$(".userDelete").on("click", (function () {
var _this = $(this);
@ -17,7 +18,14 @@ $(document).ready((function () {
$(location).attr("href", _this.attr("href"))
}))
}));
$("#userFilterGroup, #userFilterFirstName, #userFilterLastName").change(function() {
$("#userFilterGroup, #userFilterFirstName, #userFilterLastName").change(function () {
$("#userFilterUserForm").submit();
});
});
$('#dataTables').DataTable({
language: {
url: "core/vendor/datatables/french.json"
}
});
}));

View File

@ -8,12 +8,12 @@
</div>
<div class="col1">
<?php /**echo template::button('userHelp', [
'href' => 'https://doc.zwiicms.fr/gestion-des-utilisateurs',
'target' => '_blank',
'value' => template::ico('help'),
'class' => 'buttonHelp',
'help' => 'Consulter l\'aide en ligne'
]);*/ ?>
'href' => 'https://doc.zwiicms.fr/gestion-des-utilisateurs',
'target' => '_blank',
'value' => template::ico('help'),
'class' => 'buttonHelp',
'help' => 'Consulter l\'aide en ligne'
]);*/?>
</div>
<div class="col1 offset7">
<?php echo template::button('userImport', [
@ -40,33 +40,24 @@
</div>
<?php echo template::formOpen('userFilterUserForm'); ?>
<div class="row">
<div class="col12">
<div class="block">
<h4>
<?php echo helper::translate('Filtres'); ?>
</h4>
<div class="row">
<div class="col3">
<?php echo template::select('userFilterGroup', $module::$courseGroups, [
'label' => 'Groupes / Profils',
'selected' => isset($_POST['userFilterGroup']) ? $_POST['userFilterGroup'] : 'all',
]); ?>
</div>
<div class="col3">
<?php echo template::select('userFilterFirstName', $module::$alphabet, [
'label' => 'Prénom commence par',
'selected' => isset($_POST['userFilterFirstName']) ? $_POST['userFilterFirstName'] : 'all',
]); ?>
</div>
<div class="col3">
<?php echo template::select('userFilterLastName', $module::$alphabet, [
'label' => 'Nom commence par',
'selected' => isset($_POST['userFilterLastName']) ? $_POST['userFilterLastName'] : 'all',
]); ?>
</div>
</div>
</div>
</div>
<div class="col3">
<?php echo template::select('userFilterGroup', $module::$usersGroups, [
'label' => 'Groupes / Profils',
'selected' => isset($_POST['userFilterGroup']) ? $_POST['userFilterGroup'] : 'all',
]); ?>
</div>
<div class="col3">
<?php echo template::select('userFilterFirstName', $module::$alphabet, [
'label' => 'Prénom commence par',
'selected' => isset($_POST['userFilterFirstName']) ? $_POST['userFilterFirstName'] : 'all',
]); ?>
</div>
<div class="col3">
<?php echo template::select('userFilterLastName', $module::$alphabet, [
'label' => 'Nom commence par',
'selected' => isset($_POST['userFilterLastName']) ? $_POST['userFilterLastName'] : 'all',
]); ?>
</div>
</div>
<?php echo template::formClose(); ?>
<?php echo template::table([2, 2 , 3, 3, 1, 1], $module::$users, ['Identifiant', 'Nom', 'Groupe', 'Profil', '', '']); ?>
<?php echo template::table([2, 2, 2, 2, 2, 1, 1], $module::$users, ['Identifiant', 'Nom', 'Groupe', 'Profil', 'Etiquette', '', ''], ['id' => 'dataTables']); ?>

View File

@ -9,6 +9,8 @@
* @link http://zwiicms.fr/
*/
/** @import url("site/data/admin.css"); */
/** NE PAS EFFACER
* admin.css
*/
@ -19,6 +21,7 @@
#passwordIcon {
float: right;
}
@media screen and (max-width: 768px) {
#buttonsContainer {
display: grid;

View File

@ -51,4 +51,5 @@
'ico' => ''
]); ?>
</div>
</div>
<?php echo template::formClose(); ?>

View File

@ -12,7 +12,13 @@
</div>
</div>
<div class="row">
<div class="col3 offset9">
<div class="col3">
<?php echo template::button('userResetBack', [
'href' => helper::baseUrl(),
'value' => template::ico('left')
]); ?>
</div>
<div class="col3 offset6">
<?php echo template::submit('userResetSubmit', [
'value' => 'Valider'
]); ?>