diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c766c2111cd99c7eb0323d8dbd3d1211ffc14ae..d6c8ddc357657f7535d89c951a1bca3e64d691e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ CHANGELOG ========= +5.0.0 +----- +- Migration vers Bootstrap 5 (front-end). +- Infos à propos de la connexion dans le menu principal : simple bouton 'Connexion' si aucun utilisateur connecté ; + bouton 'Déconnexion' déplacé dans le popover. + + 4.0.2 ----- - RoleFormatter : correction pour exploiter la méthode __toString() si présente. @@ -13,6 +20,7 @@ CHANGELOG ----- - Passage de Zend à Laminas + 3.2.10 ----- - Possibilité d'activer ou non (en config) les logs des échecs d'authentification LDAP. diff --git a/composer.json b/composer.json index 5250c0f91da842a21170972f4e93e1318d4fe015..4acbea8654caaf79b125c7ba0ae16b17f1dffb5c 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ } ], "require": { - "unicaen/app": "^4.0", + "unicaen/app": "dev-release_5_bs5", "unicaen/bjy-authorize": "^4.0", "jasig/phpcas": "^1.3", "ramsey/uuid": "^3.7", diff --git a/src/UnicaenAuth/Authentication/Storage/AuthFactory.php b/src/UnicaenAuth/Authentication/Storage/AuthFactory.php index 124e6d7d0e6424b23078d6fad9f52af6044d98ef..997a47368587dd76ee94e19828520c150fbc7084 100644 --- a/src/UnicaenAuth/Authentication/Storage/AuthFactory.php +++ b/src/UnicaenAuth/Authentication/Storage/AuthFactory.php @@ -35,4 +35,4 @@ class AuthFactory return $storage; } -} +} \ No newline at end of file diff --git a/src/UnicaenAuth/View/Helper/AppConnection.php b/src/UnicaenAuth/View/Helper/AppConnection.php index 81442a191b5d79529a86b2c62693387b1c2c62c1..ce6aeda8c1861977aa0d8e07d928dae2abae1033 100644 --- a/src/UnicaenAuth/View/Helper/AppConnection.php +++ b/src/UnicaenAuth/View/Helper/AppConnection.php @@ -1,30 +1,41 @@ <?php + namespace UnicaenAuth\View\Helper; /** - * Aide de vue générant le lien et les infos concernant la connexion à l'application. + * Aide de vue dessinant : + * - le nom de l'utilisateur connecté éventuel ; + * - le lien de connexion/déconnexion. * - * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> + * @author Unicaen */ class AppConnection extends \UnicaenApp\View\Helper\AppConnection { - /** - * Retourne le code HTML généré par cette aide de vue. - * * @return string */ - public function __toString() + public function __toString(): string { - $connexion = []; + $parts = []; - if (($tmp = $this->getView()->plugin('userCurrent'))) { - $connexion[] = "" . $tmp; + /** @var \UnicaenAuth\View\Helper\UserCurrent $userCurrentHelper */ + $userCurrentHelper = $this->getView()->plugin('userCurrent'); + if ($userCurrentHelper) { + if ($html = "" . $userCurrentHelper) { + $parts[] = $html; + } } - if (($tmp = $this->getView()->plugin('userConnection'))) { - $connexion[] = "" . $tmp; + + /** @var \UnicaenAuth\View\Helper\UserConnection $userConnectionHelper */ + $userConnectionHelper = $this->getView()->plugin('userConnection'); + if ($userConnectionHelper) { + // On ne dessine que le lien de Connexion. + // Le lien de déconnexion est dessiné dans le popover dédié à l'utilisateur connecté. + if ($html = $userConnectionHelper->addClass('btn btn-success')->renderConnection()) { + $parts[] = $html; + } } - return implode(' | ', $connexion); + return implode(' | ', $parts); } } \ No newline at end of file diff --git a/src/UnicaenAuth/View/Helper/UserConnection.php b/src/UnicaenAuth/View/Helper/UserConnection.php index c590c03df9cd96910e39427e9895a0e5e353c9ea..f0a44a4269be602268e38bc413cc7f58b1764bda 100644 --- a/src/UnicaenAuth/View/Helper/UserConnection.php +++ b/src/UnicaenAuth/View/Helper/UserConnection.php @@ -1,40 +1,104 @@ <?php + namespace UnicaenAuth\View\Helper; /** - * Aide de vue de génération du lien de connexion/déconnexion à l'appli selon qu'un - * utilisateur est connecté ou pas. + * Aide de vue dessinant : + * - soit le lien de connexion à l'appli : {@see renderConnection()}. + * - soit le lien de déconnexion : {@see renderDisconnection()}. + * - soit l'un ou l'autre selon qu'un utilisateur est connecté ou pas : {@see render()}. * - * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> + * @author Unicaen */ class UserConnection extends UserAbstract { - /** - * Point d'entrée. - * - * @return UserConnection - */ - public function __invoke() + protected $template = '<a class="%s" href="%s" title="%s">%s</a>'; + + protected $classes = [ + 'user-connection', + //'navbar-link', + ]; + + public function __invoke(): self { return $this; } + public function addClass(string $class): self + { + $this->classes[] = $class; + + return $this; + } + /** - * Retourne le code HTML généré par cette aide de vue. - * * @return string */ public function __toString() { - $template = '%s'; - $out = sprintf($template, $this->createConnectionLink()); + return $this->render(); + } + + public function render(): string + { + if ($this->getIdentity()) { + return $this->renderDisconnection(); + } else { + return $this->renderConnection(); + } + } + + /** + * @return string Lien de connexion, ou '' si l'utilisateur est déjà connecté. + */ + public function renderConnection(): string + { + if ($this->getIdentity()) { + return ''; + } + + $urlHelper = $this->getView()->plugin('url'); + $href = $urlHelper('zfcuser/login'); + $lib = "Connexion"; + $title = "Cliquez pour vous authentifier"; + + if ($this->getTranslator()) { + $lib = $this->getTranslator()->translate($lib, $this->getTranslatorTextDomain()); + $title = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain()); + } + + $classes = implode(' ', $this->classes); + + return sprintf($this->template, $classes, $href, $title, $lib); + } + + /** + * @return string Lien de déconnexion, ou '' si aucun utilisateur n'est connecté. + */ + public function renderDisconnection(): string + { + if (!$this->getIdentity()) { + return ''; + } + + $urlHelper = $this->getView()->plugin('url'); + $href = $urlHelper('zfcuser/logout'); + $lib = "Déconnexion"; + $title = "Cliquez pour vous déconnecter"; + + if ($this->getTranslator()) { + $lib = $this->getTranslator()->translate($lib, $this->getTranslatorTextDomain()); + $title = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain()); + } + + $classes = implode(' ', $this->classes); - return $out; + return sprintf($this->template, $classes, $href, $title, $lib); } /** - * * @return string + * @deprecated Utiliser {@see render()} */ protected function createConnectionLink() { @@ -42,11 +106,11 @@ class UserConnection extends UserAbstract $urlHelper = $this->getView()->plugin('url'); - $template = '<a class="navbar-link user-connection" href="%s" title="%s">%s</a>'; + $template = '<a class="btn btn-lg btn-outline-primary navbar-link user-connection" href="%s" title="%s">%s</a>'; if (!$identity) { $href = $urlHelper('zfcuser/login'); $lib = "Connexion"; - $title = "Affiche le formulaire d'authentification"; + $title = "Cliquez pour vous authentifier"; } else { $href = $urlHelper('zfcuser/logout'); diff --git a/src/UnicaenAuth/View/Helper/UserCurrent.php b/src/UnicaenAuth/View/Helper/UserCurrent.php index d086f7c380968b90473c11b4e76730c95b02adec..3186e5ae840cfd165839aaab2e3b32e938a7f375 100644 --- a/src/UnicaenAuth/View/Helper/UserCurrent.php +++ b/src/UnicaenAuth/View/Helper/UserCurrent.php @@ -2,11 +2,14 @@ namespace UnicaenAuth\View\Helper; /** - * Aide de vue affichant toutes les infos concernant l'utilisateur courant. - * C'est à dire : - * - "Aucun" + lien de connexion OU BIEN nom de l'utilisateur connecté + lien de déconnexion - * - profil de l'utilisateur connecté - * - infos administratives sur l'utilisateur + * Aide de vue affichant toutes les infos concernant l'utilisateur connecté. + * C'est à dire le nom de l'utilisateur connecté & son rôle courant. + * + * Lorsqu'on clique sur le nom, s'affiche un popover + * présentant les rôles sélectionnables, des infos administratives, le formulaire d'usurpation (si habilité) + * et le lien de déconnexion. + * + * Si aucun utilisateur n'est connecté, cette aide de vue renvoit ''. * * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> */ @@ -37,65 +40,74 @@ class UserCurrent extends UserAbstract */ public function __toString(): string { - $id = 'user-current-info'; - - $userStatusHelper = $this->getView()->plugin('userStatus'); /* @var $userStatusHelper UserStatus */ - $status = $userStatusHelper(false); + if (! $this->getIdentity()) { + return ''; + } + // + // Sous la forme d'un lien : + // + // - Nom de l'utilisateur connecté, le cas échéant. + /* @var $userStatusHelper UserStatus */ + $userStatusHelper = $this->view->plugin('userStatus'); + $nom = $userStatusHelper(false); + // - Rôle courant. + $role = ''; $userProfileSelectable = true; - - if ($this->getIdentity()) { - if ($userProfileSelectable) { - $role = $this->getUserContext()->getSelectedIdentityRole(); - // cas où aucun rôle n'est sélectionné : on affiche le 1er rôle sélectionnable ou sinon "user" - if ($role === null) { - $selectableRoles = $this->getUserContext()->getSelectableIdentityRoles(); - $role = current($selectableRoles) ?: $this->getUserContext()->getIdentityRole('user'); - } - $status .= sprintf(", <small class='role-libelle'>%s</small>", !method_exists($role, '__toString') ? $role->getRoleId() : $role); - } - - $userProfileHelper = $this->getView()->plugin('userProfile'); /* @var $userProfileHelper UserProfile */ - $userProfileHelper->setUserProfileSelectable($userProfileSelectable); - - $userInfoHelper = $this->getView()->plugin('userInfo'); /* @var $userInfoHelper UserInfo */ - - $content = $userProfileHelper . $userInfoHelper($this->getAffectationFineSiDispo()); - } - else { - $content = _("Aucun"); - if ($this->getTranslator()) { - $content = $this->getTranslator()->translate($content, $this->getTranslatorTextDomain()); + if ($userProfileSelectable) { + $role = $this->getUserContext()->getSelectedIdentityRole(); + // cas où aucun rôle n'est sélectionné : on affiche le 1er rôle sélectionnable ou sinon "user" + if ($role === null) { + $selectableRoles = $this->getUserContext()->getSelectableIdentityRoles(); + $role = current($selectableRoles) ?: $this->getUserContext()->getIdentityRole('user'); } + $role = sprintf( + "<br/><small class='role-libelle'>%s</small>", + !method_exists($role, '__toString') ? $role->getRoleId() : $role + ); } - $content = htmlspecialchars(preg_replace('/\r\n|\n|\r/', '', $content)); + // + // Dans un popover : + // + // - Rôles sélectionnables. + /* @var \UnicaenAuth\View\Helper\UserProfile $userProfileHelper */ + $userProfileHelper = $this->view->plugin('userProfile'); + $userProfileHelper->setUserProfileSelectable($userProfileSelectable); + $roles = (string) $userProfileHelper; + // - Infos administratives. + /* @var \UnicaenAuth\View\Helper\UserInfo $userInfoHelper */ + $userInfoHelper = $this->view->plugin('userInfo'); + $infos = (string) $userInfoHelper($this->getAffectationFineSiDispo()); + // - Usurpation d'identité. + /* @var \UnicaenAuth\View\Helper\UserUsurpationHelper $userUsurpationHelper */ + $userUsurpationHelper = $this->view->plugin('userUsurpation'); + $usurpation = (string) $userUsurpationHelper; + // - Lien de déconnexion. + /** @var \UnicaenAuth\View\Helper\UserConnection $userConnectionHelper */ + $userConnectionHelper = $this->getView()->plugin('userConnection'); + $deconnexion = $userConnectionHelper->addClass('btn btn-lg btn-outline-success')->renderDisconnection(); - $title = _("Utilisateur connecté à l'application"); - if ($this->getTranslator()) { - $title = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain()); - } + $linkText = $nom . $role; + $popoverContent = htmlspecialchars(preg_replace('/\r\n|\n|\r/', '', + $roles . + $infos . + $usurpation . + '<hr>' . + '<div class="text-center">' . $deconnexion . '</div>' + )); - $out = <<<EOS -<a class="navbar-link" - id="$id" - title="$title" - data-placement="bottom" - data-toggle="popover" - data-html="true" - data-content="$content" - href="#">$status<span class="caret"></span></a> -EOS; - $out .= PHP_EOL; - - $js = <<<EOS -$(function() { - $("#$id").popover({ html: true, sanitize: false, container: '#navbar' }); -}); + return <<<EOS +<a class="navbar-link dropdown-toggle" + id="user-current-info" + data-bs-placement="bottom" + data-bs-toggle="popover" + data-bs-container="#navbar" + data-bs-html="true" + data-bs-sanitize="false" + data-bs-content="$popoverContent" + href="#">$linkText<span class="caret"></span></a> EOS; - $this->getView()->plugin('inlineScript')->offsetSetScript(1000, $js); - - return $out; } /** diff --git a/src/UnicaenAuth/View/Helper/UserInfo.php b/src/UnicaenAuth/View/Helper/UserInfo.php index 89f31adf8761802e7f45a474a3445a6871a7b3c6..36fe3f4088b488c3085cbea5fd1512c1f6fe2bb9 100644 --- a/src/UnicaenAuth/View/Helper/UserInfo.php +++ b/src/UnicaenAuth/View/Helper/UserInfo.php @@ -96,17 +96,14 @@ class UserInfo extends UserAbstract } } else { + $template = "<strong>Informations administratives :</strong> <br>%s"; $aucuneAffDispo = _("Aucune information disponible."); if ($this->getTranslator()) { $aucuneAffDispo = $this->getTranslator()->translate($aucuneAffDispo, $this->getTranslatorTextDomain()); } - $out .= $aucuneAffDispo; + $out .= sprintf($template, $aucuneAffDispo); } - // formulaire d'usurpation d'identité - $userUsurpationHelper = $this->view->plugin('userUsurpation'); /* @var $userUsurpationHelper \UnicaenAuth\View\Helper\UserUsurpationHelper */ - $out .= $userUsurpationHelper(); - return $out; } diff --git a/src/UnicaenAuth/View/Helper/UserProfile.php b/src/UnicaenAuth/View/Helper/UserProfile.php index 56393d96790e722794f1a22afc06d62bf93f3e37..f0cb706c3574894f717cdc8f333bba6b7d91bce6 100644 --- a/src/UnicaenAuth/View/Helper/UserProfile.php +++ b/src/UnicaenAuth/View/Helper/UserProfile.php @@ -36,7 +36,7 @@ class UserProfile extends UserAbstract */ public function render() { - $title = _("Profil utilisateur"); + $title = _("Rôle utilisateur"); $unknown = _("Inconnu"); $none = _("Aucun"); diff --git a/src/UnicaenAuth/View/Helper/UserProfileSelect.php b/src/UnicaenAuth/View/Helper/UserProfileSelect.php index 2c06d826a89e1b15d9292776cab0bbe5ad7a131c..d1f3d526bf35af195e3def7a2b78554e396ad29a 100644 --- a/src/UnicaenAuth/View/Helper/UserProfileSelect.php +++ b/src/UnicaenAuth/View/Helper/UserProfileSelect.php @@ -2,6 +2,7 @@ namespace UnicaenAuth\View\Helper; use Laminas\Permissions\Acl\Role\RoleInterface; +use Laminas\View\Helper\HeadScript; /** * Aide de vue permettant à l'utilisateur de sélectionner son profil courant parmi @@ -79,18 +80,15 @@ class UserProfileSelect extends UserAbstract $url = $this->getView()->url('utilisateur/default', ['action' => 'selectionner-profil']); $redirectUrl = $this->getView()->url($this->redirectRoute ?: 'home'); - $html .= <<<EOS -<script> - $(function() { - $("input.$inputClass").change(function() { submitProfile(); }).tooltip({ delay: 500, placement: 'left' }); - }); - function submitProfile() - { + $js = <<<EOS +$(function() { + $("body").on("change", "input.$inputClass", function() { $("body *").css('cursor', 'wait'); $.post("$url", $(".$formClass").serializeArray(), function() { $(location).attr('href', "$redirectUrl"); }); - } -</script> + }); +}); EOS; + $this->view->inlineScript(HeadScript::SCRIPT, $js); return $html; } diff --git a/src/UnicaenAuth/View/Helper/UserStatus.php b/src/UnicaenAuth/View/Helper/UserStatus.php index f5b4af30c4d6e4457b1a9cccbbc7602eeca1b87c..583e204542dfdb6790118788bd5b97ca93a8c10a 100644 --- a/src/UnicaenAuth/View/Helper/UserStatus.php +++ b/src/UnicaenAuth/View/Helper/UserStatus.php @@ -26,8 +26,6 @@ class UserStatus extends UserAbstract protected $usurpationEnCours = false; /** - * Retourne l'instance de ce view helper. - * * @param boolean $displayConnectionLink Inclure ou pas le lien de connexion/déconnexion ? * @return self */ @@ -40,18 +38,21 @@ class UserStatus extends UserAbstract } /** - * Retourne le code HTML généré par cette aide de vue. - * * @return string */ public function __toString(): string { $parts = []; - $parts[] = $this->createStatusContainer(); + // Nom de l'utilisateur connecté, le cas échéant. + if (($identity = $this->getIdentity())) { + $parts[] = $this->createStatusContainer(); + } - if ($this->getDisplayConnectionLink()) { - $userConnectionHelper = $this->getView()->plugin('userConnection'); /* @var $userConnectionHelper UserConnection */ + // Lien de connexion ou déconnexion, si demandé. + if ($this->displayConnectionLink) { + /* @var $userConnectionHelper UserConnection */ + $userConnectionHelper = $this->getView()->plugin('userConnection'); $parts[] = (string) $userConnectionHelper; } @@ -66,35 +67,29 @@ class UserStatus extends UserAbstract */ protected function createStatusContainer(): string { - if (($identity = $this->getIdentity())) { - if (method_exists($identity, '__toString')) { - $name = (string) $identity; - } - elseif (method_exists($identity, 'getDisplayName')) { - $name = $identity->getDisplayName(); - } - elseif (method_exists($identity, 'getUsername')) { - $name = $identity->getUsername(); - } - elseif (method_exists($identity, 'getId')) { - $name = $identity->getId(); - } - else { - $name = sprintf('<span title="Erreur: identité inattendue (%s)">???</span>', - is_object($identity) ? get_class($identity) : gettype($identity)); - } + $identity = $this->getIdentity(); + + if (method_exists($identity, '__toString')) { + $name = (string) $identity; + } + elseif (method_exists($identity, 'getDisplayName')) { + $name = $identity->getDisplayName(); + } + elseif (method_exists($identity, 'getUsername')) { + $name = $identity->getUsername(); + } + elseif (method_exists($identity, 'getId')) { + $name = $identity->getId(); } else { - $name = _("Vous n'êtes pas connecté(e)"); - if ($this->getTranslator()) { - $name = $this->getTranslator()->translate($name, $this->getTranslatorTextDomain()); - } + $name = sprintf('<span title="Erreur: identité inattendue (%s)">???</span>', + is_object($identity) ? get_class($identity) : gettype($identity)); } $classUser = $this->usurpationEnCours ? 'fa-theater-masks' : 'fa-user'; return <<<EOS -<span class="fa $classUser"></span> <span id="user-status-name"><strong>$name</strong></span> +<span id="user-status-icon" class="fa $classUser"></span> <span id="user-status-name"><strong>$name</strong></span> EOS; } diff --git a/src/UnicaenAuth/View/Helper/UserUsurpationHelper.php b/src/UnicaenAuth/View/Helper/UserUsurpationHelper.php index 48e71fd2a08399350ad942505a102aaf735fa670..caed33f990d4e6e9b3b513260d1b81cbe9e0fcee 100644 --- a/src/UnicaenAuth/View/Helper/UserUsurpationHelper.php +++ b/src/UnicaenAuth/View/Helper/UserUsurpationHelper.php @@ -11,6 +11,7 @@ use Laminas\Form\Element\Text; use Laminas\Form\Form; use Laminas\Form\View\Helper\Form as FormHelper; use Laminas\Form\View\Helper\FormElement; +use Laminas\View\Helper\HeadScript; use Laminas\View\Renderer\PhpRenderer; /** @@ -137,34 +138,38 @@ class UserUsurpationHelper extends UserAbstract $identity = $form->get('identity'); $submit = $form->get('submit'); + $identity->setAttribute('class', $identity->getAttribute('class') . ' form-control'); + /** @var FormHelper $formHelper */ $formHelper = $this->view->plugin('form'); - /** @var FormControlGroup $formControlGroupHelper */ - $formControlGroupHelper = $this->view->plugin('formControlGroup'); + /** @var FormElement $formElementHelper */ + $formElementHelper = $this->view->plugin('formElement'); $html = ''; $html .= $formHelper->openTag($form); $html .= "<div><strong>Usurpation d'identité :</strong></div>"; - $html .= $formControlGroupHelper->__invoke($identity); - $html .= $formControlGroupHelper->__invoke($submit); + $html .= '<div class="row justify-content-start">'; + $html .= '<div class="col-9 pe-1">' . $formElementHelper->__invoke($identity) . '</div>' . PHP_EOL; + $html .= '<div class="col-3 ps-0">' . $formElementHelper->__invoke($submit) . '</div>' . PHP_EOL; + $html .= '</div>'; $html .= $formHelper->closeTag(); $formId = $form->getAttribute('id'); - $html .= <<<EOS -<script> - var form = $("#$formId").submit(function() { - $("body *").css('cursor', 'wait'); - }); - var input = form.find(".user-usurpation-input").on('input', function() { - updateUsurpationSubmit(); - }); - function updateUsurpationSubmit() { - form.find(".user-usurpation-submit").prop("disabled", input.val().length === 0); - } - updateUsurpationSubmit(); -</script> + $js = <<<EOS +$(function() { + // le bouton 'Usurper' est interdit si le champ de saisie est vide + $("#$formId .user-usurpation-submit").attr("disabled", true); + $("body") + .on("input", "#$formId .user-usurpation-input", function() { + $(".user-usurpation-submit").prop("disabled", $(this).val().length == 0); + }) + .on("submit", "#$formId", function() { + $("body *").css('cursor', 'wait'); + }); +}); EOS; + $this->view->inlineScript(HeadScript::SCRIPT, $js); return $html; } @@ -209,6 +214,7 @@ EOS; $submit = new Submit('submit'); $submit->setValue("Usurper"); $submit->setAttributes([ + 'disabled' => !$this->asButton, 'class' => 'user-usurpation-submit btn btn-danger', ]); diff --git a/src/UnicaenAuth/View/Helper/partial/connect.phtml b/src/UnicaenAuth/View/Helper/partial/connect.phtml index 136c6a3abbe0fe9e005b85e7c9895e6f28fef9c6..c02c42c46253fcea96f76fd8b563242322856b9f 100644 --- a/src/UnicaenAuth/View/Helper/partial/connect.phtml +++ b/src/UnicaenAuth/View/Helper/partial/connect.phtml @@ -28,10 +28,10 @@ use Laminas\Form\Form; <?php if ($messages = $this->flashMessenger('zfcuser-login-form')): ?> <?php foreach ($messages as $message): ?> -<div class="messenger alert alert-danger "> - <button type="button" class="close" title="Fermer cette alerte" data-dismiss="alert">×</button> - <span class="glyphicon glyphicon-warning-sign"></span> +<div class="messenger alert alert-danger alert-dismissible "> + <span class="icon icon-avertissement"></span> <?php echo $message ?> <br> + <button type="button" class="btn-close" title="Fermer cette alerte" data-bs-dismiss="alert"></button> </div> <?php endforeach ?> <?php endif ?> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in-translated.phtml index 14ae2ef23b455454a42e2bd0022ce44826cad756..c752fb54bb61b73f4ee70abaf6acc69afb7ecf4a 100644 --- a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in-translated.phtml +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in-translated.phtml @@ -1,7 +1,7 @@ <a class="navbar-link" id="user-current-info" title="Auth user" - data-placement="bottom" - data-toggle="popover" - data-content="User Profile Helper MarkupUser Info Helper Markup" + data-bs-placement="bottom" + data-bs-toggle="popover" + data-bs-content="User Profile Helper MarkupUser Info Helper Markup" href="#">User Status Helper Markup</a> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in.phtml index 55a49900a137652012f3e59c6818bfacc8e3eee9..f9f9342a11786717c504ee445f4c99154de45825 100644 --- a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in.phtml +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-in.phtml @@ -1,7 +1,7 @@ <a class="navbar-link" id="user-current-info" title="Utilisateur connecté à l'application" - data-placement="bottom" - data-toggle="popover" - data-content="User Profile Helper MarkupUser Info Helper Markup" + data-bs-placement="bottom" + data-bs-toggle="popover" + data-bs-content="User Profile Helper MarkupUser Info Helper Markup" href="#">User Status Helper Markup</a> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out-translated.phtml index 09fd022dd9caa4b29a1c941d3c4a5ca5aa815695..5df1c9263d196420d060fda4f0b92ce2d20cbf63 100644 --- a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out-translated.phtml +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out-translated.phtml @@ -1,7 +1,7 @@ <a class="navbar-link" id="user-current-info" title="Auth user" - data-placement="bottom" - data-toggle="popover" - data-content="None" + data-bs-placement="bottom" + data-bs-toggle="popover" + data-bs-content="None" href="#">User Status Helper Markup</a> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out.phtml index 8e5a62d442e7a74679e8eb7def62a497fd413060..2a4258b043969fb3ac240bf419e68f4ab0429f6b 100644 --- a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out.phtml +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_current/logged-out.phtml @@ -1,7 +1,7 @@ <a class="navbar-link" id="user-current-info" title="Utilisateur connecté à l'application" - data-placement="bottom" - data-toggle="popover" - data-content="Aucun" + data-bs-placement="bottom" + data-bs-toggle="popover" + data-bs-content="Aucun" href="#">User Status Helper Markup</a> diff --git a/view/unicaen-auth/auth/login-tabs.phtml b/view/unicaen-auth/auth/login-tabs.phtml index 597f32015c33e3596603db5ae1fe2079a13e4b0c..52b4be4fca93461a8a4a53163d73aba3c037b211 100644 --- a/view/unicaen-auth/auth/login-tabs.phtml +++ b/view/unicaen-auth/auth/login-tabs.phtml @@ -19,7 +19,7 @@ use Laminas\Form\Form; $form->prepare(); $form->setAttributes([ - 'class' => 'form-horizontal', + //'class' => 'form-horizontal', // .form-horizontal n'existe plus dans boostrap 4 'role' => 'form', ]); @@ -45,9 +45,9 @@ $activeHelper = null; $activeClass = ''; } ?> - <li role="presentation" class="<?php echo $activeClass ?>"> + <li role="presentation" class="nav-item"> <?php $query = $redirect ? ['redirect' => $redirect] : [] ?> - <a href="<?php echo $this->url('zfcuser/login', ['type' => $key], ['query' => $query]) ?>"><?php echo $helper->getTitle() ?></a> + <a class="nav-link <?php echo $activeClass ?>" href="<?php echo $this->url('zfcuser/login', ['type' => $key], ['query' => $query]) ?>"><?php echo $helper->getTitle() ?></a> </li> <?php endforeach ?> </ul> diff --git a/view/unicaen-auth/auth/login.phtml b/view/unicaen-auth/auth/login.phtml index 77387c442c5b2c12777aa4a658c2b5b976aba0bf..e9a2d42d25e6f0889694cabee29fa6a3fad80d52 100644 --- a/view/unicaen-auth/auth/login.phtml +++ b/view/unicaen-auth/auth/login.phtml @@ -31,8 +31,10 @@ $this->headTitle("Connexion") ?> <!-- Création d'un compte local (si autorisée) --> <?php if ($enableRegistration) : ?> -<div id="div-connexion" class="panel panel-primary"> +<div id="div-connexion" class="card"> + <div class="card-body"> <?php echo $this->translate("Not registered?"); ?> <a href="<?php echo $this->url('zfcuser/register') . ($this->redirect ? '?redirect=' . $this->redirect : '') ?>"><?php echo $this->translate("Sign up!"); ?></a> + </div> </div> <?php endif; ?> diff --git a/view/unicaen-auth/auth/request-password-reset-form.phtml b/view/unicaen-auth/auth/request-password-reset-form.phtml index 5cd1df19356d5d5471d1d6f1622b0589f947b0b7..f47534827c817ecfc5fd2f623e5875b01b8fbb26 100644 --- a/view/unicaen-auth/auth/request-password-reset-form.phtml +++ b/view/unicaen-auth/auth/request-password-reset-form.phtml @@ -30,7 +30,7 @@ use Laminas\Form\Form; echo $this->formInput($email); echo $this->formElementErrors($email, ['class' => 'text-danger']); ?> - <span class="help-block">Un lien à cliquer vous sera envoyé à cette adresse électronique.</span> + <span class="form-text">Un lien à cliquer vous sera envoyé à cette adresse électronique.</span> </p> <?php echo $this->formInput($form->get('csrf')); ?> diff --git a/view/unicaen-auth/droits/partial/tbl-link.phtml b/view/unicaen-auth/droits/partial/tbl-link.phtml index 799d42ec488d1aa5765543d0b6828ebf6caec4a0..08ff59240c87c3e123cefa17b71d3b84b36bcf1e 100644 --- a/view/unicaen-auth/droits/partial/tbl-link.phtml +++ b/view/unicaen-auth/droits/partial/tbl-link.phtml @@ -14,7 +14,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG <a href="javascript:void(0)" data-action="refuser" title="Privilège '<?php echo $privilege->getCategorie() ?> > '<?php echo $privilege ?>' accordé au rôle '<?php echo $role ?>'. Cliquez pour le retirer."> <?php endif; ?> - <span class="glyphicon glyphicon-ok text-success"></span> + <span class="icon iconly icon-oui text-success"></span> <?php if ($canEdit): ?> </a> <?php endif; ?> @@ -25,7 +25,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG <a href="javascript:void(0)" data-action="accorder" title="Privilège '<?php echo $privilege->getCategorie() ?> > <?php echo $privilege ?>' refusé au rôle '<?php echo $role ?>'. Cliquez pour l'accorder."> <?php endif; ?> - <span class="glyphicon glyphicon-remove text-danger refuse"></span> + <span class="icon iconly icon-non text-danger refuse"></span> <?php if ($canEdit): ?> </a> <?php endif; ?> diff --git a/view/unicaen-auth/droits/privileges.phtml b/view/unicaen-auth/droits/privileges.phtml index 8ce8e3ec1786b06180d441b15e77a29a045addf6..0db6305dfd7d4fe404869ba14e2e7a18b011951a 100644 --- a/view/unicaen-auth/droits/privileges.phtml +++ b/view/unicaen-auth/droits/privileges.phtml @@ -6,7 +6,7 @@ ?> <h1 class="page-header">Gestion des privilèges</h1> -<table class="droits-tbl table table-hover table-bordered table-condensed table-extra-condensed table-header-rotated" data-modifier-url="<?php echo $this->url('droits/privileges/modifier'); ?>"> +<table class="droits-tbl table table-hover table-bordered table-sm table-extra-condensed table-header-rotated" data-modifier-url="<?php echo $this->url('droits/privileges/modifier'); ?>"> <thead> <tr> <th class="separator"></th> diff --git a/view/unicaen-auth/droits/roles.phtml b/view/unicaen-auth/droits/roles.phtml index e511f9da1d00f72509fa9557fc780906a85032c3..bc2d109a7099afe39adb5173ddcb2af523dad60f 100644 --- a/view/unicaen-auth/droits/roles.phtml +++ b/view/unicaen-auth/droits/roles.phtml @@ -9,7 +9,7 @@ $canEdit = $this->isAllowed('privilege/'.Privileges::DROIT_ROLE_EDITION); $ajoutUrl = $this->url( 'droits/roles/edition' ); ?> -<table class="table table-condensed table-bordered"> +<table class="table table-sm table-bordered"> <tr> <th>Nom</th> <th>Parent</th> @@ -28,8 +28,8 @@ $ajoutUrl = $this->url( 'droits/roles/edition' ); <td><?php echo $role->getAccessibleExterieur() ? 'Oui' : 'Non'; ?></td> <?php if ($canEdit): ?> <td style="width:1%;white-space: nowrap;text-align: center"> - <a href="<?php echo $editionUrl; ?>" class="ajax-modal" data-event="role-edition"><span class="glyphicon glyphicon-edit"></span></a> - <a href="<?php echo $suppressionUrl; ?>" class="ajax-modal" data-event="role-suppression"><span class="glyphicon glyphicon-remove"></span></a> + <a href="<?php echo $editionUrl; ?>" class="ajax-modal" data-event="role-edition"><span class="icon iconly icon-modifier"></span></a> + <a href="<?php echo $suppressionUrl; ?>" class="ajax-modal" data-event="role-suppression"><span class="icon iconly icon-supprimer"></span></a> </td> <?php endif; ?> </tr>