1.10.13 Login, connexion persistante

This commit is contained in:
Fred Tempez 2024-08-24 17:29:13 +02:00
parent ef5de018b0
commit d98e235dfc
3 changed files with 167 additions and 155 deletions

View File

@ -408,8 +408,8 @@ class helper
*/ */
public static function deleteCookie($cookieKey) public static function deleteCookie($cookieKey)
{ {
unset($_COOKIE[$cookieKey]);
setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false), '', false, true); setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false), '', false, true);
unset($_COOKIE[$cookieKey]);
} }
/** /**

View File

@ -51,7 +51,7 @@ class common
const ACCESS_TIMER = 1800; const ACCESS_TIMER = 1800;
// Numéro de version // Numéro de version
const ZWII_VERSION = '1.10.12'; const ZWII_VERSION = '1.10.13';
// URL autoupdate // URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/'; const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/';

View File

@ -230,143 +230,143 @@ class user extends common
} }
} }
/** /**
* Désinscription de tous les utilisateurs * Désinscription de tous les utilisateurs
* Les désinscriptions ne suppriment pas les historiques * Les désinscriptions ne suppriment pas les historiques
*/ */
public function usersDelete() public function usersDelete()
{ {
// Contenu sélectionné // Contenu sélectionné
$courseId = $this->getUrl(2); $courseId = $this->getUrl(2);
// Accès limité aux admins, à l'auteur ou éditeurs inscrits // Accès limité aux admins, à l'auteur ou éditeurs inscrits
if ( if (
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true $this->getUser('permission', __CLASS__, __FUNCTION__) !== true
) { ) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'access' => false 'access' => false
]); ]);
} }
// Inscription des utilisateurs cochés // Inscription des utilisateurs cochés
if ( if (
isset($_POST['usersDeleteSubmit']) isset($_POST['usersDeleteSubmit'])
) { ) {
foreach ($_POST as $keyPost => $valuePost) { foreach ($_POST as $keyPost => $valuePost) {
// Exclure les variables post qui ne sont pas des userId et ne traiter que les non inscrits // Exclure les variables post qui ne sont pas des userId et ne traiter que les non inscrits
if ( if (
$this->getData(['user', $keyPost]) !== null $this->getData(['user', $keyPost]) !== null
&& $this->getData(['user', $keyPost]) !== null && $this->getData(['user', $keyPost]) !== null
) { ) {
$this->deleteData(['user', $keyPost]); $this->deleteData(['user', $keyPost]);
} }
} }
} }
// Liste des groupes et des profils // Liste des groupes et des profils
$usersGroups = $this->getData(['profil']); $usersGroups = $this->getData(['profil']);
foreach ($usersGroups as $groupId => $groupValue) { foreach ($usersGroups as $groupId => $groupValue) {
switch ($groupId) { switch ($groupId) {
case "-1": case "-1":
case "0": case "0":
break; break;
case "3": case "3":
self::$usersGroups['30'] = 'Administrateur'; self::$usersGroups['30'] = 'Administrateur';
$profils['30'] = 0; $profils['30'] = 0;
break; break;
case "1": case "1":
case "2": case "2":
foreach ($groupValue as $profilId => $profilValue) { foreach ($groupValue as $profilId => $profilValue) {
if ($profilId) { if ($profilId) {
self::$usersGroups[$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; $profils[$groupId . $profilId] = 0;
} }
} }
} }
} }
// Liste alphabétique // Liste alphabétique
self::$alphabet = range('A', 'Z'); self::$alphabet = range('A', 'Z');
$alphabet = range('A', 'Z'); $alphabet = range('A', 'Z');
self::$alphabet = array_combine($alphabet, self::$alphabet); self::$alphabet = array_combine($alphabet, self::$alphabet);
self::$alphabet = array_merge(['all' => 'Tout'], self::$alphabet); self::$alphabet = array_merge(['all' => 'Tout'], self::$alphabet);
// Liste des inscrits dans le contenu sélectionné. // Liste des inscrits dans le contenu sélectionné.
$users = $this->getData(['user']); $users = $this->getData(['user']);
if (is_array($users)) { if (is_array($users)) {
// Tri du tableau par défaut par $userId // Tri du tableau par défaut par $userId
ksort($users); ksort($users);
foreach ($users as $userId => $userValue) { foreach ($users as $userId => $userValue) {
// Compte les rôles // Compte les rôles
if (isset($profils[$this->getData(['user', $userId, 'group']) . $this->getData(['user', $userId, 'profil'])])) { if (isset($profils[$this->getData(['user', $userId, 'group']) . $this->getData(['user', $userId, 'profil'])])) {
$profils[$this->getData(['user', $userId, 'group']) . $this->getData(['user', $userId, 'profil'])]++; $profils[$this->getData(['user', $userId, 'group']) . $this->getData(['user', $userId, 'profil'])]++;
} }
// Filtres // Filtres
if ( if (
isset($_POST['usersFilterGroup']) isset($_POST['usersFilterGroup'])
|| isset($_POST['usersFilterFirstName']) || isset($_POST['usersFilterFirstName'])
|| isset($_POST['usersFilterLastName']) || isset($_POST['usersFilterLastName'])
) { ) {
// Groupe et profils // Groupe et profils
$group = (string) $this->getData(['user', $userId, 'group']); $group = (string) $this->getData(['user', $userId, 'group']);
$profil = (string) $this->getData(['user', $userId, 'profil']); $profil = (string) $this->getData(['user', $userId, 'profil']);
$firstName = $this->getData(['user', $userId, 'firstname']); $firstName = $this->getData(['user', $userId, 'firstname']);
$lastName = $this->getData(['user', $userId, 'lastname']); $lastName = $this->getData(['user', $userId, 'lastname']);
if ( if (
$this->getInput('usersFilterGroup', helper::FILTER_INT) > 0 $this->getInput('usersFilterGroup', helper::FILTER_INT) > 0
&& $this->getInput('usersFilterGroup', helper::FILTER_STRING_SHORT) !== $group . $profil && $this->getInput('usersFilterGroup', helper::FILTER_STRING_SHORT) !== $group . $profil
) )
continue; continue;
// Première lettre du prénom // Première lettre du prénom
if ( if (
$this->getInput('usersFilterFirstName', helper::FILTER_STRING_SHORT) !== 'all' $this->getInput('usersFilterFirstName', helper::FILTER_STRING_SHORT) !== 'all'
&& $this->getInput('usersFilterFirstName', helper::FILTER_STRING_SHORT) !== strtoupper(substr($firstName, 0, 1)) && $this->getInput('usersFilterFirstName', helper::FILTER_STRING_SHORT) !== strtoupper(substr($firstName, 0, 1))
) )
continue; continue;
// Première lettre du nom // Première lettre du nom
if ( if (
$this->getInput('usersFilterLastName', helper::FILTER_STRING_SHORT) !== 'all' $this->getInput('usersFilterLastName', helper::FILTER_STRING_SHORT) !== 'all'
&& $this->getInput('usersFilterLastName', helper::FILTER_STRING_SHORT) !== strtoupper(substr($lastName, 0, 1)) && $this->getInput('usersFilterLastName', helper::FILTER_STRING_SHORT) !== strtoupper(substr($lastName, 0, 1))
) )
continue; continue;
} }
// Construction du tableau // Construction du tableau
self::$users[] = [ self::$users[] = [
template::checkbox($userId, true, '', ['class' => 'checkboxSelect']), template::checkbox($userId, true, '', ['class' => 'checkboxSelect']),
$userId, $userId,
$this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'firstname']),
$this->getData(['user', $userId, 'lastname']), $this->getData(['user', $userId, 'lastname']),
$this->getData(['user', $userId, 'tags']), $this->getData(['user', $userId, 'tags']),
]; ];
} }
} }
// Ajoute les effectifs aux profils du sélecteur // Ajoute les effectifs aux profils du sélecteur
foreach (self::$usersGroups as $groupId => $groupValue) { foreach (self::$usersGroups as $groupId => $groupValue) {
if ($groupId === 'all') { if ($groupId === 'all') {
self::$usersGroups['all'] = self::$usersGroups['all'] . ' (' . array_sum($profils) . ')'; self::$usersGroups['all'] = self::$usersGroups['all'] . ' (' . array_sum($profils) . ')';
} else { } else {
self::$usersGroups[$groupId] = self::$usersGroups[$groupId] . ' (' . $profils[$groupId] . ')'; self::$usersGroups[$groupId] = self::$usersGroups[$groupId] . ' (' . $profils[$groupId] . ')';
} }
} }
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'title' => helper::translate('Désincription en masse'), 'title' => helper::translate('Désincription en masse'),
'view' => 'usersDelete', 'view' => 'usersDelete',
'vendor' => [ 'vendor' => [
'datatables' 'datatables'
] ]
]); ]);
} }
/** /**
@ -852,27 +852,27 @@ class user extends common
'tutor' => $this->getInput('profilEditCourseTutor', helper::FILTER_BOOLEAN), 'tutor' => $this->getInput('profilEditCourseTutor', helper::FILTER_BOOLEAN),
// Droit d'accéder à la fenêtre de gestion pour tous les éditeurs et plus // Droit d'accéder à la fenêtre de gestion pour tous les éditeurs et plus
'index' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN) 'index' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserExport', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserExport', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserAdd', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserAdd', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUsersAdd', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUsersAdd', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserDelete', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserDelete', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUsersDelete', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUsersDelete', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseEdit', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseEdit', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseBackup', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseBackup', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseRestore', helper::FILTER_BOOLEAN), || $this->getInput('profilEditCourseRestore', helper::FILTER_BOOLEAN),
'manage' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN) 'manage' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserExport', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserExport', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserAdd', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserAdd', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUsersAdd', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUsersAdd', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUserDelete', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUserDelete', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseUsersDelete', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseUsersDelete', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseEdit', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseEdit', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseBackup', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseBackup', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseRestore', helper::FILTER_BOOLEAN) || $this->getInput('profilEditCourseRestore', helper::FILTER_BOOLEAN)
|| $this->getInput('profilEditCourseReset', helper::FILTER_BOOLEAN), || $this->getInput('profilEditCourseReset', helper::FILTER_BOOLEAN),
// Droits spécifiques // Droits spécifiques
'users' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN), 'users' => $this->getInput('profilEditCourseUsers', helper::FILTER_BOOLEAN),
'userHistory' => $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN), 'userHistory' => $this->getInput('profilEditCourseUserHistory', helper::FILTER_BOOLEAN),
@ -1125,12 +1125,12 @@ class user extends common
// Exclure les espaces des cours // Exclure les espaces des cours
/* /*
foreach (array_keys($this->getData(['course'])) as $courseId) { foreach (array_keys($this->getData(['course'])) as $courseId) {
self::$sharePath = array_filter(self::$sharePath, function ($key) use ($courseId) { self::$sharePath = array_filter(self::$sharePath, function ($key) use ($courseId) {
return strpos($key, $courseId) === false; return strpos($key, $courseId) === false;
}); });
} }
*/ */
self::$sharePath = array_flip(self::$sharePath); self::$sharePath = array_flip(self::$sharePath);
self::$sharePath = array_merge(['none' => 'Aucun Accès'], self::$sharePath); self::$sharePath = array_merge(['none' => 'Aucun Accès'], self::$sharePath);
@ -1281,10 +1281,22 @@ class user extends common
// RAZ // RAZ
$this->setData(['user', $userId, 'connectFail', 0]); $this->setData(['user', $userId, 'connectFail', 0]);
$this->setData(['user', $userId, 'connectTimeout', 0]); $this->setData(['user', $userId, 'connectTimeout', 0]);
// Expiration
// Validité du cookie
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0; $expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) {
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); case false:
// Cookie de session
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
break;
default:
// Cookie persistant
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
break;
}
// Accès multiples avec le même compte // Accès multiples avec le même compte
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]); $this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]);
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur // Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur