Completed
Push — develop ( 764757...613db1 )
by Daniel
12:13
created

range::display_field_text()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 1
crap 2
1
<?php
2
/**
3
 *
4
 * @package sitemaker
5
 * @copyright (c) 2013 Daniel A. (blitze)
6
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7
 *
8
 */
9
10
namespace blitze\content\services\form\field;
11
12
class range extends base
13
{
14
	/** @var \blitze\sitemaker\services\util */
15
	protected $util;
16
17
	/**
18
	 * Constructor
19
	 *
20
	 * @param \phpbb\language\language                  $language       Language object
21
	 * @param \phpbb\request\request_interface			$request		Request object
22
	 * @param \blitze\sitemaker\services\template		$ptemplate		Sitemaker template object
23
	 * @param \blitze\sitemaker\services\util			$util       	Sitemaker utility object
24
	 */
25 12
	public function __construct(\phpbb\language\language $language, \phpbb\request\request_interface $request, \blitze\sitemaker\services\template $ptemplate, \blitze\sitemaker\services\util $util)
26
	{
27 12
		parent::__construct($language, $request, $ptemplate);
28
29 12
		$this->util = $util;
30 12
	}
31
32
	/**
33
	 * @inheritdoc
34
	 */
35 5
	public function get_name()
36
	{
37 5
		return 'range';
38
	}
39
40
	/**
41
	 * @inheritdoc
42
	 */
43 10
	public function get_default_props()
44
	{
45
		return array(
46 10
			'display'	=> 'text',
47 10
			'type'		=> 'single',
48 10
			'theme'		=> 'skinFlat',
49 10
			'size'		=> 100,
50 10
			'values'	=> '',
51 10
			'prefix'	=> '',
52 10
			'postfix'	=> '',
53 10
			'min'		=> '',
54 10
			'max'		=> '',
55 10
			'step'		=> 1,
56 10
			'grid'		=> false,
57 10
		);
58
	}
59
60
	/**
61
	 * @inheritdoc
62
	 */
63 3
	public function show_form_field($name, array &$data)
64
	{
65 3
		$this->util->add_assets(array(
66
			'js'   => array(
67 3
				100 => '@blitze_content/assets/fields/form.min.js',
68 3
			),
69 3
		));
70
71 3
		$this->set_assets($data['field_props']['theme']);
72 3
		$this->set_range($data);
73
74 3
		return parent::show_form_field($name, $data);
75
	}
76
77
	/**
78
	 * @inheritdoc
79
	 */
80 6
	public function display_field(array $data)
81
	{
82 6
		if (!$data['field_value'])
83 6
		{
84 1
			return '';
85
		}
86
87 5
		$callable = 'display_field_' . $data['field_props']['display'];
88 5
		return $this->$callable($data);
89
	}
90
91
	/**
92
	 * @param array $data
93
	 * @return string
94
	 */
95 1
	protected function display_field_slider(array $data)
96
	{
97
		// do not include assets on preview page as form already handles this
98 1
		if (!$this->request->is_set_post('cp'))
99 1
		{
100 1
			$this->util->add_assets(array(
101
				'js'   => array(
102 1
					100 => '@blitze_content/assets/fields/display.min.js',
103 1
				),
104 1
			));
105 1
		}
106 1
		$data['field_props']['disabled'] = true;
107
108 1
		$this->set_assets($data['field_props']['theme']);
109 1
		$this->set_range($data);
110 1
		$this->ptemplate->assign_vars($data);
111
112 1
		return $this->ptemplate->render_view('blitze/content', 'fields/range.html', 'range_field');
113
	}
114
115
	/**
116
	 * @param array $data
117
	 * @return string
118
	 */
119 4
	protected function display_field_text(array $data)
120
	{
121 4
		$range = $this->get_range($data['field_value']);
122
123 4
		if (sizeof($range))
124 4
		{
125 4
			array_walk($range, array($this, 'set_prefix'), $data['field_props']['prefix']);
126 4
		}
127
128 4
		return join($range, ' - ') . $data['field_props']['postfix'];
129
	}
130
131
	/**
132
	 * @param string $value
133
	 * @return array
134
	 */
135 8
	protected function get_range($value)
136
	{
137 8
		return explode(';', preg_replace('/;\s+/', ';', $value));
138
	}
139
140
	/**
141
	 * @param array $data
142
	 * @return void
143
	 */
144 4
	protected function set_range(array &$data)
145
	{
146 4
		list($from, $to) = $this->get_range($data['field_value']);
147
148 4
		if ($data['field_props']['values'])
149 4
		{
150 1
			$values = explode(',', preg_replace('/,\s+/', ',', $data['field_props']['values']));
151
152 1
			$from = array_search($from, $values);
153 1
			$to = array_search($to, $values);
154
155 1
			$data['field_props']['from'] = $from;
156 1
			$data['field_props']['to'] = $to;
157 1
		}
158 4
	}
159
160
	/**
161
	 * @param string $item
162
	 * @param int $key
163
	 * @param string $prefix
164
	 * @return void
165
	 */
166 4
	protected function set_prefix(&$item, $key, $prefix)
167
	{
168 4
		$item = $prefix . $item;
169 4
	}
170
171
	/**
172
	 * @param string $theme
173
	 * @return void
174
	 */
175 4
	protected function set_assets($theme)
176
	{
177 4
		$this->util->add_assets(array(
178
			'js'   => array(
179 4
				'@blitze_content/vendor/ion.rangeSlider/js/ion.rangeSlider.min.js',
180 4
			),
181
			'css'   => array(
182 4
				'@blitze_content/vendor/ion.rangeSlider/css/ion.rangeSlider.min.css',
183 4
				'@blitze_content/vendor/ion.rangeSlider/css/ion.rangeSlider.' . $theme . '.min.css',
184
			)
185 4
		));
186 4
	}
187
}
188