From 8567a5c931b683e0ef2673fbf38d7562e740eeb7 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 27 Jul 2014 22:03:52 +0200 Subject: [PATCH 1/3] [ticket/207] Add links to portal in header and footer Also added tests for listener. --- config/services.yml | 10 ++ event/listener.php | 101 +++++++++++++ .../overall_footer_breadcrumb_prepend.html | 1 + .../overall_header_breadcrumb_prepend.html | 1 + .../overall_footer_breadcrumb_prepend.html | 1 + .../overall_header_breadcrumb_prepend.html | 1 + tests/unit/event/config/routing.yml | 3 + tests/unit/event/listener_test.php | 135 ++++++++++++++++++ 8 files changed, 253 insertions(+) create mode 100644 event/listener.php create mode 100644 styles/prosilver/template/event/overall_footer_breadcrumb_prepend.html create mode 100644 styles/prosilver/template/event/overall_header_breadcrumb_prepend.html create mode 100644 styles/subsilver2/template/event/overall_footer_breadcrumb_prepend.html create mode 100644 styles/subsilver2/template/event/overall_header_breadcrumb_prepend.html create mode 100644 tests/unit/event/config/routing.yml create mode 100644 tests/unit/event/listener_test.php diff --git a/config/services.yml b/config/services.yml index 76a247f4..cc4fa873 100644 --- a/config/services.yml +++ b/config/services.yml @@ -78,3 +78,13 @@ services: - @dbal.conn - @board3.portal.modules_helper - @user + + board3.portal.listener: + class: board3\portal\event\listener + arguments: + - @controller.helper + - @template + - @user + - %core.php_ext% + tags: + - { name: event.listener } diff --git a/event/listener.php b/event/listener.php new file mode 100644 index 00000000..9dfe1fdf --- /dev/null +++ b/event/listener.php @@ -0,0 +1,101 @@ +controller_helper = $controller_helper; + $this->template = $template; + $this->user = $user; + $this->php_ext = $php_ext; + } + + /** + * Assign functions defined in this class to event listeners in the core + * + * @return array + */ + static public function getSubscribedEvents() + { + return array( + 'core.user_setup' => 'load_portal_language', + 'core.viewonline_overwrite_location' => 'viewonline_page', + 'core.page_header' => 'add_portal_link', + ); + } + + /** + * Load portal language during user setup + * + * @param object $event The event object + * @return null + */ + public function load_portal_language($event) + { + $lang_set_ext = $event['lang_set_ext']; + $lang_set_ext[] = array( + 'ext_name' => 'board3/portal', + 'lang_set' => 'portal', + ); + $event['lang_set_ext'] = $lang_set_ext; + } + + /** + * Show users as viewing the portals on Who Is Online page + * + * @param object $event The event object + * @return null + */ + public function viewonline_page($event) + { + if ($event['on_page'][1] == 'app' && strrpos($event['row']['session_page'], 'app.' . $this->php_ext . '/portal') === 0) + { + $event['location'] = $this->user->lang('VIEWING_PORTAL'); + $event['location_url'] = $this->controller_helper->route('board3_controller'); + } + } + + /** + * Add portal link + * + * @param object $event The event object + * @return null + */ + public function add_portal_link($event) + { + $this->template->assign_vars(array( + 'U_PORTAL' => $this->controller_helper->route('board3_controller'), + )); + } +} diff --git a/styles/prosilver/template/event/overall_footer_breadcrumb_prepend.html b/styles/prosilver/template/event/overall_footer_breadcrumb_prepend.html new file mode 100644 index 00000000..2753a6c6 --- /dev/null +++ b/styles/prosilver/template/event/overall_footer_breadcrumb_prepend.html @@ -0,0 +1 @@ +{L_PORTAL} diff --git a/styles/prosilver/template/event/overall_header_breadcrumb_prepend.html b/styles/prosilver/template/event/overall_header_breadcrumb_prepend.html new file mode 100644 index 00000000..2753a6c6 --- /dev/null +++ b/styles/prosilver/template/event/overall_header_breadcrumb_prepend.html @@ -0,0 +1 @@ +{L_PORTAL} diff --git a/styles/subsilver2/template/event/overall_footer_breadcrumb_prepend.html b/styles/subsilver2/template/event/overall_footer_breadcrumb_prepend.html new file mode 100644 index 00000000..a6e98a45 --- /dev/null +++ b/styles/subsilver2/template/event/overall_footer_breadcrumb_prepend.html @@ -0,0 +1 @@ +{L_PORTAL} » diff --git a/styles/subsilver2/template/event/overall_header_breadcrumb_prepend.html b/styles/subsilver2/template/event/overall_header_breadcrumb_prepend.html new file mode 100644 index 00000000..a6e98a45 --- /dev/null +++ b/styles/subsilver2/template/event/overall_header_breadcrumb_prepend.html @@ -0,0 +1 @@ +{L_PORTAL} » diff --git a/tests/unit/event/config/routing.yml b/tests/unit/event/config/routing.yml new file mode 100644 index 00000000..a7232a78 --- /dev/null +++ b/tests/unit/event/config/routing.yml @@ -0,0 +1,3 @@ +board3_controller: + pattern: /portal + defaults: { _controller: board3.portal.main:handle } diff --git a/tests/unit/event/listener_test.php b/tests/unit/event/listener_test.php new file mode 100644 index 00000000..411d16a4 --- /dev/null +++ b/tests/unit/event/listener_test.php @@ -0,0 +1,135 @@ +setup_listener(); + + global $phpbb_dispatcher; + + $phpbb_dispatcher = new \phpbb\event\dispatcher(new \phpbb_mock_container_builder()); + $this->phpbb_dispatcher = $phpbb_dispatcher; + } + + public function setup_listener() + { + $this->user = $this->getMock('\phpbb\user'); + $this->user->expects($this->any()) + ->method('lang') + ->will($this->returnValue('foo')); + + $manager = new \phpbb_mock_extension_manager(dirname(__FILE__) . '/', array()); + $finder = new \phpbb\finder( + new \phpbb\filesystem(), + dirname(__FILE__) . '/', + new \phpbb_mock_cache() + ); + $finder->set_extensions(array_keys($manager->all_enabled())); + + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1')); + $provider = new \phpbb\controller\provider(); + $provider->find_routing_files($finder); + $provider->find(dirname(__FILE__) . '/'); + $this->controller_helper = new \phpbb_mock_controller_helper($this->template, $this->user, $this->config, $provider, $manager, '', 'php', dirname(__FILE__) . '/'); + + $this->listener = new \board3\portal\event\listener( + $this->controller_helper, + $this->template, + $this->user, + 'php' + ); + } + + public function test_construct() + { + $this->setup_listener(); + $this->assertInstanceOf('\Symfony\Component\EventDispatcher\EventSubscriberInterface', $this->listener); + } + + public function test_getSubscribedEvents() + { + $this->assertEquals(array( + 'core.user_setup', + 'core.viewonline_overwrite_location', + 'core.page_header', + ), array_keys(\board3\portal\event\listener::getSubscribedEvents())); + } + + public function test_viewonline_page() + { + $this->phpbb_dispatcher->addListener('core.viewonline_overwrite_location', array($this->listener, 'viewonline_page')); + $on_page = array( + 'foobar', + 'app', + ); + $row = array( + 'session_page' => 'app.php/portal', + ); + $location = 'foo'; + $location_url = 'bar.php'; + + $vars = array( + 'on_page', + 'row', + 'location', + 'location_url', + ); + + $result = $this->phpbb_dispatcher->trigger_event('core.viewonline_overwrite_location', compact($vars)); + + $this->assertEquals('foo', $location); + } + + public function test_add_portal_link() + { + $this->phpbb_dispatcher->addListener('core.page_header', array($this->listener, 'add_portal_link')); + + $vars = array(); + + $result = $this->phpbb_dispatcher->trigger_event('core.page_header', compact($vars)); + + $this->assertEmpty($result); + } + + public function test_load_portal_language() + { + $this->phpbb_dispatcher->addListener('core.user_setup', array($this->listener, 'load_portal_language')); + + $lang_set_ext = array(array( + 'ext_name' => 'foo/bar', + 'lang_set' => 'bar', + )); + $vars = array('lang_set_ext'); + + $result = $this->phpbb_dispatcher->trigger_event('core.user_setup', compact($vars)); + + $this->assertEquals(array( + array( + 'ext_name' => 'foo/bar', + 'lang_set' => 'bar', + ), + array( + 'ext_name' => 'board3/portal', + 'lang_set' => 'portal', + )), $result['lang_set_ext']); + } +} From 4b099019e0cdb7943568229a6b53b8a1ebf46d55 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 28 Jul 2014 16:08:12 +0200 Subject: [PATCH 2/3] [ticket/207] Use different template var for redirect and fix portal link --- config/services.yml | 1 + event/listener.php | 18 ++++++++++++++++-- modules/user_menu.php | 2 +- .../portal/modules/login_box_side.html | 2 +- .../portal/modules/login_box_side.html | 2 +- tests/unit/event/listener_test.php | 16 ++++++++++++++++ 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/config/services.yml b/config/services.yml index cc4fa873..b9e05291 100644 --- a/config/services.yml +++ b/config/services.yml @@ -83,6 +83,7 @@ services: class: board3\portal\event\listener arguments: - @controller.helper + - @path_helper - @template - @user - %core.php_ext% diff --git a/event/listener.php b/event/listener.php index 9dfe1fdf..b0446d7b 100644 --- a/event/listener.php +++ b/event/listener.php @@ -16,6 +16,9 @@ class listener implements EventSubscriberInterface /** @var \phpbb\controller\helper */ protected $controller_helper; + /** @var \phpbb\path_helper */ + protected $path_helper; + /** @var \phpbb\template\template */ protected $template; @@ -29,13 +32,15 @@ class listener implements EventSubscriberInterface * Constructor of Board3 Portal event listener * * @param \phpbb\controller\helper $controller_helper Controller helper object + * @param \phpbb\path_helper $path_helper phpBB path helper * @param \phpbb\template\template $template Template object * @param \phpbb\user $user User object * @param string $php_ext phpEx */ - public function __construct(\phpbb\controller\helper $controller_helper, \phpbb\template\template $template, \phpbb\user $user, $php_ext) + public function __construct(\phpbb\controller\helper $controller_helper, \phpbb\path_helper $path_helper, \phpbb\template\template $template, \phpbb\user $user, $php_ext) { $this->controller_helper = $controller_helper; + $this->path_helper = $path_helper; $this->template = $template; $this->user = $user; $this->php_ext = $php_ext; @@ -94,8 +99,17 @@ class listener implements EventSubscriberInterface */ public function add_portal_link($event) { + if (strpos($this->user->data['session_page'], '/portal') === false) + { + $portal_link = $this->controller_helper->route('board3_controller'); + } + else + { + $portal_link = $this->path_helper->remove_web_root_path($this->controller_helper->route('board3_controller')); + } + $this->template->assign_vars(array( - 'U_PORTAL' => $this->controller_helper->route('board3_controller'), + 'U_PORTAL' => $portal_link, )); } } diff --git a/modules/user_menu.php b/modules/user_menu.php index ff8a1e4c..5611aede 100644 --- a/modules/user_menu.php +++ b/modules/user_menu.php @@ -186,7 +186,7 @@ class user_menu extends module_base * redirect */ $this->template->assign_vars(array( - 'U_PORTAL' => $this->path_helper->remove_web_root_path($this->controller_helper->route('board3_controller')), + 'U_PORTAL_REDIRECT' => $this->path_helper->remove_web_root_path($this->controller_helper->route('board3_controller')), 'S_DISPLAY_FULL_LOGIN' => true, 'S_AUTOLOGIN_ENABLED' => ($this->config['allow_autologin']) ? true : false, 'S_LOGIN_ACTION' => append_sid("{$this->phpbb_root_path}ucp.{$this->php_ext}", 'mode=login'), diff --git a/styles/prosilver/template/portal/modules/login_box_side.html b/styles/prosilver/template/portal/modules/login_box_side.html index c3a1b081..1e56a665 100644 --- a/styles/prosilver/template/portal/modules/login_box_side.html +++ b/styles/prosilver/template/portal/modules/login_box_side.html @@ -15,7 +15,7 @@
{L_UM_REGISTER_NOW}

- + {$LR_BLOCK_F_L}{$LR_BLOCK_F_R} diff --git a/styles/subsilver2/template/portal/modules/login_box_side.html b/styles/subsilver2/template/portal/modules/login_box_side.html index 34dfc6cb..05d2e755 100644 --- a/styles/subsilver2/template/portal/modules/login_box_side.html +++ b/styles/subsilver2/template/portal/modules/login_box_side.html @@ -17,7 +17,7 @@
- + diff --git a/tests/unit/event/listener_test.php b/tests/unit/event/listener_test.php index 411d16a4..a6ddb56c 100644 --- a/tests/unit/event/listener_test.php +++ b/tests/unit/event/listener_test.php @@ -51,8 +51,19 @@ class listener_test extends \phpbb_template_template_test_case $provider->find(dirname(__FILE__) . '/'); $this->controller_helper = new \phpbb_mock_controller_helper($this->template, $this->user, $this->config, $provider, $manager, '', 'php', dirname(__FILE__) . '/'); + $this->path_helper = new \phpbb\path_helper( + new \phpbb\symfony_request( + new \phpbb_mock_request() + ), + new \phpbb\filesystem(), + new \phpbb_mock_request(), + $this->phpbb_root_path, + $this->php_ext + ); + $this->listener = new \board3\portal\event\listener( $this->controller_helper, + $this->path_helper, $this->template, $this->user, 'php' @@ -108,6 +119,11 @@ class listener_test extends \phpbb_template_template_test_case $result = $this->phpbb_dispatcher->trigger_event('core.page_header', compact($vars)); $this->assertEmpty($result); + + $this->user->data['session_page'] = '/app.php/portal'; + $result = $this->phpbb_dispatcher->trigger_event('core.page_header', compact($vars)); + + $this->assertEmpty($result); } public function test_load_portal_language() From a166ae25539b57b01efe04dd9b0e2c0ad4b2260b Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 28 Jul 2014 16:36:16 +0200 Subject: [PATCH 3/3] [ticket/207] Remove unneeded method parameter in add_portal_link --- event/listener.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/event/listener.php b/event/listener.php index b0446d7b..91ea4eb8 100644 --- a/event/listener.php +++ b/event/listener.php @@ -94,10 +94,9 @@ class listener implements EventSubscriberInterface /** * Add portal link * - * @param object $event The event object * @return null */ - public function add_portal_link($event) + public function add_portal_link() { if (strpos($this->user->data['session_page'], '/portal') === false) {