Passed
Push — release-3.2.0 ( 24bcfb...4d8cca )
by Daniel
04:25
created

select::get_select_options()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 3
nop 3
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 *
4
 * @package sitemaker
5
 * @copyright (c) 2019 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\config\fields;
11
12
use blitze\sitemaker\services\blocks\config\cfg_utils;
13
14
/**
15
 * @package sitemaker
16
 */
17
class select implements cfg_field_interface
18
{
19
	/** @var \phpbb\language\language */
20
	protected $translator;
21
22
	/**
23
	 * Constructor
24
	 *
25
	 * @param \phpbb\language\language	$translator		Language object
26
	 */
27
	public function __construct(\phpbb\language\language $translator)
28
	{
29
		$this->translator = $translator;
30
	}
31
32
	/**
33
	 * @inheritdoc
34
	 */
35
	public function get_name()
36
	{
37
		return 'select';
38
	}
39
40
	/**
41
	 * {@inheritdoc}
42
	 */
43
	public function prep_field(array &$vars, array &$type, $field, array $db_settings)
44
	{
45
		// set defaults for types: field type, size, multi select, toggle key
46
		$type += array('', 1, 0, '');
47
48
		$vars['method'] = 'build_select';
49
		$vars['params'][] = $field;
50
		$vars['params'][] = (int) $type[1];		// size
51
		$vars['params'][] = (bool) $type[2];	// multi select
52
		$vars['params'][] = (string) $type[3];	// togggle key
53
		$type[0] = 'custom';
54
	}
55
56
	/**
57
	 * Used to add a select drop down in blocks config
58
	 *
59
	 * @param array $option_ary
60
	 * @param string $selected_item
61
	 * @param string $key
62
	 * @param int $size
63
	 * @param bool $multi_select
64
	 * @param string $data_toggle_key
65
	 * @return string
66
	 */
67
	public function build_select(array $option_ary, $selected_item, $key, $size = 1, $multi_select = false, $data_toggle_key = '')
68
	{
69
		$selected_item = cfg_utils::ensure_array($selected_item);
70
71
		$options = $this->get_select_options($option_ary, $selected_item, $data_toggle_key);
72
		$data_toggle = ($data_toggle_key) ? ' data-togglable-settings="true"' : '';
73
74
		return '<select id="' . $key . '" name="config[' . $key . ']' . (($multi_select) ? '[]" multiple="multiple"' : '"') . (($size > 1) ? ' size="' . $size . '"' : '') . $data_toggle . '>' . $options . '</select>';
75
	}
76
77
	/**
78
	 * @param array $option_ary
79
	 * @param array $selected_items
80
	 * @param string $togglable_key
81
	 * @return string
82
	 */
83
	protected function get_select_options(array $option_ary, array $selected_items, $togglable_key)
84
	{
85
		$options = '';
86
		foreach ($option_ary as $value => $title)
87
		{
88
			$selected = cfg_utils::get_selected_option($value, $selected_items);
89
			$togglable_option = ($togglable_key) ? ' data-toggle-setting="#' . $togglable_key . '-' . $value . '"' : '';
90
			$options .= '<option value="' . $value . '"' . $selected . $togglable_option . '>' . $this->translator->lang($title) . '</option>';
91
		}
92
		return $options;
93
	}
94
}
95