display::get_column_widths()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 *
5
 * @package sitemaker
6
 * @copyright (c) 2013 Daniel A. (blitze)
7
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
8
 *
9
 */
10
11
namespace blitze\sitemaker\services\blocks;
12
13
use Symfony\Component\DependencyInjection\ContainerInterface;
14
15
class display
16
{
17
	/** @var \phpbb\auth\auth */
18
	protected $auth;
19
20
	/** @var \phpbb\config\config */
21
	protected $config;
22
23
	/** @var \phpbb\config\db_text */
24
	protected $config_text;
25
26
	/** @var ContainerInterface */
27
	protected $phpbb_container;
28
29
	/** @var \phpbb\request\request_interface */
30
	protected $request;
31
32
	/** @var \phpbb\template\template */
33
	protected $template;
34
35
	/** @var \phpbb\user */
36
	protected $user;
37
38
	const SHOW_ON_ALL_ROUTES = 0;
39
	const SHOW_ON_PARENT_ROUTE_ONLY = 1;
40
	const SHOW_ON_CHILD_ROUTE_ONLY = 2;
41
42
	/**
43
	 * Constructor
44
	 *
45
	 * @param \phpbb\auth\auth							$auth					Auth object
46
	 * @param \phpbb\config\config						$config					Config object
47
	 * @param \phpbb\config\db_text						$config_text			Config text object
48
	 * @param ContainerInterface						$phpbb_container		Service container
49
	 * @param \phpbb\request\request_interface			$request				Request object
50
	 * @param \phpbb\template\template					$template				Template object
51
	 * @param \phpbb\user								$user					User object
52 19
	 */
53
	public function __construct(\phpbb\auth\auth $auth, \phpbb\config\config $config, \phpbb\config\db_text $config_text, ContainerInterface $phpbb_container, \phpbb\request\request_interface $request, \phpbb\template\template $template, \phpbb\user $user)
54 19
	{
55 19
		$this->auth = $auth;
56 19
		$this->config = $config;
57 19
		$this->config_text = $config_text;
58 19
		$this->phpbb_container = $phpbb_container;
59 19
		$this->request = $request;
60 19
		$this->template = $template;
61 19
		$this->user = $user;
62
	}
63
64
	/**
65
	 * Show blocks
66 19
	 */
67
	public function show()
68 19
	{
69 19
		if ($this->page_can_have_blocks())
70 17
		{
71 17
			$edit_mode = $this->toggle_edit_mode();
72 17
			$style_id = $this->get_style_id();
73
			$current_route = $this->get_current_route();
74 17
75 17
			$this->show_sitemaker($current_route, $style_id, $edit_mode);
76 19
		}
77
	}
78
79
	/**
80
	 * @return string
81
	 */
82 17
	protected function get_current_route()
83
	{
84 17
		$current_route = ltrim($this->user->page['page_dir'] . '/' . $this->user->page['page_name'], './') . ($this->user->page['forum'] ? '?f=' . $this->user->page['forum'] : '');
85 17
		return substr($current_route, 0, 100);
86 2
	}
87
88
	/**
89
	 * Get style id
90 15
	 * @return int
91
	 */
92
	public function get_style_id()
93
	{
94
		if ($this->request->is_set('style'))
95
		{
96
			return $this->request->variable('style', 0);
97 19
		}
98
		else
99 19
		{
100 19
			return (int) ((!$this->config['override_user_style']) ? $this->user->data['user_style'] : $this->config['default_style']);
101
		}
102
	}
103
104
	/**
105
	 * @return bool
106 17
	 */
107
	protected function page_can_have_blocks()
108 17
	{
109
		$offlimits = array('ucp.php', 'mcp.php', 'memberlist.php');
110 17
		return ($this->user->page['page_dir'] == 'adm' || in_array($this->user->page['page_name'], $offlimits)) ? false : true;
111 17
	}
112 15
113 15
	/**
114 15
	 * @return bool
115
	 */
116 17
	protected function toggle_edit_mode()
117
	{
118
		$edit_mode = $this->request->variable($this->config['cookie_name'] . '_sm_edit_mode', false, false, \phpbb\request\request_interface::COOKIE);
0 ignored issues
show
Bug introduced by
phpbb\request\request_interface::COOKIE of type integer is incompatible with the type phpbb\request\request_interface expected by parameter $super_global of phpbb\request\request_interface::variable(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

118
		$edit_mode = $this->request->variable($this->config['cookie_name'] . '_sm_edit_mode', false, false, /** @scrutinizer ignore-type */ \phpbb\request\request_interface::COOKIE);
Loading history...
119
120
		if ($this->request->is_set('edit_mode'))
121
		{
122
			$edit_mode = $this->request->variable('edit_mode', false);
123 17
			$this->user->set_cookie('sm_edit_mode', $edit_mode, 0);
124
		}
125 17
126 17
		return $edit_mode;
127
	}
128 12
129 12
	/**
130 12
	 * @param bool $is_sub_route
131 12
	 * @return array
132 12
	 */
133
	protected function get_display_modes($is_sub_route)
134
	{
135
		if ($is_sub_route === false)
136 5
		{
137 5
			$modes = array(
138 5
				self::SHOW_ON_ALL_ROUTES		=> true,
139 5
				self::SHOW_ON_PARENT_ROUTE_ONLY	=> true,
140
				self::SHOW_ON_CHILD_ROUTE_ONLY	=> false,
141
			);
142 17
		}
143
		else
144
		{
145
			$modes = array(
146
				self::SHOW_ON_ALL_ROUTES		=> true,
147
				self::SHOW_ON_PARENT_ROUTE_ONLY	=> false,
148
				self::SHOW_ON_CHILD_ROUTE_ONLY	=> true,
149
			);
150 17
		}
151
152 17
		return $modes;
153 17
	}
154 17
155
	/**
156 5
	 * @param bool  $edit_mode
157
	 * @param array $modes
158 4
	 * @return string
159 4
	 */
160 4
	protected function get_edit_mode_url(&$edit_mode, array &$modes)
161 4
	{
162 4
		$u_edit_mode = '';
163
		if ($this->auth->acl_get('a_sm_manage_blocks'))
164 5
		{
165 5
			if ($edit_mode)
166
			{
167
				$modes = array(
168 12
					self::SHOW_ON_ALL_ROUTES		=> true,
169
					self::SHOW_ON_PARENT_ROUTE_ONLY	=> true,
170
					self::SHOW_ON_CHILD_ROUTE_ONLY	=> true,
171 17
				);
172
			}
173
174
			$u_edit_mode = append_sid(generate_board_url() . '/' . ltrim(rtrim(build_url(array('edit_mode', 'sid', 'style')), '?'), './../'), 'edit_mode=' . (int) !$edit_mode);
175
		}
176
		else
177
		{
178 17
			$edit_mode = false;
179
		}
180 17
181
		return $u_edit_mode;
182 17
	}
183
184
	/**
185
	 * @param int $style_id
186
	 * @return string
187
	 */
188
	protected function get_layout($style_id)
189
	{
190
		$style_prefs = array_filter((array) json_decode((string) $this->config_text->get('sm_layout_prefs'), true));
191
192 17
		return (isset($style_prefs[$style_id])) ? basename($style_prefs[$style_id]['layout']) : 'portal';
193
	}
194 17
195
	/**
196 17
	 * @param int $style_id
197 17
	 * @return string
198 17
	 */
199
	protected function get_column_widths($style_id)
200 17
	{
201
		$column_widths = array_filter((array) json_decode($this->config['sitemaker_column_widths'], true));
202 17
203 17
		return (isset($column_widths[$style_id])) ? $column_widths[$style_id] : '';
204 15
	}
205 15
206
	/**
207 17
	 * @param int $style_id
208 17
	 * @param string $current_route
209 17
	 * @param int $style_id
210 17
	 * @param bool $edit_mode
211 17
	 */
212 17
	protected function show_sitemaker($current_route, $style_id, $edit_mode)
213
	{
214
		/** @var \blitze\sitemaker\services\blocks\blocks $blocks */
215
		$blocks = $this->phpbb_container->get('blitze.sitemaker.blocks');
216
217
		$page_dir = $this->user->page['page_dir'];
218 17
		$forum_id = $this->user->page['forum'];
219
220
		$route_info = $blocks->get_route_info($current_route, $page_dir, $forum_id, $style_id, $edit_mode);
221 17
		$display_modes = $this->get_display_modes($route_info['is_sub_route']);
222 4
		$u_edit_mode = $this->get_edit_mode_url($edit_mode, $display_modes);
223 4
224 17
		$this->show_admin_bar($edit_mode, $route_info);
225
226
		if ($edit_mode || !$route_info['hide_blocks'])
227
		{
228
			$blocks->display($edit_mode, $route_info, $display_modes);
229
		}
230
231
		$this->template->assign_vars(array(
232
			'S_SITEMAKER'		=> true,
233
			'S_LAYOUT'			=> $this->get_layout($style_id),
234
			'S_COLUMN_WIDTHS'	=> $this->get_column_widths($style_id),
235
			'U_EDIT_MODE'		=> $u_edit_mode,
236
		));
237
	}
238
239
	/**
240
	 * @param bool  $edit_mode
241
	 * @param array $route_info
242
	 */
243
	protected function show_admin_bar($edit_mode, array $route_info)
244
	{
245
		if ($edit_mode)
246
		{
247
			$this->phpbb_container->get('blitze.sitemaker.blocks.admin_bar')->show($route_info);
248
		}
249
	}
250
}
251