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

obtain_database_data.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 6.89 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\install\module\obtain_data\task;
 015   
 016  use phpbb\install\exception\user_interaction_required_exception;
 017   
 018  /**
 019   * This class requests and validates database information from the user
 020   */
 021  class obtain_database_data extends \phpbb\install\task_base implements \phpbb\install\task_interface
 022  {
 023      /**
 024       * @var \phpbb\install\helper\database
 025       */
 026      protected $database_helper;
 027   
 028      /**
 029       * @var \phpbb\install\helper\config
 030       */
 031      protected $install_config;
 032   
 033      /**
 034       * @var \phpbb\install\helper\iohandler\iohandler_interface
 035       */
 036      protected $io_handler;
 037   
 038      /**
 039       * Constructor
 040       *
 041       * @param \phpbb\install\helper\database                        $database_helper    Installer's database helper
 042       * @param \phpbb\install\helper\config                            $install_config        Installer's config helper
 043       * @param \phpbb\install\helper\iohandler\iohandler_interface    $iohandler            Installer's input-output handler
 044       */
 045      public function __construct(\phpbb\install\helper\database $database_helper,
 046                                  \phpbb\install\helper\config $install_config,
 047                                  \phpbb\install\helper\iohandler\iohandler_interface $iohandler)
 048      {
 049          $this->database_helper    = $database_helper;
 050          $this->install_config    = $install_config;
 051          $this->io_handler        = $iohandler;
 052   
 053          parent::__construct(true);
 054      }
 055   
 056      /**
 057       * {@inheritdoc}
 058       */
 059      public function run()
 060      {
 061          // Check if data is sent
 062          if ($this->io_handler->get_input('submit_database', false))
 063          {
 064              $this->process_form();
 065          }
 066          else
 067          {
 068              $this->request_form_data();
 069          }
 070      }
 071   
 072      /**
 073       * Process form data
 074       */
 075      protected function process_form()
 076      {
 077          // Collect database data
 078          $dbms            = $this->io_handler->get_input('dbms', '');
 079          $dbhost            = $this->io_handler->get_input('dbhost', '', true);
 080          $dbport            = $this->io_handler->get_input('dbport', '');
 081          $dbuser            = $this->io_handler->get_input('dbuser', '');
 082          $dbpasswd        = $this->io_handler->get_raw_input('dbpasswd', '');
 083          $dbname            = $this->io_handler->get_input('dbname', '');
 084          $table_prefix    = $this->io_handler->get_input('table_prefix', '');
 085   
 086          // Check database data
 087          $user_data_vaild = $this->check_database_data($dbms, $dbhost, $dbport, $dbuser, $dbpasswd, $dbname, $table_prefix);
 088   
 089          // Save database data if it is correct
 090          if ($user_data_vaild)
 091          {
 092              $this->install_config->set('dbms', $dbms);
 093              $this->install_config->set('dbhost', $dbhost);
 094              $this->install_config->set('dbport', $dbport);
 095              $this->install_config->set('dbuser', $dbuser);
 096              $this->install_config->set('dbpasswd', $dbpasswd);
 097              $this->install_config->set('dbname', $dbname);
 098              $this->install_config->set('table_prefix', $table_prefix);
 099          }
 100          else
 101          {
 102              $this->request_form_data(true);
 103          }
 104      }
 105   
 106      /**
 107       * Request data from the user
 108       *
 109       * @param bool $use_request_data Whether to use submited data
 110       *
 111       * @throws \phpbb\install\exception\user_interaction_required_exception When the user is required to provide data
 112       */
 113      protected function request_form_data($use_request_data = false)
 114      {
 115          if ($use_request_data)
 116          {
 117              $dbms            = $this->io_handler->get_input('dbms', '');
 118              $dbhost            = $this->io_handler->get_input('dbhost', '', true);
 119              $dbport            = $this->io_handler->get_input('dbport', '');
 120              $dbuser            = $this->io_handler->get_input('dbuser', '');
 121              $dbname            = $this->io_handler->get_input('dbname', '');
 122              $table_prefix    = $this->io_handler->get_input('table_prefix', 'phpbb_');
 123          }
 124          else
 125          {
 126              $dbms            = '';
 127              $dbhost            = '';
 128              $dbport            = '';
 129              $dbuser            = '';
 130              $dbname            = '';
 131              $table_prefix    = 'phpbb_';
 132          }
 133   
 134          $dbms_select = array();
 135          foreach ($this->database_helper->get_available_dbms() as $dbms_key => $dbms_array)
 136          {
 137              $dbms_select[] = array(
 138                  'value'        => $dbms_key,
 139                  'label'        => 'DB_OPTION_' . strtoupper($dbms_key),
 140                  'selected'    => ($dbms_key === $dbms),
 141              );
 142          }
 143   
 144          $database_form = array(
 145              'dbms' => array(
 146                  'label'        => 'DBMS',
 147                  'type'        => 'select',
 148                  'options'    => $dbms_select,
 149              ),
 150              'dbhost' => array(
 151                  'label'            => 'DB_HOST',
 152                  'description'    => 'DB_HOST_EXPLAIN',
 153                  'type'            => 'text',
 154                  'default'        => $dbhost,
 155              ),
 156              'dbport' => array(
 157                  'label'            => 'DB_PORT',
 158                  'description'    => 'DB_PORT_EXPLAIN',
 159                  'type'            => 'text',
 160                  'default'        => $dbport,
 161              ),
 162              'dbuser' => array(
 163                  'label'        => 'DB_USERNAME',
 164                  'type'        => 'text',
 165                  'default'    => $dbuser,
 166              ),
 167              'dbpasswd' => array(
 168                  'label'        => 'DB_PASSWORD',
 169                  'type'    => 'password',
 170              ),
 171              'dbname' => array(
 172                  'label'        => 'DB_NAME',
 173                  'type'        => 'text',
 174                  'default'    => $dbname,
 175              ),
 176              'table_prefix' => array(
 177                  'label'            => 'TABLE_PREFIX',
 178                  'description'    => 'TABLE_PREFIX_EXPLAIN',
 179                  'type'            => 'text',
 180                  'default'        => $table_prefix,
 181              ),
 182              'submit_database' => array(
 183                  'label'    => 'SUBMIT',
 184                  'type'    => 'submit',
 185              ),
 186          );
 187   
 188          $this->io_handler->add_user_form_group('DB_CONFIG', $database_form);
 189   
 190          // Require user interaction
 191          throw new user_interaction_required_exception();
 192      }
 193   
 194      /**
 195       * Check database data
 196       *
 197       * @param string    $dbms            Selected database type
 198       * @param string    $dbhost            Database host address
 199       * @param int        $dbport            Database port number
 200       * @param string    $dbuser            Database username
 201       * @param string    $dbpass            Database password
 202       * @param string    $dbname            Database name
 203       * @param string    $table_prefix    Database table prefix
 204       *
 205       * @return bool    True if database data is correct, false otherwise
 206       */
 207      protected function check_database_data($dbms, $dbhost, $dbport, $dbuser, $dbpass, $dbname, $table_prefix)
 208      {
 209          $available_dbms = $this->database_helper->get_available_dbms();
 210          $data_valid = true;
 211   
 212          // Check if PHP has the database extensions for the specified DBMS
 213          if (!isset($available_dbms[$dbms]))
 214          {
 215              $this->io_handler->add_error_message('INST_ERR_NO_DB');
 216              $data_valid = false;
 217          }
 218   
 219          // Validate table prefix
 220          $prefix_valid = $this->database_helper->validate_table_prefix($dbms, $table_prefix);
 221          if (is_array($prefix_valid))
 222          {
 223              foreach ($prefix_valid as $error)
 224              {
 225                  $this->io_handler->add_error_message(
 226                      $error['title'],
 227                      (isset($error['description'])) ? $error['description'] : false
 228                  );
 229              }
 230   
 231              $data_valid = false;
 232          }
 233   
 234          // Try to connect to database if all provided data is valid
 235          if ($data_valid)
 236          {
 237              $connect_test = $this->database_helper->check_database_connection($dbms, $dbhost, $dbport, $dbuser, $dbpass, $dbname, $table_prefix);
 238              if (is_array($connect_test))
 239              {
 240                  foreach ($connect_test as $error)
 241                  {
 242                      $this->io_handler->add_error_message(
 243                          $error['title'],
 244                          (isset($error['description'])) ? $error['description'] : false
 245                      );
 246                  }
 247   
 248                  $data_valid = false;
 249              }
 250          }
 251   
 252          return $data_valid;
 253      }
 254   
 255      /**
 256       * {@inheritdoc}
 257       */
 258      static public function get_step_count()
 259      {
 260          return 0;
 261      }
 262   
 263      /**
 264       * {@inheritdoc}
 265       */
 266      public function get_task_lang_name()
 267      {
 268          return '';
 269      }
 270  }
 271