Completed
Push — master ( 2864f3...20a96b )
by Matt
15s queued 13s
created

admin_controller::set_config_options()   A

Complexity

Conditions 5
Paths 8

Size

Total Lines 41
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 2 Features 0
Metric Value
eloc 17
c 3
b 2
f 0
dl 0
loc 41
rs 9.3888
cc 5
nc 8
nop 0
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