Completed
Push — develop ( 56e698...1a7010 )
by Daniel
08:15
created

admin_bar::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 12
cts 12
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 10
crap 1

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 *
4
 * @package sitemaker
5
 * @copyright (c) 2013 Daniel A. (blitze)
6
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7
 *
8
 */
9
10
namespace blitze\sitemaker\services\blocks;
11
12
use Symfony\Component\DependencyInjection\ContainerInterface;
13
14
class admin_bar
15
{
16
	/** @var \phpbb\config\config */
17
	protected $config;
18
19
	/** @var \phpbb\controller\helper */
20
	protected $controller_helper;
21
22
	/** @var ContainerInterface */
23
	protected $phpbb_container;
24
25
	/** @var \phpbb\template\template */
26
	protected $template;
27
28
	/** @var \phpbb\language\language */
29
	protected $translator;
30
31
	/** @var \phpbb\user */
32
	protected $user;
33
34
	/** @var \blitze\sitemaker\services\filemanager\setup */
35
	protected $filemanager;
36
37
	/** @var \blitze\sitemaker\services\icon_picker */
38
	protected $icons;
39
40
	/** @var \blitze\sitemaker\services\util */
41
	protected $util;
42
43
	/** @var string phpEx */
44
	protected $php_ext;
45
46
	/**
47
	 * Constructor
48
	 *
49
	 * @param \phpbb\config\config							$config					Config object
50
	 * @param \phpbb\controller\helper						$controller_helper		Controller Helper object
51
	 * @param ContainerInterface							$phpbb_container		Service container
52
	 * @param \phpbb\template\template						$template				Template object
53
	 * @param \phpbb\language\language						$translator				Language object
54
	 * @param \phpbb\user									$user					User object
55
	 * @param \blitze\sitemaker\services\filemanager\setup	$filemanager			Filemanager object
56
	 * @param \blitze\sitemaker\services\icon_picker		$icons					Sitemaker icon picker object
57
	 * @param \blitze\sitemaker\services\util				$util					Sitemaker util object
58
	 * @param string										$php_ext				phpEx
59
	 */
60 12
	public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $controller_helper, ContainerInterface $phpbb_container, \phpbb\template\template $template, \phpbb\language\language $translator, \phpbb\user $user, \blitze\sitemaker\services\filemanager\setup $filemanager, \blitze\sitemaker\services\icon_picker $icons, \blitze\sitemaker\services\util $util, $php_ext)
61
	{
62 12
		$this->config = $config;
63 12
		$this->controller_helper = $controller_helper;
64 12
		$this->phpbb_container = $phpbb_container;
65 12
		$this->template = $template;
66 12
		$this->translator = $translator;
67 12
		$this->user = $user;
68 12
		$this->filemanager = $filemanager;
69 12
		$this->icons = $icons;
70 12
		$this->util = $util;
71 12
		$this->php_ext = $php_ext;
72 12
	}
73
74
	/**
75
	 * Show admin bar
76
	 *
77
	 * @param array $route_info
78
	 */
79 2
	public function show(array $route_info)
80
	{
81 2
		$this->translator->add_lang('block_manager', 'blitze/sitemaker');
82
83 2
		$this->phpbb_container->get('blitze.sitemaker.auto_lang')->add('blocks_admin');
84
85 2
		$route = $route_info['route'];
86 2
		$style_id = $route_info['style'];
87
88 2
		$this->get_available_blocks();
89 2
		$this->get_startpage_options();
90 2
		$this->set_javascript_data($route, $style_id);
91 2
		$this->set_assets();
92
93 2
		$this->template->assign_vars(array(
94 2
			'S_EDIT_MODE'		=> true,
95 2
			'S_ROUTE_OPS'		=> $this->get_route_options($route),
96 2
			'S_HIDE_BLOCKS'		=> $route_info['hide_blocks'],
97 2
			'S_POSITION_OPS'	=> $this->get_excluded_position_options($route_info['ex_positions']),
98 2
			'S_EX_POSITIONS'	=> join(', ', $route_info['ex_positions']),
99 2
			'S_STYLE_OPTIONS'	=> style_select($style_id, true),
100 2
			'S_STARTPAGE'		=> $this->startpage_is_set(),
101
102 2
			'ICON_PICKER'		=> $this->icons->picker(),
103 2
		));
104 2
	}
105
106
	/**
107
	 * Set data used in javascript
108
	 * @param string $route
109
	 * @param int $style_id
110
	 */
111 4
	public function set_javascript_data($route, $style_id)
112
	{
113 4
		$board_url = generate_board_url();
114 4
		$is_default_route = $u_default_route = false;
115 4
		if ($this->config['sitemaker_default_layout'])
116 4
		{
117 1
			$is_default_route = ($this->config['sitemaker_default_layout'] === $route) ? true : false;
118 1
			$u_default_route .= $board_url . '/' . $this->config['sitemaker_default_layout'];
119 1
			$u_default_route = reapply_sid($u_default_route);
120 1
		}
121
122 4
		$this->template->assign_vars(array(
123 4
			'S_IS_DEFAULT'		=> $is_default_route,
124
125 4
			'BLOCK_ACTIONS'		=> $this->get_block_actions(),
126 4
			'FILEMANAGER'		=> $this->filemanager->is_enabled(),
127 4
			'FILEMANAGER_AKEY'	=> $this->filemanager->get_access_key(),
128 4
			'PAGE_URL'			=> build_url(array('style')),
129
130 4
			'UA_BOARD_URL'		=> $board_url,
131 4
			'UA_ROUTE'			=> $route,
132 4
			'UA_STYLE_ID'		=> $style_id,
133 4
			'UA_SCRIPT_PATH'	=> $this->user->page['root_script_path'],
134 4
			'UA_MODREWRITE'		=> $this->config['enable_mod_rewrite'],
135 4
			'UA_WEB_ROOT_PATH'	=> $this->util->get_web_path(),
136 4
			'UA_UPLOAD_URL'		=> $this->controller_helper->route('blitze_sitemaker_image_upload'),
137
138 4
			'U_VIEW_DEFAULT'	=> $u_default_route,
139 4
		));
140 4
	}
141
142
	/**
143
	 * @return array
144
	 */
145 4
	protected function get_block_actions()
146
	{
147
		$list = array(
148 4
			'add_block',
149 4
			'copy_route',
150 4
			'edit_block',
151 4
			'handle_custom_action',
152 4
			'save_block',
153 4
			'save_blocks',
154 4
			'set_default_route',
155 4
			'set_route_prefs',
156 4
			'set_startpage',
157 4
			'update_block',
158 4
		);
159
160 4
		$actions = array();
161 4
		foreach ($list as $action)
162
		{
163 4
			$actions[$action] = $this->controller_helper->route('blitze_sitemaker_blocks_admin', array('action' => $action));
164 4
		}
165
166 4
		return $actions;
167
	}
168
169
	/**
170
	 * Get all available sitemaker blocks
171
	 */
172 3
	public function get_available_blocks()
173
	{
174 3
		$blocks = $this->phpbb_container->get('blitze.sitemaker.blocks.factory')->get_all_blocks();
175
176 3
		foreach ($blocks as $service => $name)
177
		{
178 3
			$this->template->assign_block_vars('block', array(
179 3
				'NAME'		=> $name,
180 3
				'SERVICE'	=> $service)
181 3
			);
182 3
		}
183 3
	}
184
185
	/**
186
	 * Provide options to set/unset current page as landing page
187
	 */
188 5
	public function get_startpage_options()
189
	{
190 5
		$symfony_request = $this->phpbb_container->get('symfony_request');
191 5
		$controller = $symfony_request->attributes->get('_controller');
192
193
		if ($controller)
194 5
		{
195 2
			list($controller_service, $controller_method) = explode(':', $controller);
196 2
			$controller_params	= $symfony_request->attributes->get('_route_params');
197 2
			$controller_object	= $this->phpbb_container->get($controller_service);
198 2
			$controller_class	= get_class($controller_object);
199
200 2
			$r = new \ReflectionMethod($controller_class, $controller_method);
201 2
			$class_params = $r->getParameters();
202
203 2
			list($namespace, $extension) = explode('\\', $controller_class);
204 2
			$controller_arguments = $this->get_arguments($controller_params, $class_params);
205
206 2
			$this->template->assign_vars(array(
207 2
				'CONTROLLER_NAME'	=> $controller_service,
208 2
				'CONTROLLER_METHOD'	=> $controller_method,
209 2
				'CONTROLLER_PARAMS'	=> $controller_arguments,
210 2
				'S_IS_STARTPAGE'	=> $this->is_startpage($controller_service, $controller_arguments),
211 2
				'UA_EXTENSION'		=> $namespace . '/' . $extension,
212 2
			));
213 2
		}
214 5
	}
215
216
	/**
217
	 * Add js/css
218
	 */
219 2
	public function set_assets()
220
	{
221 2
		$this->util->add_assets(array(
222
			'js'	=> array(
223 2
				'@blitze_sitemaker/vendor/jquery-ui/jquery-ui.min.js',
224 2
				'@blitze_sitemaker/vendor/tinymce/tinymce.min.js',
225 2
				'@blitze_sitemaker/vendor/jqueryui-touch-punch/jquery.ui.touch-punch.min.js',
226 2
				'@blitze_sitemaker/vendor/twig.js/index.js',
227 2
				100 =>  '@blitze_sitemaker/assets/blocks/manager.min.js',
228 2
			),
229
			'css'   => array(
230 2
				'@blitze_sitemaker/vendor/jquery-ui/themes/smoothness/jquery-ui.min.css',
231 2
				'@blitze_sitemaker/assets/blocks/manager.min.css',
232
			)
233 2
		));
234 2
	}
235
236
	/**
237
	 * Get routes with blocks
238
	 *
239
	 * @param string $current_route
240
	 * @return string
241
	 */
242 4
	public function get_route_options($current_route)
243
	{
244 4
		$routes_ary = $this->get_routes();
245
246 4
		$options = '<option value="">' . $this->translator->lang('SELECT') . '</option>';
247 4
		foreach ($routes_ary as $route)
248
		{
249 4
			$selected = ($route == $current_route) ? ' selected="selected"' : '';
250 4
			$options .= '<option value="' . $route . '"' . $selected . '>' . $route . '</option>';
251 4
		}
252
253 4
		return $options;
254
	}
255
256
	/**
257
	 * Get excluded position options
258
	 *
259
	 * @param array $ex_positions
260
	 * @return string
261
	 */
262 4
	public function get_excluded_position_options(array $ex_positions)
263
	{
264 4
		$options = '';
265 4
		foreach ($ex_positions as $position)
266
		{
267 2
			$options .= '<option value="' . $position . '" selected="selected">' . $position . '</option>';
268 4
		}
269
270 4
		return $options;
271
	}
272
273
	/**
274
	 * @return array
275
	 */
276 4
	protected function get_routes()
277
	{
278 4
		$factory = $this->phpbb_container->get('blitze.sitemaker.mapper.factory');
279 4
		$collection = $factory->create('routes')->find();
280
281 4
		$routes_ary = array();
282 4
		foreach ($collection as $entity)
283
		{
284
			/** @var \blitze\sitemaker\model\entity\route $entity */
285 4
			$route_name = $entity->get_route();
286 4
			$routes_ary[$route_name] = $route_name;
287 4
		}
288
289 4
		return $routes_ary;
290
	}
291
292
	/**
293
	 * @param array $controller_params
294
	 * @param array $class_params
295
	 * @return string
296
	 */
297 2
	protected function get_arguments(array $controller_params, array $class_params)
298
	{
299 2
		$arguments = array();
300 2
		foreach ($class_params as $param)
301
		{
302 2
			$name = $param->getName();
303 2
			$arguments[$name] = ($param->isOptional()) ? $param->getDefaultValue() : $controller_params[$name];
304 2
		}
305
306 2
		return join('/', $arguments);
307
	}
308
309
	/**
310
	 * @param string $controller_service
311
	 * @param string $controller_arguments
312
	 * @return bool
313
	 */
314 2
	protected function is_startpage($controller_service, $controller_arguments)
315
	{
316 2
		return ($this->config['sitemaker_startpage_controller'] == $controller_service && $this->config['sitemaker_startpage_params'] == $controller_arguments) ? true : false;
317
	}
318
319
	/**
320
	 * @return bool
321
	 */
322 2
	protected function startpage_is_set()
323
	{
324 2
		return ($this->config['sitemaker_startpage_controller']) ? true : false;
325
	}
326
}
327