Commit ec05438c authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Nouvelle aide de vue UserProfileSelectRadioItem appelée pour dessiner chaque...

Nouvelle aide de vue UserProfileSelectRadioItem appelée pour dessiner chaque élément de sélection d'un profil (radio button) : peut être substituée par une autre dans un module pour dessiner par exemple en plus du radio button de choix du profil Administrateur la sélection d'une structure à associer à ce profil (cf. OSE).
Refactorisation pour facilier la surcharge de l'action UtilisateurController::selectionnerProfilAction() en vue de faire d'autres opérations (comme l'enregistrement en session de la structure sélectionnée, cf. OSE).
parent 971115f5
......@@ -128,6 +128,7 @@ class Module implements ConfigProviderInterface, ViewHelperProviderInterface, Se
'userProfile' => 'UnicaenAuth\View\Helper\UserProfileFactory',
'userInfo' => 'UnicaenAuth\View\Helper\UserInfoFactory',
'userProfileSelect' => 'UnicaenAuth\View\Helper\UserProfileSelectFactory',
'userProfileSelectRadioItem' => 'UnicaenAuth\View\Helper\UserProfileSelectRadioItemFactory',
),
'invokables' => array(
'appConnection' => 'UnicaenAuth\View\Helper\AppConnection',
......
......@@ -5,7 +5,7 @@ namespace UnicaenAuth\Controller;
use Zend\Mvc\Controller\AbstractActionController;
/**
* Description of UtilisateurController
*
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
......@@ -15,18 +15,28 @@ class UtilisateurController extends AbstractActionController
* Traite les requêtes AJAX POST de sélection d'un profil utilisateur.
* La sélection est mémorisé en session par le service AuthUserContext.
*/
public function selectionnerProfilAction()
public function selectionnerProfilAction($addFlashMessage = true)
{
if (!$this->getRequest()->isXmlHttpRequest()) {
return $this->url()->fromRoute('home');
}
if (($role = $this->getRequest()->getPost('role'))) {
$role = $this->getRequest()->getPost('role');
if ($role) {
$this->getAuthUserContextService()->setSelectedIdentityRole($role);
}
$this->flashMessenger()->addSuccessMessage(
sprintf("Vous endossez à présent le profil utilisateur <strong>%s</strong>.",
$this->getAuthUserContextService()->getSelectedIdentityRole()));
exit;
if ($addFlashMessage) {
$this->flashMessenger()->addSuccessMessage(
sprintf("Vous endossez à présent le profil utilisateur <strong>%s</strong>.",
$this->getAuthUserContextService()->getSelectedIdentityRole()));
}
$viewModel = new \Zend\View\Model\ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
}
/**
......
......@@ -38,12 +38,6 @@ class UserProfileSelect extends UserAbstract
*/
public function render()
{
$roles = $this->getIdentityRolesAsOptions();
if (!$roles) {
return '';
}
$formClass = 'user-profile-select-form';
$inputClass = 'user-profile-select-input';
......@@ -54,9 +48,15 @@ class UserProfileSelect extends UserAbstract
// rendu sous forme d'un select
if ($this->asSelect) {
$rolesAsOptions = $this->getIdentityRolesAsOptions();
if (!$rolesAsOptions) {
return '';
}
$select = new \Zend\Form\Element\Select('role');
$select
->setValueOptions($roles)
->setValueOptions($rolesAsOptions)
->setAttributes(array(
'class' => $inputClass,
'value' => $this->getSelectedIdentityRole(),
......@@ -66,14 +66,11 @@ class UserProfileSelect extends UserAbstract
}
// rendu sous forme de radios
else {
$roles = $this->getSelectableRoles();
foreach ($roles as $id => $role) {
$radio = new \Zend\Form\Element\Radio('role');
$radio
->setValueOptions(array($id => $role))
->setAttribute('class', $inputClass)
->setAttribute('title', "Cliquez pour changer de profil courant")
->setValue($id === $this->getSelectedIdentityRole() ? $id : null);
$html .= '<div class="radio">' . $this->getView()->formRadio($radio) . '</div>';
$selected = ($id === $this->getSelectedIdentityRole());
$html .= '<div class="radio">' . $this->getView()->userProfileSelectRadioItem($role, $selected) . '</div>';
}
}
......@@ -85,13 +82,13 @@ class UserProfileSelect extends UserAbstract
$html .= <<<EOS
<script>
$(function() {
$("input.$inputClass")
.change(function() {
$("body *").css('cursor', 'wait');
$.post("$url", $(".$formClass").serializeArray(), function() { $(location).attr('href', "$redirectUrl"); });
})
.tooltip({ delay: 500, placement: 'left' });
$("input.$inputClass").change(function() { submitProfile(); }).tooltip({ delay: 500, placement: 'left' });
});
function submitProfile()
{
$("body *").css('cursor', 'wait');
$.post("$url", $(".$formClass").serializeArray(), function() { $(location).attr('href', "$redirectUrl"); });
}
</script>
EOS;
......@@ -153,7 +150,7 @@ EOS;
/**
*
* @return array
* @return array id => role
*/
protected function getSelectableRoles()
{
......
<?php
namespace UnicaenAuth\View\Helper;
use Application\Acl\Role;
use Zend\Form\Element\Radio;
/**
* Aide de vue dessinant un item de sélection d'un profil utilisateur.
* Utilisé par l'aide de vue UserProfileSelect.
*
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
* @see UserProfileSelect
*/
class UserProfileSelectRadioItem extends UserAbstract
{
/**
* @var Role
*/
protected $role;
/**
* @var bool
*/
protected $selected;
/**
* @var string
*/
protected $formClass;
/**
*
* @param Role $role
* @param bool $selected
* @return self
*/
public function __invoke(Role $role, $selected = false)
{
$this->role = $role;
$this->selected = $selected;
return $this;
}
/**
* Retourne le code HTML généré par cette aide de vue.
*
* @return string
*/
public function render()
{
$radio = $this->createRadio();
$html = $this->getView()->formRadio($radio);
return $html;
}
/**
* Retourne le code HTML généré par cette aide de vue.
*
* @return string
*/
public function __toString()
{
return $this->render();
}
/**
* @return Radio
*/
protected function createRadio()
{
$id = $this->role->getRoleId();
$inputClass = 'user-profile-select-input';
// rendu sous forme de radio
$radio = new Radio('role');
$radio
->setValueOptions(array($id => (string) $this->role))
->setAttribute('class', $inputClass)
->setAttribute('title', "Cliquez pour changer de profil courant")
->setValue($this->selected ? $id : null);
return $radio;
}
}
\ No newline at end of file
<?php
namespace UnicaenAuth\View\Helper;
use Zend\ServiceManager\ServiceLocatorInterface;
/**
*
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
class UserProfileSelectRadioItemFactory extends \UnicaenApp\View\Helper\UserProfileSelectFactory
{
/**
* Create service
*
* @param ServiceLocatorInterface $helperPluginManager
* @return UserProfile
*/
public function createService(ServiceLocatorInterface $helperPluginManager)
{
$serviceLocator = $helperPluginManager->getServiceLocator();
$userContextService = $serviceLocator->get('AuthUserContext');
return new UserProfileSelectRadioItem($userContextService);
}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment