Passed
Push — 1.1.0 ( 72422e...74b104 )
by Sylver
02:41
created

admin_controller::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 11
c 1
b 0
f 0
nc 1
nop 11
dl 0
loc 13
rs 9.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
* @package		Breizh Smilies Categories Extension
5
* @copyright	(c) 2020 Sylver35  https://breizhcode.com
6
* @license		http://opensource.org/licenses/gpl-license.php GNU Public License
7
*
8
*/
9
10
namespace sylver35\smiliescat\controller;
11
12
use sylver35\smiliescat\core\category;
13
use phpbb\config\config;
14
use phpbb\db\driver\driver_interface as db;
15
use phpbb\pagination;
16
use phpbb\request\request;
17
use phpbb\template\template;
18
use phpbb\user;
19
use phpbb\language\language;
20
use phpbb\log\log;
21
22
class admin_controller
23
{
24
	/* @var \sylver35\smiliescat\core\category */
25
	protected $category;
26
27
	/** @var \phpbb\config\config */
28
	protected $config;
29
30
	/** @var \phpbb\db\driver\driver_interface */
31
	protected $db;
32
33
	/** @var \phpbb\pagination */
34
	protected $pagination;
35
36
	/** @var \phpbb\request\request */
37
	protected $request;
38
39
	/** @var \phpbb\template\template */
40
	protected $template;
41
42
	/** @var \phpbb\user */
43
	protected $user;
44
45
	/** @var \phpbb\language\language */
46
	protected $language;
47
48
	/** @var \phpbb\log\log */
49
	protected $log;
50
51
	/** @var string phpBB root path */
52
	protected $root_path;
53
54
	/** @var string Custom form action */
55
	protected $u_action;
56
57
	/**
58
	 * The database tables
59
	 *
60
	 * @var string */
61
	protected $smilies_category_table;
62
63
	/**
64
	 * Constructor
65
	 */
66
	public function __construct(category $category, config $config, db $db, pagination $pagination, request $request, template $template, user $user, language $language, log $log, $root_path, $smilies_category_table)
67
	{
68
		$this->category = $category;
69
		$this->config = $config;
70
		$this->db = $db;
71
		$this->pagination = $pagination;
72
		$this->request = $request;
73
		$this->template = $template;
74
		$this->user = $user;
75
		$this->language = $language;
76
		$this->log = $log;
77
		$this->root_path = $root_path;
78
		$this->smilies_category_table = $smilies_category_table;
79
	}
80
81
	public function acp_categories_config()
82
	{
83
		$this->language->add_lang('acp/language');
84
		$mode = $this->request->variable('mode', '');
85
		$action = $this->request->variable('action', '');
86
		$id = $this->request->variable('id', 0);
87
		$form_key = 'sylver35/smiliescat';
88
		add_form_key($form_key);
89
90
		if ($action)
91
		{
92
			switch ($action)
93
			{
94
				case 'config_cat':
95
96
					if (!check_form_key($form_key))
97
					{
98
						trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
99
					}
100
101
					$this->config->set('smilies_per_page_cat', $this->request->variable('smilies_per_page_cat', 15));
102
103
					$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SC_CONFIG', time());
104
					trigger_error($this->language->lang('CONFIG_UPDATED') . adm_back_link($this->u_action));
105
106
				break;
107
108
				case 'add':
109
110
					$this->category->adm_add_cat();
111
112
					$this->template->assign_vars(array(
113
						'IN_ADD_ACTION'			=> true,
114
						'U_BACK'				=> $this->u_action,
115
						'U_ADD_CAT'				=> $this->u_action . '&amp;action=add_cat',
116
					));
117
118
				break;
119
120
				case 'add_cat':
121
122
					if (!check_form_key($form_key))
123
					{
124
						trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
125
					}
126
127
					$cat_order = $this->request->variable('order', 0);
128
					$title = $this->request->variable('name_' . $this->user->lang_name, '', true);
129
					
130
					$sql_in = array(
131
						'cat_id'		=> $this->category->get_max_id() + 1,
132
						'cat_order'		=> $cat_order,
133
					);
134
					
135
					$sql = 'SELECT lang_id, lang_iso
136
						FROM ' . LANG_TABLE . "
137
							ORDER BY lang_id ASC";
138
					$result = $this->db->sql_query($sql);
139
					while ($row = $this->db->sql_fetchrow($result))
140
					{
141
						$iso = $row['lang_iso'];
142
						$lang = $this->request->variable("lang_$iso", '', true);
143
						$name = $this->request->variable("name_$iso", '', true);
144
						if ($name === '')
145
						{
146
							trigger_error($this->language->lang('SC_CATEGORY_ERROR', $this->language->lang('SC_CATEGORY_NAME')) . adm_back_link($this->u_action . '&amp;action=add'), E_USER_WARNING);
147
						}
148
						else
149
						{
150
							$sql_in = array_merge($sql_in, array(
151
								'cat_lang'		=> $lang,
152
								'cat_name'		=> $this->category->capitalize($name),
153
								'cat_title'		=> $this->category->capitalize($title),
154
							));
155
							$this->db->sql_query('INSERT INTO ' . $this->smilies_category_table . $this->db->sql_build_array('INSERT', $sql_in));
156
157
							if ($cat_order == 1)
158
							{
159
								$this->config->set('smilies_category_nb', $sql_in['cat_id']);
160
							}
161
						}
162
					}
163
164
					$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SC_' . strtoupper($action), time(), array($title));
165
					trigger_error($this->language->lang('SC_CREATE_SUCCESS') . adm_back_link($this->u_action));
166
167
				break;
168
169
				case 'edit':
170
171
					$this->category->adm_edit_cat($id);
172
173
					$this->template->assign_vars(array(
174
						'U_BACK'		=> $this->u_action,
175
						'U_EDIT_CAT'	=> $this->u_action . '&amp;action=edit_cat&amp;id=' . $id,
176
					));
177
178
				break;
179
180
				case 'edit_cat':
181
182
					if (!check_form_key($form_key))
183
					{
184
						trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
185
					}
186
187
					$title = $this->request->variable('name_' . $this->user->lang_name, '', true);
188
					$sql = 'SELECT lang_id, lang_iso
189
						FROM ' . LANG_TABLE . "
190
							ORDER BY lang_id ASC";
191
					$result = $this->db->sql_query($sql);
192
					while ($row = $this->db->sql_fetchrow($result))
193
					{
194
						$iso = $row['lang_iso'];
195
						$lang = $this->request->variable("lang_$iso", '', true);
196
						$name = $this->request->variable("name_$iso", '', true);
197
						$sort = $this->request->variable("sort_$iso", '');
198
						$order = $this->request->variable('order', 0);
199
						if ($name === '')
200
						{
201
							trigger_error($this->language->lang('SC_CATEGORY_ERROR', $this->language->lang('SC_CATEGORY_NAME')) . adm_back_link($this->u_action . '&amp;action=edit&amp;id=' . $id), E_USER_WARNING);
202
						}
203
						else
204
						{
205
							if ($sort == 'edit')
206
							{
207
								$sql = 'UPDATE ' . $this->smilies_category_table . " SET cat_name = '" . $this->category->capitalize($name) . "', cat_title = '" . $this->category->capitalize($title) . "'
208
									WHERE cat_lang = '" . $this->db->sql_escape($lang) . "' AND cat_id = $id";
209
								$this->db->sql_query($sql);
210
							}
211
							else if ($sort == 'create')
212
							{
213
								$sql_in = array(
214
									'cat_id'		=> $id,
215
									'cat_order'		=> $order,
216
									'cat_lang'		=> $lang,
217
									'cat_name'		=> $this->category->capitalize($name),
218
									'cat_title'		=> $this->category->capitalize($title),
219
								);
220
								$this->db->sql_query('INSERT INTO ' . $this->smilies_category_table . $this->db->sql_build_array('INSERT', $sql_in));
221
							}
222
						}
223
					}
224
225
					$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SC_' . strtoupper($action), time(), array($title));
226
					trigger_error($this->language->lang('SC_EDIT_SUCCESS') . adm_back_link($this->u_action));
227
228
				break;
229
230
				case 'move_up':
231
				case 'move_down':
232
233
					if (!check_link_hash($this->request->variable('hash', ''), 'acp-main_module'))
234
					{
235
						trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
236
					}
237
238
					// Get current order id and title...
239
					$sql = 'SELECT cat_order, cat_title
240
						FROM ' . $this->smilies_category_table . "
241
							WHERE cat_id = $id";
242
					$result = $this->db->sql_query($sql);
243
					$row = $this->db->sql_fetchrow($result);
244
					$current_order = $row['cat_order'];
245
					$title = $row['cat_title'];
246
					$this->db->sql_freeresult($result);
247
248
					if ($current_order == 1 && $action == 'move_up')
249
					{
250
						break;
251
					}
252
253
					$max_order = $this->category->get_max_order();
254
255
					if ($current_order == $max_order && $action == 'move_down')
256
					{
257
						break;
258
					}
259
260
					// on move_down, switch position with next order_id...
261
					// on move_up, switch position with previous order_id...
262
					$switch_order_id = ($action == 'move_down') ? $current_order + 1 : $current_order - 1;
263
264
					$sql = 'UPDATE ' . $this->smilies_category_table . "
265
						SET cat_order = $current_order
266
						WHERE cat_order = $switch_order_id
267
							AND cat_id <> $id";
268
					$this->db->sql_query($sql);
269
					$move_executed = (bool) $this->db->sql_affectedrows();
270
271
					// Only update the other entry too if the previous entry got updated
272
					if ($move_executed)
273
					{
274
						$sql = 'UPDATE ' . $this->smilies_category_table . "
275
							SET cat_order = $switch_order_id
276
							WHERE cat_order = $current_order
277
								AND cat_id = $id";
278
						$this->db->sql_query($sql);
279
280
						if ($switch_order_id == 1)
281
						{
282
							$this->config->set('smilies_category_nb', $id);
283
						}
284
					}
285
286
					$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SC_' . strtoupper($action) . '_CAT', time(), array($title));
287
288
					if ($this->request->is_ajax())
289
					{
290
						trigger_error($this->language->lang('SC_MOVE_SUCCESS') . adm_back_link($this->u_action));
291
						$json_response = new \phpbb\json_response;
292
						$json_response->send(array(
293
							'MESSAGE_TITLE'	=> $this->language->lang('INFORMATION'),
294
							'MESSAGE_TEXT'	=> $this->language->lang('SC_MOVE_SUCCESS'),
295
							'REFRESH_DATA'	=> array('time'		=> 2),
296
						));
297
					}
298
					else
299
					{
300
						trigger_error($this->language->lang('SC_MOVE_SUCCESS') . adm_back_link($this->u_action));
301
					}
302
303
				break;
304
305
				case 'delete':
306
307
					if (confirm_box(true))
308
					{
309
						$sql = 'SELECT cat_title
310
							FROM ' . $this->smilies_category_table . "
311
								WHERE cat_id = $id";
312
						$result = $this->db->sql_query($sql);
313
						$row = $this->db->sql_fetchrow($result);
314
						$title = $row['cat_title'];
315
						$this->db->sql_freeresult($result);
316
317
						$sql_delete = 'DELETE FROM ' . $this->smilies_category_table . " WHERE cat_id = $id";
318
						$this->db->sql_query($sql_delete);
319
320
						// Reset appropriate smilies category id
321
						$sql_update = 'UPDATE ' . SMILIES_TABLE . " SET category = 0 WHERE category = $id";
322
						$this->db->sql_query($sql_update);
323
324
						$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SC_' . strtoupper($action) . '_CAT', time(), array($title));
325
326
						if ($this->request->is_ajax())
327
						{
328
							trigger_error($this->language->lang('SC_DELETE_SUCCESS') . adm_back_link($this->u_action));
329
							$json_response = new \phpbb\json_response;
330
							$json_response->send(array(
331
								'MESSAGE_TITLE'	=> $this->language->lang('INFORMATION'),
332
								'MESSAGE_TEXT'	=> $this->language->lang('SC_DELETE_SUCCESS'),
333
								'REFRESH_DATA'	=> array('time'		=> 2),
334
							));
335
						}
336
						else
337
						{
338
							trigger_error($this->language->lang('SC_DELETE_SUCCESS') . adm_back_link($this->u_action));
339
						}
340
					}
341
					else
342
					{
343
						confirm_box(false, $this->language->lang('CONFIRM_OPERATION'), build_hidden_fields(array(
344
							'mode'		=> $mode,
345
							'id'		=> $id,
346
							'action'	=> 'delete',
347
						)));
348
					}
349
350
				break;
351
				
352
			}
353
354
			$this->template->assign_vars(array(
355
				'IN_ACTION'		=> true,
356
			));
357
		}
358
		else
359
		{
360
			$this->category->adm_list_cat($this->u_action);
361
		}
362
363
		$this->template->assign_vars(array(
364
			'CATEGORIE_CONFIG'		=> true,
365
			'SMILIES_PER_PAGE_CAT'	=> $this->config['smilies_per_page_cat'],
366
			'U_ADD'					=> $this->u_action . '&amp;action=add',
367
		));
368
	}
369
370
	public function acp_smilies_category()
371
	{
372
		$this->language->add_lang('acp/posting');
373
		$action = $this->request->variable('action', '');
374
		$start = $this->request->variable('start', 0);
375
		$select = $this->request->variable('select', -1);
376
		$id = $this->request->variable('id', -1);
377
		$form_key = 'sylver35/smiliescat';
378
		add_form_key($form_key);
379
380
		if ($action)
381
		{
382
			switch ($action)
383
			{
384
				case 'edit':
385
386
					$this->category->adm_edit_smiley($id, $this->u_action, $start);
387
388
				break;
389
390
				case 'modify':
391
392
					if (!check_form_key($form_key))
393
					{
394
						trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
395
					}
396
397
					$cat_id = $this->request->variable('cat_id', 0);
398
					$ex_cat = $this->request->variable('ex_cat', 0);
399
400
					$sql = 'UPDATE ' . SMILIES_TABLE . " SET category = $cat_id WHERE smiley_id = $id";
401
					$this->db->sql_query($sql);
402
403
					// Decrement nb value if wanted
404
					if ($ex_cat != 0)
405
					{
406
						$sql = 'UPDATE ' . $this->smilies_category_table . " SET cat_nb = cat_nb - 1 WHERE cat_id = $ex_cat";
407
						$this->db->sql_query($sql);
408
					}
409
					// Increment nb value if wanted
410
					if ($cat_id != 0)
411
					{
412
						$sql = 'UPDATE ' . $this->smilies_category_table . " SET cat_nb = cat_nb + 1 WHERE cat_id = $cat_id";
413
						$this->db->sql_query($sql);
414
					}
415
416
					trigger_error($this->language->lang('SMILIES_EDITED', 1) . adm_back_link($this->u_action . '&amp;start=' . $start . '#acp_smilies_category'));
417
418
				break;
419
			}
420
421
			$this->template->assign_vars(array(
422
				'IN_ACTION'			=> true,
423
			));
424
		}
425
		else
426
		{
427
			$this->extract_list_smilies($select, $start);
428
		}
429
430
		$this->template->assign_vars(array(
431
			'CATEGORIE_SMILIES'		=> true,
432
		));
433
	}
434
	
435
	private function extract_list_smilies($select, $start)
436
	{
437
		$cat = $i = 0;
438
		$smiley_url = '';
439
		$spacer_cat = false;
440
		$lang = $this->user->lang_name;
441
		$smilies_count = $this->category->smilies_count($select);
442
		$cat_title = $this->language->lang('SC_CATEGORY_DEFAUT');
443
		$where = ($select !== -1) ? "cat_id = $select" : 'smiley_id > 0';
444
445
		if ($select !== 0)
446
		{
447
			$sql = $this->db->sql_build_query('SELECT', array(
448
				'SELECT'	=> 's.*, c.*',
449
				'FROM'		=> array(SMILIES_TABLE => 's'),
450
				'LEFT_JOIN'	=> array(
451
					array(
452
						'FROM'	=> array($this->smilies_category_table => 'c'),
453
						'ON'	=> "cat_id = category AND cat_lang = '$lang'",
454
					),
455
				),
456
				'WHERE'		=> "$where AND code <> ''",
457
				'ORDER_BY'	=> 'cat_order ASC, smiley_order ASC',
458
			));
459
		}
460
		else
461
		{
462
			$sql = $this->db->sql_build_query('SELECT', array(
463
				'SELECT'	=> '*',
464
				'FROM'		=> array(SMILIES_TABLE => ''),
465
				'WHERE'		=> "category = 0",
466
				'ORDER_BY'	=> 'smiley_order ASC',
467
			));
468
		}
469
		$result = $this->db->sql_query_limit($sql, (int) $this->config['smilies_per_page_cat'], $start);
470
		while ($row = $this->db->sql_fetchrow($result))
471
		{
472
			if ($smiley_url === $row['smiley_url'])
473
			{
474
				continue;
475
			}
476
			$title = ($row['category'] == 0) ? $this->language->lang('SC_SMILIES_NO_CATEGORY') : $this->language->lang('SC_CATEGORY_IN', $row['cat_name']);
477
			$this->template->assign_block_vars('items', array(
478
				'S_SPACER_CAT'	=> (!$spacer_cat && ($cat !== $row['category'])) ? true : false,
479
				'SPACER_CAT'	=> $title,
480
				'IMG_SRC'		=> $this->root_path . $this->config['smilies_path'] . '/' . $row['smiley_url'],
481
				'WIDTH'			=> $row['smiley_width'],
482
				'HEIGHT'		=> $row['smiley_height'],
483
				'CODE'			=> $row['code'],
484
				'EMOTION'		=> $row['emotion'],
485
				'CATEGORY'		=> (isset($row['cat_name'])) ? $row['cat_name'] : '',
486
				'U_EDIT'		=> $this->u_action . '&amp;action=edit&amp;id=' . $row['smiley_id'] . '&amp;start=' . $start,
487
			));
488
			$i++;
489
			$smiley_url = $row['smiley_url'];
490
			$cat = $row['category'];
491
			$cat_title = ($select > 0) ? $row['cat_name'] : $cat_title;
492
			if (!$spacer_cat && ($cat !== $row['category']))
493
			{
494
				$spacer_cat = true;
495
			}
496
		}
497
		$this->db->sql_freeresult($result);
498
		$empty_row = ($i == 0) ? true : false;
499
500
		$this->template->assign_vars(array(
501
			'NB_SMILIES'		=> $smilies_count,
502
			'EMPTY_ROW'			=> $empty_row,
503
			'LIST_CATEGORY'		=> $this->category->select_categories($select),
504
			'S_SPACER_ANY'		=> ($cat === 0) ? true : false,
505
			'S_CAT_SELECT'		=> ($select) ? true : false,
506
			'CAT_SELECT_TITLE'	=> ($select) ? $this->language->lang('SC_CATEGORY_IN', $cat_title) : '',
507
			'U_BACK'			=> ($select) ? $this->u_action : false,
508
			'U_SELECT_CAT'		=> $this->u_action . '&amp;select=' . $select,
509
		));
510
511
		$this->pagination->generate_template_pagination($this->u_action . '&amp;select=' . $select, 'pagination', 'start', $smilies_count, (int) $this->config['smilies_per_page_cat'], $start);
512
	}
513
514
	/**
515
	 * Set page url
516
	 *
517
	 * @param string $u_action Custom form action
518
	 * @return null
519
	 * @access public
520
	 */
521
	public function set_page_url($u_action)
522
	{
523
		$this->u_action = $u_action;
524
	}
525
}
526