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 |
create_schema_file.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\install\module\install_database\task;
015
016 use phpbb\install\exception\resource_limit_reached_exception;
017
018 /**
019 * Create database schema
020 */
021 class create_schema_file extends \phpbb\install\task_base
022 {
023 /**
024 * @var \phpbb\install\helper\config
025 */
026 protected $config;
027
028 /**
029 * @var \phpbb\db\driver\driver_interface
030 */
031 protected $db;
032
033 /**
034 * @var \phpbb\filesystem\filesystem_interface
035 */
036 protected $filesystem;
037
038 /**
039 * @var string
040 */
041 protected $phpbb_root_path;
042
043 /**
044 * @var string
045 */
046 protected $php_ext;
047
048 /**
049 * Constructor
050 *
051 * @param \phpbb\install\helper\config $config Installer's config provider
052 * @param \phpbb\install\helper\database $db_helper Installer's database helper
053 * @param \phpbb\filesystem\filesystem_interface $filesystem Filesystem service
054 * @param string $phpbb_root_path Path phpBB's root
055 * @param string $php_ext Extension of PHP files
056 */
057 public function __construct(\phpbb\install\helper\config $config,
058 \phpbb\install\helper\database $db_helper,
059 \phpbb\filesystem\filesystem_interface $filesystem,
060 $phpbb_root_path,
061 $php_ext)
062 {
063 $dbms = $db_helper->get_available_dbms($config->get('dbms'));
064 $dbms = $dbms[$config->get('dbms')]['DRIVER'];
065
066 $this->db = new $dbms();
067 $this->db->sql_connect(
068 $config->get('dbhost'),
069 $config->get('dbuser'),
070 $config->get('dbpasswd'),
071 $config->get('dbname'),
072 $config->get('dbport'),
073 false,
074 false
075 );
076
077 $this->config = $config;
078 $this->filesystem = $filesystem;
079 $this->phpbb_root_path = $phpbb_root_path;
080 $this->php_ext = $php_ext;
081
082 parent::__construct(true);
083 }
084
085 /**
086 * {@inheritdoc}
087 */
088 public function run()
089 {
090 // Generate database schema
091 if ($this->filesystem->exists($this->phpbb_root_path . 'install/schemas/schema.json'))
092 {
093 $db_table_schema = @file_get_contents($this->phpbb_root_path . 'install/schemas/schema.json');
094 $this->config->set('change_table_prefix', true);
095 }
096 else
097 {
098 global $table_prefix;
099
100 // As this task may take a large amount of time to complete refreshing the page might be necessary for some
101 // server configurations with limited resources
102 if (!$this->config->get('pre_schema_forced_refresh', false))
103 {
104 if ($this->config->get_time_remaining() < 5)
105 {
106 $this->config->set('pre_schema_forced_refresh', true);
107 throw new resource_limit_reached_exception();
108 }
109 }
110
111 $table_prefix = $this->config->get('table_prefix');
112
113 if (!defined('CONFIG_TABLE'))
114 {
115 // We need to include the constants file for the table constants
116 // when we generate the schema from the migration files.
117 include ($this->phpbb_root_path . 'includes/constants.' . $this->php_ext);
118 }
119
120 $finder = new \phpbb\finder($this->filesystem, $this->phpbb_root_path, null, $this->php_ext);
121 $migrator_classes = $finder->core_path('phpbb/db/migration/data/')->get_classes();
122 $factory = new \phpbb\db\tools\factory();
123 $db_tools = $factory->get($this->db, true);
124 $schema_generator = new \phpbb\db\migration\schema_generator(
125 $migrator_classes,
126 new \phpbb\config\config(array()),
127 $this->db,
128 $db_tools,
129 $this->phpbb_root_path,
130 $this->php_ext,
131 $table_prefix
132 );
133 $db_table_schema = $schema_generator->get_schema();
134 $db_table_schema = json_encode($db_table_schema, JSON_PRETTY_PRINT);
135
136 $this->config->set('change_table_prefix', false);
137 }
138
139 $fp = @fopen($this->phpbb_root_path . 'store/schema.json', 'wb');
140 if (!$fp)
141 {
142 throw new \Exception('INST_SCHEMA_FILE_NOT_WRITABLE');
143 }
144
145 fwrite($fp, $db_table_schema);
146 fclose($fp);
147 }
148
149 /**
150 * {@inheritdoc}
151 */
152 static public function get_step_count()
153 {
154 return 1;
155 }
156
157 /**
158 * {@inheritdoc}
159 */
160 public function get_task_lang_name()
161 {
162 return 'TASK_CREATE_DATABASE_SCHEMA_FILE';
163 }
164 }
165