admin_controller::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 9
c 2
b 1
f 0
dl 0
loc 11
rs 9.9666
cc 1
nc 1
nop 9

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
 * Ideas extension for the phpBB Forum Software package.
5
 *
6
 * @copyright (c) phpBB Limited <https://www.phpbb.com>
7
 * @license GNU General Public License, version 2 (GPL-2.0)
8
 *
9
 */
10
11
namespace phpbb\ideas\controller;
12
13
/**
14
 * Admin controller
15
 */
16
class admin_controller
17
{
18
	/** @var \phpbb\config\config */
19
	protected $config;
20
21
	/** @var \phpbb\db\driver\driver_interface */
22
	protected $db;
23
24
	/** @var \phpbb\language\language */
25
	protected $language;
26
27
	/** @var \phpbb\log\log */
28
	protected $log;
29
30
	/** @var \phpbb\request\request */
31
	protected $request;
32
33
	/** @var \phpbb\template\template */
34
	protected $template;
35
36
	/** @var \phpbb\user */
37
	protected $user;
38
39
	/** @var string */
40
	protected $phpbb_root_path;
41
42
	/** @var string */
43
	protected $php_ext;
44
45
	/** @var string */
46
	public $u_action;
47
48
	/**
49
	 * Constructor
50
	 *
51
	 * @param \phpbb\config\config                $config               Config object
52
	 * @param \phpbb\db\driver\driver_interface $db                   Database object
53
	 * @param \phpbb\language\language          $language             Language object
54
	 * @param \phpbb\log\log                    $log                  Log object
55
	 * @param \phpbb\request\request            $request              Request object
56
	 * @param \phpbb\template\template          $template             Template object
57
	 * @param \phpbb\user                       $user                 User object
58
	 * @param string                            $root_path            phpBB root path
59
	 * @param string                            $php_ext              php_ext
60
	 * @access public
61
	 */
62
	public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\language\language $language, \phpbb\log\log $log, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user, $root_path, $php_ext)
63
	{
64
		$this->config = $config;
65
		$this->db = $db;
66
		$this->language = $language;
67
		$this->log = $log;
68
		$this->request = $request;
69
		$this->template = $template;
70
		$this->user = $user;
71
		$this->phpbb_root_path = $root_path;
72
		$this->php_ext = $php_ext;
73
	}
74
75
	/**
76
	 * Display the options a user can configure for this extension
77
	 *
78
	 * @return void
79
	 * @access public
80
	 */
81
	public function display_options()
82
	{
83
		$this->template->assign_vars(array(
84
			'S_FORUM_SELECT_BOX'	=> $this->select_ideas_forum(),
85
			'S_IDEAS_FORUM_ID'		=> !empty($this->config['ideas_forum_id']),
86
87
			'U_ACTION'			=> $this->u_action,
88
		));
89
	}
90
91
	/**
92
	 * Set configuration options
93
	 *
94
	 * @return void
95
	 * @access public
96
	 */
97
	public function set_config_options()
98
	{
99
		$errors = array();
100
101
		// Check the form for validity
102
		if (!check_form_key('acp_phpbb_ideas_settings'))
103
		{
104
			$errors[] = $this->language->lang('FORM_INVALID');
105
		}
106
107
		// Don't save settings if errors have occurred
108
		if (count($errors))
109
		{
110
			$this->template->assign_vars(array(
111
				'S_ERROR'	=> true,
112
				'ERROR_MSG'	=> implode('<br />', $errors),
113
			));
114
115
			return;
116
		}
117
118
		$cfg_array = $this->request->variable('config', array('' => ''));
119
120
		// Configuration options to list through
121
		$display_vars = array(
122
			'ideas_forum_id',
123
		);
124
125
		// We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to
126
		foreach ($display_vars as $config_name)
127
		{
128
			if (!isset($cfg_array[$config_name]))
129
			{
130
				continue;
131
			}
132
133
			$this->config->set($config_name, $cfg_array[$config_name]);
134
		}
135
136
		$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_PHPBB_IDEAS_SETTINGS_LOG');
137
		trigger_error($this->language->lang('ACP_IDEAS_SETTINGS_UPDATED') . adm_back_link($this->u_action));
138
	}
139
140
	/**
141
	 * Set ideas forum options
142
	 *
143
	 * @return void
144
	 * @access public
145
	 */
146
	public function set_ideas_forum_options()
147
	{
148
		// Check if Ideas forum is selected and apply relevant settings if it is
149
		// But display the confirmation box first
150
		if (confirm_box(true))
151
		{
152
			if (empty($this->config['ideas_forum_id']))
153
			{
154
				trigger_error($this->language->lang('ACP_IDEAS_NO_FORUM') . adm_back_link($this->u_action), E_USER_WARNING);
155
			}
156
157
			$forum_id = (int) $this->config['ideas_forum_id'];
158
159
			$permission_helper = new \phpbb\ideas\factory\permission_helper($this->db, $this->phpbb_root_path, $this->php_ext);
160
			$permission_helper->set_ideas_forum_permissions($forum_id);
161
162
			// Disable auto-pruning for ideas forum
163
			$sql = 'UPDATE ' . FORUMS_TABLE . '
164
				SET ' . $this->db->sql_build_array('UPDATE', array('enable_prune' => false)) . '
165
				WHERE forum_id = ' . $forum_id;
166
			$this->db->sql_query($sql);
167
168
			$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_PHPBB_IDEAS_FORUM_SETUP_LOG');
169
			trigger_error($this->language->lang('ACP_IDEAS_FORUM_SETUP_UPDATED') . adm_back_link($this->u_action));
170
		}
171
		else
172
		{
173
			confirm_box(false, $this->language->lang('ACP_IDEAS_FORUM_SETUP_CONFIRM'), build_hidden_fields(array(
174
				'ideas_forum_setup'	=> $this->request->is_set_post('ideas_forum_setup'),
175
			)));
176
		}
177
	}
178
179
	/**
180
	 * Generate ideas forum select options
181
	 *
182
	 * @return string Select menu HTML code
183
	 * @access protected
184
	 */
185
	protected function select_ideas_forum()
186
	{
187
		$ideas_forum_id = (int) $this->config['ideas_forum_id'];
188
		$s_forums_list = '<select id="ideas_forum_id" name="config[ideas_forum_id]">';
189
		$s_forums_list .= '<option value="0"' . ((!$ideas_forum_id) ? ' selected="selected"' : '') . '>' . $this->language->lang('ACP_IDEAS_NO_FORUM') . '</option>';
190
		$forum_list = make_forum_select($ideas_forum_id, false, true, true);
191
		$s_forums_list .= $forum_list . '</select>';
192
193
		return $s_forums_list;
194
	}
195
196
	/**
197
	 * Set page url
198
	 *
199
	 * @param string $u_action Custom form action
200
	 * @return void
201
	 * @access public
202
	 */
203
	public function set_page_url($u_action)
204
	{
205
		$this->u_action = $u_action;
206
	}
207
}
208