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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

type_bool.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 11.21 KiB


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