Completed
Push — develop ( 79843d...c72359 )
by Daniel
12: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 8
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 8
cts 8
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 12
	 * @param \blitze\sitemaker\services\icon_picker		$icons					Sitemaker icon picker object
57 4
	 * @param \blitze\sitemaker\services\util				$util					Sitemaker util object
58 12
	 * @param string										$php_ext				phpEx
59 12
	 */
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 12
	{
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
		$this->filemanager = $filemanager;
69
		$this->icons = $icons;
70
		$this->util = $util;
71
		$this->php_ext = $php_ext;
72
	}
73
74 4
	/**
75
	 * Show admin bar
76 4
	 *
77
	 * @param array $route_info
78 2
	 */
79
	public function show(array $route_info)
80 2
	{
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 2
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 2
93 2
		$this->template->assign_vars(array(
94 2
			'S_EDIT_MODE'		=> true,
95 2
			'S_ROUTE_OPS'		=> $this->get_route_options($route),
96
			'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
			'S_STARTPAGE'		=> $this->startpage_is_set(),
101
102
			'ICON_PICKER'		=> $this->icons->picker(),
103
		));
104
	}
105
106 4
	/**
107
	 * Set data used in javascript
108 4
	 * @param string $route
109 4
	 * @param int $style_id
110
	 */
111 4
	public function set_javascript_data($route, $style_id)
112 4
	{
113 4
		$board_url = generate_board_url();
114 1
		$is_default_route = $u_default_route = false;
115 1
		if ($this->config['sitemaker_default_layout'])
116 1
		{
117 1
			$is_default_route = ($this->config['sitemaker_default_layout'] === $route) ? true : false;
118
			$u_default_route .= $board_url . '/' . $this->config['sitemaker_default_layout'];
119 4
			$u_default_route = reapply_sid($u_default_route);
120 4
		}
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 4
130 4
			'UA_BOARD_URL'		=> $board_url,
131 4
			'UA_ROUTE'			=> $route,
132
			'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
			'UA_UPLOAD_URL'		=> $this->controller_helper->route('blitze_sitemaker_image_upload'),
137
138
			'U_VIEW_DEFAULT'	=> $u_default_route,
139
		));
140 3
	}
141
142 3
	/**
143
	 * @return array
144 3
	 */
145
	protected function get_block_actions()
146 3
	{
147 3
		$list = array(
148 3
			'add_block',
149 3
			'copy_route',
150 3
			'edit_block',
151 3
			'handle_custom_action',
152
			'save_block',
153
			'save_blocks',
154
			'set_default_route',
155
			'set_route_prefs',
156 5
			'set_startpage',
157
			'update_block',
158 5
		);
159 5
160
		$actions = array();
161
		foreach ($list as $action)
162 5
		{
163 2
			$actions[$action] = $this->controller_helper->route('blitze_sitemaker_blocks_admin', array('action' => $action));
164 2
		}
165 2
166 2
		return $actions;
167
	}
168 2
169 2
	/**
170
	 * Get all available sitemaker blocks
171 2
	 */
172 2
	public function get_available_blocks()
173
	{
174 2
		$blocks = $this->phpbb_container->get('blitze.sitemaker.blocks.factory')->get_all_blocks();
175 2
176 2
		foreach ($blocks as $service => $name)
177 2
		{
178 2
			$this->template->assign_block_vars('block', array(
179 2
				'NAME'		=> $name,
180 2
				'SERVICE'	=> $service)
181 2
			);
182 5
		}
183
	}
184
185
	/**
186
	 * Provide options to set/unset current page as landing page
187 2
	 */
188
	public function get_startpage_options()
189 2
	{
190
		$symfony_request = $this->phpbb_container->get('symfony_request');
191 2
		$controller = $symfony_request->attributes->get('_controller');
192 2
193 2
		if ($controller)
194 2
		{
195 2
			list($controller_service, $controller_method) = explode(':', $controller);
196 2
			$controller_params	= $symfony_request->attributes->get('_route_params');
197
			$controller_object	= $this->phpbb_container->get($controller_service);
198 2
			$controller_class	= get_class($controller_object);
199 2
200
			$r = new \ReflectionMethod($controller_class, $controller_method);
201 2
			$class_params = $r->getParameters();
202 2
203
			list($namespace, $extension) = explode('\\', $controller_class);
204
			$controller_arguments = $this->get_arguments($controller_params, $class_params);
205
206
			$this->template->assign_vars(array(
207
				'CONTROLLER_NAME'	=> $controller_service,
208
				'CONTROLLER_METHOD'	=> $controller_method,
209
				'CONTROLLER_PARAMS'	=> $controller_arguments,
210 4
				'S_IS_STARTPAGE'	=> $this->is_startpage($controller_service, $controller_arguments),
211
				'UA_EXTENSION'		=> $namespace . '/' . $extension,
212 4
			));
213
		}
214 4
	}
215 4
216
	/**
217 4
	 * Add js/css
218 4
	 */
219 4
	public function set_assets()
220
	{
221 4
		$this->util->add_assets(array(
222
			'js'	=> array(
223
				'@blitze_sitemaker/vendor/jquery-ui/jquery-ui.min.js',
224
				'@blitze_sitemaker/vendor/tinymce/tinymce.min.js',
225
				'@blitze_sitemaker/vendor/jqueryui-touch-punch/jquery.ui.touch-punch.min.js',
226
				'@blitze_sitemaker/vendor/twig.js/index.js',
227
				100 =>  '@blitze_sitemaker/assets/blocks/manager.min.js',
228
			),
229
			'css'   => array(
230 4
				'@blitze_sitemaker/vendor/jquery-ui/themes/smoothness/jquery-ui.min.css',
231
				'@blitze_sitemaker/assets/blocks/manager.min.css',
232 4
			)
233 4
		));
234
	}
235 2
236 4
	/**
237
	 * Get routes with blocks
238 4
	 *
239
	 * @param string $current_route
240
	 * @return string
241
	 */
242
	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
		}
252
253 4
		return $options;
254 4
	}
255 4
256
	/**
257 4
	 * Get excluded position options
258
	 *
259
	 * @param array $ex_positions
260
	 * @return string
261
	 */
262
	public function get_excluded_position_options(array $ex_positions)
263
	{
264
		$options = '';
265 2
		foreach ($ex_positions as $position)
266
		{
267 2
			$options .= '<option value="' . $position . '" selected="selected">' . $position . '</option>';
268 2
		}
269
270 2
		return $options;
271 2
	}
272 2
273
	/**
274 2
	 * @return array
275
	 */
276
	protected function get_routes()
277
	{
278
		$factory = $this->phpbb_container->get('blitze.sitemaker.mapper.factory');
279
		$collection = $factory->create('routes')->find();
280
281
		$routes_ary = array();
282 2
		foreach ($collection as $entity)
283
		{
284 2
			/** @var \blitze\sitemaker\model\entity\route $entity */
285
			$route_name = $entity->get_route();
286
			$routes_ary[$route_name] = $route_name;
287
		}
288
289
		return $routes_ary;
290 2
	}
291
292 2
	/**
293
	 * @param array $controller_params
294
	 * @param array $class_params
295
	 * @return string
296
	 */
297
	protected function get_arguments(array $controller_params, array $class_params)
298
	{
299
		$arguments = array();
300
		foreach ($class_params as $param)
301
		{
302
			$name = $param->getName();
303
			$arguments[$name] = ($param->isOptional()) ? $param->getDefaultValue() : $controller_params[$name];
304
		}
305
306
		return join('/', $arguments);
307
	}
308
309
	/**
310
	 * @param string $controller_service
311
	 * @param string $controller_arguments
312
	 * @return bool
313
	 */
314
	protected function is_startpage($controller_service, $controller_arguments)
315
	{
316
		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
	protected function startpage_is_set()
323
	{
324
		return ($this->config['sitemaker_startpage_controller']) ? true : false;
325
	}
326
}
327