Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
type_bool.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\profilefields\type;
015
016 class type_bool extends type_base
017 {
018 /**
019 * Profile fields language helper
020 * @var \phpbb\profilefields\lang_helper
021 */
022 protected $lang_helper;
023
024 /**
025 * Request object
026 * @var \phpbb\request\request
027 */
028 protected $request;
029
030 /**
031 * Template object
032 * @var \phpbb\template\template
033 */
034 protected $template;
035
036 /**
037 * User object
038 * @var \phpbb\user
039 */
040 protected $user;
041
042 /**
043 * Construct
044 *
045 * @param \phpbb\profilefields\lang_helper $lang_helper Profile fields language helper
046 * @param \phpbb\request\request $request Request object
047 * @param \phpbb\template\template $template Template object
048 * @param \phpbb\user $user User object
049 */
050 public function __construct(\phpbb\profilefields\lang_helper $lang_helper, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
051 {
052 $this->lang_helper = $lang_helper;
053 $this->request = $request;
054 $this->template = $template;
055 $this->user = $user;
056 }
057
058 /**
059 * {@inheritDoc}
060 */
061 public function get_name_short()
062 {
063 return 'bool';
064 }
065
066 /**
067 * {@inheritDoc}
068 */
069 public function get_options($default_lang_id, $field_data)
070 {
071 $profile_row = array(
072 'var_name' => 'field_default_value',
073 'field_id' => 1,
074 'lang_name' => $field_data['lang_name'],
075 'lang_explain' => $field_data['lang_explain'],
076 'lang_id' => $default_lang_id,
077 'field_default_value' => $field_data['field_default_value'],
078 'field_ident' => 'field_default_value',
079 'field_type' => $this->get_service_name(),
080 'field_length' => $field_data['field_length'],
081 'lang_options' => $field_data['lang_options'],
082 );
083
084 $options = array(
085 0 => array('TITLE' => $this->user->lang['FIELD_TYPE'], 'EXPLAIN' => $this->user->lang['BOOL_TYPE_EXPLAIN'], 'FIELD' => '<label><input type="radio" class="radio" name="field_length" value="1"' . (($field_data['field_length'] == 1) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['RADIO_BUTTONS'] . '</label><label><input type="radio" class="radio" name="field_length" value="2"' . (($field_data['field_length'] == 2) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['CHECKBOX'] . '</label>'),
086 1 => array('TITLE' => $this->user->lang['DEFAULT_VALUE'], 'FIELD' => $this->process_field_row('preview', $profile_row)),
087 );
088
089 return $options;
090 }
091
092 /**
093 * {@inheritDoc}
094 */
095 public function get_default_option_values()
096 {
097 return array(
098 'field_length' => 1,
099 'field_minlen' => 0,
100 'field_maxlen' => 0,
101 'field_validation' => '',
102 'field_novalue' => 0,
103 'field_default_value' => 0,
104 );
105 }
106
107 /**
108 * {@inheritDoc}
109 */
110 public function get_default_field_value($field_data)
111 {
112 return $field_data['field_default_value'];
113 }
114
115 /**
116 * {@inheritDoc}
117 */
118 public function get_profile_field($profile_row)
119 {
120 $var_name = 'pf_' . $profile_row['field_ident'];
121
122 // Checkbox
123 if ($profile_row['field_length'] == 2)
124 {
125 return ($this->request->is_set($var_name)) ? 1 : 0;
126 }
127 else
128 {
129 return $this->request->variable($var_name, (int) $profile_row['field_default_value']);
130 }
131 }
132
133 /**
134 * {@inheritDoc}
135 */
136 public function validate_profile_field(&$field_value, $field_data)
137 {
138 $field_value = (bool) $field_value;
139
140 if (!$field_value && $field_data['field_required'])
141 {
142 return $this->user->lang('FIELD_REQUIRED', $this->get_field_name($field_data['lang_name']));
143 }
144
145 return false;
146 }
147
148 /**
149 * {@inheritDoc}
150 */
151 public function get_profile_value($field_value, $field_data)
152 {
153 $field_id = $field_data['field_id'];
154 $lang_id = $field_data['lang_id'];
155
156 if (!$this->lang_helper->is_set($field_id, $lang_id))
157 {
158 $this->lang_helper->load_option_lang($lang_id);
159 }
160
161 if (!$field_value && $field_data['field_show_novalue'])
162 {
163 $field_value = $field_data['field_default_value'];
164 }
165
166 if ($field_data['field_length'] == 1)
167 {
168 return ($this->lang_helper->is_set($field_id, $lang_id, (int) $field_value)) ? $this->lang_helper->get($field_id, $lang_id, (int) $field_value) : null;
169 }
170 else if (!$field_value)
171 {
172 return null;
173 }
174 else
175 {
176 return $this->lang_helper->is_set($field_id, $lang_id, $field_value + 1) ? $this->lang_helper->get($field_id, $lang_id, $field_value + 1) : null;
177 }
178 }
179
180 /**
181 * {@inheritDoc}
182 */
183 public function get_profile_value_raw($field_value, $field_data)
184 {
185 if ($field_value == $field_data['field_novalue'] && !$field_data['field_show_novalue'])
186 {
187 return null;
188 }
189
190 if (!$field_value && $field_data['field_show_novalue'])
191 {
192 $field_value = $field_data['field_novalue'];
193 }
194
195 return $field_value;
196 }
197
198 /**
199 * {@inheritDoc}
200 */
201 public function generate_field($profile_row, $preview_options = false)
202 {
203 $profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
204 $field_ident = $profile_row['field_ident'];
205 $default_value = $profile_row['field_default_value'];
206
207 // checkbox - set the value to "true" if it has been set to 1
208 if ($profile_row['field_length'] == 2)
209 {
210 $value = ($this->request->is_set($field_ident) && $this->request->variable($field_ident, $default_value) == 1) ? true : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
211 }
212 else
213 {
214 $value = ($this->request->is_set($field_ident)) ? $this->request->variable($field_ident, $default_value) : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
215 }
216
217 $profile_row['field_value'] = (int) $value;
218 $this->template->assign_block_vars('bool', array_change_key_case($profile_row, CASE_UPPER));
219
220 if ($profile_row['field_length'] == 1)
221 {
222 if (!$this->lang_helper->is_set($profile_row['field_id'], $profile_row['lang_id'], 1))
223 {
224 if ($preview_options)
225 {
226 $this->lang_helper->load_preview_options($profile_row['field_id'], $profile_row['lang_id'], $preview_options);
227 }
228 else
229 {
230 $this->lang_helper->load_option_lang($profile_row['lang_id']);
231 }
232 }
233
234 $options = $this->lang_helper->get($profile_row['field_id'], $profile_row['lang_id']);
235 foreach ($options as $option_id => $option_value)
236 {
237 $this->template->assign_block_vars('bool.options', array(
238 'OPTION_ID' => $option_id,
239 'CHECKED' => ($value == $option_id) ? ' checked="checked"' : '',
240 'VALUE' => $option_value,
241 ));
242 }
243 }
244 }
245
246 /**
247 * {@inheritDoc}
248 */
249 public function get_field_ident($field_data)
250 {
251 return ($field_data['field_length'] == '1') ? '' : 'pf_' . $field_data['field_ident'];
252 }
253
254 /**
255 * {@inheritDoc}
256 */
257 public function get_database_column_type()
258 {
259 return 'TINT:2';
260 }
261
262 /**
263 * {@inheritDoc}
264 */
265 public function get_language_options($field_data)
266 {
267 $options = array(
268 'lang_name' => 'string',
269 'lang_options' => 'two_options',
270 );
271
272 if ($field_data['lang_explain'])
273 {
274 $options['lang_explain'] = 'text';
275 }
276
277 return $options;
278 }
279
280 /**
281 * {@inheritDoc}
282 */
283 public function get_language_options_input($field_data)
284 {
285 $field_data['l_lang_name'] = $this->request->variable('l_lang_name', array(0 => ''), true);
286 $field_data['l_lang_explain'] = $this->request->variable('l_lang_explain', array(0 => ''), true);
287 $field_data['l_lang_default_value'] = $this->request->variable('l_lang_default_value', array(0 => ''), true);
288
289 /**
290 * @todo check if this line is correct...
291 $field_data['l_lang_default_value'] = $this->request->variable('l_lang_default_value', array(0 => array('')), true);
292 */
293 $field_data['l_lang_options'] = $this->request->variable('l_lang_options', array(0 => array('')), true);
294
295 return $field_data;
296 }
297
298 /**
299 * {@inheritDoc}
300 */
301 public function prepare_options_form(&$exclude_options, &$visibility_options)
302 {
303 $exclude_options[1][] = 'lang_options';
304
305 return $this->request->variable('lang_options', array(''), true);
306 }
307
308 /**
309 * {@inheritDoc}
310 */
311 public function validate_options_on_submit($error, $field_data)
312 {
313 if (empty($field_data['lang_options'][0]) || empty($field_data['lang_options'][1]))
314 {
315 $error[] = $this->user->lang['NO_FIELD_ENTRIES'];
316 }
317
318 return $error;
319 }
320
321 /**
322 * {@inheritDoc}
323 */
324 public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
325 {
326 if ($step == 2 && $key == 'field_default_value')
327 {
328 // 'field_length' == 1 defines radio buttons. Possible values are 1 or 2 only.
329 // 'field_length' == 2 defines checkbox. Possible values are 0 or 1 only.
330 // If we switch the type on step 2, we have to adjust field value.
331 // 1 is a common value for the checkbox and radio buttons.
332
333 // Adjust unchecked checkbox value.
334 // If we return or save settings from 2nd/3rd page
335 // and the checkbox is unchecked, set the value to 0.
336 if ($this->request->is_set('step') && !$this->request->is_set($key))
337 {
338 return 0;
339 }
340
341 // If we switch to the checkbox type but former radio buttons value was 2,
342 // which is not the case for the checkbox, set it to 0 (unchecked).
343 if ($field_data['field_length'] == 2 && $current_value == 2)
344 {
345 return 0;
346 }
347 // If we switch to the radio buttons but the former checkbox value was 0,
348 // which is not the case for the radio buttons, set it to 0.
349 else if ($field_data['field_length'] == 1 && $current_value == 0)
350 {
351 return 2;
352 }
353 }
354
355 if ($key == 'l_lang_options' && $this->request->is_set($key))
356 {
357 $field_data[$key] = $this->request->variable($key, array(0 => array('')), true);
358
359 return $current_value;
360 }
361
362 return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
363 }
364
365 /**
366 * {@inheritDoc}
367 */
368 public function prepare_hidden_fields($step, $key, $action, &$field_data)
369 {
370 if ($key == 'field_default_value')
371 {
372 $field_length = $this->request->variable('field_length', 0);
373
374 // Do a simple is set check if using checkbox.
375 if ($field_length == 2)
376 {
377 return $this->request->is_set($key);
378 }
379 return $this->request->variable($key, $field_data[$key], true);
380 }
381
382 $default_lang_options = array(
383 'l_lang_options' => array(0 => array('')),
384 'lang_options' => array(0 => ''),
385 );
386
387 if (isset($default_lang_options[$key]) && $this->request->is_set($key))
388 {
389 return $this->request->variable($key, $default_lang_options[$key], true);
390 }
391
392 return parent::prepare_hidden_fields($step, $key, $action, $field_data);
393 }
394
395 /**
396 * {@inheritDoc}
397 */
398 public function display_options(&$template_vars, &$field_data)
399 {
400 // Initialize these array elements if we are creating a new field
401 if (!sizeof($field_data['lang_options']))
402 {
403 // No options have been defined for a boolean field.
404 $field_data['lang_options'][0] = '';
405 $field_data['lang_options'][1] = '';
406 }
407
408 $template_vars = array_merge($template_vars, array(
409 'S_BOOL' => true,
410 'L_LANG_OPTIONS_EXPLAIN' => $this->user->lang['BOOL_ENTRIES_EXPLAIN'],
411 'FIRST_LANG_OPTION' => $field_data['lang_options'][0],
412 'SECOND_LANG_OPTION' => $field_data['lang_options'][1],
413 ));
414 }
415 }
416