diff --git a/VERSIONS_HOTLINE/180601 b/VERSIONS_HOTLINE/180601 new file mode 100644 index 0000000000000000000000000000000000000000..fcb30d082f518195d97fa6568a5a6cfd2e7ca07d --- /dev/null +++ b/VERSIONS_HOTLINE/180601 @@ -0,0 +1 @@ +hotline#180601 : Ajoute la redirection Cvs2 en accés site \ No newline at end of file diff --git a/library/digital_resources/Cvs2/Config.php b/library/digital_resources/Cvs2/Config.php index 160aadc1e08cf344e6f681b146269b27b9346f15..df27541b7b08db84321e555bc08dadcaf4a260d2 100644 --- a/library/digital_resources/Cvs2/Config.php +++ b/library/digital_resources/Cvs2/Config.php @@ -105,7 +105,7 @@ class Cvs2_Config extends Class_DigitalResource_Config { public function getSsoUrl(Class_Users $user) : string { - return $this->getAdminVar('CATALOG_URL'); + return (new Cvs2_Service($this))->getSiteAccessFor($user); } @@ -126,7 +126,7 @@ class Cvs2_Config extends Class_DigitalResource_Config { if ($this->_isAccesDirectFor($album)) return (new Cvs2_AccesDirect($album))->url(); - return $this->getAdminVar('CATALOG_URL') . ($album ? '/album/' . $album->getIdOrigine() : ''); + return $this->getSsoUrl($user) . ($album ? '/album/' . $album->getIdOrigine() : ''); } diff --git a/library/digital_resources/Cvs2/Service.php b/library/digital_resources/Cvs2/Service.php index 9218eb89ee93be6cef071050d9c9d65f24eb6236..aed04c4fa15b0e8019395e15cc85d05dc0846ad6 100644 --- a/library/digital_resources/Cvs2/Service.php +++ b/library/digital_resources/Cvs2/Service.php @@ -281,4 +281,42 @@ class Cvs2_Service extends Class_DigitalResource_Service { return $harvestedIds; } + + + public function getSiteAccessFor($user) { + $response = $this->_callSiteAccess($user); + + $parser = new Cvs_Service_Parser_SiteAccess; + $parser->parseXML($response); + + return $parser->isSuccess() ? $this->getConfig()->getAdminVar('CATALOG_URL') : ''; + } + + + protected function _callSiteAccess($user) { + $xml = $this->getSiteAccessXML($user); + return $this->httpPost($xml); + } + + + public function getSiteAccessXML($user) { + $this->_user = $user; + + $params = ['querystring' => '', + 'affichage' => 'complet']; + + $closure = function($xml, $params) { + $this->_appendSiteAccess($xml, $params); + }; + + return $this->_getXML('acces_site', $params, $closure); + } + + + protected function _appendSiteAccess($xml, $params) { + $body = $xml->getElementsByTagName('body')->item(0); + + $this->_cdataIn($xml, $body, 'querystring', urldecode($params['querystring'])); + $body->appendChild($xml->createElement('affichage', $params['affichage'])); + } } diff --git a/library/digital_resources/Cvs2/tests/Cvs2Test.php b/library/digital_resources/Cvs2/tests/Cvs2Test.php index f79a02b362f5db1860216ac72b8e187549c143c5..5595ebd5e71a10a2ff022e5cb0852d6c362b212c 100644 --- a/library/digital_resources/Cvs2/tests/Cvs2Test.php +++ b/library/digital_resources/Cvs2/tests/Cvs2Test.php @@ -39,6 +39,7 @@ abstract class Cvs2ActivatedTestCase extends AbstractControllerTestCase { Class_AdminVar::set('Cvs2_SOURCEPASSWORD', '22227'); Class_AdminVar::set('Cvs2_API_URL', 'http://cvs.api.org'); Class_AdminVar::set('Cvs2_LOGINTEST', 'cvs_login_test'); + Class_AdminVar::set('Cvs2_CATALOG_URL', 'http://cvs-site.com'); Cvs2_Service::setTimeSource((new TimeSourceForTest)->setTime(1369640315)); @@ -105,6 +106,42 @@ abstract class Cvs2ActivatedTestCase extends AbstractControllerTestCase { +class Cvs2ActivatedAccessSiteSsoTestCase extends Cvs2ActivatedTestCase { + + public function setUp() { + parent::setUp(); + + ZendAfi_Auth::getInstance()->logUser($this->_user); + + $web_client = $this->mock() + ->whenCalled('postData') + ->answers('<?xml version="1.0" encoding="UTF-8"?> +<response> + <success>1</success> + <key>f97cf6c572af9018f7f018a2220bce0d</key> + <time>1526288804</time> + <action>acces_site</action> + <data> + <url>https://rayonnages.mediatheques.fr/?ln=&con=090021b6dae3bf74759e4e0e47f754af&if=0</url> + <token>090021b6dae3bf74759e4e0e47f754af</token> + </data> +</response>'); + + Class_WebService_Abstract::setHttpClient($web_client); + } + + + /** @test */ + public function shouldRedirectToCvs2() { + $this->dispatch('/modules/cvs2/123', true); + $this->assertXPathContentContains('//script', + 'document.location.href="http://cvs-site.com', + $this->_response->getBody()); + } +} + + + abstract class Cvs2ActivatedAdminLoggedTestCase extends Cvs2ActivatedTestCase {