Completed
Push — master ( 699a8d...1f1439 )
by Daniel
10:20
created

admin_bar   A

Complexity

Total Complexity 28

Size/Duplication

Total Lines 250
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 99.21%

Importance

Changes 5
Bugs 1 Features 0
Metric Value
wmc 28
c 5
b 1
f 0
lcom 1
cbo 2
dl 0
loc 250
ccs 125
cts 126
cp 0.9921
rs 10

12 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
B show() 0 26 1
B set_javascript_data() 0 26 4
A get_available_blocks() 0 12 2
B get_startpage_options() 0 27 3
A set_assets() 0 16 1
A get_route_options() 0 13 3
A get_excluded_position_options() 0 10 3
A _get_routes() 0 14 2
A _get_arguments() 0 11 3
A _is_startpage() 0 4 3
A _startpage_is_set() 0 4 2
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 ContainerInterface */
20
	protected $phpbb_container;
21
22
	/** @var \phpbb\template\template */
23
	protected $template;
24
25
	/** @var \phpbb\user */
26
	protected $user;
27
28
	/** @var \blitze\sitemaker\services\icon_picker */
29
	protected $icons;
30
31
	/** @var \blitze\sitemaker\services\util */
32
	protected $util;
33
34
	/** @var string phpEx */
35
	protected $php_ext;
36
37
	/**
38
	 * Constructor
39
	 *
40
	 * @param \phpbb\config\config						$config					Config object
41
	 * @param ContainerInterface						$phpbb_container		Service container
42
	 * @param \phpbb\template\template					$template				Template object
43
	 * @param \phpbb\user								$user					User object
44
	 * @param \blitze\sitemaker\services\icon_picker	$icons					Sitemaker icon picker object
45
	 * @param \blitze\sitemaker\services\util			$util					Sitemaker util object
46
	 * @param string									$php_ext				phpEx
47
	 */
48 11
	public function __construct(\phpbb\config\config $config, ContainerInterface $phpbb_container, \phpbb\template\template $template, \phpbb\user $user, \blitze\sitemaker\services\icon_picker $icons, \blitze\sitemaker\services\util $util, $php_ext)
49
	{
50 11
		$this->config = $config;
51 11
		$this->phpbb_container = $phpbb_container;
52 11
		$this->template = $template;
53 11
		$this->user = $user;
54 11
		$this->icons = $icons;
55 11
		$this->util = $util;
56 11
		$this->php_ext = $php_ext;
57 11
	}
58
59
	/**
60
	 * Show admin bar
61
	 */
62 3
	public function show($route_info)
63
	{
64 1
		$this->user->add_lang_ext('blitze/sitemaker', 'block_manager');
65
66 1
		$this->phpbb_container->get('blitze.sitemaker.auto_lang')->add('blocks_admin');
67
68 1
		$route = $route_info['route'];
69 1
		$style_id = $route_info['style'];
70
71 1
		$this->get_available_blocks();
72 1
		$this->get_startpage_options();
73 1
		$this->set_javascript_data($route, $style_id);
74 1
		$this->set_assets();
75
76 1
		$this->template->assign_vars(array(
77 1
			'S_EDIT_MODE'		=> true,
78 1
			'S_ROUTE_OPS'		=> $this->get_route_options($route),
79 1
			'S_HIDE_BLOCKS'		=> $route_info['hide_blocks'],
80 1
			'S_POSITION_OPS'	=> $this->get_excluded_position_options($route_info['ex_positions']),
81 1
			'S_EX_POSITIONS'	=> join(', ', $route_info['ex_positions']),
82 1
			'S_STYLE_OPTIONS'	=> style_select($style_id, true),
83 1
			'S_STARTPAGE'		=> $this->_startpage_is_set(),
84
85 1
			'ICON_PICKER'		=> $this->icons->picker(),
86 3
		));
87 1
	}
88
89
	/**
90
	 * Set data used in javascript
91
	 */
92 3
	public function set_javascript_data($route, $style_id)
93
	{
94 3
		$board_url = generate_board_url();
95 3
		$ajax_url = $board_url . ((!$this->config['enable_mod_rewrite']) ? '/app.' . $this->php_ext : '');
96
97 3
		$is_default_route = $u_default_route = false;
98 3
		if ($this->config['sitemaker_default_layout'])
99 3
		{
100 1
			$is_default_route = ($this->config['sitemaker_default_layout'] === $route) ? true : false;
101 1
			$u_default_route .= $board_url . '/' . $this->config['sitemaker_default_layout'];
102 1
			$u_default_route = reapply_sid($u_default_route);
103 1
		}
104
105 3
		$this->template->assign_vars(array(
106 3
			'S_IS_DEFAULT'		=> $is_default_route,
107
108 3
			'PAGE_URL'			=> build_url(array('style')),
109
110 3
			'UA_ROUTE'			=> $route,
111 3
			'UA_AJAX_URL'		=> $ajax_url,
112 3
			'UA_BOARD_URL'		=> $board_url,
113 3
			'UA_STYLE_ID'		=> $style_id,
114
115 3
			'U_VIEW_DEFAULT'	=> $u_default_route,
116 3
		));
117 3
	}
118
119
	/**
120
	 * Get all available sitemaker blocks
121
	 */
122 2
	public function get_available_blocks()
123
	{
124 2
		$blocks = $this->phpbb_container->get('blitze.sitemaker.blocks.factory')->get_all_blocks();
125
126 2
		foreach ($blocks as $service => $name)
127
		{
128 2
			$this->template->assign_block_vars('block', array(
129 2
				'NAME'		=> $name,
130 2
				'SERVICE'	=> $service)
131 2
			);
132 2
		}
133 2
	}
134
135 4
	public function get_startpage_options()
136
	{
137 4
		$symfony_request = $this->phpbb_container->get('symfony_request');
138 4
		$controller = $symfony_request->attributes->get('_controller');
139
140 4
		if ($controller && $controller !== 'blitze.sitemaker.forum.controller:handle')
141 4
		{
142 2
			list($controller_service, $controller_method) = explode(':', $controller);
143 2
			$controller_params	= $symfony_request->attributes->get('_route_params');
144 2
			$controller_object	= $this->phpbb_container->get($controller_service);
145 2
			$controller_class	= get_class($controller_object);
146
147 2
			$r = new \ReflectionMethod($controller_class, $controller_method);
148 2
			$class_params = $r->getParameters();
149
150 2
			list($namespace, $extension) = explode('\\', $controller_class);
151 2
			$controller_arguments = $this->_get_arguments($controller_params, $class_params);
152
153 2
			$this->template->assign_vars(array(
154 2
				'CONTROLLER_NAME'	=> $controller_service,
155 2
				'CONTROLLER_METHOD'	=> $controller_method,
156 2
				'CONTROLLER_PARAMS'	=> $controller_arguments,
157 2
				'S_IS_STARTPAGE'	=> $this->_is_startpage($controller_service, $controller_arguments),
158 2
				'UA_EXTENSION'		=> $namespace . '/' . $extension,
159 2
			));
160 2
		}
161 4
	}
162
163 1
	public function set_assets()
164
	{
165 1
		$this->util->add_assets(array(
166
			'js'	=> array(
167 1
				'//ajax.googleapis.com/ajax/libs/jqueryui/' . JQUI_VERSION . '/jquery-ui.min.js',
168 1
				'//tinymce.cachefly.net/4.2/tinymce.min.js',
169 1
				'@blitze_sitemaker/vendor/jqueryui-touch-punch/jquery.ui.touch-punch.min.js',
170 1
				'@blitze_sitemaker/vendor/twig.js/twig.min.js',
171 1
				100 =>  '@blitze_sitemaker/assets/blocks/manager.min.js',
172 1
			),
173
			'css'   => array(
174 1
				'//ajax.googleapis.com/ajax/libs/jqueryui/' . JQUI_VERSION . '/themes/smoothness/jquery-ui.css',
175 1
				'@blitze_sitemaker/assets/blocks/manager.min.css',
176
			)
177 1
		));
178 1
	}
179
180
	/**
181
	 * Get routes with blocks
182
	 */
183 3
	public function get_route_options($current_route)
184
	{
185 3
		$routes_ary = $this->_get_routes();
186
187 3
		$options = '<option value="">' . $this->user->lang('SELECT') . '</option>';
188 3
		foreach ($routes_ary as $route)
189
		{
190 3
			$selected = ($route == $current_route) ? ' selected="selected"' : '';
191 3
			$options .= '<option value="' . $route . '"' . $selected . '>' . $route . '</option>';
192 3
		}
193
194 3
		return $options;
195
	}
196
197
	/**
198
	 * Get excluded position options
199
	 */
200 3
	public function get_excluded_position_options($ex_positions)
201
	{
202 3
		$options = '<option value=""' . ((!sizeof($ex_positions)) ? ' selected="selected"' : '') . '>' . $this->user->lang('NONE') . '</option>';
203 3
		foreach ($ex_positions as $position)
204
		{
205
			$options .= '<option value="' . $position . '" selected="selected">' . $position . '</option>';
206 3
		}
207
208 3
		return $options;
209
	}
210
211
	/**
212
	 * @return array
213
	 */
214 3
	protected function _get_routes()
215
	{
216 3
		$factory = $this->phpbb_container->get('blitze.sitemaker.mapper.factory');
217 3
		$collection = $factory->create('blocks', 'routes')->find();
218
219 3
		$routes_ary = array();
220 3
		foreach ($collection as $entity)
221
		{
222 3
			$route_name = $entity->get_route();
223 3
			$routes_ary[$route_name] = $route_name;
224 3
		}
225
226 3
		return $routes_ary;
227
	}
228
229
	/**
230
	 * @param array $controller_params
231
	 * @param array $class_params
232
	 * @return string
233
	 */
234 2
	protected function _get_arguments(array $controller_params, array $class_params)
235
	{
236 2
		$arguments = array();
237 2
		foreach ($class_params as $param)
238
		{
239 2
			$name = $param->getName();
240 2
			$arguments[$name] = ($param->isOptional()) ? $param->getDefaultValue() : $controller_params[$name];
241 2
		}
242
243 2
		return join('/', $arguments);
244
	}
245
246
	/**
247
	 * @param string $controller_service
248
	 * @param string $controller_arguments
249
	 * @return bool
250
	 */
251 2
	protected function _is_startpage($controller_service, $controller_arguments)
252
	{
253 2
		return ($this->config['sitemaker_startpage_controller'] == $controller_service && $this->config['sitemaker_startpage_params'] == $controller_arguments) ? true : false;
254
	}
255
256
	/**
257
	 * @return bool
258
	 */
259 1
	protected function _startpage_is_set()
260
	{
261 1
		return ($this->config['sitemaker_startpage_controller']) ? true : false;
262
	}
263
}
264