From c388b93a52065328b7c2657b918c08fa99eb5bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr> Date: Thu, 13 Feb 2025 11:58:30 +0100 Subject: [PATCH] hotline#212789 : redirect after login --- VERSIONS_HOTLINE/212789 | 1 + .../Plugin/Manager/AbonneSessionActivity.php | 42 +++---- .../Helper/TagSessionActivityInscription.php | 5 +- .../AccueilRedirectAfterInscriptionTest.php | 117 ++++++++++++++++++ 4 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 VERSIONS_HOTLINE/212789 create mode 100644 tests/scenarios/Activities/AccueilRedirectAfterInscriptionTest.php diff --git a/VERSIONS_HOTLINE/212789 b/VERSIONS_HOTLINE/212789 new file mode 100644 index 00000000000..23a349463f3 --- /dev/null +++ b/VERSIONS_HOTLINE/212789 @@ -0,0 +1 @@ + - correctif #212789 : Boite activité : Un utilisateur non connecté est redirigé vers la popup d'activité après avoir rempli le formulaire de connexion. \ No newline at end of file diff --git a/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php b/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php index 357f6fe541f..0712099e354 100644 --- a/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php +++ b/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php @@ -24,42 +24,36 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity extends ZendAfi_Controller_Plugin_Manager_SessionActivityInscriptionBasic { - protected $view; - - public function predDispatch(){ - parent:preDispatch(); - if ( ! $this->_checkLogged(['authenticate'])) - return $this->_forwardToLogin($this->view->url(), $this->_getReferer()?? $this->view->url()); - return null; - } - - - public function init() { + public function init() + { parent::init(); - $this->_validators[] = '_sessionInscriptionNotClosed'; - $this->_validators[] = '_sessionInscriptionOpened'; + + $this->_validators [] = '_sessionInscriptionNotClosed'; + $this->_validators [] = '_sessionInscriptionOpened'; $this->_user = Class_Users::getIdentity(); - $this->_session_activity = Class_SessionActivity::find((int)$this->_getParam('id')); + $this->_session_activity = Class_SessionActivity::find((int) $this->_getParam('id')); $this->_messages = new ZendAfi_Controller_Plugin_Manager_AbonneSessionActivityMessages; } - public function inscrireSessionAction() { + public function inscrireSessionAction() + { $this->_initRedirect(); if (Class_AdminVar::isActivitySessionQuotasEnabled()) return parent::addAction(); $this->_addWithoutQuotas(); - $this->_redirectToUrlOrReferer($this->_redirect_default_url); - return null; + + return $this->_redirectToUrlOrReferer($this->_redirect_default_url); } - public function desinscrireSessionAction() { + public function desinscrireSessionAction() + { $this->_initRedirect(); - if (!$this->_session_activity) { + if ( ! $this->_session_activity) { $this->_helper->notify($this->_('Session non trouvée')); return $this->_redirectToUrlOrReferer($this->_redirect_default_url); @@ -80,8 +74,8 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity } - - public function editSessionAction() { + public function editSessionAction() + { $this->_initRedirect(); $this->_controller->setScriptAction('inscrire-session'); @@ -101,7 +95,8 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity } - protected function _initRedirect() { + protected function _initRedirect() + { $this->_redirect_default_url = $this->_getParam('redirect_url', $this->_getReferer()); if (strpos($this->_redirect_default_url, 'inscription-session') !== false) @@ -119,7 +114,8 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity } - protected function _redirectInscrireSession() { + protected function _redirectInscrireSession() + { if ($this->_session_activity && $this->_session_activity->hasQueueAttendees()) return $this->_redirect_default_url = Class_Url::absolute(['controller' => 'abonne', 'action' => 'inscription-session', diff --git a/library/ZendAfi/View/Helper/TagSessionActivityInscription.php b/library/ZendAfi/View/Helper/TagSessionActivityInscription.php index 16f525cbddf..70198aabc29 100644 --- a/library/ZendAfi/View/Helper/TagSessionActivityInscription.php +++ b/library/ZendAfi/View/Helper/TagSessionActivityInscription.php @@ -59,11 +59,12 @@ class ZendAfi_View_Helper_TagSessionActivityInscription extends ZendAfi_View_Hel } - protected function _renderWithoutUser() { + protected function _renderWithoutUser(): string + { return $this->_session_activity->isSubscriableFor(null) ? $this->_tagAnchor($this->_url(['controller' => 'auth', 'action' => 'popup-login']) - . '?location=' . urlencode($this->_registerUrl()), + . '?redirect=' . urlencode($this->_registerUrl()), $this->_('S\'inscrire'), ['data-popup' => 'true']) : $this->_('Inscription non permise'); diff --git a/tests/scenarios/Activities/AccueilRedirectAfterInscriptionTest.php b/tests/scenarios/Activities/AccueilRedirectAfterInscriptionTest.php new file mode 100644 index 00000000000..24cfaa25eba --- /dev/null +++ b/tests/scenarios/Activities/AccueilRedirectAfterInscriptionTest.php @@ -0,0 +1,117 @@ +<?php +/** + * Copyright (c) 2012-2025, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class AccueilRedirectAfterInscriptionTest extends ViewHelperTestCase +{ + + protected ZendAfi_View_Helper_Accueil_ActivitiesWidget $_helper; + protected Class_Users $_user; + + public function setUp(): void + { + parent::setUp(); + + Class_AdminVar::set('CACHE_ACTIF', 0); + Class_AdminVar::set('ACTIVITY', 1); + Class_AdminVar::set('ACTIVITY_SESSION_QUOTAS', 1); + $time_source = new TimeSourceForTest('2024-01-01 10:00:00'); + Class_Activity::setTimeSource($time_source); + Class_SessionActivity::setTimeSource($time_source); + + $group = $this->fixture(Class_UserGroup::class, + ['id' => 111, + 'protected' => false, + 'libelle' => 'Group', + 'group_type' => Class_UserGroup::TYPE_MANUAL, + 'rights' => [Class_UserGroup::RIGHT_SUIVRE_ACTIVITY], + 'filters' => json_encode(['search_role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB])]); + + $this->_user = $this->fixture(Class_Users::class, + ['id' => 111, + 'id_sigb'=> 1, + 'idabon'=> '1234', + 'nom' => 'name_user_abon', + 'login' => 'login_user_abon', + 'last_login' => '', + 'password' => 'passloguserabon', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, + 'id_site' => 1]); + + $this->_user->addUserGroup($group)->assertSave(); + + $activity = $this->fixture(Class_Activity::class, + ['id' => 111, + 'libelle' => 'Activity numero 111', + 'visible' => true]); + + $session_activity = $this->fixture(Class_SessionActivity::class, + ['id' => 111, + 'activity' => $activity, + 'date_debut' => '2024-01-01 08:00:00', + 'date_limite_fin' => '2024-01-06 18:00:00', + 'date_fin' => '2024-01-08 18:00:00', + 'effectif_inscription_max' => 2, + 'effectif_inscription_child_max' => 2, + 'effectif_child_min' => 0, + 'effectif_child_max' => 2, + 'age_child_max' => 12]); + + $activity->setSessions([$session_activity]) + ->assertSave(); + + $this->_helper = new ZendAfi_View_Helper_Accueil_ActivitiesWidget('ACTIVITIES_WIDGET', + ['division' => 1, + 'type_module' => 'ACTIVITIES_WIDGET', + 'preferences' => ['selected_activities' => 111]]); + $this->_helper->setView($this->view); + } + + + public function tearDown(): void + { + Class_Activity::setTimeSource(null); + Class_SessionActivity::setTimeSource(null); + parent::tearDown(); + } + + + /** @test */ + public function withUserLoggedShouldNotRedirectTo() + { + ZendAfi_Auth::getInstance()->logUser($this->_user); + $html = $this->_helper->getBoite(); + $this->assertNotXPath($html, '//a[contains(@href, "redirect")]'); + $this->assertXPath($html, '//a[contains(@href, "abonne/inscrire-session/id/111")]'); + } + + + /** @test */ + public function withoutUserLoggedShouldRedirectTo() + { + ZendAfi_Auth::getInstance()->clearIdentity(); + $html = $this->_helper->getBoite(); + $this->assertXPath($html, '//a[contains(@href, "?redirect=")]'); + $this->assertXPath($html, '//a[contains(@href, "' + . urlencode('abonne/inscrire-session/id/111') + . '")]'); + } +} -- GitLab