Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
CRAP
0.00% covered (danger)
0.00%
0 / 283
dev
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
756
0.00% covered (danger)
0.00%
0 / 283
 effectively_installed
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 depends_on
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 update_schema
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 23
 revert_schema
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 19
 update_data
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 94
 move_customise_modules
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 17
 update_ucp_pm_basename
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 11
 update_ucp_profile_auth
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 rename_styles_module
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 rename_module_basenames
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 21
 add_group_teampage
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 9
 update_group_legend
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 13
 localise_global_announcements
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 61
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v310;
class dev extends \phpbb\db\migration\container_aware_migration
{
    public function effectively_installed()
    {
        return version_compare($this->config['version'], '3.1.0-dev', '>=');
    }
    static public function depends_on()
    {
        return array(
            '\phpbb\db\migration\data\v310\extensions',
            '\phpbb\db\migration\data\v310\style_update_p2',
            '\phpbb\db\migration\data\v310\timezone_p2',
            '\phpbb\db\migration\data\v310\reported_posts_display',
            '\phpbb\db\migration\data\v310\migrations_table',
        );
    }
    public function update_schema()
    {
        return array(
            'add_columns'        => array(
                $this->table_prefix . 'groups'        => array(
                    'group_teampage'    => array('UINT', 0, 'after' => 'group_legend'),
                ),
                $this->table_prefix . 'profile_fields'    => array(
                    'field_show_on_pm'        => array('BOOL', 0),
                ),
                $this->table_prefix . 'styles'        => array(
                    'style_path'            => array('VCHAR:100', ''),
                    'bbcode_bitfield'        => array('VCHAR:255', 'kNg='),
                    'style_parent_id'        => array('UINT:4', 0),
                    'style_parent_tree'        => array('TEXT', ''),
                ),
                $this->table_prefix . 'reports'        => array(
                    'reported_post_text'        => array('MTEXT_UNI', ''),
                    'reported_post_uid'            => array('VCHAR:8', ''),
                    'reported_post_bitfield'    => array('VCHAR:255', ''),
                ),
            ),
            'change_columns'    => array(
                $this->table_prefix . 'groups'        => array(
                    'group_legend'        => array('UINT', 0),
                ),
            ),
        );
    }
    public function revert_schema()
    {
        return array(
            'drop_columns'        => array(
                $this->table_prefix . 'groups'        => array(
                    'group_teampage',
                ),
                $this->table_prefix . 'profile_fields'    => array(
                    'field_show_on_pm',
                ),
                $this->table_prefix . 'styles'        => array(
                    'style_path',
                    'bbcode_bitfield',
                    'style_parent_id',
                    'style_parent_tree',
                ),
                $this->table_prefix . 'reports'        => array(
                    'reported_post_text',
                    'reported_post_uid',
                    'reported_post_bitfield',
                ),
            ),
        );
    }
    public function update_data()
    {
        return array(
            array('if', array(
                (strpos('phpbb_search_', $this->config['search_type']) !== 0),
                array('config.update', array('search_type', 'phpbb_search_' . $this->config['search_type'])),
            )),
            array('config.add', array('fulltext_postgres_ts_name', 'simple')),
            array('config.add', array('fulltext_postgres_min_word_len', 4)),
            array('config.add', array('fulltext_postgres_max_word_len', 254)),
            array('config.add', array('fulltext_sphinx_stopwords', 0)),
            array('config.add', array('fulltext_sphinx_indexer_mem_limit', 512)),
            array('config.add', array('load_jquery_cdn', 0)),
            array('config.add', array('load_jquery_url', '//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js')),
            array('config.add', array('use_system_cron', 0)),
            array('config.add', array('legend_sort_groupname', 0)),
            array('config.add', array('teampage_forums', 1)),
            array('config.add', array('teampage_memberships', 1)),
            array('config.add', array('load_cpf_pm', 0)),
            array('config.add', array('display_last_subject', 1)),
            array('config.add', array('assets_version', 1)),
            array('config.add', array('site_home_url', '')),
            array('config.add', array('site_home_text', '')),
            array('permission.add', array('u_chgprofileinfo', true, 'u_sig')),
            array('module.add', array(
                'acp',
                'ACP_GROUPS',
                array(
                    'module_basename'    => 'acp_groups',
                    'module_langname'    => 'ACP_GROUPS_POSITION',
                    'module_mode'        => 'position',
                    'module_auth'        => 'acl_a_group',
                ),
            )),
            array('module.add', array(
                'acp',
                'ACP_ATTACHMENTS',
                array(
                    'module_basename'    => 'acp_attachments',
                    'module_langname'    => 'ACP_MANAGE_ATTACHMENTS',
                    'module_mode'        => 'manage',
                    'module_auth'        => 'acl_a_attach',
                ),
            )),
            array('module.add', array(
                'acp',
                'ACP_STYLE_MANAGEMENT',
                array(
                    'module_basename'    => 'acp_styles',
                    'module_langname'    => 'ACP_STYLES_INSTALL',
                    'module_mode'        => 'install',
                    'module_auth'        => 'acl_a_styles',
                ),
            )),
            array('module.add', array(
                'acp',
                'ACP_STYLE_MANAGEMENT',
                array(
                    'module_basename'    => 'acp_styles',
                    'module_langname'    => 'ACP_STYLES_CACHE',
                    'module_mode'        => 'cache',
                    'module_auth'        => 'acl_a_styles',
                ),
            )),
            array('module.add', array(
                'ucp',
                'UCP_PROFILE',
                array(
                    'module_basename'    => 'ucp_profile',
                    'module_langname'    => 'UCP_PROFILE_AUTOLOGIN_KEYS',
                    'module_mode'        => 'autologin_keys',
                ),
            )),
            // Module will be renamed later
            array('module.add', array(
                'acp',
                'ACP_CAT_STYLES',
                'ACP_LANGUAGE'
            )),
            array('module.remove', array(
                'acp',
                false,
                'ACP_TEMPLATES',
            )),
            array('module.remove', array(
                'acp',
                false,
                'ACP_THEMES',
            )),
            array('module.remove', array(
                'acp',
                false,
                'ACP_IMAGESETS',
            )),
            array('custom', array(array($this, 'rename_module_basenames'))),
            array('custom', array(array($this, 'rename_styles_module'))),
            array('custom', array(array($this, 'add_group_teampage'))),
            array('custom', array(array($this, 'update_group_legend'))),
            array('custom', array(array($this, 'localise_global_announcements'))),
            array('custom', array(array($this, 'update_ucp_pm_basename'))),
            array('custom', array(array($this, 'update_ucp_profile_auth'))),
            array('custom', array(array($this, 'move_customise_modules'))),
            array('config.update', array('version', '3.1.0-dev')),
        );
    }
    public function move_customise_modules()
    {
        // Move language management to new location in the Customise tab
        // First get language module id
        $sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
            WHERE module_basename = 'acp_language'";
        $result = $this->db->sql_query($sql);
        $language_module_id = $this->db->sql_fetchfield('module_id');
        $this->db->sql_freeresult($result);
        // Next get language management module id of the one just created
        $sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
            WHERE module_langname = 'ACP_LANGUAGE'";
        $result = $this->db->sql_query($sql);
        $language_management_module_id = $this->db->sql_fetchfield('module_id');
        $this->db->sql_freeresult($result);
        // acp_modules calls adm_back_link, which is undefined at this point
        if (!function_exists('adm_back_link'))
        {
            include($this->phpbb_root_path . 'includes/functions_acp.' . $this->php_ext);
        }
        $module_manager = $this->container->get('module.manager');
        $module_manager->move_module($language_module_id, $language_management_module_id, 'acp');
    }
    public function update_ucp_pm_basename()
    {
        $sql = 'SELECT module_id, module_basename
            FROM ' . MODULES_TABLE . "
            WHERE module_basename <> 'ucp_pm' AND
                module_langname='UCP_PM'";
        $result = $this->db->sql_query_limit($sql, 1);
        if ($row = $this->db->sql_fetchrow($result))
        {
            // This update is still not applied. Applying it
            $sql = 'UPDATE ' . MODULES_TABLE . "
                SET module_basename = 'ucp_pm'
                WHERE  module_id = " . (int) $row['module_id'];
            $this->sql_query($sql);
        }
        $this->db->sql_freeresult($result);
    }
    public function update_ucp_profile_auth()
    {
        // Update the auth setting for the module
        $sql = 'UPDATE ' . MODULES_TABLE . "
            SET module_auth = 'acl_u_chgprofileinfo'
            WHERE module_class = 'ucp'
                AND module_basename = 'ucp_profile'
                AND module_mode = 'profile_info'";
        $this->sql_query($sql);
    }
    public function rename_styles_module()
    {
        // Rename styles module to Customise
        $sql = 'UPDATE ' . MODULES_TABLE . "
            SET module_langname = 'ACP_CAT_CUSTOMISE'
            WHERE module_langname = 'ACP_CAT_STYLES'";
        $this->sql_query($sql);
    }
    public function rename_module_basenames()
    {
        // rename all module basenames to full classname
        $sql = 'SELECT module_id, module_basename, module_class
            FROM ' . MODULES_TABLE;
        $result = $this->db->sql_query($sql);
        while ($row = $this->db->sql_fetchrow($result))
        {
            $module_id = (int) $row['module_id'];
            unset($row['module_id']);
            if (!empty($row['module_basename']) && !empty($row['module_class']))
            {
                // all the class names start with class name or with phpbb_ for auto loading
                if (strpos($row['module_basename'], $row['module_class'] . '_') !== 0 &&
                    strpos($row['module_basename'], 'phpbb_') !== 0)
                {
                    $row['module_basename'] = $row['module_class'] . '_' . $row['module_basename'];
                    $sql_update = $this->db->sql_build_array('UPDATE', $row);
                    $sql = 'UPDATE ' . MODULES_TABLE . '
                        SET ' . $sql_update . '
                        WHERE module_id = ' . $module_id;
                    $this->sql_query($sql);
                }
            }
        }
        $this->db->sql_freeresult($result);
    }
    public function add_group_teampage()
    {
        $sql = 'UPDATE ' . GROUPS_TABLE . '
            SET group_teampage = 1
            WHERE group_type = ' . GROUP_SPECIAL . "
                AND group_name = 'ADMINISTRATORS'";
        $this->sql_query($sql);
        $sql = 'UPDATE ' . GROUPS_TABLE . '
            SET group_teampage = 2
            WHERE group_type = ' . GROUP_SPECIAL . "
                AND group_name = 'GLOBAL_MODERATORS'";
        $this->sql_query($sql);
    }
    public function update_group_legend()
    {
        $sql = 'SELECT group_id
            FROM ' . GROUPS_TABLE . '
            WHERE group_legend = 1
            ORDER BY group_name ASC';
        $result = $this->db->sql_query($sql);
        $next_legend = 1;
        while ($row = $this->db->sql_fetchrow($result))
        {
            $sql = 'UPDATE ' . GROUPS_TABLE . '
                SET group_legend = ' . $next_legend . '
                WHERE group_id = ' . (int) $row['group_id'];
            $this->sql_query($sql);
            $next_legend++;
        }
        $this->db->sql_freeresult($result);
    }
    public function localise_global_announcements()
    {
        // Localise Global Announcements
        $sql = 'SELECT topic_id, topic_approved, (topic_replies + 1) AS topic_posts, topic_last_post_id, topic_last_post_subject, topic_last_post_time, topic_last_poster_id, topic_last_poster_name, topic_last_poster_colour
            FROM ' . TOPICS_TABLE . '
            WHERE forum_id = 0
                AND topic_type = ' . POST_GLOBAL;
        $result = $this->db->sql_query($sql);
        $global_announcements = $update_lastpost_data = array();
        $update_lastpost_data['forum_last_post_time'] = 0;
        $update_forum_data = array(
            'forum_posts'        => 0,
            'forum_topics'        => 0,
            'forum_topics_real'    => 0,
        );
        while ($row = $this->db->sql_fetchrow($result))
        {
            $global_announcements[] = (int) $row['topic_id'];
            $update_forum_data['forum_posts'] += (int) $row['topic_posts'];
            $update_forum_data['forum_topics_real']++;
            if ($row['topic_approved'])
            {
                $update_forum_data['forum_topics']++;
            }
            if ($update_lastpost_data['forum_last_post_time'] < $row['topic_last_post_time'])
            {
                $update_lastpost_data = array(
                    'forum_last_post_id'        => (int) $row['topic_last_post_id'],
                    'forum_last_post_subject'    => $row['topic_last_post_subject'],
                    'forum_last_post_time'        => (int) $row['topic_last_post_time'],
                    'forum_last_poster_id'        => (int) $row['topic_last_poster_id'],
                    'forum_last_poster_name'    => $row['topic_last_poster_name'],
                    'forum_last_poster_colour'    => $row['topic_last_poster_colour'],
                );
            }
        }
        $this->db->sql_freeresult($result);
        if (!empty($global_announcements))
        {
            // Update the post/topic-count for the forum and the last-post if needed
            $sql = 'SELECT forum_id
                FROM ' . FORUMS_TABLE . '
                WHERE forum_type = ' . FORUM_POST;
            $result = $this->db->sql_query_limit($sql, 1);
            $ga_forum_id = $this->db->sql_fetchfield('forum_id');
            $this->db->sql_freeresult($result);
            $sql = 'SELECT forum_last_post_time
                FROM ' . FORUMS_TABLE . '
                WHERE forum_id = ' . $ga_forum_id;
            $result = $this->db->sql_query($sql);
            $lastpost = (int) $this->db->sql_fetchfield('forum_last_post_time');
            $this->db->sql_freeresult($result);
            $sql_update = 'forum_posts = forum_posts + ' . $update_forum_data['forum_posts'] . ', ';
            $sql_update .= 'forum_topics_real = forum_topics_real + ' . $update_forum_data['forum_topics_real'] . ', ';
            $sql_update .= 'forum_topics = forum_topics + ' . $update_forum_data['forum_topics'];
            if ($lastpost < $update_lastpost_data['forum_last_post_time'])
            {
                $sql_update .= ', ' . $this->db->sql_build_array('UPDATE', $update_lastpost_data);
            }
            $sql = 'UPDATE ' . FORUMS_TABLE . '
                SET ' . $sql_update . '
                WHERE forum_id = ' . $ga_forum_id;
            $this->sql_query($sql);
            // Update some forum_ids
            $table_ary = array(TOPICS_TABLE, POSTS_TABLE, LOG_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
            foreach ($table_ary as $table)
            {
                $sql = "UPDATE $table
                    SET forum_id = $ga_forum_id
                    WHERE " . $this->db->sql_in_set('topic_id', $global_announcements);
                $this->sql_query($sql);
            }
            unset($table_ary);
        }
    }
}