From 28a03d0cfcd320e85e89e2f77dd0dfb642d36d55 Mon Sep 17 00:00:00 2001
From: gloas <gloas@afi-sa.fr>
Date: Wed, 2 May 2018 15:28:57 +0200
Subject: [PATCH] hotline #74731 try-sso action

---
 library/Class/DigitalResource/Config.php      | 32 +++++++++++++++++++
 library/Class/DigitalResource/Controller.php  | 11 +++++++
 .../View/Helper/DigitalResource/Dashboard.php | 27 +++-------------
 .../Skilleos/tests/SkilleosTest.php           | 24 ++++++++++++++
 4 files changed, 71 insertions(+), 23 deletions(-)

diff --git a/library/Class/DigitalResource/Config.php b/library/Class/DigitalResource/Config.php
index 763c7a957f4..84a2f333828 100644
--- a/library/Class/DigitalResource/Config.php
+++ b/library/Class/DigitalResource/Config.php
@@ -250,4 +250,36 @@ class Class_DigitalResource_Config extends Class_Entity {
     return $view->tag('p',
                       $this->_('Cette ressource ne prend pas en charge l\'affichage du l\'url de moissonnage'), ['class' => 'error']);
   }
+
+
+  public function getTestUser() {
+    $login = $this->getName() . '_test_user';
+    $user = ($user = Class_Users::findFirstBy(['login' => $login]))
+      ? $user
+      : Class_Users::newInstance(['login' => $login,
+                                      'password' => $login]);
+
+    $user->save();
+    $group = $this->getTestGroup();
+    $group->addUser($user)->save();
+
+    return $user;
+  }
+
+
+  public function getTestGroup() {
+    $group_name = $this->getName() . '_test_group';
+    $group = ($group = Class_UserGroup::findFirstBy(['libelle' => $group_name]))
+      ? $group
+      : Class_UserGroup::newInstance(['libelle' => $group_name]);
+
+    $group->save();
+
+    if(!$permission = Class_Permission::findFirstBy(['code' => $this->getName()]))
+       return $group;
+
+    $permission->permitTo($group, new Class_Entity());
+
+    return $group;
+  }
 }
\ No newline at end of file
diff --git a/library/Class/DigitalResource/Controller.php b/library/Class/DigitalResource/Controller.php
index 311a8676ee8..faabadc2616 100644
--- a/library/Class/DigitalResource/Controller.php
+++ b/library/Class/DigitalResource/Controller.php
@@ -62,6 +62,17 @@ class Class_DigitalResource_Controller extends ZendAfi_Controller_Action {
   }
 
 
+  public function trySsoAction() {
+    if (!Class_Users::getIdentity()->isSuperAdmin()) {
+      $this->_helper->notify($this->_('Vous n\'avez pas les droits suffisants pour utiliser cette fonctionnalité.'));
+      return $this->_redirectToReferer();
+    }
+
+    ZendAfi_Auth::getInstance()->logUser($this->_config->getTestUser());
+    $this->_forward('sso');
+  }
+
+
   protected function _afterLoginRedirectTo($url, $message = null) {
     if($message)
       $this->_helper->notify($message);
diff --git a/library/ZendAfi/View/Helper/DigitalResource/Dashboard.php b/library/ZendAfi/View/Helper/DigitalResource/Dashboard.php
index f555dc312ec..4cdbb544882 100644
--- a/library/ZendAfi/View/Helper/DigitalResource/Dashboard.php
+++ b/library/ZendAfi/View/Helper/DigitalResource/Dashboard.php
@@ -192,24 +192,8 @@ class ZendAfi_View_Helper_DigitalResource_Dashboard extends ZendAfi_View_Helper_
       return implode($html);
     }
 
-    $login = $this->_config->getName() . '_test_user';
-    $user = ($user = Class_Users::findFirstBy(['login' => $login]))
-      ? $user
-      : Class_Users::newInstance(['login' => $login,
-                                  'password' => $login]);
-
-    $user->save();
-
-    if(!$permission = Class_Permission::findFirstBy(['code' => $this->_config->getName()]))
-      return implode($html);
-
-    $group_name = $this->_config->getName() . '_test_group';
-    $group = ($group = Class_UserGroup::findFirstBy(['libelle' => $group_name]))
-      ? $group
-      : Class_UserGroup::newInstance(['libelle' => $group_name]);
-
-    $group->addUser($user)->save();
-    $permission->permitTo($group, new Class_Entity());
+    $user = $this->_config->getTestUser();
+    $group = $this->_config->getTestGroup();
 
     $html [] = $this->_tag('h5', $this->_('Groupe créé pour ce test'))
       . $this->_tag('ul',
@@ -241,11 +225,8 @@ class ZendAfi_View_Helper_DigitalResource_Dashboard extends ZendAfi_View_Helper_
       . $this->_tag('pre', $url)
       . $this->view->button((new Class_Entity)
                             ->setUrl($this->view->url(['action' => 'try-sso']))
-                            ->setText($this->_('Essayer le SSO'))
-                            ->setAttribs(['title' =>
-                                          $this->_('Essayez de vous connecter en SSO à la plateforme "%s" avec l\'utilisateur "%s"',
-                                                   $this->_config->getName(),
-                                                   $user->getLogin())]));
+                            ->setText($this->_('Essayer le SSO avec l\'utilisateur "%s"',
+                                               $user->getLogin())));
 
     if(!$this->_config->getSsoValidateUrl()) {
       $html [] = $this->_tag('p', $this->_('Cette ressource ne prend pas en charge la validation du ticket de connexion SSO'), ['class' => 'error']) ;
diff --git a/library/digital_resources/Skilleos/tests/SkilleosTest.php b/library/digital_resources/Skilleos/tests/SkilleosTest.php
index 6de1e0edd7e..f93255d6371 100644
--- a/library/digital_resources/Skilleos/tests/SkilleosTest.php
+++ b/library/digital_resources/Skilleos/tests/SkilleosTest.php
@@ -387,4 +387,28 @@ class SkilleosDashboardTest extends SkilleosServiceTestCase {
   public function getCatalogueUrlShouldBePresent() {
     $this->assertXPathContentContains('//pre', 'http://moncompte.skilleos.com/rest/api/trainings');
   }
+}
+
+
+
+
+class SkilleosDashboardTrySsoTest extends SkilleosServiceTestCase {
+  public function setUp() {
+    parent::setUp();
+
+    $user = $this->fixture('Class_Users',
+                           ['id' => 5,
+                            'login' => 'super_admin',
+                            'password' => 'super',
+                            'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN]);
+
+    ZendAfi_Auth::getInstance()->logUser($user);
+    $this->dispatch('/Skilleos_Plugin/index/try-sso', true);
+  }
+
+
+  /** @test */
+  public function shouldJavascriptRedirectToMoncompteDotSkilleos() {
+    $this->assertXPathContentContains('//script', 'document.location.href="http://skilleos.com/sigb/sso/?casid=QUEST&ticket');
+  }
 }
\ No newline at end of file
-- 
GitLab