Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 268
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
release_3_0_6_rc1
0.00% covered (danger)
0.00%
0 / 268
0.00% covered (danger)
0.00%
0 / 7
272
0.00% covered (danger)
0.00%
0 / 1
 effectively_installed
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 depends_on
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 update_schema
0.00% covered (danger)
0.00%
0 / 41
0.00% covered (danger)
0.00%
0 / 1
2
 revert_schema
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 1
2
 update_data
0.00% covered (danger)
0.00%
0 / 110
0.00% covered (danger)
0.00%
0 / 1
20
 set_user_options_default
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 add_newly_registered_group
0.00% covered (danger)
0.00%
0 / 77
0.00% covered (danger)
0.00%
0 / 1
56
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
14namespace phpbb\db\migration\data\v30x;
15
16class release_3_0_6_rc1 extends \phpbb\db\migration\migration
17{
18    public function effectively_installed()
19    {
20        return phpbb_version_compare($this->config['version'], '3.0.6-RC1', '>=');
21    }
22
23    public static function depends_on()
24    {
25        return array('\phpbb\db\migration\data\v30x\release_3_0_5');
26    }
27
28    public function update_schema()
29    {
30        return array(
31            'add_columns' => array(
32                $this->table_prefix . 'confirm' => array(
33                    'attempts' => array('UINT', 0),
34                ),
35                $this->table_prefix . 'users' => array(
36                    'user_new' => array('BOOL', 1),
37                    'user_reminded' => array('TINT:4', 0),
38                    'user_reminded_time' => array('TIMESTAMP', 0),
39                ),
40                $this->table_prefix . 'groups' => array(
41                    'group_skip_auth' => array('BOOL', 0, 'after' => 'group_founder_manage'),
42                ),
43                $this->table_prefix . 'privmsgs' => array(
44                    'message_reported' => array('BOOL', 0),
45                ),
46                $this->table_prefix . 'reports' => array(
47                    'pm_id' => array('UINT', 0),
48                ),
49                $this->table_prefix . 'profile_fields'    => array(
50                    'field_show_on_vt' => array('BOOL', 0),
51                ),
52                $this->table_prefix . 'forums' => array(
53                    'forum_options' => array('UINT:20', 0),
54                ),
55            ),
56            'change_columns' => array(
57                $this->table_prefix . 'users' => array(
58                    'user_options' => array('UINT:11', 230271),
59                ),
60            ),
61            'add_index' => array(
62                $this->table_prefix . 'reports' => array(
63                    'post_id' => array('post_id'),
64                    'pm_id' => array('pm_id'),
65                ),
66                $this->table_prefix . 'posts' => array(
67                    'post_username' => array('post_username:255'),
68                ),
69            ),
70        );
71    }
72
73    public function revert_schema()
74    {
75        return array(
76            'drop_columns' => array(
77                $this->table_prefix . 'confirm' => array(
78                    'attempts',
79                ),
80                $this->table_prefix . 'users' => array(
81                    'user_new',
82                    'user_reminded',
83                    'user_reminded_time',
84                ),
85                $this->table_prefix . 'groups' => array(
86                    'group_skip_auth',
87                ),
88                $this->table_prefix . 'privmsgs' => array(
89                    'message_reported',
90                ),
91                $this->table_prefix . 'reports' => array(
92                    'pm_id',
93                ),
94                $this->table_prefix . 'profile_fields'    => array(
95                    'field_show_on_vt',
96                ),
97                $this->table_prefix . 'forums' => array(
98                    'forum_options',
99                ),
100            ),
101            'drop_keys' => array(
102                $this->table_prefix . 'reports' => array(
103                    'post_id',
104                    'pm_id',
105                ),
106                $this->table_prefix . 'posts' => array(
107                    'post_username',
108                ),
109            ),
110        );
111    }
112
113    public function update_data()
114    {
115        return array(
116            array('config.add', array('captcha_plugin', 'phpbb_captcha_nogd')),
117            array('if', array(
118                ($this->config['captcha_gd']),
119                array('config.update', array('captcha_plugin', 'phpbb_captcha_gd')),
120            )),
121
122            array('config.add', array('feed_enable', 0)),
123            array('config.add', array('feed_limit', 10)),
124            array('config.add', array('feed_overall_forums', 1)),
125            array('config.add', array('feed_overall_forums_limit', 15)),
126            array('config.add', array('feed_overall_topics', 0)),
127            array('config.add', array('feed_overall_topics_limit', 15)),
128            array('config.add', array('feed_forum', 1)),
129            array('config.add', array('feed_topic', 1)),
130            array('config.add', array('feed_item_statistics', 1)),
131
132            array('config.add', array('smilies_per_page', 50)),
133            array('config.add', array('allow_pm_report', 1)),
134            array('config.add', array('min_post_chars', 1)),
135            array('config.add', array('allow_quick_reply', 1)),
136            array('config.add', array('new_member_post_limit', 0)),
137            array('config.add', array('new_member_group_default', 0)),
138            array('config.add', array('delete_time', $this->config['edit_time'])),
139
140            array('config.add', array('allow_avatar', 0)),
141            array('if', array(
142                ($this->config['allow_avatar_upload'] || $this->config['allow_avatar_local'] || $this->config['allow_avatar_remote']),
143                array('config.update', array('allow_avatar', 1)),
144            )),
145            array('config.add', array('allow_avatar_remote_upload', 0)),
146            array('if', array(
147                ($this->config['allow_avatar_remote'] && $this->config['allow_avatar_upload']),
148                array('config.update', array('allow_avatar_remote_upload', 1)),
149            )),
150
151            array('module.add', array(
152                'acp',
153                'ACP_BOARD_CONFIGURATION',
154                array(
155                    'module_basename'    => 'acp_board',
156                    'module_langname'    => 'ACP_FEED_SETTINGS',
157                    'module_mode'        => 'feed',
158                    'module_auth'        => 'acl_a_board',
159                    'after'                => array('signature', 'ACP_SIGNATURE_SETTINGS'),
160                ),
161            )),
162            array('module.add', array(
163                'acp',
164                'ACP_CAT_USERS',
165                array(
166                    'module_basename'    => 'acp_users',
167                    'module_langname'    => 'ACP_USER_WARNINGS',
168                    'module_mode'        => 'warnings',
169                    'module_auth'        => 'acl_a_user',
170                    'module_display'    => false,
171                    'after'                => array('feedback', 'ACP_USER_FEEDBACK'),
172                ),
173            )),
174            array('module.add', array(
175                'acp',
176                'ACP_SERVER_CONFIGURATION',
177                array(
178                    'module_basename'    => 'acp_send_statistics',
179                    'module_langname'    => 'ACP_SEND_STATISTICS',
180                    'module_mode'        => 'send_statistics',
181                    'module_auth'        => 'acl_a_server',
182                ),
183            )),
184            array('module.add', array(
185                'acp',
186                'ACP_FORUM_BASED_PERMISSIONS',
187                array(
188                    'module_basename'    => 'acp_permissions',
189                    'module_langname'    => 'ACP_FORUM_PERMISSIONS_COPY',
190                    'module_mode'        => 'setting_forum_copy',
191                    'module_auth'        => 'acl_a_fauth && acl_a_authusers && acl_a_authgroups && acl_a_mauth',
192                    'after'                => array('setting_forum_local', 'ACP_FORUM_PERMISSIONS'),
193                ),
194            )),
195            array('module.add', array(
196                'mcp',
197                'MCP_REPORTS',
198                array(
199                    'module_basename'    => 'mcp_pm_reports',
200                    'module_langname'    => 'MCP_PM_REPORTS_OPEN',
201                    'module_mode'        => 'pm_reports',
202                    'module_auth'        => 'acl_m_pm_report',
203                ),
204            )),
205            array('module.add', array(
206                'mcp',
207                'MCP_REPORTS',
208                array(
209                    'module_basename'    => 'mcp_pm_reports',
210                    'module_langname'    => 'MCP_PM_REPORTS_CLOSED',
211                    'module_mode'        => 'pm_reports_closed',
212                    'module_auth'        => 'acl_m_pm_report',
213                ),
214            )),
215            array('module.add', array(
216                'mcp',
217                'MCP_REPORTS',
218                array(
219                    'module_basename'    => 'mcp_pm_reports',
220                    'module_langname'    => 'MCP_PM_REPORT_DETAILS',
221                    'module_mode'        => 'pm_report_details',
222                    'module_auth'        => 'acl_m_pm_report',
223                ),
224            )),
225            array('custom', array(array(&$this, 'add_newly_registered_group'))),
226            array('custom', array(array(&$this, 'set_user_options_default'))),
227
228            array('config.update', array('version', '3.0.6-RC1')),
229        );
230    }
231
232    public function set_user_options_default()
233    {
234        // 229376 is the added value to enable all three signature options
235        $sql = 'UPDATE ' . USERS_TABLE . ' SET user_options = user_options + 229376';
236        $this->sql_query($sql);
237    }
238
239    public function add_newly_registered_group()
240    {
241        // Add newly_registered group... but check if it already exists (we always supported running the updater on any schema)
242        $sql = 'SELECT group_id
243            FROM ' . GROUPS_TABLE . "
244            WHERE group_name = 'NEWLY_REGISTERED'";
245        $result = $this->db->sql_query($sql);
246        $group_id = (int) $this->db->sql_fetchfield('group_id');
247        $this->db->sql_freeresult($result);
248
249        if (!$group_id)
250        {
251            $sql = 'INSERT INTO ' .  GROUPS_TABLE . " (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('NEWLY_REGISTERED', 3, 0, '', 0, '', '', '', 5)";
252            $this->sql_query($sql);
253
254            $group_id = $this->db->sql_nextid();
255        }
256
257        // Insert new user role... at the end of the chain
258        $sql = 'SELECT role_id
259            FROM ' . ACL_ROLES_TABLE . "
260            WHERE role_name = 'ROLE_USER_NEW_MEMBER'
261                AND role_type = 'u_'";
262        $result = $this->db->sql_query($sql);
263        $u_role = (int) $this->db->sql_fetchfield('role_id');
264        $this->db->sql_freeresult($result);
265
266        if (!$u_role)
267        {
268            $sql = 'SELECT MAX(role_order) as max_order_id
269                FROM ' . ACL_ROLES_TABLE . "
270                WHERE role_type = 'u_'";
271            $result = $this->db->sql_query($sql);
272            $next_order_id = (int) $this->db->sql_fetchfield('max_order_id');
273            $this->db->sql_freeresult($result);
274
275            $next_order_id++;
276
277            $sql = 'INSERT INTO ' . ACL_ROLES_TABLE . " (role_name, role_description, role_type, role_order) VALUES ('ROLE_USER_NEW_MEMBER', 'ROLE_DESCRIPTION_USER_NEW_MEMBER', 'u_', $next_order_id)";
278            $this->sql_query($sql);
279            $u_role = $this->db->sql_nextid();
280
281            // Now add the correct data to the roles...
282            // The standard role says that new users are not able to send a PM, Mass PM, are not able to PM groups
283            $sql = 'INSERT INTO ' . ACL_ROLES_DATA_TABLE . " (role_id, auth_option_id, auth_setting) SELECT $u_role, auth_option_id, 0 FROM " . ACL_OPTIONS_TABLE . " WHERE auth_option LIKE 'u_%' AND auth_option IN ('u_sendpm', 'u_masspm', 'u_masspm_group')";
284            $this->sql_query($sql);
285
286            // Add user role to group
287            $sql = 'INSERT INTO ' . ACL_GROUPS_TABLE . " (group_id, forum_id, auth_option_id, auth_role_id, auth_setting) VALUES ($group_id, 0, 0, $u_role, 0)";
288            $this->sql_query($sql);
289        }
290
291        // Insert new forum role
292        $sql = 'SELECT role_id
293            FROM ' . ACL_ROLES_TABLE . "
294            WHERE role_name = 'ROLE_FORUM_NEW_MEMBER'
295                AND role_type = 'f_'";
296        $result = $this->db->sql_query($sql);
297        $f_role = (int) $this->db->sql_fetchfield('role_id');
298        $this->db->sql_freeresult($result);
299
300        if (!$f_role)
301        {
302            $sql = 'SELECT MAX(role_order) as max_order_id
303                FROM ' . ACL_ROLES_TABLE . "
304                WHERE role_type = 'f_'";
305            $result = $this->db->sql_query($sql);
306            $next_order_id = (int) $this->db->sql_fetchfield('max_order_id');
307            $this->db->sql_freeresult($result);
308
309            $next_order_id++;
310
311            $sql = 'INSERT INTO ' . ACL_ROLES_TABLE . " (role_name, role_description, role_type, role_order) VALUES  ('ROLE_FORUM_NEW_MEMBER', 'ROLE_DESCRIPTION_FORUM_NEW_MEMBER', 'f_', $next_order_id)";
312            $this->sql_query($sql);
313            $f_role = $this->db->sql_nextid();
314
315            $sql = 'INSERT INTO ' . ACL_ROLES_DATA_TABLE . " (role_id, auth_option_id, auth_setting) SELECT $f_role, auth_option_id, 0 FROM " . ACL_OPTIONS_TABLE . " WHERE auth_option LIKE 'f_%' AND auth_option IN ('f_noapprove')";
316            $this->sql_query($sql);
317        }
318
319        // Set every members user_new column to 0 (old users) only if there is no one yet (this makes sure we do not execute this more than once)
320        $sql = 'SELECT 1
321            FROM ' . USERS_TABLE . '
322            WHERE user_new = 0';
323        $result = $this->db->sql_query_limit($sql, 1);
324        $row = $this->db->sql_fetchrow($result);
325        $this->db->sql_freeresult($result);
326
327        if (!$row)
328        {
329            $sql = 'UPDATE ' . USERS_TABLE . ' SET user_new = 0';
330            $this->sql_query($sql);
331        }
332
333        // To mimick the old "feature" we will assign the forum role to every forum, regardless of the setting (this makes sure there are no "this does not work!!!! YUO!!!" posts...
334        // Check if the role is already assigned...
335        $sql = 'SELECT forum_id
336            FROM ' . ACL_GROUPS_TABLE . '
337            WHERE group_id = ' . $group_id . '
338                AND auth_role_id = ' . $f_role;
339        $result = $this->db->sql_query($sql);
340        $is_options = (int) $this->db->sql_fetchfield('forum_id');
341        $this->db->sql_freeresult($result);
342
343        // Not assigned at all... :/
344        if (!$is_options)
345        {
346            // Get postable forums
347            $sql = 'SELECT forum_id
348                FROM ' . FORUMS_TABLE . '
349                WHERE forum_type != ' . FORUM_LINK;
350            $result = $this->db->sql_query($sql);
351
352            while ($row = $this->db->sql_fetchrow($result))
353            {
354                $this->sql_query('INSERT INTO ' . ACL_GROUPS_TABLE . ' (group_id, forum_id, auth_option_id, auth_role_id, auth_setting) VALUES (' . $group_id . ', ' . (int) $row['forum_id'] . ', 0, ' . $f_role . ', 0)');
355            }
356            $this->db->sql_freeresult($result);
357        }
358
359        // Clear permissions...
360        include_once($this->phpbb_root_path . 'includes/acp/auth.' . $this->php_ext);
361        $auth_admin = new \auth_admin();
362        $auth_admin->acl_clear_prefetch();
363    }
364}