Skip to content
Snippets Groups Projects
Commit 9020a4dd authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP passage à Bootstrap 5

parent b0f595f5
No related branches found
No related tags found
No related merge requests found
Pipeline #12103 passed
Showing
with 263 additions and 170 deletions
CHANGELOG 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 4.0.2
----- -----
- RoleFormatter : correction pour exploiter la méthode __toString() si présente. - RoleFormatter : correction pour exploiter la méthode __toString() si présente.
...@@ -13,6 +20,7 @@ CHANGELOG ...@@ -13,6 +20,7 @@ CHANGELOG
----- -----
- Passage de Zend à Laminas - Passage de Zend à Laminas
3.2.10 3.2.10
----- -----
- Possibilité d'activer ou non (en config) les logs des échecs d'authentification LDAP. - Possibilité d'activer ou non (en config) les logs des échecs d'authentification LDAP.
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
} }
], ],
"require": { "require": {
"unicaen/app": "^4.0", "unicaen/app": "dev-release_5_bs5",
"unicaen/bjy-authorize": "^4.0", "unicaen/bjy-authorize": "^4.0",
"jasig/phpcas": "^1.3", "jasig/phpcas": "^1.3",
"ramsey/uuid": "^3.7", "ramsey/uuid": "^3.7",
......
<?php <?php
namespace UnicaenAuth\View\Helper; 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 class AppConnection extends \UnicaenApp\View\Helper\AppConnection
{ {
/** /**
* Retourne le code HTML généré par cette aide de vue.
*
* @return string * @return string
*/ */
public function __toString() public function __toString(): string
{ {
$connexion = []; $parts = [];
/** @var \UnicaenAuth\View\Helper\UserCurrent $userCurrentHelper */
$userCurrentHelper = $this->getView()->plugin('userCurrent');
if ($userCurrentHelper) {
if ($html = "" . $userCurrentHelper) {
$parts[] = $html;
}
}
if (($tmp = $this->getView()->plugin('userCurrent'))) { /** @var \UnicaenAuth\View\Helper\UserConnection $userConnectionHelper */
$connexion[] = "" . $tmp; $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;
} }
if (($tmp = $this->getView()->plugin('userConnection'))) {
$connexion[] = "" . $tmp;
} }
return implode(' | ', $connexion); return implode(' | ', $parts);
} }
} }
\ No newline at end of file
<?php <?php
namespace UnicaenAuth\View\Helper; namespace UnicaenAuth\View\Helper;
/** /**
* Aide de vue de génération du lien de connexion/déconnexion à l'appli selon qu'un * Aide de vue dessinant :
* utilisateur est connecté ou pas. * - 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 class UserConnection extends UserAbstract
{ {
/** protected $template = '<a class="%s" href="%s" title="%s">%s</a>';
* Point d'entrée.
* protected $classes = [
* @return UserConnection 'user-connection',
*/ //'navbar-link',
public function __invoke() ];
public function __invoke(): self
{ {
return $this; 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 * @return string
*/ */
public function __toString() public function __toString()
{ {
$template = '%s'; return $this->render();
$out = sprintf($template, $this->createConnectionLink()); }
return $out; 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 sprintf($this->template, $classes, $href, $title, $lib);
} }
/** /**
*
* @return string * @return string
* @deprecated Utiliser {@see render()}
*/ */
protected function createConnectionLink() protected function createConnectionLink()
{ {
...@@ -42,11 +106,11 @@ class UserConnection extends UserAbstract ...@@ -42,11 +106,11 @@ class UserConnection extends UserAbstract
$urlHelper = $this->getView()->plugin('url'); $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) { if (!$identity) {
$href = $urlHelper('zfcuser/login'); $href = $urlHelper('zfcuser/login');
$lib = "Connexion"; $lib = "Connexion";
$title = "Affiche le formulaire d'authentification"; $title = "Cliquez pour vous authentifier";
} }
else { else {
$href = $urlHelper('zfcuser/logout'); $href = $urlHelper('zfcuser/logout');
......
...@@ -2,11 +2,14 @@ ...@@ -2,11 +2,14 @@
namespace UnicaenAuth\View\Helper; namespace UnicaenAuth\View\Helper;
/** /**
* Aide de vue affichant toutes les infos concernant l'utilisateur courant. * Aide de vue affichant toutes les infos concernant l'utilisateur connecté.
* C'est à dire : * C'est à dire le nom de l'utilisateur connecté & son rôle courant.
* - "Aucun" + lien de connexion OU BIEN nom de l'utilisateur connecté + lien de déconnexion *
* - profil de l'utilisateur connecté * Lorsqu'on clique sur le nom, s'affiche un popover
* - infos administratives sur l'utilisateur * 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> * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/ */
...@@ -37,14 +40,20 @@ class UserCurrent extends UserAbstract ...@@ -37,14 +40,20 @@ class UserCurrent extends UserAbstract
*/ */
public function __toString(): string public function __toString(): string
{ {
$id = 'user-current-info'; if (! $this->getIdentity()) {
return '';
$userStatusHelper = $this->getView()->plugin('userStatus'); /* @var $userStatusHelper UserStatus */ }
$status = $userStatusHelper(false);
//
// 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; $userProfileSelectable = true;
if ($this->getIdentity()) {
if ($userProfileSelectable) { if ($userProfileSelectable) {
$role = $this->getUserContext()->getSelectedIdentityRole(); $role = $this->getUserContext()->getSelectedIdentityRole();
// cas où aucun rôle n'est sélectionné : on affiche le 1er rôle sélectionnable ou sinon "user" // cas où aucun rôle n'est sélectionné : on affiche le 1er rôle sélectionnable ou sinon "user"
...@@ -52,50 +61,53 @@ class UserCurrent extends UserAbstract ...@@ -52,50 +61,53 @@ class UserCurrent extends UserAbstract
$selectableRoles = $this->getUserContext()->getSelectableIdentityRoles(); $selectableRoles = $this->getUserContext()->getSelectableIdentityRoles();
$role = current($selectableRoles) ?: $this->getUserContext()->getIdentityRole('user'); $role = current($selectableRoles) ?: $this->getUserContext()->getIdentityRole('user');
} }
$status .= sprintf(", <small class='role-libelle'>%s</small>", !method_exists($role, '__toString') ? $role->getRoleId() : $role); $role = sprintf(
"<br/><small class='role-libelle'>%s</small>",
!method_exists($role, '__toString') ? $role->getRoleId() : $role
);
} }
$userProfileHelper = $this->getView()->plugin('userProfile'); /* @var $userProfileHelper UserProfile */ //
// Dans un popover :
//
// - Rôles sélectionnables.
/* @var \UnicaenAuth\View\Helper\UserProfile $userProfileHelper */
$userProfileHelper = $this->view->plugin('userProfile');
$userProfileHelper->setUserProfileSelectable($userProfileSelectable); $userProfileHelper->setUserProfileSelectable($userProfileSelectable);
$roles = (string) $userProfileHelper;
$userInfoHelper = $this->getView()->plugin('userInfo'); /* @var $userInfoHelper UserInfo */ // - Infos administratives.
/* @var \UnicaenAuth\View\Helper\UserInfo $userInfoHelper */
$content = $userProfileHelper . $userInfoHelper($this->getAffectationFineSiDispo()); $userInfoHelper = $this->view->plugin('userInfo');
} $infos = (string) $userInfoHelper($this->getAffectationFineSiDispo());
else { // - Usurpation d'identité.
$content = _("Aucun"); /* @var \UnicaenAuth\View\Helper\UserUsurpationHelper $userUsurpationHelper */
if ($this->getTranslator()) { $userUsurpationHelper = $this->view->plugin('userUsurpation');
$content = $this->getTranslator()->translate($content, $this->getTranslatorTextDomain()); $usurpation = (string) $userUsurpationHelper;
} // - Lien de déconnexion.
} /** @var \UnicaenAuth\View\Helper\UserConnection $userConnectionHelper */
$userConnectionHelper = $this->getView()->plugin('userConnection');
$content = htmlspecialchars(preg_replace('/\r\n|\n|\r/', '', $content)); $deconnexion = $userConnectionHelper->addClass('btn btn-lg btn-outline-success')->renderDisconnection();
$title = _("Utilisateur connecté à l'application"); $linkText = $nom . $role;
if ($this->getTranslator()) { $popoverContent = htmlspecialchars(preg_replace('/\r\n|\n|\r/', '',
$title = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain()); $roles .
} $infos .
$usurpation .
$out = <<<EOS '<hr>' .
<a class="navbar-link" '<div class="text-center">' . $deconnexion . '</div>'
id="$id" ));
title="$title"
data-placement="bottom" return <<<EOS
data-toggle="popover" <a class="navbar-link dropdown-toggle"
data-html="true" id="user-current-info"
data-content="$content" data-bs-placement="bottom"
href="#">$status<span class="caret"></span></a> data-bs-toggle="popover"
EOS; data-bs-container="#navbar"
$out .= PHP_EOL; data-bs-html="true"
data-bs-sanitize="false"
$js = <<<EOS data-bs-content="$popoverContent"
$(function() { href="#">$linkText<span class="caret"></span></a>
$("#$id").popover({ html: true, sanitize: false, container: '#navbar' });
});
EOS; EOS;
$this->getView()->plugin('inlineScript')->offsetSetScript(1000, $js);
return $out;
} }
/** /**
......
...@@ -96,17 +96,14 @@ class UserInfo extends UserAbstract ...@@ -96,17 +96,14 @@ class UserInfo extends UserAbstract
} }
} }
else { else {
$template = "<strong>Informations administratives :</strong> <br>%s";
$aucuneAffDispo = _("Aucune information disponible."); $aucuneAffDispo = _("Aucune information disponible.");
if ($this->getTranslator()) { if ($this->getTranslator()) {
$aucuneAffDispo = $this->getTranslator()->translate($aucuneAffDispo, $this->getTranslatorTextDomain()); $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; return $out;
} }
......
...@@ -36,7 +36,7 @@ class UserProfile extends UserAbstract ...@@ -36,7 +36,7 @@ class UserProfile extends UserAbstract
*/ */
public function render() public function render()
{ {
$title = _("Profil utilisateur"); $title = _("Rôle utilisateur");
$unknown = _("Inconnu"); $unknown = _("Inconnu");
$none = _("Aucun"); $none = _("Aucun");
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace UnicaenAuth\View\Helper; namespace UnicaenAuth\View\Helper;
use Laminas\Permissions\Acl\Role\RoleInterface; use Laminas\Permissions\Acl\Role\RoleInterface;
use Laminas\View\Helper\HeadScript;
/** /**
* Aide de vue permettant à l'utilisateur de sélectionner son profil courant parmi * Aide de vue permettant à l'utilisateur de sélectionner son profil courant parmi
...@@ -79,18 +80,15 @@ class UserProfileSelect extends UserAbstract ...@@ -79,18 +80,15 @@ class UserProfileSelect extends UserAbstract
$url = $this->getView()->url('utilisateur/default', ['action' => 'selectionner-profil']); $url = $this->getView()->url('utilisateur/default', ['action' => 'selectionner-profil']);
$redirectUrl = $this->getView()->url($this->redirectRoute ?: 'home'); $redirectUrl = $this->getView()->url($this->redirectRoute ?: 'home');
$html .= <<<EOS $js = <<<EOS
<script>
$(function() { $(function() {
$("input.$inputClass").change(function() { submitProfile(); }).tooltip({ delay: 500, placement: 'left' }); $("body").on("change", "input.$inputClass", function() {
});
function submitProfile()
{
$("body *").css('cursor', 'wait'); $("body *").css('cursor', 'wait');
$.post("$url", $(".$formClass").serializeArray(), function() { $(location).attr('href', "$redirectUrl"); }); $.post("$url", $(".$formClass").serializeArray(), function() { $(location).attr('href', "$redirectUrl"); });
} });
</script> });
EOS; EOS;
$this->view->inlineScript(HeadScript::SCRIPT, $js);
return $html; return $html;
} }
......
...@@ -26,8 +26,6 @@ class UserStatus extends UserAbstract ...@@ -26,8 +26,6 @@ class UserStatus extends UserAbstract
protected $usurpationEnCours = false; protected $usurpationEnCours = false;
/** /**
* Retourne l'instance de ce view helper.
*
* @param boolean $displayConnectionLink Inclure ou pas le lien de connexion/déconnexion ? * @param boolean $displayConnectionLink Inclure ou pas le lien de connexion/déconnexion ?
* @return self * @return self
*/ */
...@@ -40,18 +38,21 @@ class UserStatus extends UserAbstract ...@@ -40,18 +38,21 @@ class UserStatus extends UserAbstract
} }
/** /**
* Retourne le code HTML généré par cette aide de vue.
*
* @return string * @return string
*/ */
public function __toString(): string public function __toString(): string
{ {
$parts = []; $parts = [];
// Nom de l'utilisateur connecté, le cas échéant.
if (($identity = $this->getIdentity())) {
$parts[] = $this->createStatusContainer(); $parts[] = $this->createStatusContainer();
}
if ($this->getDisplayConnectionLink()) { // Lien de connexion ou déconnexion, si demandé.
$userConnectionHelper = $this->getView()->plugin('userConnection'); /* @var $userConnectionHelper UserConnection */ if ($this->displayConnectionLink) {
/* @var $userConnectionHelper UserConnection */
$userConnectionHelper = $this->getView()->plugin('userConnection');
$parts[] = (string) $userConnectionHelper; $parts[] = (string) $userConnectionHelper;
} }
...@@ -66,7 +67,8 @@ class UserStatus extends UserAbstract ...@@ -66,7 +67,8 @@ class UserStatus extends UserAbstract
*/ */
protected function createStatusContainer(): string protected function createStatusContainer(): string
{ {
if (($identity = $this->getIdentity())) { $identity = $this->getIdentity();
if (method_exists($identity, '__toString')) { if (method_exists($identity, '__toString')) {
$name = (string) $identity; $name = (string) $identity;
} }
...@@ -83,18 +85,11 @@ class UserStatus extends UserAbstract ...@@ -83,18 +85,11 @@ class UserStatus extends UserAbstract
$name = sprintf('<span title="Erreur: identité inattendue (%s)">???</span>', $name = sprintf('<span title="Erreur: identité inattendue (%s)">???</span>',
is_object($identity) ? get_class($identity) : gettype($identity)); is_object($identity) ? get_class($identity) : gettype($identity));
} }
}
else {
$name = _("Vous n'êtes pas connecté(e)");
if ($this->getTranslator()) {
$name = $this->getTranslator()->translate($name, $this->getTranslatorTextDomain());
}
}
$classUser = $this->usurpationEnCours ? 'fa-theater-masks' : 'fa-user'; $classUser = $this->usurpationEnCours ? 'fa-theater-masks' : 'fa-user';
return <<<EOS 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; EOS;
} }
......
...@@ -11,6 +11,7 @@ use Laminas\Form\Element\Text; ...@@ -11,6 +11,7 @@ use Laminas\Form\Element\Text;
use Laminas\Form\Form; use Laminas\Form\Form;
use Laminas\Form\View\Helper\Form as FormHelper; use Laminas\Form\View\Helper\Form as FormHelper;
use Laminas\Form\View\Helper\FormElement; use Laminas\Form\View\Helper\FormElement;
use Laminas\View\Helper\HeadScript;
use Laminas\View\Renderer\PhpRenderer; use Laminas\View\Renderer\PhpRenderer;
/** /**
...@@ -137,34 +138,38 @@ class UserUsurpationHelper extends UserAbstract ...@@ -137,34 +138,38 @@ class UserUsurpationHelper extends UserAbstract
$identity = $form->get('identity'); $identity = $form->get('identity');
$submit = $form->get('submit'); $submit = $form->get('submit');
$identity->setAttribute('class', $identity->getAttribute('class') . ' form-control');
/** @var FormHelper $formHelper */ /** @var FormHelper $formHelper */
$formHelper = $this->view->plugin('form'); $formHelper = $this->view->plugin('form');
/** @var FormControlGroup $formControlGroupHelper */ /** @var FormElement $formElementHelper */
$formControlGroupHelper = $this->view->plugin('formControlGroup'); $formElementHelper = $this->view->plugin('formElement');
$html = ''; $html = '';
$html .= $formHelper->openTag($form); $html .= $formHelper->openTag($form);
$html .= "<div><strong>Usurpation d'identité :</strong></div>"; $html .= "<div><strong>Usurpation d'identité :</strong></div>";
$html .= $formControlGroupHelper->__invoke($identity); $html .= '<div class="row justify-content-start">';
$html .= $formControlGroupHelper->__invoke($submit); $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(); $html .= $formHelper->closeTag();
$formId = $form->getAttribute('id'); $formId = $form->getAttribute('id');
$html .= <<<EOS $js = <<<EOS
<script> $(function() {
var form = $("#$formId").submit(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'); $("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>
EOS; EOS;
$this->view->inlineScript(HeadScript::SCRIPT, $js);
return $html; return $html;
} }
...@@ -209,6 +214,7 @@ EOS; ...@@ -209,6 +214,7 @@ EOS;
$submit = new Submit('submit'); $submit = new Submit('submit');
$submit->setValue("Usurper"); $submit->setValue("Usurper");
$submit->setAttributes([ $submit->setAttributes([
'disabled' => !$this->asButton,
'class' => 'user-usurpation-submit btn btn-danger', 'class' => 'user-usurpation-submit btn btn-danger',
]); ]);
......
...@@ -28,10 +28,10 @@ use Laminas\Form\Form; ...@@ -28,10 +28,10 @@ use Laminas\Form\Form;
<?php if ($messages = $this->flashMessenger('zfcuser-login-form')): ?> <?php if ($messages = $this->flashMessenger('zfcuser-login-form')): ?>
<?php foreach ($messages as $message): ?> <?php foreach ($messages as $message): ?>
<div class="messenger alert alert-danger "> <div class="messenger alert alert-danger alert-dismissible ">
<button type="button" class="close" title="Fermer cette alerte" data-dismiss="alert">×</button> <span class="icon icon-avertissement"></span>
<span class="glyphicon glyphicon-warning-sign"></span>
<?php echo $message ?> <br> <?php echo $message ?> <br>
<button type="button" class="btn-close" title="Fermer cette alerte" data-bs-dismiss="alert"></button>
</div> </div>
<?php endforeach ?> <?php endforeach ?>
<?php endif ?> <?php endif ?>
......
<a class="navbar-link" <a class="navbar-link"
id="user-current-info" id="user-current-info"
title="Auth user" title="Auth user"
data-placement="bottom" data-bs-placement="bottom"
data-toggle="popover" data-bs-toggle="popover"
data-content="User Profile Helper MarkupUser Info Helper Markup" data-bs-content="User Profile Helper MarkupUser Info Helper Markup"
href="#">User Status Helper Markup</a> href="#">User Status Helper Markup</a>
<a class="navbar-link" <a class="navbar-link"
id="user-current-info" id="user-current-info"
title="Utilisateur connecté à l'application" title="Utilisateur connecté à l'application"
data-placement="bottom" data-bs-placement="bottom"
data-toggle="popover" data-bs-toggle="popover"
data-content="User Profile Helper MarkupUser Info Helper Markup" data-bs-content="User Profile Helper MarkupUser Info Helper Markup"
href="#">User Status Helper Markup</a> href="#">User Status Helper Markup</a>
<a class="navbar-link" <a class="navbar-link"
id="user-current-info" id="user-current-info"
title="Auth user" title="Auth user"
data-placement="bottom" data-bs-placement="bottom"
data-toggle="popover" data-bs-toggle="popover"
data-content="None" data-bs-content="None"
href="#">User Status Helper Markup</a> href="#">User Status Helper Markup</a>
<a class="navbar-link" <a class="navbar-link"
id="user-current-info" id="user-current-info"
title="Utilisateur connecté à l'application" title="Utilisateur connecté à l'application"
data-placement="bottom" data-bs-placement="bottom"
data-toggle="popover" data-bs-toggle="popover"
data-content="Aucun" data-bs-content="Aucun"
href="#">User Status Helper Markup</a> href="#">User Status Helper Markup</a>
...@@ -19,7 +19,7 @@ use Laminas\Form\Form; ...@@ -19,7 +19,7 @@ use Laminas\Form\Form;
$form->prepare(); $form->prepare();
$form->setAttributes([ $form->setAttributes([
'class' => 'form-horizontal', //'class' => 'form-horizontal', // .form-horizontal n'existe plus dans boostrap 4
'role' => 'form', 'role' => 'form',
]); ]);
...@@ -45,9 +45,9 @@ $activeHelper = null; ...@@ -45,9 +45,9 @@ $activeHelper = null;
$activeClass = ''; $activeClass = '';
} }
?> ?>
<li role="presentation" class="<?php echo $activeClass ?>"> <li role="presentation" class="nav-item">
<?php $query = $redirect ? ['redirect' => $redirect] : [] ?> <?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> </li>
<?php endforeach ?> <?php endforeach ?>
</ul> </ul>
......
...@@ -31,9 +31,11 @@ $this->headTitle("Connexion") ?> ...@@ -31,9 +31,11 @@ $this->headTitle("Connexion") ?>
<!-- Création d'un compte local (si autorisée) --> <!-- Création d'un compte local (si autorisée) -->
<?php if ($enableRegistration) : ?> <?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> <?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>
</div>
<?php endif; ?> <?php endif; ?>
......
...@@ -30,7 +30,7 @@ use Laminas\Form\Form; ...@@ -30,7 +30,7 @@ use Laminas\Form\Form;
echo $this->formInput($email); echo $this->formInput($email);
echo $this->formElementErrors($email, ['class' => 'text-danger']); 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> </p>
<?php echo $this->formInput($form->get('csrf')); ?> <?php echo $this->formInput($form->get('csrf')); ?>
......
...@@ -14,7 +14,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG ...@@ -14,7 +14,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG
<a href="javascript:void(0)" data-action="refuser" <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."> title="Privilège '<?php echo $privilege->getCategorie() ?> > '<?php echo $privilege ?>' accordé au rôle '<?php echo $role ?>'. Cliquez pour le retirer.">
<?php endif; ?> <?php endif; ?>
<span class="glyphicon glyphicon-ok text-success"></span> <span class="icon iconly icon-oui text-success"></span>
<?php if ($canEdit): ?> <?php if ($canEdit): ?>
</a> </a>
<?php endif; ?> <?php endif; ?>
...@@ -25,7 +25,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG ...@@ -25,7 +25,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DROIT_PRIVILEG
<a href="javascript:void(0)" data-action="accorder" <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."> title="Privilège '<?php echo $privilege->getCategorie() ?> > <?php echo $privilege ?>' refusé au rôle '<?php echo $role ?>'. Cliquez pour l'accorder.">
<?php endif; ?> <?php endif; ?>
<span class="glyphicon glyphicon-remove text-danger refuse"></span> <span class="icon iconly icon-non text-danger refuse"></span>
<?php if ($canEdit): ?> <?php if ($canEdit): ?>
</a> </a>
<?php endif; ?> <?php endif; ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment