Compare commits

...

10 Commits

34 changed files with 142 additions and 123 deletions

View File

@ -1,4 +1,4 @@
# ZwiiCampus 1.21.00
# ZwiiCampus 1.21.03
ZwiiCampus (Learning Management System) est logiciel auteur destiné à mettre en ligne des tutoriels. Il dispose de plusieurs modalités d'ouverture et d'accès des contenus. Basé sur la version 13 du CMS Zwii, la structure logicielle est solide, le framework de Zwii est éprouvé.

View File

@ -1143,7 +1143,7 @@ class layout extends common
'help' => 'Langues',
'href' => helper::baseUrl() . 'language'
]) . '</li>';
$rightItems .= '<li>' . template::ico('users', [
$rightItems .= '<li>' . template::ico('address-book', [
'help' => 'Utilisateurs',
'href' => helper::baseUrl() . 'user'
]) . '</li>';
@ -1209,7 +1209,7 @@ class layout extends common
'href' => helper::baseUrl() . 'plugin'
]) . '</li>';
}
// Boutons depuis le groupe éditeur
// Boutons depuis le rôle éditeur
if (
$this->getUser('role') >= self::ROLE_EDITOR
&& $this->getUser('permission', 'user', 'edit')

View File

@ -705,7 +705,7 @@ class core extends common
if (array_key_exists($action, $module::$actions)) {
$module->$action();
$output = $module->output;
// Check le groupe de l'utilisateur
// Check le rôle de l'utilisateur
if (
($module::$actions[$action] === common::ROLE_VISITOR
or ($this->isConnected() === true

View File

@ -51,7 +51,7 @@ class common
const ACCESS_TIMER = 1800;
// Numéro de version
const ZWII_VERSION = '1.21.00';
const ZWII_VERSION = '1.21.03';
// URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/';
@ -641,7 +641,7 @@ class common
/**
* Ecrire les données de la page
* @param string pageId
* @param array contenu de la page
* @param string contenu de la page
* @return int nombre d'octets écrits ou erreur
*/
public function setPage($page, $value, $path)
@ -1042,7 +1042,7 @@ class common
/**
* Retourne les permissions de l'utilisateur connecté
* @param int $key Clé de la valeur du groupe
* @param int $key Clé de la valeur du rôle
* @return string|null
*/
public function getPermission($key1, $key2 = null)
@ -1663,7 +1663,7 @@ function makeThumb($src, $dest, $desired_width)
}
return $filter;
default:
return null;
return [];
}
}

View File

@ -41,7 +41,7 @@
<?php echo template::select('connectAuthMail', array_merge([0 => 'Aucune'], self::$roleNews), [
'label' => 'Validation par clé ⚠️',
'selected' => $this->getData(['config', 'connect', 'mailAuth']),
'help' => 'La connexion est confirmée à l\'aide d\'une clé transmise par messagerie. Depuis le groupe sélectionné et les rôles supérieurs.'
'help' => 'La connexion est confirmée à l\'aide d\'une clé transmise par messagerie. Depuis le rôle sélectionné et les rôles supérieurs.'
]); ?>
</div>
<div class="col3 verticalAlignBottom">

View File

@ -99,7 +99,7 @@ class course extends common
foreach ($this->getData(['course']) as $courseId => $courseValue) {
/**
* Filtres :
* Groupes acceptés :
* Rôlesacceptés :
* admin : tous les espaces
* editor : gère son espace son espace dans lequel il est inscrit
*/
@ -120,7 +120,7 @@ class course extends common
if ($this->getUser('permission', 'course', 'users') === true) {
$users = template::button('categoryUser' . $this->getUrl(2), [
'href' => helper::baseUrl() . 'course/users/' . $courseId,
'value' => template::ico('users'),
'value' => template::ico('address-book'),
]);
}
self::$courses[] = [
@ -231,8 +231,8 @@ class course extends common
// Liste des enseignants pour le sélecteur d'auteurs
$teachers = $this->getData(['user']);
foreach ($teachers as $teacherId => $teacherInfo) {
if ($teacherInfo["group"] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo["firstname"] . ' ' . $teacherInfo["lastname"];
if ($teacherInfo['role'] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo['firstname'] . ' ' . $teacherInfo['lastname'];
}
}
@ -307,8 +307,8 @@ class course extends common
// Liste des enseignants pour le sélecteur d'auteurs
$teachers = $this->getData(['user']);
foreach ($teachers as $teacherId => $teacherInfo) {
if ($teacherInfo["group"] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo["firstname"] . ' ' . $teacherInfo["lastname"];
if ($teacherInfo['role'] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo['firstname'] . ' ' . $teacherInfo['lastname'];
}
}
@ -366,8 +366,8 @@ class course extends common
// Liste des enseignants pour le sélecteur d'auteurs
$teachers = $this->getData(['user']);
foreach ($teachers as $teacherId => $teacherInfo) {
if ($teacherInfo["group"] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo["firstname"] . ' ' . $teacherInfo["lastname"];
if ($teacherInfo['role'] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo['firstname'] . ' ' . $teacherInfo['lastname'];
}
}
@ -414,7 +414,7 @@ class course extends common
// Accès limité aux admins, à l'auteur ou éditeurs inscrits
if (
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) {
// Valeurs en sortie
$this->addOutput([
@ -447,7 +447,7 @@ class course extends common
if (
// Accès limité aux admins
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
// Le contenu n'existe pas
|| $this->getData(['course', $courseId]) === null
) {
@ -487,7 +487,7 @@ class course extends common
if (
// Accès limité aux admins
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) {
// Valeurs en sortie
$this->addOutput([
@ -526,7 +526,7 @@ class course extends common
if (
// Accès limité aux admins
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) {
// Valeurs en sortie
$this->addOutput([
@ -557,7 +557,7 @@ class course extends common
{
if (
// Accès limité aux admins
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) {
// Valeurs en sortie
$this->addOutput([
@ -592,7 +592,7 @@ class course extends common
if (
// Accès limité aux admins
$this->getUser('role') !== self::$actions[__FUNCTION__]
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) {
// Valeurs en sortie
$this->addOutput([
@ -739,17 +739,17 @@ class course extends common
sprintf('%s %s', $this->getData(['user', $userId, 'lastname']), $this->getData(['user', $userId, 'firstname'])),
array_key_exists('lastPageView', $userValue) && isset($pages['page'][$userValue['lastPageView']]['title'])
? $pages['page'][$userValue['lastPageView']]['title']
: '',
: helper::translate('Aucune'),
array_key_exists('lastPageView', $userValue)
// ? helper::dateUTF8('%d/%m/%Y', $userValue['datePageView'])
? $userValue['datePageView']
: '',
: helper::translate('Jamais'),
$this->getData(['user', $userId, 'tags']),
$reportButton,
template::button('userDelete' . $userId, [
'class' => 'userDelete buttonRed',
'href' => helper::baseUrl() . 'course/userDelete/' . $courseId . '/' . $userId,
'value' => template::ico('user'),
'value' => template::ico('user-times'),
'help' => 'Désinscrire'
])
];

View File

@ -7,16 +7,6 @@
]); ?>
</div>
<div class="col1 offset8">
<?php if ($this->getUser('permission', 'course', 'add') === true): ?>
<?php echo template::button('courseAdd', [
'class' => 'buttonGreen',
'href' => helper::baseUrl() . 'course/add',
'value' => template::ico('plus'),
'help' => 'Ajouter un espace'
]); ?>
<?php endif; ?>
</div>
<div class="col1">
<?php if ($this->getUser('permission', 'course', 'category') === true): ?>
<?php echo template::button('courseCategory', [
'href' => helper::baseUrl() . 'course/category',
@ -33,7 +23,16 @@
'help' => 'Restaurer un espace'
]); ?>
<?php endif; ?>
</div>
<div class="col1">
<?php if ($this->getUser('permission', 'course', 'add') === true): ?>
<?php echo template::button('courseAdd', [
'class' => 'buttonGreen',
'href' => helper::baseUrl() . 'course/add',
'value' => template::ico('plus'),
'help' => 'Ajouter un espace'
]); ?>
<?php endif; ?>
</div>
</div>
<?php if (course::$courses): ?>

View File

@ -17,7 +17,7 @@
<?php echo template::button('userDeleteAll', [
'class' => 'userDeleteAll buttonRed',
'href' => helper::baseUrl() . 'course/usersDelete/' . $this->getUrl(2),
'value' => template::ico('users'),
'value' => template::ico('user-times'),
'help' => 'Désinscrire en masse',
])?>
</div>
@ -25,7 +25,7 @@
<?php echo template::button('userDeleteAll', [
'class' => 'buttonGreen',
'href' => helper::baseUrl() . 'course/usersAdd/' . $this->getUrl(2),
'value' => template::ico('users'),
'value' => template::ico('user-plus'),
'help' => 'Inscription en masse',
]) ?>
</div>
@ -34,7 +34,7 @@
<div class="row" id="Bfrtip">
<div class="col3">
<?php echo template::select('courseFilterGroup', course::$courseGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['courseFilterGroup']) ? $_POST['courseFilterGroup'] : 'all',
]); ?>
</div>
@ -53,7 +53,7 @@
</div>
<?php echo template::formClose(); ?>
<?php if (course::$courseUsers): ?>
<?php echo template::table([3, 3, 2, 2, 1, 1], course::$courseUsers, ['Nom Prénom', 'Dernière page vue', 'Date' , 'Étiquettes', 'Progression', ''], ['id' => 'dataTables']); ?>
<?php echo template::table([3, 3, 2, 2, 1, 1], course::$courseUsers, ['Nom Prénom', 'Dernière consultation', 'Date' , 'Étiquette', 'Progression', ''], ['id' => 'dataTables']); ?>
<?php else: ?>
<?php echo template::speech('Aucun participant'); ?>
<?php endif; ?>

View File

@ -17,7 +17,7 @@
<div class="row" id="Bfrtip">
<div class="col3">
<?php echo template::select('courseFilterGroup', course::$courseGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['courseFilterGroup']) ? $_POST['courseFilterGroup'] : 'all',
]); ?>
</div>

View File

@ -18,7 +18,7 @@
<div class="row" id="Bfrtip">
<div class="col3">
<?php echo template::select('courseFilterGroup', course::$courseGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['courseFilterGroup']) ? $_POST['courseFilterGroup'] : 'all',
]); ?>
</div>

View File

@ -295,7 +295,7 @@
"Importer dans": "Import into",
"Importer des utilisateurs en masse": "Import mass users",
"Impossible d'ouvrir l'archive": "Impossible to open the archive",
"Impossible de modifier votre propre groupe.": "Unable to modify your own group.",
"Impossible de modifier votre propre rôle.": "Unable to modify your own group.",
"Impossible de soumettre le formulaire, car il contient des erreurs": "Unable to submit the form, as it contains errors",
"Impossible de supprimer une page contenant des pages enfants": "Unable to delete a page containing children's pages",
"Impossible de supprimer votre propre compte": "Unable to delete your own account",
@ -686,7 +686,7 @@
"Modèle": "Template",
"Bouton de navigation droit": "Right Navigation Button",
"Bouton de navigation gauche": "Left Navigation Button",
"Groupes / Profils": "Groups / Profiles",
"Rôles/ Profils": "Groups / Profiles",
"Prénom commence par": "First Name starts with",
"Nom commence par": "Last Name starts with",
"Impossible de réinitialiser le mot de passe de ce compte !": "Impossible to reset this account password!",
@ -695,7 +695,7 @@
"Message de test envoyé avec succès": "Test message sent successfully",
"Message non envoyé": "Message not sent",
"Validation par clé ⚠️": "Key-based validation ⚠️",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les rôles supérieurs.": "The connection is confirmed using a key sent via messaging. From the selected group and the higher groups.",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le rôle sélectionné et les rôles supérieurs.": "The connection is confirmed using a key sent via messaging. From the selected group and the higher groups.",
"Envoi du message d'authentification": "Sending authentication message",
"Connexion réussie": "Login successful",
"Erreur de mot de passe": "Password error",

View File

@ -295,7 +295,7 @@
"Importer dans": "Importar a",
"Importer des utilisateurs en masse": "Importar usuarios de forma masiva",
"Impossible d'ouvrir l'archive": "No se puede abrir el archivo",
"Impossible de modifier votre propre groupe.": "No puede editar su propio grupo.",
"Impossible de modifier votre propre rôle.": "No puede editar su propio grupo.",
"Impossible de soumettre le formulaire, car il contient des erreurs": "No se puede enviar el formulario porque contiene errores",
"Impossible de supprimer une page contenant des pages enfants": "No se puede eliminar una página que contiene páginas secundarias",
"Impossible de supprimer votre propre compte": "No puede eliminar su propia cuenta",
@ -686,7 +686,7 @@
"Modèle": "Plantilla",
"Bouton de navigation droit": "Botón de navegación derecha",
"Bouton de navigation gauche": "Botón de navegación izquierda",
"Groupes / Profils": "Grupos / Perfiles",
"Rôles/ Profils": "Grupos / Perfiles",
"Prénom commence par": "El nombre comienza con",
"Nom commence par": "El apellido comienza con",
"Impossible de réinitialiser le mot de passe de ce compte !": "No puedo restablecer la contraseña de esta cuenta.",
@ -695,7 +695,7 @@
"Message de test envoyé avec succès": "Mensaje de prueba enviado con éxito",
"Message non envoyé": "Mensaje no enviado",
"Validation par clé ⚠️": "Validación por clave ⚠️",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les rôles supérieurs.": "La conexión se confirma con una clave enviada por mensajería. Desde el grupo seleccionado y los grupos superiores.",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le rôle sélectionné et les rôles supérieurs.": "La conexión se confirma con una clave enviada por mensajería. Desde el grupo seleccionado y los grupos superiores.",
"Envoi du message d'authentification": "Envío del mensaje de autenticación",
"Connexion réussie": "Conexión exitosa",
"Erreur de mot de passe": "Error de contraseña",

View File

@ -295,7 +295,7 @@
"Importer dans": "",
"Importer des utilisateurs en masse": "",
"Impossible d'ouvrir l'archive": "",
"Impossible de modifier votre propre groupe.": "",
"Impossible de modifier votre propre rôle.": "",
"Impossible de soumettre le formulaire, car il contient des erreurs": "",
"Impossible de supprimer une page contenant des pages enfants": "",
"Impossible de supprimer votre propre compte": "",
@ -686,7 +686,7 @@
"Modèle": "",
"Bouton de navigation droit": "",
"Bouton de navigation gauche": "",
"Groupes / Profils": "",
"Rôles/ Profils": "",
"Prénom commence par": "",
"Nom commence par": "",
"Impossible de réinitialiser le mot de passe de ce compte !": "",
@ -695,7 +695,7 @@
"Message de test envoyé avec succès": "",
"Message non envoyé": "",
"Validation par clé ⚠️": "",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les rôles supérieurs.": "",
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le rôle sélectionné et les rôles supérieurs.": "",
"Envoi du message d'authentification": "",
"Connexion réussie": "",
"Erreur de mot de passe": "",

View File

@ -542,10 +542,10 @@ class page extends common
}
}
}
// Détermine le groupe selon que la page est une barre ou une page standard
// Détermine le rôle selon que la page est une barre ou une page standard
$role = $this->getinput('pageEditBlock') !== 'bar' ? $this->getInput('pageEditGroup', helper::FILTER_INT) : 0;
//Détermine le profil d'utilisateur en fonction du groupe sinon le groupe vaut 0
//Détermine le profil d'utilisateur en fonction du rôle sinon le rôle vaut 0
$profil = 0;
if (
$this->getinput('pageEditBlock') !== 'bar' ||

View File

@ -1,4 +1,4 @@
id;nom;prenom;email;groupe;profil;passe;tags
id;nom;prenom;email;role;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"

1 id nom prenom email groupe role profil passe tags
2 jm1 Membre1 Jean jean.membre1@email.fr 1 1 1 jEan05 adhérent
3 am2 Membre2 Albert albert.membre2@email.fr 1 1 1 alBertAG adhérent
4 jrediteur Editeur Robert robert.editeur@email.fr 2 2 1 roBert54 trésorier

View File

@ -209,7 +209,7 @@ class user extends common
// L'utilisateur n'existe pas
$this->getData(['user', $this->getUrl(2)]) === null
// Groupe insuffisant
and ($this->getUrl('role') < self::ROLE_EDITOR)
and ($this->getUser('role') < self::ROLE_EDITOR)
) {
// Valeurs en sortie
$this->addOutput([
@ -411,10 +411,10 @@ class user extends common
and (
// Impossible de s'auto-éditer
($this->getUser('id') === $this->getUrl(2)
and $this->getUrl('role') <= self::ROLE_VISITOR
and $this->getUser('role') <= self::ROLE_VISITOR
)
// Impossible d'éditer un autre utilisateur
or ($this->getUrl('role') < self::ROLE_EDITOR)
or ($this->getUser('role') < self::ROLE_EDITOR)
)
) {
// Valeurs en sortie
@ -465,7 +465,7 @@ class user extends common
}
}
// Modification du groupe
// Modification du rôle
if (
$this->getUser('role') === self::ROLE_ADMIN
and $this->getUrl(2) !== $this->getUser('id')
@ -702,8 +702,8 @@ class user extends common
template::button('userDelete' . $userId, [
'class' => 'userDelete buttonRed',
'href' => helper::baseUrl() . 'user/delete/' . $userId,
'value' => template::ico('trash'),
'help' => 'Supprimer'
'value' => template::ico('user-times'),
'help' => 'Désinscrire'
])
];
@ -736,7 +736,7 @@ class user extends common
{
// Ne pas supprimer un profil utililsé
// recherche les membres du groupe
// recherche les membres du rôle
$roles = helper::arrayColumn($this->getData(['user']), 'role');
$roles = array_keys($roles, $this->getUrl(2));
$profilUsed = true;
@ -803,7 +803,7 @@ class user extends common
}
/**
* Edition d'un groupe
* Edition d'un rôle
*/
public function profilEdit()
{
@ -1019,7 +1019,7 @@ class user extends common
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
$this->isPost()
) {
// Nombre de profils de ce groupe
// Nombre de profils de ce rôle
$role = $this->getInput('profilAddGroup');
$profil = count($this->getData(['profil', $role]));
// Gère le chemin
@ -1200,7 +1200,7 @@ class user extends common
public function profilDelete()
{
// Ne pas supprimer un profil utililsé
// recherche les membres du groupe
// recherche les membres du rôle
$roles = helper::arrayColumn($this->getData(['user']), 'role');
$roles = array_keys($roles, $this->getUrl(2));
$flag = true;
@ -1303,7 +1303,7 @@ class user extends common
$this->setData(['user', $userId, 'connectTimeout', 0], false);
}
// Check la présence des variables et contrôle du blocage du compte si valeurs dépassées
// Vérification du mot de passe et du groupe
// Vérification du mot de passe et du rôle
if (
($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout'])) < time()
and $this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])
@ -1423,8 +1423,8 @@ class user extends common
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
$logStatus = $captcha === true ? helper::translate('Erreur de mot de passe') : helper::translate('Erreur de captcha');
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'], false)) {
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false);
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1]);
}
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) {
@ -1661,7 +1661,7 @@ class user extends common
array_key_exists('id', $item)
and array_key_exists('prenom', $item)
and array_key_exists('nom', $item)
and array_key_exists('groupe', $item)
and array_key_exists('role', $item)
and array_key_exists('profil', $item)
and array_key_exists('email', $item)
and array_key_exists('passe', $item)
@ -1670,16 +1670,16 @@ class user extends common
and isset($item['nom'])
and isset($item['prenom'])
and isset($item['email'])
and isset($item['groupe'])
and isset($item['role'])
and isset($item['profil'])
and isset($item['passe'])
and isset($item['tags'])
) {
// Validation du groupe
$item['groupe'] = (int) $item['groupe'];
// Validation du rôle
$item['role'] = (int) $item['role'];
$item['profil'] = (int) $item['profil'];
$item['groupe'] = ($item['groupe'] >= self::ROLE_BANNED and $item['groupe'] <= self::ROLE_ADMIN)
? $item['groupe'] : 1;
$item['role'] = ($item['role'] >= self::ROLE_BANNED and $item['role'] <= self::ROLE_ADMIN)
? $item['role'] : 1;
// L'utilisateur existe
$userId = helper::filter($item['id'], helper::FILTER_ID);
if ($this->getData(['user', $userId])) {
@ -1690,7 +1690,7 @@ class user extends common
$userId,
$item['nom'],
$item['prenom'],
self::$roles[$item['groupe']],
self::$roles[$item['role']],
empty($this->getData(['profil', $this->getData(['user', $userId, 'role']), $this->getData(['user', $userId, 'profil']), 'name']))
? helper::translate(self::$roles[(int) $this->getData(['user', $userId, 'role'])])
: $this->getData(['profil', $this->getData(['user', $userId, 'role']), $this->getData(['user', $userId, 'profil']), 'name']),
@ -1709,7 +1709,7 @@ class user extends common
[
'firstname' => $item['prenom'],
'forgot' => 0,
'role' => $item['groupe'],
'role' => $item['role'],
'profil' => $item['profil'],
'lastname' => $item['nom'],
'mail' => $item['email'],
@ -1753,7 +1753,7 @@ class user extends common
$userId,
$item['nom'],
$item['prenom'],
self::$roles[$item['groupe']],
self::$roles[$item['role']],
empty($this->getData(['profil', $this->getData(['user', $userId, 'role']), $this->getData(['user', $userId, 'profil']), 'name']))
? helper::translate(self::$roles[(int) $this->getData(['user', $userId, 'role'])])
: $this->getData(['profil', $this->getData(['user', $userId, 'role']), $this->getData(['user', $userId, 'profil']), 'name']),

View File

@ -6,41 +6,40 @@
'value' => template::ico('home')
]); ?>
</div>
<div class="col2 offset2">
<?php echo template::button('userImport', [
'href' => helper::baseUrl() . 'user/import',
'ico' => 'users',
'value' => 'Importer en masse'
]); ?>
</div>
<div class="col2">
<?php echo template::button('userDeleteAll', [
'class' => 'userDeleteAll buttonRed',
'href' => helper::baseUrl() . 'user/usersDelete/' . $this->getUrl(2),
'ico' => 'users',
'value' => 'Désinscrire en masse',
]) ?>
</div>
<div class="col2">
<div class="col1 offset6">
<?php echo template::button('userTag', [
'href' => helper::baseUrl() . 'user/tag',
'ico' => 'tags',
'value' => 'Étiquettes',
'help' => 'Filtrer les utilisateurs avec des tags'
'value' => template::ico('tags'),
'help' => 'Ajouter des étiquettes'
]); ?>
</div>
<div class="col2">
<div class="col1">
<?php echo template::button('userGroup', [
'href' => helper::baseUrl() . 'user/profil',
'ico' => 'lock',
'value' => 'Profils',
'value' => template::ico('lock'),
'help' => 'Permissions par profils'
]); ?>
</div>
<div class="col1">
<?php echo template::button('userDeleteAll', [
'class' => 'userDeleteAll buttonRed',
'href' => helper::baseUrl() . 'user/usersDelete/' . $this->getUrl(2),
'value' => template::ico('user-times'),
'help' => 'Désinscrire en masse',
]) ?>
</div>
<div class="col1">
<?php echo template::button('userImport', [
'href' => helper::baseUrl() . 'user/import',
'value' => template::ico('download'),
'class' => 'buttonGreen',
'help' => 'Importer en masse'
]); ?>
</div>
<div class="col1">
<?php echo template::button('userAdd', [
'href' => helper::baseUrl() . 'user/add',
'value' => template::ico('plus'),
'value' => template::ico('user-plus'),
'class' => 'buttonGreen',
'help' => 'Ajouter un utilisateur'
]); ?>
@ -50,7 +49,7 @@
<div class="row">
<div class="col3">
<?php echo template::select('userFilterGroup', user::$usersGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['userFilterGroup']) ? $_POST['userFilterGroup'] : 'all',
]); ?>
</div>
@ -68,4 +67,4 @@
</div>
</div>
<?php echo template::formClose(); ?>
<?php echo template::table([3, 2, 2, 2, 2, 1, 1], user::$users, ['Nom', 'Rôle', 'Profil', 'Étiquettes', 'Dernière connexion', '', ''], ['id' => 'dataTables'], ['name','role','profile','tag','data-timestamp','edit','delete']); ?>
<?php echo template::table([2, 2, 2, 2, 2, 1, 1], user::$users, ['Nom', 'Rôle', 'Profil', 'Étiquette', 'Date connexion', '', ''], ['id' => 'dataTables'], ['name', 'role', 'profile', 'tag', 'data-timestamp', 'edit', 'delete']); ?>

View File

@ -28,7 +28,7 @@
<div class="row" id="Bfrtip">
<div class="col3">
<?php echo template::select('usersFilterGroup', user::$usersGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['usersFilterGroup']) ? $_POST['usersFilterGroup'] : 'all',
]); ?>
</div>

View File

@ -18,7 +18,7 @@
<div class="row" id="Bfrtip">
<div class="col3">
<?php echo template::select('usersFilterGroup', user::$usersGroups, [
'label' => 'Groupes / Profils',
'label' => 'Rôles/ Profils',
'selected' => isset($_POST['usersFilterGroup']) ? $_POST['usersFilterGroup'] : 'all',
]); ?>
</div>

View File

@ -17,7 +17,7 @@ date_default_timezone_set('Europe/Paris');
$lang = isset($_GET['lang']) ? $_GET['lang'] : 'fr_FR';
setlocale(LC_CTYPE, $lang);
/* Lecture du groupe de l'utilisateur connecté pour attribuer les droits et les dossiers */
/* Lecture du rôle de l'utilisateur connecté pour attribuer les droits et les dossiers */
$userId = $_COOKIE['ZWII_USER_ID'];
$courseId = isset($_GET['fldr']) ? $_GET['fldr'] : '';
$u = json_decode(file_get_contents('../../../site/data/user.json'), true);
@ -88,7 +88,7 @@ if (!is_null($u) && !is_null($g) && !is_null($userId)) {
}
}
/* Fin lecture du groupe de l'utilisateur connecté pour attribuer les droits et les dossiers */
/* Fin lecture du rôle de l'utilisateur connecté pour attribuer les droits et les dossiers */
/*
|--------------------------------------------------------------------------

View File

@ -77,6 +77,9 @@
.zwiico-twitch:before { content: '\f1e8'; } /* '' */
.zwiico-brush:before { content: '\f1fc'; } /* '' */
.zwiico-pinterest:before { content: '\f231'; } /* '' */
.zwiico-user-plus:before { content: '\f234'; } /* '' */
.zwiico-user-times:before { content: '\f235'; } /* '' */
.zwiico-reddit:before { content: '\f281'; } /* '' */
.zwiico-shopping-basket:before { content: '\f291'; } /* '' */
.zwiico-address-book:before { content: '\f2b9'; } /* '' */
.zwiico-logout:before { content: '🎓'; } /* '\1f393' */

File diff suppressed because one or more lines are too long

View File

@ -76,6 +76,9 @@
.zwiico-twitch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1e8;&nbsp;'); }
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1fc;&nbsp;'); }
.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf231;&nbsp;'); }
.zwiico-user-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf234;&nbsp;'); }
.zwiico-user-times { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf235;&nbsp;'); }
.zwiico-reddit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf281;&nbsp;'); }
.zwiico-shopping-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf291;&nbsp;'); }
.zwiico-address-book { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf2b9;&nbsp;'); }
.zwiico-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f393;&nbsp;'); }

View File

@ -87,6 +87,9 @@
.zwiico-twitch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1e8;&nbsp;'); }
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1fc;&nbsp;'); }
.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf231;&nbsp;'); }
.zwiico-user-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf234;&nbsp;'); }
.zwiico-user-times { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf235;&nbsp;'); }
.zwiico-reddit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf281;&nbsp;'); }
.zwiico-shopping-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf291;&nbsp;'); }
.zwiico-address-book { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf2b9;&nbsp;'); }
.zwiico-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f393;&nbsp;'); }

View File

@ -1,12 +1,12 @@
@charset "UTF-8";
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.eot?24931130');
src: url('../font/zwiico.eot?24931130#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?24931130') format('woff2'),
url('../font/zwiico.woff?24931130') format('woff'),
url('../font/zwiico.ttf?24931130') format('truetype'),
url('../font/zwiico.svg?24931130#zwiico') format('svg');
src: url('../font/zwiico.eot?22250182');
src: url('../font/zwiico.eot?22250182#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?22250182') format('woff2'),
url('../font/zwiico.woff?22250182') format('woff'),
url('../font/zwiico.ttf?22250182') format('truetype'),
url('../font/zwiico.svg?22250182#zwiico') format('svg');
font-weight: normal;
font-style: normal;
}
@ -16,7 +16,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.svg?24931130#zwiico') format('svg');
src: url('../font/zwiico.svg?22250182#zwiico') format('svg');
}
}
*/
@ -132,6 +132,9 @@
.zwiico-twitch:before { content: '\f1e8'; } /* '' */
.zwiico-brush:before { content: '\f1fc'; } /* '' */
.zwiico-pinterest:before { content: '\f231'; } /* '' */
.zwiico-user-plus:before { content: '\f234'; } /* '' */
.zwiico-user-times:before { content: '\f235'; } /* '' */
.zwiico-reddit:before { content: '\f281'; } /* '' */
.zwiico-shopping-basket:before { content: '\f291'; } /* '' */
.zwiico-address-book:before { content: '\f2b9'; } /* '' */
.zwiico-logout:before { content: '🎓'; } /* '\1f393' */

Binary file not shown.

View File

@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Copyright (C) 2024 by original authors @ fontello.com</metadata>
<metadata>Copyright (C) 2025 by original authors @ fontello.com</metadata>
<defs>
<font id="zwiico" horiz-adv-x="1000" >
<font-face font-family="zwiico" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
@ -160,10 +160,16 @@
<glyph glyph-name="pinterest" unicode="&#xf231;" d="M0 517q0 60 21 113t58 93 85 69 103 44 113 14q88 0 164-37t123-108 47-160q0-54-10-105t-34-99-56-83-80-58-106-21q-38 0-75 18t-54 49q-5-22-15-63t-14-53-11-40-15-39-17-35-26-44-35-48l-7-3-5 6q-9 88-9 105 0 51 12 115t37 161 29 113q-18 36-18 94 0 47 29 87t74 41q34 0 53-23t19-57q0-37-24-106t-25-105q0-35 25-58t61-23q31 0 57 14t44 38 31 53 21 61 11 62 4 56q0 96-61 150t-160 54q-111 0-186-72t-75-183q0-25 7-48t15-36 15-26 7-17q0-15-8-40t-21-25q-1 0-9 1-29 9-51 31t-34 53-18 60-6 60z" horiz-adv-x="714.3" />
<glyph glyph-name="user-plus" unicode="&#xf234;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
<glyph glyph-name="user-times" unicode="&#xf235;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m601-179l139-138q5-5 5-13 0-8-5-13l-76-76q-5-5-12-5-8 0-13 5l-139 139-139-139q-5-5-13-5-7 0-12 5l-76 76q-5 5-5 13 0 8 5 13l139 138-139 139q-5 5-5 13 0 8 5 13l76 75q5 5 12 5 8 0 13-5l139-139 139 139q5 5 13 5 7 0 12-5l76-75q5-5 5-13 0-8-5-13z m-278 0l-101-101q-21-20-21-50 0-30 21-51l46-46q-11-2-24-2h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 86-68 178-68t178 68q11 10 22 10 15 0 31-4-15-15-22-27t-8-32q0-30 21-51z" horiz-adv-x="1142.9" />
<glyph glyph-name="reddit" unicode="&#xf281;" d="M1000 378q0-32-16-59t-45-40q7-26 7-54 0-86-60-160t-162-117-223-42-223 42-162 117-59 160q0 26 6 53-28 13-46 41t-17 59q0 46 32 78t79 33q48 0 81-35 122 85 287 90l65 291q2 7 9 12t14 2l206-45q10 21 30 33t44 13q35 0 59-24t25-59-25-59-59-25-59 24-24 59l-186 42-58-264q167-5 289-89 33 34 80 34 46 0 79-33t32-78z m-767-111q0-35 25-59t58-25 60 25 24 59-24 59-60 24q-34 0-58-25t-25-58z m452-198q6 6 6 14t-6 15q-5 5-14 5t-14-5q-23-24-68-35t-89-11-89 11-68 35q-6 5-14 5t-14-5q-6-6-6-14t6-15q24-24 66-38t68-17 51-2 51 2 68 17 66 38z m-1 114q34 0 59 25t24 59q0 34-25 58t-58 25q-35 0-60-24t-24-59 24-59 60-25z" horiz-adv-x="1000" />
<glyph glyph-name="shopping-basket" unicode="&#xf291;" d="M1071 421q30 0 51-20t21-51-21-50-51-21h-8l-64-370q-5-26-25-42t-45-17h-715q-25 0-45 17t-25 42l-64 370h-9q-29 0-50 21t-21 50 21 51 50 20h1000z m-800-446q14 1 24 13t9 26l-18 232q-1 14-13 24t-26 9-24-13-9-26l18-232q1-14 12-24t24-9h3z m229 36v232q0 14-11 25t-25 11-25-11-10-25v-232q0-15 10-25t25-11 25 11 11 25z m214 0v232q0 14-10 25t-25 11-25-11-11-25v-232q0-15 11-25t25-11 25 11 10 25z m197-3l18 232q1 15-9 26t-24 13-26-9-13-24l-18-232q-1-15 9-26t24-13h3q14 0 24 9t12 24z m-645 679l-52-230h-74l56 246q11 49 50 80t89 31h94q0 15 10 25t25 11h215q14 0 25-11t10-25h94q50 0 89-31t49-80l57-246h-74l-52 230q-6 25-25 40t-44 16h-94q0-15-10-25t-25-11h-215q-14 0-25 11t-10 25h-94q-25 0-44-16t-25-40z" horiz-adv-x="1142.9" />
<glyph glyph-name="address-book" unicode="&#xf2b9;" d="M670 159q0 32-3 60t-12 56-22 48-35 32-51 13q-3-2-19-12t-23-13-23-11-27-10-26-3-26 3-28 10-22 11-24 13-19 12q-28 0-50-13t-36-32-22-48-12-56-3-60q0-41 23-68t58-27h321q34 0 58 27t23 68z m-96 332q0 60-43 102t-102 43-103-43-42-102q0-60 42-102t103-43 102 43 43 102z m355-302v-107q0-8-5-13t-13-5h-54v-125q0-37-26-63t-63-26h-679q-36 0-63 26t-26 63v822q0 37 26 63t63 26h679q37 0 63-26t26-63v-125h54q8 0 13-5t5-13v-107q0-8-5-13t-13-5h-54v-72h54q8 0 13-5t5-12v-108q0-7-5-12t-13-5h-54v-72h54q8 0 13-5t5-13z" horiz-adv-x="928.6" />
<glyph glyph-name="logout" unicode="&#x1f393;" d="M357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-26t-27-64v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
</font>
</defs>

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
core/vendor/zwiico/fontello-e9941a02.zip vendored Normal file

Binary file not shown.

View File

@ -385,7 +385,7 @@ class sondage extends common
$singleuser !== '' ||
$singlemail !== '')
) {
// Utilisateurs dans le groupe
// Utilisateurs dans le rôle
$to = [];
if ($group > 0) {
foreach ($this->getData(['user']) as $userId => $user) {

View File

@ -77,7 +77,7 @@
'checked' => (bool) $this->getData(['module', $this->getUrl(0), 'config', 'role']) ||
!empty($this->getData(['module', $this->getUrl(0), 'config', 'user'])) ||
!empty($this->getData(['module', $this->getUrl(0), 'config', 'mail'])),
'help' => 'Sélectionnez au moins un groupe, un utilisateur ou saississez un email.'
'help' => 'Sélectionnez au moins un rôle, un utilisateur ou saississez un email.'
]); ?>
<div id="formConfigMailOptions" class="displayNone">
<div class="row">
@ -97,7 +97,7 @@
<div class="row">
<div class="col6 offset1">
<?php echo template::select('formConfigGroup', $groupMembers, [
'label' => 'Les groupes hiérarchiques à partir du groupe :',
'label' => 'Les groupes hiérarchiques à partir du rôle :',
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'role']),
'help' => 'Editeurs = éditeurs + administrateurs<br/> Membres = membres + éditeurs + administrateurs'
]); ?>