Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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.09 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);
 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 ($step == 3 && ($field_data[$key] || $action != 'edit') && $key == 'l_lang_options')
 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 == 'l_lang_options' && $this->request->is_set('l_lang_options'))
 371          {
 372              return $this->request->variable($key, array(array('')), true);
 373          }
 374          else if ($key == 'field_default_value')
 375          {
 376              return $this->request->variable($key, $field_data[$key]);
 377          }
 378          else
 379          {
 380              if (!$this->request->is_set($key))
 381              {
 382                  return false;
 383              }
 384              else if ($key == 'field_ident' && isset($field_data[$key]))
 385              {
 386                  return $field_data[$key];
 387              }
 388              else
 389              {
 390                  return ($key == 'lang_options') ? $this->request->variable($key, array(''), true) : $this->request->variable($key, '', true);
 391              }
 392          }
 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