Ejemplo n.º 1
0
    public function setUp()
    {
        global $db;
        parent::setUp();
        $this->phpbb_extension_manager = $this->get_extension_manager();
        $this->phpbb_extension_manager->enable('foo/bar');
        $db = $this->get_db();
        $cache = $this->get_cache_driver();
        $modules = new \phpbb\module\module_manager($cache, $db, $this->phpbb_extension_manager, MODULES_TABLE, dirname(__FILE__) . '/../../phpBB/', 'php');
        $sql = 'SELECT module_id
			FROM ' . MODULES_TABLE . "\n\t\t\tWHERE module_langname = 'acp'\n\t\t\t\tAND module_class = 'ACP_CAT_DOT_MODS'";
        $result = $db->sql_query($sql);
        $module_id = (int) $db->sql_fetchfield('module_id');
        $db->sql_freeresult($result);
        $parent_data = array('module_basename' => '', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $module_id, 'module_class' => 'acp', 'module_langname' => 'ACP_FOOBAR_TITLE', 'module_mode' => '', 'module_auth' => '');
        $modules->update_module_data($parent_data);
        $module_data = array('module_basename' => 'foo\\bar\\acp\\main_module', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $parent_data['module_id'], 'module_class' => 'acp', 'module_langname' => 'ACP_FOOBAR_TITLE', 'module_mode' => 'mode', 'module_auth' => '');
        $modules->update_module_data($module_data);
        $parent_data = array('module_basename' => '', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => 0, 'module_class' => 'ucp', 'module_langname' => 'UCP_FOOBAR_TITLE', 'module_mode' => '', 'module_auth' => '');
        $modules->update_module_data($parent_data);
        $module_data = array('module_basename' => 'foo\\bar\\ucp\\main_module', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $parent_data['module_id'], 'module_class' => 'ucp', 'module_langname' => 'UCP_FOOBAR_TITLE', 'module_mode' => 'mode', 'module_auth' => '');
        $modules->update_module_data($module_data);
        $this->purge_cache();
    }
Ejemplo n.º 2
0
    /**
     * Populate the module tables
     */
    function add_modules($mode, $sub)
    {
        global $db, $lang, $phpbb_root_path, $phpEx, $phpbb_extension_manager, $config, $phpbb_container;
        // modules require an extension manager
        if (empty($phpbb_extension_manager)) {
            /* @var $phpbb_extension_manager \phpbb\extension\manager */
            $phpbb_extension_manager = $phpbb_container->get('ext.manager');
        }
        $_module = new \phpbb\module\module_manager(new \phpbb\cache\driver\dummy(), $db, $phpbb_extension_manager, MODULES_TABLE, $phpbb_root_path, $phpEx);
        $module_classes = array('acp', 'mcp', 'ucp');
        // Add categories
        foreach ($module_classes as $module_class) {
            $categories = array();
            // Set the module class
            $_module->module_class = $module_class;
            foreach ($this->module_categories[$module_class] as $cat_name => $subs) {
                $basename = '';
                // Check if this sub-category has a basename. If it has, use it.
                if (isset($this->module_categories_basenames[$cat_name])) {
                    $basename = $this->module_categories_basenames[$cat_name];
                }
                $module_data = array('module_basename' => $basename, 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => 0, 'module_class' => $module_class, 'module_langname' => $cat_name, 'module_mode' => '', 'module_auth' => '');
                // Add category
                $_module->update_module_data($module_data);
                // Check for last sql error happened
                if ($db->get_sql_error_triggered()) {
                    $error = $db->sql_error($db->get_sql_error_sql());
                    $this->p_master->db_error($error['message'], $db->get_sql_error_sql(), __LINE__, __FILE__);
                }
                $categories[$cat_name]['id'] = (int) $module_data['module_id'];
                $categories[$cat_name]['parent_id'] = 0;
                // Create sub-categories...
                if (is_array($subs)) {
                    foreach ($subs as $level2_name) {
                        $basename = '';
                        // Check if this sub-category has a basename. If it has, use it.
                        if (isset($this->module_categories_basenames[$level2_name])) {
                            $basename = $this->module_categories_basenames[$level2_name];
                        }
                        $module_data = array('module_basename' => $basename, 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => (int) $categories[$cat_name]['id'], 'module_class' => $module_class, 'module_langname' => $level2_name, 'module_mode' => '', 'module_auth' => '');
                        $_module->update_module_data($module_data);
                        // Check for last sql error happened
                        if ($db->get_sql_error_triggered()) {
                            $error = $db->sql_error($db->get_sql_error_sql());
                            $this->p_master->db_error($error['message'], $db->get_sql_error_sql(), __LINE__, __FILE__);
                        }
                        $categories[$level2_name]['id'] = (int) $module_data['module_id'];
                        $categories[$level2_name]['parent_id'] = (int) $categories[$cat_name]['id'];
                    }
                }
            }
            // Get the modules we want to add... returned sorted by name
            $module_info = $_module->get_module_infos($module_class);
            foreach ($module_info as $module_basename => $fileinfo) {
                foreach ($fileinfo['modes'] as $module_mode => $row) {
                    foreach ($row['cat'] as $cat_name) {
                        if (!isset($categories[$cat_name])) {
                            continue;
                        }
                        $module_data = array('module_basename' => $module_basename, 'module_enabled' => 1, 'module_display' => isset($row['display']) ? (int) $row['display'] : 1, 'parent_id' => (int) $categories[$cat_name]['id'], 'module_class' => $module_class, 'module_langname' => $row['title'], 'module_mode' => $module_mode, 'module_auth' => $row['auth']);
                        $_module->update_module_data($module_data);
                        // Check for last sql error happened
                        if ($db->get_sql_error_triggered()) {
                            $error = $db->sql_error($db->get_sql_error_sql());
                            $this->p_master->db_error($error['message'], $db->get_sql_error_sql(), __LINE__, __FILE__);
                        }
                    }
                }
            }
            // Move some of the modules around since the code above will put them in the wrong place
            if ($module_class == 'acp') {
                // Move main module 4 up...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'acp_main'\n\t\t\t\t\t\tAND module_class = 'acp'\n\t\t\t\t\t\tAND module_mode = 'main'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'acp', 'move_up', 4);
                // Move permissions intro screen module 4 up...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'acp_permissions'\n\t\t\t\t\t\tAND module_class = 'acp'\n\t\t\t\t\t\tAND module_mode = 'intro'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'acp', 'move_up', 4);
                // Move manage users screen module 5 up...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'acp_users'\n\t\t\t\t\t\tAND module_class = 'acp'\n\t\t\t\t\t\tAND module_mode = 'overview'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'acp', 'move_up', 5);
                // Move extension management module 1 up...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_langname = 'ACP_EXTENSION_MANAGEMENT'\n\t\t\t\t\t\tAND module_class = 'acp'\n\t\t\t\t\t\tAND module_mode = ''\n\t\t\t\t\t\tAND module_basename = ''";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'acp', 'move_up', 1);
            }
            if ($module_class == 'mcp') {
                // Move pm report details module 3 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'mcp_pm_reports'\n\t\t\t\t\t\tAND module_class = 'mcp'\n\t\t\t\t\t\tAND module_mode = 'pm_report_details'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'mcp', 'move_down', 3);
                // Move closed pm reports module 3 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'mcp_pm_reports'\n\t\t\t\t\t\tAND module_class = 'mcp'\n\t\t\t\t\t\tAND module_mode = 'pm_reports_closed'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'mcp', 'move_down', 3);
                // Move open pm reports module 3 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'mcp_pm_reports'\n\t\t\t\t\t\tAND module_class = 'mcp'\n\t\t\t\t\t\tAND module_mode = 'pm_reports'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'mcp', 'move_down', 3);
            }
            if ($module_class == 'ucp') {
                // Move attachment module 4 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'ucp_attachments'\n\t\t\t\t\t\tAND module_class = 'ucp'\n\t\t\t\t\t\tAND module_mode = 'attachments'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'ucp', 'move_down', 4);
                // Move notification options module 4 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'ucp_notifications'\n\t\t\t\t\t\tAND module_class = 'ucp'\n\t\t\t\t\t\tAND module_mode = 'notification_options'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'ucp', 'move_down', 4);
                // Move OAuth module 5 down...
                $sql = 'SELECT *
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_basename = 'ucp_auth_link'\n\t\t\t\t\t\tAND module_class = 'ucp'\n\t\t\t\t\t\tAND module_mode = 'auth_link'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $_module->move_module_by($row, 'ucp', 'move_down', 5);
            }
            // And now for the special ones
            // (these are modules which appear in multiple categories and thus get added manually to some for more control)
            if (isset($this->module_extras[$module_class])) {
                foreach ($this->module_extras[$module_class] as $cat_name => $mods) {
                    $sql = 'SELECT module_id, left_id, right_id
						FROM ' . MODULES_TABLE . "\n\t\t\t\t\t\tWHERE module_langname = '" . $db->sql_escape($cat_name) . "'\n\t\t\t\t\t\t\tAND module_class = '" . $db->sql_escape($module_class) . "'";
                    $result = $db->sql_query_limit($sql, 1);
                    $row2 = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    foreach ($mods as $mod_name) {
                        $sql = 'SELECT *
							FROM ' . MODULES_TABLE . "\n\t\t\t\t\t\t\tWHERE module_langname = '" . $db->sql_escape($mod_name) . "'\n\t\t\t\t\t\t\t\tAND module_class = '" . $db->sql_escape($module_class) . "'\n\t\t\t\t\t\t\t\tAND module_basename <> ''";
                        $result = $db->sql_query_limit($sql, 1);
                        $row = $db->sql_fetchrow($result);
                        $db->sql_freeresult($result);
                        $module_data = array('module_basename' => $row['module_basename'], 'module_enabled' => (int) $row['module_enabled'], 'module_display' => (int) $row['module_display'], 'parent_id' => (int) $row2['module_id'], 'module_class' => $row['module_class'], 'module_langname' => $row['module_langname'], 'module_mode' => $row['module_mode'], 'module_auth' => $row['module_auth']);
                        $_module->update_module_data($module_data);
                        // Check for last sql error happened
                        if ($db->get_sql_error_triggered()) {
                            $error = $db->sql_error($db->get_sql_error_sql());
                            $this->p_master->db_error($error['message'], $db->get_sql_error_sql(), __LINE__, __FILE__);
                        }
                    }
                }
            }
            $_module->remove_cache_file($module_class);
        }
    }