diff --git a/application/modules/admin/controllers/AccueilController.php b/application/modules/admin/controllers/AccueilController.php index 27792abc7b324e8eb8a7f306a006e71eba2646c6..47c99d2c9bb5c7c29fdfa2eab969c35b9510e734 100644 --- a/application/modules/admin/controllers/AccueilController.php +++ b/application/modules/admin/controllers/AccueilController.php @@ -152,11 +152,6 @@ class Admin_AccueilController extends Zend_Controller_Action { public function loginAction() { - $this->view->getHelper('ComboProfils') - ->setTagId('profil_redirect') - ->setTagName('profil_redirect') - ->addEmptyOption(); - $this->_simpleAction(); } diff --git a/application/modules/admin/views/scripts/modules/auth_form.phtml b/application/modules/admin/views/scripts/modules/auth_form.phtml index 4b8f12f734ffab60176177fd84a3fda077958262..409e5a6fcdf99b59af1104c0304c14633149de5d 100644 --- a/application/modules/admin/views/scripts/modules/auth_form.phtml +++ b/application/modules/admin/views/scripts/modules/auth_form.phtml @@ -66,7 +66,6 @@ <td class="gauche"><input type="text" name="lien_compte" size="50" value="<?php print($this->preferences["lien_compte"]); ?>"></td> </tr> - <tr> <td class="droite">Libelle lien nouveau compte </td> <td class="gauche"><input type="text" name="lien_creer_compte" size="50" value="<?php print($this->preferences["lien_creer_compte"]); ?>"></td> @@ -75,7 +74,24 @@ <tr> <td class="droite">Basculer automatiquement sur le profil: </td> <td class="gauche"> - <?php echo $this->ComboProfils('ALL', 'ALL', $this->preferences['profil_redirect']); + <?php + $this->getHelper('ComboProfils') + ->setTagId('profil_redirect') + ->setTagName('profil_redirect') + ->addEmptyOption(); + echo $this->comboProfils('ALL', 'ALL', $this->preferences['profil_redirect']); + ?> + </td> +</tr> + +<tr> + <td class="droite">Déconnexion : basculer sur le profil: </td> + <td class="gauche"> + <?php $this->getHelper('ComboProfils') + ->setTagId('profil_logout_redirect') + ->setTagName('profil_logout_redirect') + ->addEmptyOption(); + echo $this->comboProfils('ALL', 'ALL', $this->preferences['profil_logout_redirect']); ?> </td> </tr> diff --git a/application/modules/opac/controllers/AuthController.php b/application/modules/opac/controllers/AuthController.php index 70e6c899a493628f74d3d6a3f6048756d9cc1429..b28b4a2bf0d1180d95c384fa0d55d2eb5127b397 100644 --- a/application/modules/opac/controllers/AuthController.php +++ b/application/modules/opac/controllers/AuthController.php @@ -18,18 +18,14 @@ * along with AFI-OPAC 2.0; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// OPAC3: AUTHENTIFICATION ABONNE -// -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class AuthController extends ZendAfi_Controller_Action { - function init() { + public function init() { $this->view->locale = Zend_Registry::get('locale'); } - function indexAction() { + public function indexAction() { $this->_redirect('/opac'); } @@ -43,10 +39,12 @@ class AuthController extends ZendAfi_Controller_Action { return $this->_request->getParam('service'); } + public function notify($message) { $this->_helper->notify($message); } + public function getRedirectDefaultUrl() { return $this->_request->getParam('redirect','/opac'); } @@ -57,7 +55,6 @@ class AuthController extends ZendAfi_Controller_Action { } - public function _authenticate() { $f = new Zend_Filter_StripTags(); $username = $f->filter($this->_request->getPost('username')); @@ -77,7 +74,7 @@ class AuthController extends ZendAfi_Controller_Action { } - function loginAction() { + public function loginAction() { $this->view->preferences = Class_Profil::getCurrentProfil()->getCfgModulesPreferences('auth','login'); $redirect = $this->_getParam('redirect', '/opac'); $this->view->redirect = $redirect; @@ -92,7 +89,7 @@ class AuthController extends ZendAfi_Controller_Action { } - function ajaxLoginAction(){ + public function ajaxLoginAction(){ $this->view->preferences = Class_Profil::getCurrentProfil()->getCfgModulesPreferences('auth','login'); $strategy = Auth_Strategy_Abstract::strategyForController($this); $strategy->disableRedirect(); @@ -109,7 +106,7 @@ class AuthController extends ZendAfi_Controller_Action { } - function popupLoginAction() { + public function popupLoginAction() { $page_settings = Class_Profil::getCurrentProfil()->getCfgModulesPreferences('auth','login'); $widget_settings = Class_Profil::getCurrentProfil()->getModuleAccueilPreferencesByType('LOGIN'); $this->view->preferences = @@ -118,7 +115,7 @@ class AuthController extends ZendAfi_Controller_Action { :( $page_settings ? $page_settings : []); - //$this->view->preferences = + $this->view->redirect = $this->_getParam('redirect'); $this->renderPopupResult($this->view->_('Authentification'), @@ -126,23 +123,21 @@ class AuthController extends ZendAfi_Controller_Action { } - function boiteLoginAction() { + public function boiteLoginAction() { $this->view->preferences = Class_Profil::getCurrentProfil()->getModuleAccueilPreferencesByType('LOGIN'); $strategy = Auth_Strategy_Abstract::strategyForController($this); $strategy->setDefaultUrl($this->_request->getServer('HTTP_REFERER')); $strategy->processLogin(); - } - function ajaxlostpassAction() { - if($_POST) - { - $user=ZendAfi_Filters_Post::filterStatic($this->_request->getPost('username')); + public function ajaxlostpassAction() { + if ($this->_request->isPost()) { + $user = ZendAfi_Filters_Post::filterStatic($this->_request->getPost('username')); $classe_user = new Class_Users(); - $ret=$classe_user->lostpass($user); - $this->view->message=$this->messages[$ret["error"]]; - $this->view->message_mail=$ret["message_mail"]; + $ret = $classe_user->lostpass($user); + $this->view->message = $this->messages[$ret["error"]]; + $this->view->message_mail = $ret["message_mail"]; } $this->view->username=$user; $viewRenderer = $this->getHelper('ViewRenderer'); @@ -150,14 +145,15 @@ class AuthController extends ZendAfi_Controller_Action { } - function logoutAction() { + public function logoutAction() { ZendAfi_Auth::getInstance()->clearIdentity(); - $this->_redirectToParentProfil(); + $profil = Class_Profil::getCurrentProfil(); + $this->_redirectToLogoutProfil($profil->getModuleAccueilPreferencesByType('LOGIN')); } - function lostpassAction() { - if($_POST) { + public function lostpassAction() { + if($this->_request->isPost()) { $user = ZendAfi_Filters_Post::filterStatic($this->_request->getPost('username')); $classe_user = new Class_Users(); $ret=$classe_user->lostpass($user); @@ -168,32 +164,29 @@ class AuthController extends ZendAfi_Controller_Action { } - function registerAction() { + public function registerAction() { if (Class_AdminVar::get('INTERDIRE_ENREG_UTIL')) $this->_redirect('/'); - if ($this->_request->isPost()) - { + if ($this->_request->isPost()) { // recup _post - $data=ZendAfi_Filters_Post::filterStatic($this->_request->getPost()); + $data = ZendAfi_Filters_Post::filterStatic($this->_request->getPost()); $class_user = new Class_Users(); $ret=$class_user->registerUser($data); // Affichage des erreurs - if($ret["error"]) - { + if($ret['error']) { $this->view->cle = $this->getCleActivation(); - $this->view->login = $data["login"]; - $this->view->email = $data["mail"]; - $this->view->error = '<div align="center" class="error">'.$ret["error"].'</div>'; + $this->view->login = $data['login']; + $this->view->email = $data['mail']; + $this->view->error = '<div align="center" class="error">' . $ret['error'] . '</div>'; } - $this->view->message_mail=$ret["message_mail"]; + $this->view->message_mail = $ret['message_mail']; } // Opération terminée - if($this->view->message_mail) - { - $this->view->titre=$this->view->_("Votre demande d'inscription"); + if($this->view->message_mail) { + $this->view->titre = $this->view->_("Votre demande d'inscription"); $viewRenderer = $this->getHelper('ViewRenderer'); $viewRenderer->renderScript('auth/message.phtml'); } @@ -203,11 +196,8 @@ class AuthController extends ZendAfi_Controller_Action { $this->view->cle = $this->getCleActivation(); } -//------------------------------------------------------------------------------------------------------ -// Activation d'une nouvelle inscription -//------------------------------------------------------------------------------------------------------ - function activeuserAction() - { + + public function activeuserAction() { if (!$cle = $this->_request->getParam('c')) $this->_redirect('/'); @@ -217,11 +207,8 @@ class AuthController extends ZendAfi_Controller_Action { $this->view->info = urldecode(str_replace('%0D%0A',"<br />", $info)); } -//------------------------------------------------------------------------------------------------------ -// Captcha -//------------------------------------------------------------------------------------------------------ - function generatecaptchaAction() - { + + public function generatecaptchaAction() { $md5_hash = md5(rand(0,999)); $security_code = substr($md5_hash, 15, 5); @@ -231,23 +218,20 @@ class AuthController extends ZendAfi_Controller_Action { $white = ImageColorAllocate($image, 255, 255, 255); // bg image ImageString($image, 3, 30, 3, $security_code, $white); - header("Content-Type: image/jpeg"); + header('Content-Type: image/jpeg'); ImageJpeg($image); $viewRenderer = $this->getHelper('ViewRenderer'); $viewRenderer->setNoRender(); } -//------------------------------------------------------------------------------------------------------ -// genere une cle aleatoire pour l'activation de compte par URL -//------------------------------------------------------------------------------------------------------ - function getCleActivation() { + + public function getCleActivation() { $cle = ''; - for ($i=0; $i< 10; $i++) - { - $nb_ascii = rand(1,26) + 64 ; - $cle.=chr($nb_ascii).rand(0,9); + for ($i=0; $i< 10; $i++) { + $nb_ascii = rand(1, 26) + 64 ; + $cle .= chr($nb_ascii) . rand(0, 9); } - return($cle); + return $cle; } } @@ -255,8 +239,8 @@ class AuthController extends ZendAfi_Controller_Action { abstract class Auth_Strategy_Abstract { - protected $redirect_url=''; - protected $disable_redirect=false; + protected $redirect_url = ''; + protected $disable_redirect = false; static public function strategyForController($controller) { if ($controller->isCasRequest() && static::isLogged()) @@ -273,7 +257,7 @@ abstract class Auth_Strategy_Abstract { static protected function isLogged() { - return Class_Users::getIdentity(); + return Class_Users::getIdentity(); } public function disableRedirect() { @@ -281,8 +265,8 @@ abstract class Auth_Strategy_Abstract { } public function __construct($controller) { - $this->controller=$controller; - $this->default_url=$this->controller->getRedirectDefaultUrl(); + $this->controller = $controller; + $this->default_url = $this->controller->getRedirectDefaultUrl(); } public function getRequest(){ diff --git a/library/Class/Profil.php b/library/Class/Profil.php index 4e03eb9aa2ff089b7a7fc768166d7e7c3b6b96c5..bc0a376dc8cf7b41b2507c63372f96dbd8bc10c9 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -413,19 +413,22 @@ class Class_Profil extends Storm_Model_Abstract { * @return array */ public function getOrCreateConfigAccueil($id_module, $type_module) { + if ($this->isTypeBoiteInBanniere($type_module)) + return $this->getModuleAccueilPreferencesByType($type_module); + $cfg_accueil = $this->getCfgAccueilAsArray(); - if (array_isset($id_module, $cfg_accueil['modules'])) - $module = $cfg_accueil['modules'][$id_module]; - else - $module = array('preferences' => array()); + $module = (array_isset($id_module, $cfg_accueil['modules'])) ? + $cfg_accueil['modules'][$id_module] : + ['preferences' => []]; $preferences = []; if (array_isset('preferences', $module)) $preferences = $module['preferences']; $preferences = array_merge($preferences, ['id_module' => $id_module]); - $default_values = Class_Systeme_ModulesAccueil::getInstance()->getValeursParDefaut($type_module); + $default_values = Class_Systeme_ModulesAccueil::getInstance() + ->getValeursParDefaut($type_module); return array_merge($default_values, $preferences); } @@ -448,8 +451,16 @@ class Class_Profil extends Storm_Model_Abstract { * @return Class_Profil */ public function updateModuleConfigAccueil($id_module, $module_config) { + if (isset($module_config['division']) + && (self::DIV_BANNIERE == $module_config['division']) + && $this->hasParentProfil()) { + $this->getParentProfil() + ->updateModuleConfigAccueil($id_module, $module_config) + ->save(); + return $this; + } - $cfg_accueil=$this->getCfgAccueilAsArray(); + $cfg_accueil = $this->getCfgAccueilAsArray(); $cfg_accueil['modules'][$id_module] = $module_config; $this->setCfgAccueil($cfg_accueil); return $this; @@ -503,34 +514,40 @@ class Class_Profil extends Storm_Model_Abstract { * @param int $id_module * @return array | null */ - public function getModuleAccueilConfig($id_module){ - $cls_module = Class_Systeme_ModulesAccueil::getInstance(); + public function getModuleAccueilConfig($id_module) { + if ($this->hasParentProfil()) { + $parent_config = $this->getParentProfil()->getModuleAccueilConfig($id_module); + if (isset($parent_config['division']) + && (self::DIV_BANNIERE == $parent_config['division'])) + return $parent_config; + } $cfg_accueil = $this->getCfgAccueilAsArray(); $modules_config = $cfg_accueil['modules']; if (array_key_exists($id_module, $modules_config)) { if (!is_array($modules_config[$id_module])) - $modules_config[$id_module] = array(); + $modules_config[$id_module] = []; - $module = array_merge(array('type_module' => null, - 'preferences' => array()), + $module = array_merge(['type_module' => null, + 'preferences' => []], $modules_config[$id_module]); - $default_prefs = $cls_module->getValeursParDefaut($module['type_module']); + $default_prefs = Class_Systeme_ModulesAccueil::getInstance() + ->getValeursParDefaut($module['type_module']); $default_prefs = array_merge($default_prefs,['id_module' => $id_module]); - if (!array_isset('preferences', $module)) - $module['preferences'] = $default_prefs; - else - $module['preferences'] = array_merge($default_prefs, $module['preferences']); + $module['preferences'] = (!array_isset('preferences', $module)) ? + $default_prefs : array_merge($default_prefs, $module['preferences']); return $module; } + return []; } - /* + + /** * @param string $type_module * @return array | null */ diff --git a/library/Class/Systeme/ModulesAccueil/Login.php b/library/Class/Systeme/ModulesAccueil/Login.php index 5a91f2973f49eae71f7c60a14d608499f9ba3603..e7a2b0d89bef512de46e5c93e2525cf3c8d08abf 100644 --- a/library/Class/Systeme/ModulesAccueil/Login.php +++ b/library/Class/Systeme/ModulesAccueil/Login.php @@ -55,7 +55,8 @@ class Class_Systeme_ModulesAccueil_Login extends Class_Systeme_ModulesAccueil_Nu 'lien_compte' => '» Mon compte', 'lien_deconnection' => '» Se déconnecter', 'autocomplete_off' => 1 ,// si == 1, rajoute autocomplete="off" au formulaire - 'profil_redirect' => '0' + 'profil_redirect' => '0', + 'profil_logout_redirect' => '0' ]; } ?> \ No newline at end of file diff --git a/library/Class/WebService/BibNumerique/Numilog.php b/library/Class/WebService/BibNumerique/Numilog.php index 5b4e65ef291efd20e71519cd4b34f4ecc7474b3c..7b04715e1d7040dab743c8feee9dcb8f06e2ca20 100644 --- a/library/Class/WebService/BibNumerique/Numilog.php +++ b/library/Class/WebService/BibNumerique/Numilog.php @@ -53,7 +53,6 @@ class Class_WebService_BibNumerique_Numilog extends Class_WebService_BibNumeriqu protected function _deleteNonHarvested() { - if (0 < count($this->getHarvestedIds())) Class_Album::getLoader() ->deleteBy(['where' => 'url_origine="'.self::BASE_URL.'" and id_origine not in (\'' . implode("', '", $this->getHarvestedIds()) . '\')']); diff --git a/library/ZendAfi/Controller/Action.php b/library/ZendAfi/Controller/Action.php index fc0100b4c8a829f022d51890de6a89c508ae6fb1..81832e2c78f9016ac35e272aa500beea3243147c 100644 --- a/library/ZendAfi/Controller/Action.php +++ b/library/ZendAfi/Controller/Action.php @@ -142,8 +142,19 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action { protected function _redirectToParentProfil() { - $current_profil = Class_Profil::getCurrentProfil(); - $this->_redirect($current_profil->hasParentProfil() ? '/opac/index/index/id_profil/'.$current_profil->getParentProfil()->getId() : '/'); + $profil = Class_Profil::getCurrentProfil(); + $url = $profil->hasParentProfil() ? + '/opac/index/index/id_profil/' . $profil->getParentProfil()->getId() : + '/'; + $this->_redirect($url); + } + + + protected function _redirectToLogoutProfil($preferences) { + $target = (int)$preferences['profil_logout_redirect']; + (0 < $target) ? + $this->_redirect('/opac/index/index/id_profil/' . $target) : + $this->_redirectToParentProfil(); } diff --git a/library/ZendAfi/View/Helper/ComboProfils.php b/library/ZendAfi/View/Helper/ComboProfils.php index 41119de64b54dfb2b7d60fe9c8dbabf467107528..468cce5465cb1c3d21f95c0e54e67fce9a037f24 100644 --- a/library/ZendAfi/View/Helper/ComboProfils.php +++ b/library/ZendAfi/View/Helper/ComboProfils.php @@ -18,9 +18,6 @@ * along with AFI-OPAC 2.0; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -////////////////////////////////////////////////////////////////////////////////////////////////////// -// OPAC3 - Combo des menu paramétrés -////////////////////////////////////////////////////////////////////////////////////////////////////// class ZendAfi_View_Helper_ComboProfils extends ZendAfi_View_Helper_BaseHelper { protected @@ -31,15 +28,15 @@ class ZendAfi_View_Helper_ComboProfils extends ZendAfi_View_Helper_BaseHelper { $_id_zone, $_id_bib; - function comboProfils($id_zone='ALL', $id_bib='ALL', $id_profil=1, $autoload=false, $empty_option = false) { + public function comboProfils($id_zone='ALL', $id_bib='ALL', $id_profil=1, + $autoload=false, $empty_option=false) { $this->_select_profil_id = $id_profil; - if($empty_option) + if ($empty_option) $this->addEmptyOption(); $this->_id_zone = 'ALL'; $this->_id_bib = 'ALL'; - return $this->renderSelect($autoload, - $this->renderProfilsByBibGroups()); + return $this->renderSelect($autoload, $this->renderProfilsByBibGroups()); } @@ -71,35 +68,36 @@ class ZendAfi_View_Helper_ComboProfils extends ZendAfi_View_Helper_BaseHelper { public function renderSelect($autoload ,$content) { - $onchange=''; - if($autoload==true) - $onchange=' onchange="window.location=\''.BASE_URL.'?id_profil=\' + this.value"'; - if ($this->_add_empty_option) - $content = '<option value=""></option>'.$content; + $content = '<option value=""></option>' . $content; + + $extra = ''; + if ($autoload) + $extra = ' onchange="window.location=\''.BASE_URL.'?id_profil=\' + this.value"'; - return '<select id="'.$this->_select_id.'" name="'.$this->_select_name.'"'.$onchange.'>'.$content.'</select>'; + return sprintf('<select id="%s" name="%s"%s>%s</select>', + $this->_select_id, $this->_select_name, $extra, $content); } public function getProfilsByBib() { - $profils = Class_Profil::getLoader()->findAllByZoneAndBib($this->_id_zone, - $this->_id_bib); - $profils_by_bib = array(); + $profils = Class_Profil::findAllByZoneAndBib($this->_id_zone, + $this->_id_bib); + $profils_by_bib = []; foreach ($profils as $profil) { - if ($profil->hasParentProfil()) continue; + if ($profil->hasParentProfil()) + continue; - if ($profil->isInPortail()) { - $libelle = $this->translate()->_('Portail'); - } else { - $libelle = $profil->getBibLibelle(); - } + $libelle = ($profil->isInPortail()) ? + $this->translate()->_('Portail') : + $profil->getBibLibelle(); if (!array_key_exists($libelle, $profils_by_bib)) - $profils_by_bib[$libelle] = array(); + $profils_by_bib[$libelle] = []; - $profils_by_bib[$libelle] []= $profil; + $profils_by_bib[$libelle][]= $profil; } + ksort($profils_by_bib); return $profils_by_bib; @@ -122,7 +120,8 @@ class ZendAfi_View_Helper_ComboProfils extends ZendAfi_View_Helper_BaseHelper { public function renderProfilOption($profil, $libelle) { - $selected = ($this->_select_profil_id == $profil->getId()) ? 'selected="selected"' : ''; + $selected = ($this->_select_profil_id == $profil->getId()) + ? 'selected="selected"' : ''; return '<option value="'.$profil->getId().'" '.$selected.'>'.$libelle.'</option>'; } } \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/AccueilControllerTest.php b/tests/application/modules/admin/controllers/AccueilControllerTest.php index 8f9b27d90f5f950c6874fe4eb94317850202ea7c..c0a876410c530bfa6ecb56d72bc4b6bc6528a8a4 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerTest.php @@ -21,26 +21,37 @@ require_once 'AdminAbstractControllerTestCase.php'; -class AccueilControllerBoite2ColTest extends Admin_AbstractControllerTestCase { +abstract class AccueilControllerBoite2ColTestCase +extends Admin_AbstractControllerTestCase { + protected $_request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; + public function setUp() { parent::setUp(); + $boite2cols = ['type_module' => 'CONTENEUR_DEUX_COLONNES', + 'division' => 2, + 'id_module' => 3, + 'preferences' => ['col_gauche_type' => 'NEWS', + 'col_droite_type' => 'CRITIQUES', + 'boite' => 'boite_de_la_division_du_milieu', + 'titre' => 'A la Une']]; + + $this->profil_biologie = $this + ->fixture('Class_Profil', ['id' => 34, 'libelle' => 'Biologie']) + ->updateModuleConfigAccueil(3, $boite2cols); + } +} - $boite2cols = array('type_module' => 'CONTENEUR_DEUX_COLONNES', - 'division' => 2, - 'id_module' => 3, - 'preferences' => array('col_gauche_type' => 'NEWS', - 'col_droite_type' => 'CRITIQUES', - 'boite' => 'boite_de_la_division_du_milieu', - 'titre' => 'A la Une')); - $this->profil_biologie = Class_Profil::getLoader() - ->newInstanceWithId(34) - ->setLibelle('Biologie') - ->updateModuleConfigAccueil(3, $boite2cols); - $this->assertTrue($this->profil_biologie->isValid()); +class AccueilControllerBoite2ColTest extends AccueilControllerBoite2ColTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch($this->_request_url, true); + } - $this->request_url = '/admin/accueil/conteneur2colonnes?id_profil=34&id_module=3&type_module=CONTENEUR_DEUX_COLONNES&config=accueil'; - $this->dispatch($this->request_url, true); + + /** @test */ + public function profilShouldBeValid() { + $this->assertTrue($this->profil_biologie->isValid()); } @@ -67,59 +78,49 @@ class AccueilControllerBoite2ColTest extends Admin_AbstractControllerTestCase { public function selectColDroiteTypeShouldHaveCRITIQUESSelected() { $this->assertXPath("//select[@name='col_droite_type']/option[@value='CRITIQUES'][@selected='selected']"); } +} - /** @test */ - public function postDataShouldSaveTheProfil() { - $this->profil_wrapper = Storm_Test_ObjectWrapper - ::onLoaderOfModel('Class_Profil') - ->whenCalled('save') - ->answers(true) - ->getWrapper(); - - - $data = array('col_gauche_type' => 'KIOSQUE', - 'col_droite_type' => 'TAGS', - 'titre' => 'Ce mois ci'); +class AccueilControllerBoite2ColPostTest extends AccueilControllerBoite2ColTestCase { + public function setUp() { + parent::setUp(); + $this->postDispatch($this->_request_url, ['col_gauche_type' => 'KIOSQUE', + 'col_droite_type' => 'TAGS', + 'titre' => 'Ce mois ci']); + } - $this - ->getRequest() - ->setMethod('POST') - ->setPost($data); - $this->dispatch($this->request_url); + /** @test */ + public function moduleKiosqueShouldHaveBeenCreated() { + $this->assertEquals('KIOSQUE', $this->_getModuleTypeOf(1000)); + } - $this->assertTrue($this->profil_wrapper->methodHasBeenCalled('save')); - return $this->profil_biologie; + /** @test */ + public function moduleKiosqueShouldHaveBeenAddedToBox() { + $this->assertEquals(1000, $this->_getModulePrefOf(3, 'col_gauche_module_id')); } - /** - * @depends postDataShouldSaveTheProfil - * @test - */ - public function moduleKiosqueShouldHaveBeenCreated($profil_biologie) { - $module = $profil_biologie->getModuleAccueilConfig(1000); - $this->assertEquals('KIOSQUE',$module['type_module']); + /** @test */ + public function moduleTagsShouldHaveBeenCreated() { + $this->assertEquals('TAGS', $this->_getModuleTypeOf(1001)); + } - $boite2cols = $profil_biologie->getModuleAccueilConfig(3); - $this->assertEquals(1000, $boite2cols['preferences']['col_gauche_module_id']); + /** @test */ + public function moduleTagsShouldHaveBeenAddedToBox() { + $this->assertEquals(1001, $this->_getModulePrefOf(3, 'col_droite_module_id')); } - /** - * @depends postDataShouldSaveTheProfil - * @test - */ - public function moduleTagsShouldHaveBeenCreated($profil_biologie) { - $module = $profil_biologie->getModuleAccueilConfig(1001); - $this->assertEquals('TAGS',$module['type_module']); + protected function _getModuleTypeOf($id_module) { + return $this->profil_biologie->getModuleAccueilConfig($id_module)['type_module']; + } - $boite2cols = $profil_biologie->getModuleAccueilConfig(3); - $this->assertEquals(1001, $boite2cols['preferences']['col_droite_module_id']); + protected function _getModulePrefOf($id_module, $pref) { + return $this->profil_biologie->getModuleAccueilConfig($id_module)['preferences'][$pref]; } } @@ -467,24 +468,31 @@ class AccueilControllerConfigRSSDefaultsTest extends Admin_AbstractControllerTes - -class AccueilControllerConfigBoiteLoginTest extends Admin_AbstractControllerTestCase { - public function setUp() { - parent::setUp(); +abstract class AccueilControllerConfigBoiteLoginTestCase extends Admin_AbstractControllerTestCase { + protected function prepareProfile() { Class_Profil::getCurrentProfil() ->updateModuleConfigAccueil(32, ['type_module' => 'LOGIN', 'division' => 4, 'id_module' => 32, 'preferences' => ['profil_redirect'=>'1', + 'profil_logout_redirect' => '1', 'mot_de_pass_exemple' => 'dd/mm/aaaa']]); - $this->dispatch('/admin/accueil/login?config=accueil&type_module=LOGIN&id_module=32', true); } - /** @test */ - public function selectProfilRedirectShouldContainsProfil1() { - $this->assertXPathContentContains('//select[@id="profil_redirect"][@name="profil_redirect"]/optgroup/option[@value="1"][@selected="selected"]', 'portail: Accueil', $this->_response->getBody()); + public function setUp() { + parent::setUp(); + $this->prepareProfile(); + } +} + + + +class AccueilControllerConfigBoiteLoginTest extends AccueilControllerConfigBoiteLoginTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/admin/accueil/login?config=accueil&type_module=LOGIN&id_module=32', true); } @@ -548,14 +556,132 @@ class AccueilControllerConfigBoiteLoginTest extends Admin_AbstractControllerTest } - /** @test **/ - public function selectProfilShloudBeEmptyValue() { - $this->assertXPath('//td/select[@id="profil_redirect"]/option'); + /** @test */ + public function profilRedirectShouldContainsProfil1() { + $this->assertXPathContentContains('//select[@name="profil_redirect"]/optgroup/option[@value="1"][@selected="selected"]', + 'portail: Accueil'); + } + + + /** @test */ + public function profilLogoutRedirectShouldContainsProfil1() { + $this->assertXPathContentContains('//select[@name="profil_logout_redirect"]/optgroup/option[@value="1"][@selected="selected"]', + 'portail: Accueil'); + } + +} + + + +class AccueilControllerConfigBoiteLoginPostTest extends AccueilControllerConfigBoiteLoginTestCase { + protected $_prefs; + + public function setUp() { + parent::setUp(); + $this->postDispatch('/admin/accueil/login?config=accueil&type_module=LOGIN&id_module=32', + ['boite' => '', + 'titre' => 'Se connecter', + 'profil_redirect' => 678, + 'profil_logout_redirect' => 345]); + + $this->_prefs = Class_Profil::getCurrentProfil()->getModuleAccueilPreferences(32); + } + + + /** @test */ + public function profilRedirectShouldBe678() { + $this->assertEquals(678, $this->_prefs['profil_redirect']); + } + + + /** @test */ + public function profilLogoutRedirectShouldBe345() { + $this->assertEquals(345, $this->_prefs['profil_logout_redirect']); + } +} + + + + +abstract class AccueilControllerWithParentProfileConfigBoiteLoginTestCase +extends AccueilControllerConfigBoiteLoginTestCase { + protected function prepareProfile() { + parent::prepareProfile(); + $this->fixture('Class_Profil', ['id' => 3]); + $parent = $this->fixture('Class_Profil', ['id' => 44]) + ->updateModuleConfigAccueil(32, + ['type_module' => 'LOGIN', + 'division' => 4, + 'id_module' => 32, + 'preferences' => ['profil_redirect' => '3', + 'profil_logout_redirect' => '3', + 'mot_de_pass_exemple' => 'dd/mm/aaaa']]);; + + Class_Profil::getCurrentProfil() + ->setParentProfil($parent); + } +} + + + + +class AccueilControllerWithParentProfileConfigBoiteLoginTest extends AccueilControllerWithParentProfileConfigBoiteLoginTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/admin/accueil/login?config=accueil&type_module=LOGIN&id_module=32', true); + } + + + /** @test */ + public function profilRedirectShouldBeParentsOne() { + $this->assertXPath('//select[@name="profil_redirect"]/optgroup/option[@value="3"][@selected="selected"]', + $this->_response->getBody()); + } + + + /** @test */ + public function profilLogoutRedirectShouldBeParentsOne() { + $this->assertXPath('//select[@name="profil_logout_redirect"]/optgroup/option[@value="3"][@selected="selected"]', + $this->_response->getBody()); } } +class AccueilControllerWithParentProfileConfigBoiteLoginPostTest +extends AccueilControllerWithParentProfileConfigBoiteLoginTestCase { + protected $_prefs; + + public function setUp() { + parent::setUp(); + $this->postDispatch('/admin/accueil/login?config=accueil&type_module=LOGIN&id_module=32', + ['boite' => '', + 'titre' => 'Se connecter', + 'profil_redirect' => 678, + 'profil_logout_redirect' => 345]); + + $this->_prefs = Class_Profil::getCurrentProfil() + ->getParentProfil() + ->getModuleAccueilPreferences(32); + } + + + /** @test */ + public function parentProfilRedirectShouldBe678() { + $this->assertEquals(678, $this->_prefs['profil_redirect']); + } + + + /** @test */ + public function parentProfilLogoutRedirectShouldBe345() { + $this->assertEquals(345, $this->_prefs['profil_logout_redirect']); + } +} + + + + + class AccueilControllerPostConfigBoiteKiosqueProfilLognesTestCase extends Admin_AbstractControllerTestCase { public function setUp() { parent::setUp(); @@ -564,11 +690,10 @@ class AccueilControllerPostConfigBoiteKiosqueProfilLognesTestCase extends Admin_ ->setLibelle('Lognes'); Class_Profil::getCurrentProfil() - ->updateModuleConfigAccueil(25, - array('type_module' => 'KIOSQUE', - 'division' => 4, - 'id_module' => 32, - 'preferences' => array())) + ->updateModuleConfigAccueil(32, ['type_module' => 'KIOSQUE', + 'division' => 4, + 'id_module' => 32, + 'preferences' => []]) ->setIdSite(3); $this->postDispatch('/admin/accueil/kiosque?config=accueil&type_module=KIOSQUE&id_module=32', ['id_panier'=>'5','titre' => 'titre du /kiosque']); diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php index e2f936bc7cf576edee8cf3a873d13a4620473b41..4c9d9acadf2dee5c38be4e6e22b7acfa1393c7c9 100644 --- a/tests/application/modules/opac/controllers/AuthControllerTest.php +++ b/tests/application/modules/opac/controllers/AuthControllerTest.php @@ -39,7 +39,8 @@ abstract class PortailWithOneLoginModuleTestCase extends AbstractControllerTestC 'titre_connecte' => 'Vous êtes connecté(e)', 'lien_connexion' => 'please, log me', 'lien_mot_de_passe_oublie' => 'me rappelle plus', - 'profil_redirect' => 1]]], + 'profil_redirect' => 1, + 'profil_logout_redirect' => 0]]], 'options' => []]; Class_Profil::getCurrentProfil() @@ -153,47 +154,67 @@ class AuthControllerAbonneSIGBLoggedTest extends PortailWithOneLoginModuleTestCa -class AuthControllerAbonneSIGBLoggedLogoutTest extends PortailWithOneLoginModuleTestCase { +class AuthControllerAbonneSIGBLoggedLogoutTest +extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); $this->dispatch('/opac/auth/logout'); } + /** @test */ - public function answerShouldRedirectToRoot() { + public function shouldRedirectToRoot() { $this->assertRedirectTo('/'); } } -class AuthControllerWithProfilPageAbonneSIGBLoggedLogoutTest extends PortailWithOneLoginModuleTestCase { + +class AuthControllerWithProfilPageAbonneSIGBLoggedLogoutTest +extends PortailWithOneLoginModuleTestCase { + protected $_profile, $_parent_profile; + public function setUp() { parent::setUp(); - $this->profil_adulte = $this->fixture('Class_Profil', ['id' => 22]) - ->setBrowser('opac') - ->setLibelle('Profil Adulte') - ->setHauteurBanniere(150) - ->setCouleurTexteBandeau('#F2C') - ->setCouleurLienBandeau('#234') - ->setMenuHautOn(true) - ->setCfgMenus([]) - ->setCommentaire('Super bib') - ->setRefTags('bib,Adulte') - ->setParentProfil(Class_Profil::getCurrentProfil()); - $this->profil_adulte->assertSave(); - Class_Profil::setCurrentProfil($this->profil_adulte); - $this->dispatch('/opac/auth/logout'); + $this->_parent_profile = Class_Profil::getCurrentProfil(); + $this->_profile = $this->fixture('Class_Profil', + ['id' => 22, + 'browser' => 'opac', + 'libelle' => 'Profil Adulte', + 'hauteur_banniere' => 150, + 'couleur_texte_bandeau' => '#F2C', + 'couleur_lien_bandeau' => '#234', + 'menu_haut_on' => true, + 'cfg_menus' => [], + 'commentaire' => 'Super bib', + 'ref_tags' => 'bib,Adulte', + 'parent_profil' => $this->_parent_profile]); + Class_Profil::setCurrentProfil($this->_profile); } /** @test **/ - public function linkSeDeconnecterShouldRedirectToParentProfil() { + public function withoutLogoutProfileShouldRedirectToParentProfile() { + $this->dispatch('/opac/auth/logout'); $this->assertRedirectTo('/opac/index/index/id_profil/2'); } + + /** @test **/ + public function withLogoutProfile6InParentShouldRedirectToIt() { + $cfg_accueil = $this->_parent_profile->getCfgAccueilAsArray(); + $cfg_accueil['modules'][4]['preferences']['profil_logout_redirect'] = 6; + $this->_parent_profile + ->setCfgAccueil(ZendAfi_Filters_Serialize::serialize($cfg_accueil)); + + $this->dispatch('/opac/auth/logout'); + $this->assertRedirectTo('/opac/index/index/id_profil/6'); + } } + + abstract class AuthControllerNobodyLoggedTestCase extends PortailWithOneLoginModuleTestCase { public function setUp() { parent::setUp(); @@ -246,7 +267,8 @@ class AuthControllerNobodyLoggedActivateTest extends AuthControllerNobodyLoggedT } -class AuthControllerNobodyLoggedAndRegistrationAllowedBoiteLoginTest extends AuthControllerNobodyLoggedTestCase { +class AuthControllerNobodyLoggedAndRegistrationAllowedBoiteLoginTest +extends AuthControllerNobodyLoggedTestCase { public function setUp() { parent::setUp(); @@ -257,40 +279,48 @@ class AuthControllerNobodyLoggedAndRegistrationAllowedBoiteLoginTest extends Aut $this->dispatch('/opac/',true); } + /** @test */ - public function submitButtonSeConnecterShouldBeDisplay(){ - $this->assertXPath('//div[@id="boite_login"]//input[@type="submit"]',$this->_response->getBody()); + public function loginSubmitShouldBePresent(){ + $this->assertXPath('//div[@id="boite_login"]//input[@type="submit"]', + $this->_response->getBody()); } + /** @test */ - public function titreDelaBoiteShouldBeSeConnecter(){ + public function titleShouldBeSeConnecter(){ $this->assertXPathContentContains('//h1','Se connecter'); } + /** @test **/ - public function inputLoginTypePasswordShouldCOntainsOnkeypressFormSubmit() { + public function inputLoginShouldSubmitOnKey13Pressed() { $this->assertXPath('//div[@id="boite_login"]//input[contains(@onkeypress,"if (event.keyCode == 13) {this.form.submit();return false;}")]'); } - public function testLinkSeConnecter() { - $this->assertXPath('//div[@id="boite_login"]//a[contains(@onclick,"submit")]'); + + /** @test */ + public function loginLinkShouldBePresent() { $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@onclick, "submit")]', 'please, log me'); } - public function testLinkLostPassword() { - $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/lostpass")]'); + + /** @test */ + public function lostPassLinkShouldBePresent() { $this->assertXPathContentContains('//div[@id="boite_login"]//tr/td[@colspan="2"]/a[contains(@href, "auth/lostpass")]', 'me rappelle plus'); } - public function testLinkSenregistrer() { - $this->assertXPath('//div[@id="boite_login"]//a[contains(@href, "auth/register")]'); + + /** @test */ + public function registerLinkShouldBePresent() { $this->assertXPathContentContains('//div[@id="boite_login"]//a[contains(@href, "auth/register")]', "S'enregistrer"); } - public function testCanAccessRegisterPage() { + /** @test */ + public function shouldAccessRegisterPage() { $this->bootstrap(); $this->dispatch('auth/register', true); $this->assertAction('register'); @@ -1040,9 +1070,7 @@ class portailWithOneLoginModuleTestAndLoggedUserCase extends AbstractControllerT public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_IntBib') - ->whenCalled('findAllBy') - ->answers([]); + Class_IntBib::beVolatile(); $cfg_accueil = ['modules' => [4 => ['division' => '4', 'id_module' => 4, @@ -1064,14 +1092,14 @@ class portailWithOneLoginModuleTestAndLoggedUserCase extends AbstractControllerT ZendAfi_Auth::getInstance()->logUser( - Class_Users::newInstanceWithId(5, - ['login' => 'Pioup', - 'idabon' => 48, - 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, - 'id_site' => 1, - 'fiche_sigb' => []])); - - + $this->fixture('Class_Users', + ['id' => 5, + 'login' => 'Pioup', + 'idabon' => 48, + 'password' => 'one ok password', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, + 'id_site' => 1, + 'fiche_sigb' => []])); $this->dispatch('/opac/'); } diff --git a/tests/library/Class/ProfilTest.php b/tests/library/Class/ProfilTest.php index b5cedc0a3d97242653cccefea6c996e737b2e630..b6ce1aed62f1b66e1c92d8588e65c6e2167c3738 100644 --- a/tests/library/Class/ProfilTest.php +++ b/tests/library/Class/ProfilTest.php @@ -1241,4 +1241,92 @@ class ProfilHeaderImgAccessTest extends Storm_Test_ModelTestCase { } + + +abstract class ProfilUpdateConfigAccueilOnModuleInBannerTestCase +extends Storm_Test_ModelTestCase { + protected $_profil; + + public function setUp() { + parent::setUp(); + $this->_profil = $this->fixture('Class_Profil', ['id' => 1]) + ->setBoiteLoginInBanniere(true); + + $this->prepareProfile(); + + $config = $this->_profil->getModuleAccueilConfig(1); + $config['preferences']['profil_redirect'] = 123; + + $this->_profil->updateModuleConfigAccueil(1, $config); + } + + + protected function prepareProfile() {} + + + protected function getPreferenceOfModule($profil, $id_module, $preference) { + return $profil->getModuleAccueilConfig($id_module)['preferences'][$preference]; + } +} + + + + +class ProfilUpdateConfigAccueilOnModuleInBannerTest +extends ProfilUpdateConfigAccueilOnModuleInBannerTestCase { + /** @test */ + public function profilRedirectShouldBeUpdated() { + $this->assertEquals(123, + $this->getPreferenceOfModule($this->_profil, + 1, 'profil_redirect')); + } +} + + + +class ProfilUpdateConfigAccueilOnModuleInBannerWithParentTest +extends ProfilUpdateConfigAccueilOnModuleInBannerTestCase { + protected function prepareProfile() { + $this->_profil->setParentProfil($this->fixture('Class_Profil', ['id' => 2]) + ->setBoiteLoginInBanniere(true)); + } + + + /** @test */ + public function profilRedirectShouldBeUpdatedInParent() { + $this->assertEquals(123, + $this->getPreferenceOfModule($this->_profil->getParentProfil(), + 1, 'profil_redirect')); + } +} + + + +class ProfilGetModuleAccueilConfigTest extends Storm_Test_ModelTestCase { + protected $_profil, $_parent, $_module_config; + + public function setUp() { + parent::setUp(); + $this->_parent = $this->fixture('Class_Profil', ['id' => 1]) + ->setBoiteLoginInBanniere(true); + + $this->_profil = $this->fixture('Class_Profil', ['id' => 2, + 'parent_profil' => $this->_parent]); + + $this->_module_config = $this->_profil->getModuleAccueilConfig(1); + } + + + /** @test */ + public function parentShouldHaveLoginInBanner() { + $this->assertTrue($this->_parent->getBoiteLoginInBanniere()); + } + + + /** @test */ + public function moduleDivisionShouldBeBanner() { + $this->assertEquals(Class_Profil::DIV_BANNIERE, $this->_module_config['division']); + } +} + ?> \ No newline at end of file