Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 71 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
add_config_settings | |
0.00% |
0 / 71 |
|
0.00% |
0 / 5 |
110 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
run | |
0.00% |
0 / 53 |
|
0.00% |
0 / 1 |
42 | |||
execute_step | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
get_step_count | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
get_task_lang_name | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | /** |
3 | * |
4 | * This file is part of the phpBB Forum Software package. |
5 | * |
6 | * @copyright (c) phpBB Limited <https://www.phpbb.com> |
7 | * @license GNU General Public License, version 2 (GPL-2.0) |
8 | * |
9 | * For full copyright and license information, please see |
10 | * the docs/CREDITS.txt file. |
11 | * |
12 | */ |
13 | |
14 | namespace phpbb\install\module\install_database\task; |
15 | |
16 | use Doctrine\DBAL\Driver\Statement as DriverStatement; |
17 | use Doctrine\DBAL\Statement; |
18 | use phpbb\filesystem\filesystem_interface; |
19 | use phpbb\install\database_task; |
20 | use phpbb\install\helper\config; |
21 | use phpbb\install\helper\container_factory; |
22 | use phpbb\install\helper\database; |
23 | use phpbb\install\helper\iohandler\iohandler_interface; |
24 | use phpbb\install\sequential_task; |
25 | use phpbb\language\language; |
26 | |
27 | /** |
28 | * Create database schema |
29 | */ |
30 | class add_config_settings extends database_task |
31 | { |
32 | use sequential_task; |
33 | |
34 | /** |
35 | * @var \phpbb\db\driver\driver_interface |
36 | */ |
37 | protected $db; |
38 | |
39 | /** |
40 | * @var filesystem_interface |
41 | */ |
42 | protected $filesystem; |
43 | |
44 | /** |
45 | * @var config |
46 | */ |
47 | protected $install_config; |
48 | |
49 | /** |
50 | * @var iohandler_interface |
51 | */ |
52 | protected $iohandler; |
53 | |
54 | /** |
55 | * @var language |
56 | */ |
57 | protected $language; |
58 | |
59 | /** |
60 | * @var string |
61 | */ |
62 | protected $phpbb_root_path; |
63 | |
64 | /** |
65 | * @var string |
66 | */ |
67 | protected $config_table; |
68 | |
69 | /** |
70 | * @var Statement|DriverStatement |
71 | */ |
72 | protected $stmt; |
73 | |
74 | /** |
75 | * Constructor |
76 | * |
77 | * @param database $db_helper Database helper |
78 | * @param filesystem_interface $filesystem Filesystem service |
79 | * @param config $install_config Installer's config helper |
80 | * @param iohandler_interface $iohandler Installer's input-output handler |
81 | * @param container_factory $container Installer's DI container |
82 | * @param language $language Language service |
83 | * @param string $phpbb_root_path Path to phpBB's root |
84 | */ |
85 | public function __construct(database $db_helper, |
86 | filesystem_interface $filesystem, |
87 | config $install_config, |
88 | iohandler_interface $iohandler, |
89 | container_factory $container, |
90 | language $language, |
91 | string $phpbb_root_path) |
92 | { |
93 | $this->db = $container->get('dbal.conn'); |
94 | $this->filesystem = $filesystem; |
95 | $this->install_config = $install_config; |
96 | $this->iohandler = $iohandler; |
97 | $this->language = $language; |
98 | $this->phpbb_root_path = $phpbb_root_path; |
99 | |
100 | // Table names |
101 | $this->config_table = $container->get_parameter('tables.config'); |
102 | |
103 | parent::__construct( |
104 | self::get_doctrine_connection($db_helper, $install_config), |
105 | $this->iohandler, |
106 | true |
107 | ); |
108 | } |
109 | |
110 | /** |
111 | * {@inheritdoc} |
112 | */ |
113 | public function run() |
114 | { |
115 | $current_time = $this->install_config->get('install_board_time'); |
116 | if ($current_time === false) |
117 | { |
118 | $current_time = time(); |
119 | $this->install_config->set('install_board_time', $current_time); |
120 | } |
121 | |
122 | $server_name = $this->install_config->get('server_name'); |
123 | $referer = $this->iohandler->get_server_variable('REFERER'); |
124 | |
125 | // Calculate cookie domain |
126 | $cookie_domain = $server_name; |
127 | |
128 | if (strpos($cookie_domain, 'www.') === 0) |
129 | { |
130 | $cookie_domain = substr($cookie_domain, 3); |
131 | } |
132 | |
133 | $updates = [ |
134 | 'board_startdate' => (string) $current_time, |
135 | 'board_timezone' => $this->install_config->get('admin_timezone'), |
136 | 'default_lang' => $this->install_config->get('default_lang'), |
137 | |
138 | 'server_name' => $this->install_config->get('server_name'), |
139 | 'server_port' => $this->install_config->get('server_port'), |
140 | |
141 | 'board_email' => $this->install_config->get('board_email'), |
142 | 'board_contact' => $this->install_config->get('board_email'), |
143 | |
144 | 'cookie_domain' => $cookie_domain, |
145 | 'cookie_secure' => $this->install_config->get('cookie_secure'), |
146 | |
147 | 'default_dateformat' => $this->language->lang('default_dateformat'), |
148 | |
149 | 'email_enable' => $this->install_config->get('email_enable'), |
150 | 'smtp_delivery' => $this->install_config->get('smtp_delivery'), |
151 | 'smtp_host' => $this->install_config->get('smtp_host'), |
152 | 'smtp_port' => $this->install_config->get('smtp_port'), |
153 | 'smtp_auth_method' => $this->install_config->get('smtp_auth'), |
154 | 'smtp_username' => $this->install_config->get('smtp_user'), |
155 | 'smtp_password' => $this->install_config->get('smtp_pass'), |
156 | |
157 | 'force_server_vars' => $this->install_config->get('force_server_vars'), |
158 | 'script_path' => $this->install_config->get('script_path'), |
159 | 'server_protocol' => $this->install_config->get('server_protocol'), |
160 | |
161 | 'newest_username' => $this->install_config->get('admin_name'), |
162 | |
163 | 'avatar_salt' => md5(mt_rand()), |
164 | 'plupload_salt' => md5(mt_rand()), |
165 | |
166 | 'sitename' => $this->install_config->get('board_name'), |
167 | 'site_desc' => $this->install_config->get('board_description'), |
168 | ]; |
169 | |
170 | $ref = substr($referer, strpos($referer, '://') + 3); |
171 | if (!(stripos($ref, $server_name) === 0)) |
172 | { |
173 | $updates['referer_validation'] = '0'; |
174 | } |
175 | |
176 | // We set a (semi-)unique cookie name to bypass login issues related to the cookie name. |
177 | $cookie_name = 'phpbb3_'; |
178 | $rand_str = md5(mt_rand()); |
179 | $rand_str = str_replace('0', 'z', base_convert($rand_str, 16, 35)); |
180 | $rand_str = substr($rand_str, 0, 5); |
181 | $cookie_name .= strtolower($rand_str); |
182 | |
183 | $updates['cookie_name'] = $cookie_name; |
184 | |
185 | // Disable avatars if upload directory is not writable |
186 | if (!$this->filesystem->is_writable($this->phpbb_root_path . 'images/avatars/upload/')) |
187 | { |
188 | $updates['allow_avatar'] = '0'; |
189 | $updates['allow_avatar_upload'] = '0'; |
190 | } |
191 | |
192 | $this->stmt = $this->create_prepared_stmt( |
193 | 'UPDATE ' . $this->config_table . ' SET config_value = :value WHERE config_name = :name' |
194 | ); |
195 | |
196 | if ($this->stmt !== null) |
197 | { |
198 | $this->execute($this->install_config, $updates); |
199 | } |
200 | } |
201 | |
202 | /** |
203 | * {@inheritdoc} |
204 | */ |
205 | protected function execute_step($key, $value) : void |
206 | { |
207 | $this->exec_prepared_stmt($this->stmt, [ |
208 | 'name' => $key, |
209 | 'value' => $value, |
210 | ]); |
211 | } |
212 | |
213 | /** |
214 | * {@inheritdoc} |
215 | */ |
216 | public static function get_step_count() : int |
217 | { |
218 | return 1; |
219 | } |
220 | |
221 | /** |
222 | * {@inheritdoc} |
223 | */ |
224 | public function get_task_lang_name() : string |
225 | { |
226 | return 'TASK_ADD_CONFIG_SETTINGS'; |
227 | } |
228 | } |