diff options
| -rw-r--r-- | phpBB/config/default/container/services.yml | 1 | ||||
| -rw-r--r-- | phpBB/config/default/container/services_help.yml | 10 | ||||
| -rw-r--r-- | phpBB/config/default/routing/help.yml | 3 | ||||
| -rw-r--r-- | phpBB/config/default/routing/routing.yml | 4 | ||||
| -rw-r--r-- | phpBB/faq.php | 90 | ||||
| -rw-r--r-- | phpBB/phpbb/help/controller/help.php | 160 | 
6 files changed, 182 insertions, 86 deletions
diff --git a/phpBB/config/default/container/services.yml b/phpBB/config/default/container/services.yml index c376726b3b..36f22d72d6 100644 --- a/phpBB/config/default/container/services.yml +++ b/phpBB/config/default/container/services.yml @@ -8,6 +8,7 @@ imports:      - { resource: services_db.yml }      - { resource: services_event.yml }      - { resource: services_feed.yml } +    - { resource: services_help.yml }      - { resource: services_mimetype_guesser.yml }      - { resource: services_notification.yml }      - { resource: services_password.yml } diff --git a/phpBB/config/default/container/services_help.yml b/phpBB/config/default/container/services_help.yml new file mode 100644 index 0000000000..ae3eafe7b0 --- /dev/null +++ b/phpBB/config/default/container/services_help.yml @@ -0,0 +1,10 @@ +services: +    phpbb.help.controller: +        class: phpbb\help\controller\help +        arguments: +            - @controller.helper +            - @dispatcher +            - @template +            - @user +            - %core.root_path% +            - %core.php_ext% diff --git a/phpBB/config/default/routing/help.yml b/phpBB/config/default/routing/help.yml new file mode 100644 index 0000000000..957d6dab55 --- /dev/null +++ b/phpBB/config/default/routing/help.yml @@ -0,0 +1,3 @@ +phpbb_help_controller: +    path: /{mode} +    defaults: { _controller: phpbb.help.controller:handle } diff --git a/phpBB/config/default/routing/routing.yml b/phpBB/config/default/routing/routing.yml index 94146e1ec2..d6881f1959 100644 --- a/phpBB/config/default/routing/routing.yml +++ b/phpBB/config/default/routing/routing.yml @@ -7,3 +7,7 @@  # The above will be accessed via app.php?controller=foo and it will  # instantiate the "foo_service" service and call the "method" method.  # + +phpbb_help_routing: +    resource: "help.yml" +    prefix: /help diff --git a/phpBB/faq.php b/phpBB/faq.php index ddecd28b00..e6a44f588f 100644 --- a/phpBB/faq.php +++ b/phpBB/faq.php @@ -24,90 +24,8 @@ $user->session_begin();  $auth->acl($user->data);  $user->setup(); -$mode = $request->variable('mode', ''); +/** @var \phpbb\controller\helper $controller_helper */ +$controller_helper = $phpbb_container->get('controller.helper'); -// Load the appropriate faq file -switch ($mode) -{ -	case 'bbcode': -		$l_title = $user->lang['BBCODE_GUIDE']; -		$user->add_lang('bbcode', false, true); -	break; - -	default: -		$page_title = $user->lang['FAQ_EXPLAIN']; -		$ext_name = $lang_file = ''; - -		/** -		 * You can use this event display a custom help page -		 * -		 * @event core.faq_mode_validation -		 * @var	string	page_title		Title of the page -		 * @var	string	mode			FAQ that is going to be displayed -		 * @var	string	lang_file		Language file containing the help data -		 * @var	string	ext_name		Vendor and extension name where the help -		 *								language file can be loaded from -		 * @since 3.1.4-RC1 -		 */ -		$vars = array( -			'page_title', -			'mode', -			'lang_file', -			'ext_name', -		); -		extract($phpbb_dispatcher->trigger_event('core.faq_mode_validation', compact($vars))); - -		$l_title = $page_title; -		$user->add_lang(($lang_file) ? $lang_file : 'faq', false, true, $ext_name); -	break; -} - -// Pull the array data from the lang pack -$switch_column = $found_switch = false; -$help_blocks = array(); -foreach ($user->help as $help_ary) -{ -	if ($help_ary[0] == '--') -	{ -		if ($help_ary[1] == '--') -		{ -			$switch_column = true; -			$found_switch = true; -			continue; -		} - -		$template->assign_block_vars('faq_block', array( -			'BLOCK_TITLE'		=> $help_ary[1], -			'SWITCH_COLUMN'		=> $switch_column, -		)); - -		if ($switch_column) -		{ -			$switch_column = false; -		} -		continue; -	} - -	$template->assign_block_vars('faq_block.faq_row', array( -		'FAQ_QUESTION'		=> $help_ary[0], -		'FAQ_ANSWER'		=> $help_ary[1]) -	); -} - -// Lets build a page ... -$template->assign_vars(array( -	'L_FAQ_TITLE'				=> $l_title, -	'L_BACK_TO_TOP'				=> $user->lang['BACK_TO_TOP'], - -	'SWITCH_COLUMN_MANUALLY'	=> (!$found_switch) ? true : false, -	'S_IN_FAQ'					=> true, -)); - -page_header($l_title); - -$template->set_filenames(array( -	'body' => 'faq_body.html') -); -make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx")); - -page_footer(); +// TODO send "Moved permanently" header +redirect($controller_helper->route('phpbb_help_controller', array('mode' => $request->variable('mode', 'faq')))); diff --git a/phpBB/phpbb/help/controller/help.php b/phpBB/phpbb/help/controller/help.php new file mode 100644 index 0000000000..e9594a0563 --- /dev/null +++ b/phpBB/phpbb/help/controller/help.php @@ -0,0 +1,160 @@ +<?php +/** + * + * This file is part of the phpBB Forum Software package. + * + * @copyright (c) phpBB Limited <https://www.phpbb.com> + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\help\controller; + +use phpbb\exception\http_exception; + +class help +{ +	/** @var \phpbb\controller\helper */ +	protected $helper; + +	/** @var \phpbb\event\dispatcher_interface  */ +	protected $dispatcher; + +	/** @var \phpbb\template\template */ +	protected $template; + +	/** @var \phpbb\user */ +	protected $user; + +	/** @var string */ +	protected $root_path; + +	/** @var string */ +	protected $php_ext; + +	/** +	 * Constructor +	 * +	 * @param \phpbb\controller\helper	$helper +	 * @param \phpbb\event\dispatcher_interface	$dispatcher +	 * @param \phpbb\template\template	$template +	 * @param \phpbb\user				$user +	 * @param string					$root_path +	 * @param string					$php_ext +	 */ +	public function __construct(\phpbb\controller\helper $helper, \phpbb\event\dispatcher_interface $dispatcher, \phpbb\template\template $template, \phpbb\user $user, $root_path, $php_ext) +	{ +		$this->helper = $helper; +		$this->dispatcher = $dispatcher; +		$this->template = $template; +		$this->user = $user; +		$this->root_path = $root_path; +		$this->php_ext = $php_ext; +	} + +	/** +	 * Controller for /help/{mode} routes +	 * +	 * @param string		$mode +	 * @return \Symfony\Component\HttpFoundation\Response A Symfony Response object +	 * @throws http_exception when the $mode is not known by any extension +	 */ +	public function handle($mode) +	{ +		switch ($mode) +		{ +			case 'faq': +			case 'bbcode': +				$page_title = ($mode === 'faq') ? $this->user->lang['FAQ_EXPLAIN'] : $this->user->lang['BBCODE_GUIDE']; +				$this->user->add_lang($mode, false, true); +			break; + +			default: +				$page_title = $this->user->lang['FAQ_EXPLAIN']; +				$ext_name = $lang_file = ''; + +				/** +				 * You can use this event display a custom help page +				 * +				 * @event core.faq_mode_validation +				 * @var	string	page_title		Title of the page +				 * @var	string	mode			FAQ that is going to be displayed +				 * @var	string	lang_file		Language file containing the help data +				 * @var	string	ext_name		Vendor and extension name where the help +				 *								language file can be loaded from +				 * @since 3.1.4-RC1 +				 */ +				$vars = array( +					'page_title', +					'mode', +					'lang_file', +					'ext_name', +				); +				extract($this->dispatcher->trigger_event('core.faq_mode_validation', compact($vars))); + +				if ($ext_name === '' || $lang_file === '') +				{ +					throw new http_exception(501, 'FEATURE_NOT_AVAILABLE'); +				} + +				$this->user->add_lang($lang_file, false, true, $ext_name); +			break; + +		} + +		$this->template->assign_vars(array( +			'L_FAQ_TITLE'				=> $page_title, +			'S_IN_FAQ'					=> true, +		)); + +		$this->assign_to_template($this->user->help); + +		make_jumpbox(append_sid("{$this->root_path}viewforum.{$this->php_ext}")); +		return $this->helper->render('faq_body.html', $page_title); +	} + +	/** +	 * Assigns the help data to the template blocks +	 * +	 * @param array $help_data +	 * @return null +	 */ +	protected function assign_to_template(array $help_data) +	{ +		// Pull the array data from the lang pack +		$switch_column = $found_switch = false; +		foreach ($help_data as $help_ary) +		{ +			if ($help_ary[0] == '--') +			{ +				if ($help_ary[1] == '--') +				{ +					$switch_column = true; +					$found_switch = true; +					continue; +				} + +				$this->template->assign_block_vars('faq_block', array( +					'BLOCK_TITLE'		=> $help_ary[1], +					'SWITCH_COLUMN'		=> $switch_column, +				)); + +				if ($switch_column) +				{ +					$switch_column = false; +				} +				continue; +			} + +			$this->template->assign_block_vars('faq_block.faq_row', array( +				'FAQ_QUESTION'		=> $help_ary[0], +				'FAQ_ANSWER'		=> $help_ary[1], +			)); +		} + +		$this->template->assign_var('SWITCH_COLUMN_MANUALLY', !$found_switch); +	} +}  | 
