diff --git a/VERSIONS_WIP/120753 b/VERSIONS_WIP/120753 new file mode 100644 index 0000000000000000000000000000000000000000..674c918fa6a045c69f642c4337989a447480ae7c --- /dev/null +++ b/VERSIONS_WIP/120753 @@ -0,0 +1 @@ + - ticket #120753 : Ressource Numérique Kidilangues : tableau de bord disponible et possibilité de modifier l'url SSO \ No newline at end of file diff --git a/cosmogramme/sql/patch/patch_409.php b/cosmogramme/sql/patch/patch_409.php new file mode 100644 index 0000000000000000000000000000000000000000..6d423b47b4be073debcf2a053432ccbf39c65608 --- /dev/null +++ b/cosmogramme/sql/patch/patch_409.php @@ -0,0 +1,22 @@ +<?php +$adapter = Zend_Db_Table::getDefaultAdapter(); +$to_replace = ['KIDILANGUES_ID' => 'Kidilangues_ID', + 'KIDILANGUES_KEY' => 'Kidilangues_KEY', + 'KIDILANGUES_LOGIN' => 'Kidilangues_LOGIN', + 'KIDILANGUES_PWD' => 'Kidilangues_PWD', + 'KIDILANGUES_VERSION' => 'Kidilangues_VERSION', +]; + +foreach ($to_replace as $origin => $new) + $adapter->query('UPDATE bib_admin_var set clef="'.$new.'" where clef="'.$origin.'"'); +try { + $user_groups = $adapter->query('select * from user_groups where (POW(2,25) & rights_token) = POW(2,25)')->fetchAll(); + + foreach ( $user_groups as $user_group) { + if (current($adapter->query("select count(*) from user_group_permission where id_group =".$user_group['id']." and id_permission=(select id from permission where code='Kidilangues')")->fetch())) + continue; + if (!$adapter->query('select id from permission where code="Kidilangues"')->fetch()) + $adapter->query('insert into permission (code,module,type,sorting) values ("Kidilangues","","",0)') ; + $adapter->query("insert into user_group_permission(id_group,id_permission) values (".$user_group['id'].", (select id from permission where code='Kidilangues'))"); + } +} catch(Exception $e) {} diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index 85dcc74c4d1d287870f75a914f83d7730f6cfb43..7c595c761d8b7be4602cfe4725ea81345c6ee177 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -239,14 +239,6 @@ class Class_AdminVarLoader extends Storm_Model_Loader { 'LECTURA_DOMAIN' => Class_AdminVar_Meta::newDefault($this->_('Domaine utilisée par le serveur lectura pour authentification')), - 'KIDILANGUES_VERSION' => Class_AdminVar_Meta::newCombo($this->_('Version de Kidilangues.'), - ['options' => ['selectOptions' => ['label' => $this->_('Version'), - 'multioptions' => ['1' => '1', '2' => '2']]]])->bePrivate(), - 'KIDILANGUES_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'encodage Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(), - 'KIDILANGUES_ID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(), - 'KIDILANGUES_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login du portail fourni par Kidilangues.'))->bePrivate(), - 'KIDILANGUES_PWD' => Class_AdminVar_Meta::newDefault($this->_('Password du portail fourni par Kidilangues.'))->bePrivate(), - 'PREMIERCHAPITRE_BIB_ID' => Class_Adminvar_Meta::newDefault($this->_('Clé d\'identification Premier-Chapitre de la bibliothèque. Cette clé doit être fournie par Premier-Chapitre.'))->bePrivate(), 'PREMIERCHAPITRE_BMID' => Class_Adminvar_Meta::newDefault($this->_('Login du portail fourni par Premier-Chapitre.'))->bePrivate(), 'PREMIERCHAPITRE_BMKEY' => Class_Adminvar_Meta::newDefault($this->_('Password du portail fourni par Premier-Chapitre'))->bePrivate()]; @@ -863,14 +855,6 @@ Pour vous désabonner de la lettre d\'information, merci de cliquer sur le lien } - public function isKidilanguesEnabled() { - return ('' != Class_AdminVar::get('KIDILANGUES_ID')) - && ('' != Class_AdminVar::get('KIDILANGUES_KEY')) - && ('' != Class_AdminVar::get('KIDILANGUES_LOGIN')) - && ('' != Class_AdminVar::get('KIDILANGUES_PWD')); - } - - /** * @return bool */ diff --git a/library/Class/Systeme/ModulesMenu.php b/library/Class/Systeme/ModulesMenu.php index d0cfb7509473a64acc5808291ec281e1152ef650..7f1df95ab7859683fb1211c42b9f403bac7c251b 100644 --- a/library/Class/Systeme/ModulesMenu.php +++ b/library/Class/Systeme/ModulesMenu.php @@ -70,7 +70,6 @@ class Class_Systeme_ModulesMenu extends Class_Systeme_ModulesAbstract { 'ARTEVOD' => Class_Systeme_ModulesMenu_ArteVOD::class, 'MYCOW' => Class_Systeme_ModulesMenu_MyCow::class, 'PLANETNEMO' => Class_Systeme_ModulesMenu_PlanetNemo::class, - 'KIDLILANGUES' => Class_Systeme_ModulesMenu_Kidilangues::class, 'LESOCIAL' => Class_Systeme_ModulesMenu_LeSocial::class, 'RESERVER_POSTE' => Class_Systeme_ModulesMenu_ReserverPoste::class, 'SUGGESTION_ACHAT' => Class_Systeme_ModulesMenu_SuggestionAchat::class, diff --git a/library/Class/UserGroup.php b/library/Class/UserGroup.php index 7c429edc64a1e166c032e4b9f164863785233550..4a64bb4bcde1152062e1b38178fbd29065342479 100644 --- a/library/Class/UserGroup.php +++ b/library/Class/UserGroup.php @@ -200,7 +200,6 @@ class Class_UserGroup extends Storm_Model_Abstract { const RIGHT_ACCES_NUMERIQUEPREMIUM = 20; const RIGHT_ACCES_CYBERLIBRIS = 22; const RIGHT_ACCES_MYCOW = 24; - const RIGHT_ACCES_KIDILANGUES = 25; const RIGHT_ACCES_PNB_DILICOM = 26; const RIGHT_ACCES_PLANETNEMO = 27; const RIGHT_ACCESS_LESOCIAL = 29; @@ -262,7 +261,6 @@ class Class_UserGroup extends Storm_Model_Abstract { static::RIGHT_ACCES_NUMERIQUEPREMIUM => $t->_('Bibliothèque numérique: accéder à Numérique Premium'), static::RIGHT_ACCES_MYCOW => $t->_('Bibliothèque numérique: accéder à MyCOW.EU'), static::RIGHT_ACCES_PLANETNEMO => $t->_('Bibliothèque numérique: accéder à planetnemo.fr'), - static::RIGHT_ACCES_KIDILANGUES => $t->_('Bibliothèque numérique: accéder à Kidilangues'), static::RIGHT_ACCESS_LESOCIAL => $t->_('Bibliothèque numérique: accéder à Le Social'), static::RIGHT_ACCESS_CITEDELAMUSIQUE => $t->_('Bibliothèque numérique: accéder à La Cité de la musique'), static::RIGHT_ACCES_PNB_DILICOM => $t->_('Bibliothèque numérique: autoriser le prêt numérique Dilicom'), @@ -300,7 +298,6 @@ class Class_UserGroup extends Storm_Model_Abstract { 'Vodeclic' => [static::RIGHT_ACCES_VODECLIC], 'NumeriquePremium' => [static::RIGHT_ACCES_NUMERIQUEPREMIUM], 'MyCow' => [static::RIGHT_ACCES_MYCOW], - 'Kidilangues' => [static::RIGHT_ACCES_KIDILANGUES], 'LeSocial' => [static::RIGHT_ACCESS_LESOCIAL], 'CiteDeLaMusique' => [static::RIGHT_ACCESS_CITEDELAMUSIQUE], 'DilicomPNB' => [static::RIGHT_ACCES_PNB_DILICOM, diff --git a/library/Class/Users.php b/library/Class/Users.php index d8e029645dcd550af4f755a79e3a81749ce4d335..984bde2e082a9ce9c6e27902aefd638c81921f28 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -1026,12 +1026,6 @@ class Class_Users extends Storm_Model_Abstract { return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PLANETNEMO); } - - public function hasRightAccesKidilangues() { - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_KIDILANGUES); - } - - public function hasRightAccessDilicom() { return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_PNB_DILICOM); } diff --git a/library/digital_resources/Kidilangues/Config.php b/library/digital_resources/Kidilangues/Config.php new file mode 100644 index 0000000000000000000000000000000000000000..01218c043aa380433a5b378ee6391c33171b55ef --- /dev/null +++ b/library/digital_resources/Kidilangues/Config.php @@ -0,0 +1,66 @@ +<?php +/** + * Copyright (c) 2012-2017, 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 Kidilangues_Config extends Class_DigitalResource_Config { + + protected function _getConfig() { + return ['Introduction' => $this->_('Kidilangues propose plus de 100 activités en français et dans plusieurs langues pour les 3 à 10 ans. Ils naviguent dans un espace sécurisé en toute autonomie.'), + 'HelpLink' => 'http://wiki.bokeh-library-portal.org/index.php/Kidilangues', + 'Url' => 'http://kidilangues.fr', + 'Icon' => 'http://cdn.kidilangues.fr/images/logo.png', + + 'PermissionLabel' => $this->_('Bibliothèque numérique: accéder à la ressource Kidilangues'), + 'NotAllowedMessage' => $this->_('Votre compte n\'est pas autorisé à accéder à cette ressource.'), + + 'SsoAction' => true, + 'MenuLabel' => $this->_('Lien vers Kidilangues'), + 'ModuleMenu' => $this->withNameSpace('ModuleMenu'), + 'DocTypeLabel' => $this->_('ressource Kidilangues'), + + 'AdminVars' => ['SSO_URL' => Class_AdminVar_Meta::newDefault($this->_('URL SSO de la plateforme Kidilangues'), + ['value' => 'https://www.kidilangues.com/directaccess/mediatheque/'])->bePrivate(), + 'KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'encodage Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(), + 'ID' => Class_AdminVar_Meta::newDefault($this->_('Clé d\'identification Kidilangues pour le portail. Cette clé doit être fournie par Kidilangues.'))->bePrivate(), + 'LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login du portail fourni par Kidilangues.'))->bePrivate(), + 'PWD' => Class_AdminVar_Meta::newDefault($this->_('Password du portail fourni par Kidilangues.'))->bePrivate(), + 'VERSION' => Class_AdminVar_Meta::newCombo($this->_('Version de Kidilangues.'), + ['options' => ['selectOptions' => ['label' => $this->_('Version'), + 'multioptions' => ['1' => '1', '2' => '2']]]])->bePrivate() + ]]; + } + + + public function isEnabled() { + return ('' != $this->getAdminVar('ID')) + && ('' != $this->getAdminVar('KEY')) + && ('' != $this->getAdminVar('LOGIN')) + && ('' != $this->getAdminVar('PWD')); + } + + + public function getSsoUrl($user) { + if(!$user) + return ''; + $link = new Kidilangues_Link($user); + return $link->url($user); + } +} \ No newline at end of file diff --git a/library/Class/KidilanguesLink.php b/library/digital_resources/Kidilangues/Link.php similarity index 63% rename from library/Class/KidilanguesLink.php rename to library/digital_resources/Kidilangues/Link.php index 5f7069082032a536d0f9eb2b92dfd4aa46eb0f1e..82538651f5d8721798de48323aef5d0319340e38 100644 --- a/library/Class/KidilanguesLink.php +++ b/library/digital_resources/Kidilangues/Link.php @@ -19,43 +19,48 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_KidilanguesLink { +class Kidilangues_Link { use Trait_TimeSource; + protected $_user; - public static function staticUrl() { - return ['controller' => 'modules', - 'action' => 'kidilangues']; + public function __construct($user) { + $this->_user = $user; } - public function url() { - return call_user_func([$this, 'version' . (Class_AdminVar::get('KIDILANGUES_VERSION') == '2' - ? '2' - : '1')]); + public function getBaseUrl() { + return Kidilangues_Config::getInstance()->getAdminVar('SSO_URL'); } public function version1() { $params = []; - $params[] = Class_AdminVar::get('KIDILANGUES_ID'); - $params[] = md5(Class_AdminVar::get('KIDILANGUES_LOGIN')); - $params[] = $this->kidilanguesEncode(Class_AdminVar::get('KIDILANGUES_PWD')); + $params[] = Kidilangues_Config::getInstance()->getAdminVar('ID'); + $params[] = md5(Kidilangues_Config::getInstance()->getAdminVar('LOGIN')); + $params[] = $this->kidilanguesEncode(Kidilangues_Config::getInstance()->getAdminVar('PWD')); $params[] = 'cfcd208495d565ef66e7dff9f98764da/0'; - return 'http://www.kidilangues.fr/directaccess/biblio/' . implode('/', $params); + return $this->getBaseUrl() . implode('/', $params); } public function version2() { $params = []; - $params[] = Class_AdminVar::get('KIDILANGUES_ID'); - $params[] = Class_AdminVar::get('KIDILANGUES_LOGIN'); - $params[] = Class_AdminVar::get('KIDILANGUES_PWD'); + $params[] = Kidilangues_Config::getInstance()->getAdminVar('ID'); + $params[] = Kidilangues_Config::getInstance()->getAdminVar('LOGIN'); + $params[] = Kidilangues_Config::getInstance()->getAdminVar('PWD'); $params[] = 'cfcd208495d565ef66e7dff9f98764da'; $params[] = $this->kidilanguesEncode($this->getTimeSource()->time()); - return 'http://www.kidilangues.fr/directaccess/mediatheque/' . implode('/', $params); + return $this->getBaseUrl(). implode('/', $params); + } + + + public function url() { + return call_user_func([$this, 'version' . (Kidilangues_Config::getInstance()->getAdminVar('VERSION') == '2' + ? '2' + : '1')]); } @@ -67,9 +72,7 @@ class Class_KidilanguesLink { public function kidilanguesEncrypt($data_to_encrypt) { if(!$data_to_encrypt) return ''; - - $key = Class_AdminVar::get('KIDILANGUES_KEY'); + $key = Kidilangues_Config::getInstance()->getAdminVar('KEY'); return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data_to_encrypt, MCRYPT_MODE_CBC, md5($key)); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/Systeme/ModulesMenu/Kidilangues.php b/library/digital_resources/Kidilangues/ModuleMenu.php similarity index 52% rename from library/Class/Systeme/ModulesMenu/Kidilangues.php rename to library/digital_resources/Kidilangues/ModuleMenu.php index 548adf00fd7b3b6f8fea2b46d1fa2c61cd3f382b..c4b1e9d4117b22d596a769763708890160490ca4 100644 --- a/library/Class/Systeme/ModulesMenu/Kidilangues.php +++ b/library/digital_resources/Kidilangues/ModuleMenu.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * Copyright (c) 2012-2017, 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 @@ -19,29 +19,5 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Systeme_ModulesMenu_Kidilangues extends Class_Systeme_ModulesMenu_SSOAbstract { - protected - $_group = Class_Systeme_ModulesMenu::GROUP_MENU_ABONNES, - $_type_module = 'KIDILANGUES'; - - - public function __construct() { - parent::__construct(); - $this->_libelle = $this->_('Lien vers Kidilangues'); - $this->_url = Class_KidilanguesLink::staticUrl(); - } - - - public function urlForUser($user) { - if (!$user->hasRightAccesKidilangues() || !Class_AdminVar::isKidilanguesEnabled()) - return ''; - - return (new Class_KidilanguesLink())->url(); - } - - - public function isVisibleForProfil($profil) { - return Class_AdminVar::isKidilanguesEnabled(); - } -} \ No newline at end of file +class Kidilangues_ModuleMenu extends Class_DigitalResource_ModuleMenu {} \ No newline at end of file diff --git a/library/digital_resources/Kidilangues/controllers/IndexController.php b/library/digital_resources/Kidilangues/controllers/IndexController.php new file mode 100644 index 0000000000000000000000000000000000000000..ae7dfe1d473c15a3743a2d60fc14f3c141b9c1ad --- /dev/null +++ b/library/digital_resources/Kidilangues/controllers/IndexController.php @@ -0,0 +1,23 @@ +<?php +/** + * Copyright (c) 2012-2018, 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 Kidilangues_Plugin_IndexController extends Class_DigitalResource_Controller {} \ No newline at end of file diff --git a/library/digital_resources/Kidilangues/tests/KidilanguesTest.php b/library/digital_resources/Kidilangues/tests/KidilanguesTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c764fe02d7d2485f14e303cc74cef755a31aec63 --- /dev/null +++ b/library/digital_resources/Kidilangues/tests/KidilanguesTest.php @@ -0,0 +1,184 @@ +<?php +/** + * Copyright (c) 2012-2018, 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 + */ + + +abstract class KidilanguesActivatedTestCase extends AbstractControllerTestCase { + protected + $_storm_default_to_volatile = true, + $_user; + + public function setUp() { + parent::setUp(); + Class_AdminVar::set('Kidilangues_SSO_URL', 'https://test.org/api/bokeh/login/'); + RessourcesNumeriquesFixtures::activateKidilangues(); + $group = $this->fixture('Class_UserGroup', + ['id' => 1, + 'libelle' => 'Digital resources']); + + $this->_user = $this->fixture('Class_Users', + ['id' => 1, + 'login' => 'admin', + 'password' => 'pwd']) + ->setUserGroups([$group]); + + $this->fixture('Class_Permission', + ['id' => 1, + 'code' => 'Kidilangues']) + ->permitTo($group, new Class_Entity()); + } +} + + + + +class KidilanguesSsoV1Test extends KidilanguesActivatedTestCase { + + public function setUp() { + parent::setUp(); + ZendAfi_Auth::getInstance()->logUser($this->_user); + Class_AdminVar::set('Kidilangues_VERSION', 1); + $this->dispatch('/opac/modules/' . (new Class_DigitalResource)->getSsoActionForPlugin('Kidilangues'), true); + } + + + /** @test */ + public function shouldContainsScriptToRedirectToKidilangueSSOUrl() { + $this->assertXPathContentContains('//script', 'document.location.href="https://test.org/api/bokeh/login/dcc509a6f7a4238a0b95849bc4c23820/fc2f6178abeec3a91654adc3f22419fd/Ud4x5rY2DddxHOL9AuC3pNGbnlKua8e4HK2SiO8JwWc/cfcd208495d565ef66e7dff9f98764da/0";',$this->_response->getBody()); + } +} + + + + +class KidilanguesSsoV2Test extends KidilanguesActivatedTestCase { + + public function setUp() { + parent::setUp(); + Kidilangues_Link::setTimeSource(new TimeSourceForTest('2015-10-16 15:22:22')); + ZendAfi_Auth::getInstance()->logUser($this->_user); + Class_AdminVar::set('Kidilangues_VERSION', 2); + $this->dispatch('/opac/modules/' . (new Class_DigitalResource)->getSsoActionForPlugin('Kidilangues'), true); + } + + + /** @test */ + public function shouldContainsScriptToRedirectToKidilangueSSOUrl() { + $this->assertXPathContentContains('//script', 'document.location.href="https://test.org/api/bokeh/login/dcc509a6f7a4238a0b95849bc4c23820/afi/password/cfcd208495d565ef66e7dff9f98764da/YdeUSJ3yRfryGv2jalLR0gVVNoaLMlGiR43kK-aXlN0";',$this->_response->getBody()); + } +} + + + + +class KidilanguesUnloggedTest extends KidilanguesActivatedTestCase { + + public function setUp() { + parent::setUp(); + Kidilangues_Link::setTimeSource(new TimeSourceForTest('2015-10-16 15:22:22')); + ZendAfi_Auth::getInstance()->clearIdentity(); + Class_AdminVar::set('Kidilangues_VERSION', 2); + $this->dispatch('/opac/modules/' . (new Class_DigitalResource)->getSsoActionForPlugin('Kidilangues'), true); + } + + + /** @test */ + public function shouldRedirectToLogin() { + $this->assertRedirectTo(Class_Url::absolute('/auth/login?redirect='.urlencode(Class_Url::absolute('/modules/kidilangues')))); + } +} + + + + +class KidilanguesUnactivatedTest extends KidilanguesActivatedTestCase { + + public function setUp() { + parent::setUp(); + $_SERVER['HTTP_REFERER'] = '/index'; + RessourcesNumeriquesFixtures::deactivateKidilangues(); + Kidilangues_Link::setTimeSource(new TimeSourceForTest('2015-10-16 15:22:22')); + Class_AdminVar::set('Kidilangues_VERSION', 2); + $this->dispatch('/opac/modules/' . (new Class_DigitalResource)->getSsoActionForPlugin('Kidilangues'), true); + } + + + /** @test */ + public function shouldHaveAccessForbiddenMessage() { + $this->assertFlashMessengerContentContains('Votre compte n\'est pas autorisé à accéder à cette ressource.'); + } +} + + + + +class KidilanguesDashboardUnactivatedTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + + public function setUp() { + parent::setUp(); + $this->dispatch('/Kidilangues_Plugin', true); + } + + + /** @test */ + public function shouldDisplayDeactivated() { + $this->assertXPathContentContains('//button', 'Désactivé'); + } + + + /** @test */ + public function ssoUrlShoudlBeDisplay() { + $this->assertXPathContentContains('//table', 'Kidilangues_SSO_URL'); + } +} + + + + +class KidilanguesDashboardActivatedTest extends KidilanguesActivatedTestCase { + protected $_storm_default_to_volatile = true; + + + public function setUp() { + parent::setUp(); + + + ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', + ['id' => 2, + 'login' => 'admin', + 'password' => 'admin', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN])); + $this->dispatch('/Kidilangues_Plugin', true); + } + + + /** @test */ + public function shouldDisplayActivated() { + $this->assertXPathContentContains('//button', 'Activé'); + } + + + /** @test */ + public function urlSsoTitleBeDisplay() { + $this->assertXPathContentContains('//h4', 'URL SSO générée par /modules/' . (new Class_DigitalResource)->getSsoActionForPlugin('Kidilangues') . ' pour l\'utilisateur "Kidilangues_test_user"'); + } +} diff --git a/public/opac/js/digital_connectors.js b/public/opac/js/digital_connectors.js index 67c864cef4cb06cb3251e8b6daac3dddd7fad818..cbebfd1c310221bce416139ba0c81f351375066c 100644 --- a/public/opac/js/digital_connectors.js +++ b/public/opac/js/digital_connectors.js @@ -79,17 +79,6 @@ "name" : "", "url" : ""} }, - "KIDILANGUES": { - "label" : "Kidilangue", - "enabled": "isKidilanguesEnabled", - "url" : "http://www.kidilangues.fr/", - "image_url" : "https://bokeh-library-portal.org/userfiles/media/ressources_numeriques/kidilangues.jpg", - "desc": "Kidilangues propose plus de 100 activités en français et dans plusieurs langues pour les 3 à 10 ans. Ils naviguent dans un espace sécurisé en toute autonomie.", - "features": ["SSO"], - "sales_contact": {"mail" : "contact@kidilangues.fr", - "name" : "", - "url" : "http://www.kidilangues.fr/signup/registerSchool/"} - }, "LECTURA": { "label" : "Lectura", "enabled": "isLecturaEnabled", diff --git a/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php b/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php deleted file mode 100644 index 05644286c6c585f08b863d95fd3bd161150e19cb..0000000000000000000000000000000000000000 --- a/tests/application/modules/opac/controllers/ModulesControllerKidilanguesTest.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php -/** - * Copyright (c) 2012-2014, 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 - */ -include_once('tests/fixtures/RessourcesNumeriquesFixtures.php'); - - -abstract class ModulesControllerKidilanguesActivatedTestCase extends AbstractControllerTestCase { - public function setUp() { - parent::setUp(); - Storm_Model_Loader::defaultToVolatile(); - RessourcesNumeriquesFixtures::activateKidilangues(); - ZendAfi_Auth::getInstance()->clearIdentity(); - } - - - public function tearDown() { - Storm_Model_Loader::defaultToDb(); - RessourcesNumeriquesFixtures::deactivateKidilangues(); - parent::tearDown(); - } -} - - - -class ModulesControllerKidilanguesNoAccessRightTest extends ModulesControllerKidilanguesActivatedTestCase { - public function setUp() { - parent::setUp(); - ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', - ['id' => 1, - 'login' => 'admin', - 'password' => 'pwd'])); - - $this->dispatch('/opac/modules/kidilangues', true); - } - - - /** @test */ - public function shouldHaveAccessForbiddenMessage() { - $this->assertFlashMessengerContentContains('Votre abonnement ne permet pas d\'accéder à la ressource. Merci de contacter la médiathèque.'); - } -} - - -abstract class ModulesControllerKidilanguesLoggedTestCase extends ModulesControllerKidilanguesActivatedTestCase { - - public function setUp() { - parent::setUp(); - - $group = $this->fixture('Class_UserGroup', ['id' => 1]) - ->addRight(Class_UserGroup::RIGHT_ACCES_KIDILANGUES); - $group->save(); - - ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', - ['id' => 1, - 'login' => 'admin', - 'password' => 'pwd'])); - $user = Class_Users::getIdentity(); - $user->setUserGroups([$group]) - ->beAbonneSIGB() - ->save(); - } -} - -class ModulesControllerKidilanguesLoggedV1Test extends ModulesControllerKidilanguesLoggedTestCase { - - public function setUp() { - parent::setUp(); - - Class_AdminVar::set('KIDILANGUES_VERSION', 1); - $this->dispatch('/opac/modules/kidilangues', true); - } - - /** @test */ - public function shouldContainsScriptToRedirectToKidilangueSSOUrl() { - $this->assertXPathContentContains('//script', 'document.location.href="http://www.kidilangues.fr/directaccess/biblio/dcc509a6f7a4238a0b95849bc4c23820/fc2f6178abeec3a91654adc3f22419fd/Ud4x5rY2DddxHOL9AuC3pNGbnlKua8e4HK2SiO8JwWc/cfcd208495d565ef66e7dff9f98764da/0";'); - } -} - - - -class ModulesControllerKidilanguesLoggedV2Test extends ModulesControllerKidilanguesLoggedTestCase { - public function setUp() { - parent::setUp(); - - Class_KidilanguesLink::setTimeSource(new TimeSourceForTest('2015-10-16 15:22:22')); - Class_AdminVar::set('KIDILANGUES_VERSION', 2); - $this->dispatch('/opac/modules/kidilangues', true); - } - - - /** @test */ - public function shouldContainsScriptToRedirectToKidilangueSSOUrl() { - $this->assertXPathContentContains('//script', 'document.location.href="http://www.kidilangues.fr/directaccess/mediatheque/dcc509a6f7a4238a0b95849bc4c23820/afi/password/cfcd208495d565ef66e7dff9f98764da/YdeUSJ3yRfryGv2jalLR0gVVNoaLMlGiR43kK-aXlN0";'); - } -} - - - -class ModulesControllerKidilanguesNotLoggedTest extends ModulesControllerKidilanguesActivatedTestCase { - public function setUp() { - parent::setUp(); - $_SERVER['HTTP_REFERER'] = '/opac'; - $this->dispatch('/opac/modules/kidilangues', true); - } - - - /** @test */ - public function shouldRedirectToLogin() { - $this->assertContains('/auth/login?redirect='.urlencode(Class_Url::absolute('/modules/kidilangues')), - $this->_response->getBody()); - } -} - - - -class ModulesControllerKidilanguesDeactivateAndUserLoggedTest extends ModulesControllerKidilanguesActivatedTestCase { - public function setUp() { - parent::setUp(); - - RessourcesNumeriquesFixtures::deactivateKidilangues(); - - $_SERVER['HTTP_REFERER'] = '/index'; - $group = $this->fixture('Class_UserGroup', ['id' => 1]) - ->addRight(Class_UserGroup::RIGHT_ACCES_KIDILANGUES); - ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', - ['id' => 1, - 'login' => 'admin', - 'password' => 'pwd'])); - $user = Class_Users::getIdentity(); - $user->setUserGroups([$group])->save(); - - $this->dispatch('/opac/modules/kidilangues', true); - } - - - /** @test */ - public function shouldHaveAccessForbiddenMessage() { - $this->assertFlashMessengerContentContains('Votre abonnement ne permet pas d\'accéder à la ressource. Merci de contacter la médiathèque'); - } -} diff --git a/tests/db/UpgradeDBTest.php b/tests/db/UpgradeDBTest.php index 8963360defc24d54f8d174ef0f79bf1a1746a30d..1756020a92801ff7535342d7af9a995c85987b38 100644 --- a/tests/db/UpgradeDBTest.php +++ b/tests/db/UpgradeDBTest.php @@ -3803,3 +3803,45 @@ class UpgradeDB_408_Test extends UpgradeDBTestCase { $this->query("select * from variables where clef='flush_before_full'")->fetch()['groupe']); } } + + + + +class UpgradeDB_409_Test extends UpgradeDBTestCase { + public function prepare() { + $this->silentQuery('update bib_admin_var set clef="KIDILANGUES_LOGIN" WHERE clef="Kidilangues_LOGIN"'); + $this->silentQuery('update bib_admin_var set clef="KIDILANGUES_PWD" WHERE clef="Kidilangues_PWD"'); + $this->silentQuery('insert into user_groups(libelle, rights_token,id_cat,filters) values ("kidilanguestest" ,"33554468",0, "")'); + $this->silentQuery("delete from permission where code='Kidilangues'"); + } + + + public function tearDown() { + $this->silentQuery("delete from user_groups where libelle='kidilanguestest' and rights_token='33554468'"); + parent::tearDown(); + } + + + /** @test */ + public function KidilanguesAdminVarLOGINShouldBeChanged() { + $this->assertTrue(in_array('Kidilangues_LOGIN', current($this->query('select clef from bib_admin_var where clef like "KIDILANGUES_LOGIN"')->fetchAll()))); + } + + + /** @test */ + public function KidilanguesPermissionShouldBeCreated() { + $this->assertNotNull($this->query('select * from permission where code="Kidilangues"')->fetch()); + } + + + /** @test */ + public function KidilanguesAdminVarPWDShouldBeChanged() { + $this->assertTrue(in_array('Kidilangues_PWD', current($this->query('select clef from bib_admin_var where clef like "KIDILANGUES_PWD"')->fetchAll()))); + } + + + /** @test */ + public function KidilanguesUserGroupPermissionShouldBeCreated() { + $this->assertNotNull(current($this->query('select * from user_group_permission where id_permission = (select id from permission where code="Kidilangues")')->fetch())); + } +} diff --git a/tests/fixtures/RessourcesNumeriquesFixtures.php b/tests/fixtures/RessourcesNumeriquesFixtures.php index f9977ef7788f402d315c23b5ad5eead0380ed32c..0118d120931cfff12ec6eac8e0feac00ff03562b 100644 --- a/tests/fixtures/RessourcesNumeriquesFixtures.php +++ b/tests/fixtures/RessourcesNumeriquesFixtures.php @@ -186,18 +186,18 @@ class RessourcesNumeriquesFixtures { $key = '44f8d1e03fa8281584f0d2b13efcb4bdd0b2ef587001f34954a5d204ffc636a2'; $key = pack('H*', $key); - Class_AdminVar::newInstanceWithId('KIDILANGUES_KEY', ['valeur' => $key]); - Class_AdminVar::newInstanceWithId('KIDILANGUES_ID', ['valeur' => 'dcc509a6f7a4238a0b95849bc4c23820']); - Class_AdminVar::newInstanceWithId('KIDILANGUES_LOGIN', ['valeur' => 'afi']); - Class_AdminVar::newInstanceWithId('KIDILANGUES_PWD', ['valeur' => 'password']); + Class_AdminVar::newInstanceWithId('Kidilangues_KEY', ['valeur' => $key]); + Class_AdminVar::newInstanceWithId('Kidilangues_ID', ['valeur' => 'dcc509a6f7a4238a0b95849bc4c23820']); + Class_AdminVar::newInstanceWithId('Kidilangues_LOGIN', ['valeur' => 'afi']); + Class_AdminVar::newInstanceWithId('Kidilangues_PWD', ['valeur' => 'password']); } public static function deactivateKidilangues() { - Class_AdminVar::newInstanceWithId('KIDILANGUES_KEY', ['valeur' => '']); - Class_AdminVar::newInstanceWithId('KIDILANGUES_ID', ['valeur' => '']); - Class_AdminVar::newInstanceWithId('KIDILANGUES_LOGIN', ['valeur' => '']); - Class_AdminVar::newInstanceWithId('KIDILANGUES_PWD', ['valeur' => '']); + Class_AdminVar::newInstanceWithId('Kidilangues_KEY', ['valeur' => '']); + Class_AdminVar::newInstanceWithId('Kidilangues_ID', ['valeur' => '']); + Class_AdminVar::newInstanceWithId('Kidilangues_LOGIN', ['valeur' => '']); + Class_AdminVar::newInstanceWithId('Kidilangues_PWD', ['valeur' => '']); } diff --git a/tests/library/Class/KidilanguesLinkTest.php b/tests/library/Class/KidilanguesLinkTest.php deleted file mode 100644 index 7865f6b9a7316f69df48e1c678d726728f9144cd..0000000000000000000000000000000000000000 --- a/tests/library/Class/KidilanguesLinkTest.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php -/** - * Copyright (c) 2012-2014, 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 - */ - -include_once('tests/fixtures/RessourcesNumeriquesFixtures.php'); - - -abstract class KidilanguesLinkTestCase extends ModelTestCase { - public function setUp() { - parent::setUp(); - Storm_Model_Loader::defaultToVolatile(); - RessourcesNumeriquesFixtures::activateKidilangues(); - $group = $this->fixture('Class_UserGroup', ['id' => 1]) - ->addRight(Class_UserGroup::RIGHT_ACCES_KIDILANGUES); - $group->save(); - - ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', - ['id' => 1, - 'login' => 'admin', - 'password' => 'pwd'])); - $user = Class_Users::getIdentity(); - $user->setUserGroups([$group]) - ->beAbonneSIGB() - ->save(); - } - - - public function tearDown() { - Storm_Model_Loader::defaultToDb(); - RessourcesNumeriquesFixtures::deactivateKidilangues(); - ZendAfi_Auth::getInstance()->clearIdentity(); - parent::tearDown(); - } -} - - - -class KidilanguesLinkUrlForUserTest extends KidilanguesLinkTestCase { - protected $_link; - - public function setUp() { - parent::setUp(); - $this->_link = $link = new Class_KidilanguesLink(); - } - - - /** @test */ - public function encryptedPasswordShouldBeHasExpected() { - $this->assertEquals('Ud4x5rY2DddxHOL9AuC3pNGbnlKua8e4HK2SiO8JwWc=', base64_encode($this->_link->kidilanguesEncrypt(Class_AdminVar::get('KIDILANGUES_PWD')))); - } - - - /** @test */ - public function base64EncryptedPasswordShouldBeHasExpected() { - $encrypted_pwd = $this->_link->kidilanguesEncrypt(Class_AdminVar::get('KIDILANGUES_PWD')); - $this->assertEquals('WWqQeIopvisfbLvlYNuHjUop7JHZXizJ35aRYOu_eOQ', $this->_link->kidilanguesEncode($encrypted_pwd)); - } - -} \ No newline at end of file diff --git a/tests/library/Class/MoteurRechercheTest.php b/tests/library/Class/MoteurRechercheTest.php index 026cbe0bfd8b0e36ecfaf2ea3ed51db4b787e4da..406341c902adc1598c34b0490c42a255cdcd1950 100644 --- a/tests/library/Class/MoteurRechercheTest.php +++ b/tests/library/Class/MoteurRechercheTest.php @@ -337,12 +337,12 @@ class MoteurRechercheSimpleTest extends MoteurRechercheTestCase { [['expressionRecherche' => '', 'digital_lib' => '1'], 'nb_mots'=> 0, - 'req_liste' => $this->listSqlWith("(type_doc in ('100','101','102','103','104','105','106','109','110','111','112','113','115','116','117','119','Assimil','Bacon','Cvs','DiMusic','LaSourisQuiRaconte','Lekiosk','LesYeuxDoc','MaPetiteMediatheque','Musicme','Omeka','Skilleos','StoryPlayR','ToutApprendre','Whisperies'))")], + 'req_liste' => $this->listSqlWith("(type_doc in ('100','101','102','103','104','105','106','109','110','111','112','113','115','116','117','119','Assimil','Bacon','Cvs','DiMusic','Kidilangues','LaSourisQuiRaconte','Lekiosk','LesYeuxDoc','MaPetiteMediatheque','Musicme','Omeka','Skilleos','StoryPlayR','ToutApprendre','Whisperies'))")], [['expressionRecherche' => 'logo', 'digital_lib' => '1'], 'nb_mots'=> 1, - 'req_liste' => $this->listSqlWith($match_axes . " AGAINST('+(LOGO LOGOS LOGO)' IN BOOLEAN MODE) and (type_doc in ('100','101','102','103','104','105','106','109','110','111','112','113','115','116','117','119','Assimil','Bacon','Cvs','DiMusic','LaSourisQuiRaconte','Lekiosk','LesYeuxDoc','MaPetiteMediatheque','Musicme','Omeka','Skilleos','StoryPlayR','ToutApprendre','Whisperies'))", + 'req_liste' => $this->listSqlWith($match_axes . " AGAINST('+(LOGO LOGOS LOGO)' IN BOOLEAN MODE) and (type_doc in ('100','101','102','103','104','105','106','109','110','111','112','113','115','116','117','119','Assimil','Bacon','Cvs','DiMusic','Kidilangues','LaSourisQuiRaconte','Lekiosk','LesYeuxDoc','MaPetiteMediatheque','Musicme','Omeka','Skilleos','StoryPlayR','ToutApprendre','Whisperies'))", "(MATCH(titres) AGAINST(' LOGO') * 1.5) + (MATCH(auteurs) AGAINST(' LOGO')) desc")], [['expressionRecherche' => '', diff --git a/tests/library/Class/Systeme/ModulesMenuTest.php b/tests/library/Class/Systeme/ModulesMenuTest.php index 878f52b6bddcfe148236af995e11c53e3a125ee6..d4f87e4123c7333ecb97f4a0bca8ec5b5b86ceee 100644 --- a/tests/library/Class/Systeme/ModulesMenuTest.php +++ b/tests/library/Class/Systeme/ModulesMenuTest.php @@ -32,7 +32,6 @@ abstract class ModulesMenuBibNumeriqueTestCase extends ModelTestCase { ['CVS', 'CVS'], ['MYCOW', 'MyCOW.EU'], ['PLANETNEMO', 'planetnemo.fr'], - ['KIDILANGUES', 'Kidilangues'], ['LESOCIAL', 'Le Social'] ]; } diff --git a/tests/library/ZendAfi/View/Helper/Status/JsonTest.php b/tests/library/ZendAfi/View/Helper/Status/JsonTest.php index 8bbd444c8fee0e17d0abe0deff439e58117e66c0..4dac74780bbb107cc7ff9daa0dd505cd5dc97604 100644 --- a/tests/library/ZendAfi/View/Helper/Status/JsonTest.php +++ b/tests/library/ZendAfi/View/Helper/Status/JsonTest.php @@ -259,16 +259,6 @@ class ZendAfi_View_Helper_Status_JsonTest extends ZendAfi_View_Helper_Status_Tes $this->_report['digital_connectors']); } - /** @test */ - public function KidilanguesShouldEnabled() { - $this->assertContains(["code" => "KIDILANGUES", - "label" => "Kidilangue", - "enabled" => true, - "features" => ["SSO"], - ], - $this->_report['digital_connectors']); - } - /** @test */ public function JamendoShouldEnabled() {