From f9629ecddc55b6881a2861a959bd85c9fda4cace Mon Sep 17 00:00:00 2001
From: Patrick Barroca <pbarroca@sandbox.pergame.net>
Date: Tue, 26 Jan 2016 09:36:44 +0100
Subject: [PATCH] rel #37107: direct redirection to resource after login when
 SSO support it

---
 VERSIONS_HOTLINE/37107                        |  1 +
 .../opac/controllers/ModulesController.php    | 89 +++++++------------
 .../Class/Systeme/ModulesMenu/SSOAbstract.php |  7 +-
 .../ModulesControllerKidilanguesTest.php      |  4 +-
 .../ModulesControllerMyCowTest.php            |  4 +-
 .../controllers/ModulesControllerTest.php     |  2 +-
 6 files changed, 42 insertions(+), 65 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/37107

diff --git a/VERSIONS_HOTLINE/37107 b/VERSIONS_HOTLINE/37107
new file mode 100644
index 00000000000..27f968e097a
--- /dev/null
+++ b/VERSIONS_HOTLINE/37107
@@ -0,0 +1 @@
+ - ticket #37107 : Ressources numérique : lorsque la ressource le permet, redirection directe à la ressource en cas de login réussi
\ No newline at end of file
diff --git a/application/modules/opac/controllers/ModulesController.php b/application/modules/opac/controllers/ModulesController.php
index 4652534dd02..6f0146b0764 100644
--- a/application/modules/opac/controllers/ModulesController.php
+++ b/application/modules/opac/controllers/ModulesController.php
@@ -20,13 +20,26 @@
  */
 
 class ModulesController extends Zend_Controller_Action {
-  public function cvsAction() {
-    $cvs = new Class_Systeme_ModulesMenu_CVS();
+  public function preDispatch() {
+    $mapping = ['vodeclic' => 'Vodeclic',
+                'toutapprendre' => 'ToutApprendre',
+                'lekiosk' => 'LeKiosk',
+                'lesocial' => 'LeSocial',
+                'mycow' => 'MyCow',
+                'planetnemo' => 'PlanetNemo',
+                'kidilangues' => 'Kidilangues',
+                'orthodidacte' => 'Orthodidacte'];
+
+    $action = $this->_request->getActionName();
+    if (array_key_exists($action, $mapping))
+      $this->_forward('simple', null, null, ['type' => $mapping[$action]]);
+  }
 
-    $cvs->setDocId($this->_getParam('docid'))
-        ->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
 
-    return $this->checkNotifyMessage($cvs, $cvs->getDynamiqueUrl());
+  public function cvsAction() {
+    $cvs = new Class_Systeme_ModulesMenu_CVS();
+    $cvs->setDocId($this->_getParam('docid'));
+    $this->simple($cvs);
   }
 
 
@@ -54,62 +67,27 @@ class ModulesController extends Zend_Controller_Action {
   }
 
 
-  public function vodeclicAction() {
-    $vodeclic = new Class_Systeme_ModulesMenu_Vodeclic();
-    $vodeclic->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($vodeclic, $vodeclic->getDynamiqueUrl());
-  }
-
-
-  public function toutapprendreAction() {
-    $tout_apprendre = new Class_Systeme_ModulesMenu_ToutApprendre();
-    $tout_apprendre->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($tout_apprendre,
-                              $tout_apprendre->getDynamiqueUrl());
-  }
-
-
-  public function lekioskAction() {
-    $redirect = Class_AdminVar::isLeKioskCas()
-      ? Class_Url::absolute($this->view->url())
-      : $this->_request->getServer('HTTP_REFERER') ;
-
-    $lekiosk = new Class_Systeme_ModulesMenu_LeKiosk();
-    $lekiosk->afterLoginRedirectTo($redirect);
-    $this->checkNotifyMessage($lekiosk, $lekiosk->getDynamiqueUrl());
-  }
-
-  public function lesocialAction() {
-    $lesocial = new Class_Systeme_ModulesMenu_LeSocial();
-    $lesocial->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($lesocial, $lesocial->getDynamiqueUrl());
-  }
-
-
-  public function mycowAction() {
-    $mycow = new Class_Systeme_ModulesMenu_MyCow();
-    $mycow->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($mycow, $mycow->getDynamiqueUrl());
-  }
-
-
   public function mycowSsoAction() {
     $this->view->eid = $this->_request->getParam('eid', 0);
     $this->view->uid = $this->_request->getParam('uid', 0);
   }
 
 
-  public function planetnemoAction() {
-    $planetnemo = new Class_Systeme_ModulesMenu_PlanetNemo();
-    $planetnemo->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($planetnemo, $planetnemo->getDynamiqueUrl());
+  public function simpleAction() {
+    $class_name = 'Class_Systeme_ModulesMenu_' . $this->_getParam('type', 'Null');
+    $this->simple(new $class_name());
   }
 
 
-  public function kidilanguesAction() {
-    $kidilangues = new Class_Systeme_ModulesMenu_Kidilangues();
-    $kidilangues->afterLoginRedirectTo($this->_request->getServer('HTTP_REFERER'));
-    $this->checkNotifyMessage($kidilangues, $kidilangues->getDynamiqueUrl());
+  protected function simple($link) {
+    $this->willRedirectToMe($link)
+         ->checkNotifyMessage($link, $link->getDynamiqueUrl());
+  }
+
+
+  protected function willRedirectToMe($link) {
+    $link->afterLoginRedirectTo(Class_Url::absolute($this->view->url()));
+    return $this;
   }
 
 
@@ -124,11 +102,4 @@ class ModulesController extends Zend_Controller_Action {
     $this->getResponse()->setHeader('Content-Type', 'text/html;charset=utf-8');
     $this->getResponse()->setBody('<script>window.location="'.$url.'";</script>');
   }
-
-
-  public function orthodidacteAction() {
-    $orthodidacte = new Class_Systeme_ModulesMenu_Orthodidacte();
-    $orthodidacte->afterLoginRedirectTo(Class_Url::absolute($this->view->url()));
-    $this->checkNotifyMessage($orthodidacte, $orthodidacte->getDynamiqueUrl());
-  }
 }
diff --git a/library/Class/Systeme/ModulesMenu/SSOAbstract.php b/library/Class/Systeme/ModulesMenu/SSOAbstract.php
index 20b418d2692..726f130c9ec 100644
--- a/library/Class/Systeme/ModulesMenu/SSOAbstract.php
+++ b/library/Class/Systeme/ModulesMenu/SSOAbstract.php
@@ -18,10 +18,10 @@
  * along with BOKEH; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
+
 abstract class Class_Systeme_ModulesMenu_SSOAbstract extends Class_Systeme_ModulesMenu_Null {
   protected $_login_redirect_url = null;
 
-
   public function afterLoginRedirectTo($url) {
     $this->_login_redirect_url = $url;
     return $this;
@@ -39,6 +39,11 @@ abstract class Class_Systeme_ModulesMenu_SSOAbstract extends Class_Systeme_Modul
       ? $this->urlForUser($user)
       : $this->loginUrl();
   }
+
+
+  public function urlForUser($user) {
+    return '';
+  }
 }
 
 ?>
\ No newline at end of file
diff --git a/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php b/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php
index 26333f5a8ec..f3d5516a193 100644
--- a/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php
+++ b/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php
@@ -116,14 +116,14 @@ class ModulesControllerKidilanguesLoggedV2Test extends ModulesControllerKidilang
 class ModulesControllerKidilanguesNotLoggedTest extends ModulesControllerKidilanguesActivatedTestCase {
   public function setUp() {
     parent::setUp();
-    $_SERVER['HTTP_REFERER'] = '/opac/modules/kidilangues';
+    $_SERVER['HTTP_REFERER'] = '/opac';
     $this->dispatch('/opac/modules/kidilangues', true);
   }
 
 
   /** @test */
   public function shouldRedirectToLogin() {
-    $this->assertContains('/auth/login?redirect='.urlencode('/opac/modules/kidilangues'),
+    $this->assertContains('/auth/login?redirect='.urlencode(ROOT_URL . BASE_URL . '/modules/kidilangues'),
                           $this->_response->getBody());
   }
 }
diff --git a/tests/application/modules/opac/controllers/ModulesControllerMyCowTest.php b/tests/application/modules/opac/controllers/ModulesControllerMyCowTest.php
index be82a624556..9716635a989 100644
--- a/tests/application/modules/opac/controllers/ModulesControllerMyCowTest.php
+++ b/tests/application/modules/opac/controllers/ModulesControllerMyCowTest.php
@@ -98,14 +98,14 @@ class ModulesControllerMyCowNotLoggedTest extends AbstractControllerTestCase {
     parent::setUp();
     ZendAfi_Auth::getInstance()->clearIdentity();
     RessourcesNumeriquesFixtures::activateMyCow();
-    $_SERVER['HTTP_REFERER'] = '/opac/modules/mycow';
+    $_SERVER['HTTP_REFERER'] = '/';
     $this->dispatch('/opac/modules/mycow', true);
   }
 
 
   /** @test */
   public function shouldRedirectToLogin() {
-    $this->assertContains('/auth/login?redirect='.urlencode('/opac/modules/mycow'),
+    $this->assertContains('/auth/login?redirect='.urlencode(ROOT_URL . BASE_URL . '/modules/mycow'),
                           $this->_response->getBody());
   }
 }
diff --git a/tests/application/modules/opac/controllers/ModulesControllerTest.php b/tests/application/modules/opac/controllers/ModulesControllerTest.php
index f99de206135..6eb4a604957 100644
--- a/tests/application/modules/opac/controllers/ModulesControllerTest.php
+++ b/tests/application/modules/opac/controllers/ModulesControllerTest.php
@@ -46,7 +46,7 @@ class ModulesControllerLoginRequiredTest extends AbstractControllerTestCase {
 
     $this->dispatch('/opac/modules/' . $action);
 
-    $this->assertContains('/auth/login?redirect='.urlencode($_SERVER['HTTP_REFERER']),
+    $this->assertContains('/auth/login?redirect='.urlencode(ROOT_URL . BASE_URL . '/modules/' . $action),
                           $this->_response->getBody());
   }
 }
-- 
GitLab