From 6170054a81a0c38f1d7cf8284d39ec2644fff246 Mon Sep 17 00:00:00 2001 From: Patrick Barroca <pbarroca@afi-sa.fr> Date: Thu, 16 Feb 2017 16:27:27 +0100 Subject: [PATCH] dev #50215 sso using standard controller/module_menu api --- .../opac/controllers/ModulesController.php | 14 ++++++-------- library/Class/DigitalResource.php | 9 +++++++++ library/Class/DigitalResource/ModuleMenu.php | 7 ++++++- library/Class/Notice/Sso.php | 13 +++++-------- .../digital_resources/Bibliondemand/Config.php | 16 +++++----------- .../Bibliondemand/ModuleMenu.php | 17 ++++++++++++++--- 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/application/modules/opac/controllers/ModulesController.php b/application/modules/opac/controllers/ModulesController.php index ed09d049c95..1fe1e1f449d 100644 --- a/application/modules/opac/controllers/ModulesController.php +++ b/application/modules/opac/controllers/ModulesController.php @@ -95,17 +95,15 @@ class ModulesController extends ZendAfi_Controller_Action { return; } - if ($url = (new Class_Notice_Sso($record))->getUrl()) { - $viewRenderer = $this->getHelper('ViewRenderer'); - $viewRenderer->setNoRender(); - $this->getResponse()->setHeader('Content-Type', 'text/html;charset=utf-8'); - $this->getResponse()->setBody('<script>window.location="'.$url.'";</script>'); + $sso_record = new Class_Notice_Sso($record); + if(!$module_menu = $sso_record->getModuleMenu()) { + $this->_helper->notify($this->_('Oups, l\'adresse de consultation de ce document est indeterminée')); + $this->_redirectToReferer(); return; } - $this->_helper->notify($this->_('Oups, l\'adresse de consultation de ce document est indeterminée')); - $this->_redirectToReferer(); - return; + $module_menu->setRecord($sso_record); + $this->simple($module_menu); } diff --git a/library/Class/DigitalResource.php b/library/Class/DigitalResource.php index 5e75e54e458..7adf793e87e 100644 --- a/library/Class/DigitalResource.php +++ b/library/Class/DigitalResource.php @@ -208,6 +208,15 @@ class Class_DigitalResource extends Class_Entity { } + public function getModuleMenuFor($name) { + $modules = $this->getModulesMenu(); + if(!isset($modules[$name])) + return null; + + return $modules[$name]; + } + + public function isPluginDocType($type) { if(!$type) return false; diff --git a/library/Class/DigitalResource/ModuleMenu.php b/library/Class/DigitalResource/ModuleMenu.php index e2c1ce6bf44..0fbe9c988a5 100644 --- a/library/Class/DigitalResource/ModuleMenu.php +++ b/library/Class/DigitalResource/ModuleMenu.php @@ -48,9 +48,14 @@ class Class_DigitalResource_ModuleMenu extends Class_Systeme_ModulesMenu_SSOAbst if ($user && $this->_config->hasRightAccess($user) && $this->_config->isEnabled()) - return $this->_config->getSsoUrl($user); + return $this->getSsoUrl($user); $this->setMessage($this->_config->getNotAllowedMessage()); return ''; } + + + protected function getSsoUrl($user) { + return $this->_config->getSsoUrl($user); + } } diff --git a/library/Class/Notice/Sso.php b/library/Class/Notice/Sso.php index 45d6b114ff9..2ab654de7a5 100644 --- a/library/Class/Notice/Sso.php +++ b/library/Class/Notice/Sso.php @@ -43,20 +43,17 @@ class Class_Notice_Sso extends Class_Entity { } - protected function getFirstPrivateUrl() { + public function getFirstPrivateUrl() { $urls = $this->getRecord()->get_subfield('956', 'u'); return reset($urls); } - public function getUrl() { + public function getModuleMenu() { if (!$this->isValid()) - return ''; + return null; - $agency = $this->getFirstCatalogAgency(); - $digital_resource = Class_DigitalResource::getInstance(); - - if ($config = $digital_resource->getPluginForSsoAction($agency)) - return $config->getSsoUrl(Class_Users::getIdentity(), $this->getFirstPrivateUrl()); + return Class_DigitalResource::getInstance() + ->getModuleMenuFor($this->getFirstCatalogAgency()); } } diff --git a/library/digital_resources/Bibliondemand/Config.php b/library/digital_resources/Bibliondemand/Config.php index 49c3ff0c6c1..d630edb866b 100644 --- a/library/digital_resources/Bibliondemand/Config.php +++ b/library/digital_resources/Bibliondemand/Config.php @@ -40,19 +40,13 @@ class Bibliondemand_Config extends Class_DigitalResource_Config { } - public function getSsoUrl($user, $url = '') { - if(!$this->isEnabled()) - return ''; - - if (!$user->isAbonnementValid()) - return ''; - - $sso = $this->getAdminVar('SSO_URL'); + public function hasRightAccess($user) { + return $user && $user->isAbonnementValid(); + } - if(!$url) - return $sso; - return $sso . '&' . http_build_query(['returnUrl' => $url]); + public function getSsoUrl($user) { + return $this->getAdminVar('SSO_URL'); } diff --git a/library/digital_resources/Bibliondemand/ModuleMenu.php b/library/digital_resources/Bibliondemand/ModuleMenu.php index a73463f7d05..ec498e46052 100644 --- a/library/digital_resources/Bibliondemand/ModuleMenu.php +++ b/library/digital_resources/Bibliondemand/ModuleMenu.php @@ -21,10 +21,21 @@ class Bibliondemand_ModuleMenu extends Class_DigitalResource_ModuleMenu { - public function urlForUser($user) { - if (!$url = $this->_config->getSsoUrl($user)) - $this->setMessage($this->_config->getNotAllowedMessage()); + protected $_record; + protected function getSsoUrl($user) { + $url = parent::getSsoUrl($user); + + if (!$this->_record + || (!$record_url = $this->_record->getFirstPrivateUrl())) return $url; + + return $url . '&' . http_build_query(['returnUrl' => $record_url]); + } + + + public function setRecord($record) { + $this->_record = $record; + return $this; } } \ No newline at end of file -- GitLab