Completed
Push — develop ( 79843d...c72359 )
by Daniel
12:15
created

admin_bar::set_assets()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 0
crap 1
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