Passed
Push — develop-webpack ( 5fc1fc...0d0dbf )
by Daniel
04:17
created

admin_bar::get_excluded_position_options()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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