Пример #1
0
 /**
  * Return user vehicle quota
  */
 function get_user_add_quota()
 {
     global $db, $user, $garage_config, $garage, $phpEx, $phpbb_root_path;
     if (empty($garage_config['add_groups'])) {
         //Since No Specific Group Value Exists Use Default Value
         return $garage_config['default_vehicle_quota'];
     } else {
         //Get All Group Memberships
         include_once $phpbb_root_path . 'includes/functions_user.' . $phpEx;
         $groups = group_memberships(false, array($user->data['user_id']), false);
         //Lets Get The Private Upload Groups & Quotas
         $private_add_groups = @explode(',', $garage_config['add_groups']);
         $private_add_quotas = @explode(',', $garage_config['add_groups_quotas']);
         //Process All Groups You Are Member Of To See If Any Are Granted Permission & Quota
         for ($i = 0; $i < count($groups); $i++) {
             if (in_array($groups[$i]['group_id'], $private_add_groups)) {
                 //Your A Member Of A Group Granted Permission - Find Array Key
                 $index = array_search($groups[$i]['group_id'], $private_add_groups);
                 //So Your Quota For This Group Is...
                 $quota[$i] = $private_add_quotas[$index];
             }
         }
         //Your Were Not Granted Any Private Permissions..Return Default Value
         if (empty($quota)) {
             return $garage_config['default_vehicle_quota'];
         }
         //Return The Highest Quota You Were Granted
         return max($quota);
     }
 }
Пример #2
0
    /**
     * Grep the users that aren't in the groups
     * @param  Boolean $missing If true this function will return whether there are users 
     *                          missing
     */
    function _fetch_users($missing = false)
    {
        global $db;
        if (!function_exists('group_memberships')) {
            require PHPBB_ROOT_PATH . 'includes/functions_user.' . PHP_EXT;
        }
        // Get teh group IDs
        $g = $this->_get_group_ids();
        // Now figure out whether there are users that aren't part in any of these
        $batch = $users = array();
        $data = group_memberships($g);
        if (!empty($data)) {
            foreach ($data as $user) {
                $users[] = (int) $user['user_id'];
            }
            $sql = 'SELECT user_id
				FROM ' . USERS_TABLE . '
				WHERE ' . $db->sql_in_set('user_id', $users, true) . '
				AND user_type <> ' . USER_IGNORE;
            $result = $missing ? $db->sql_query_limit($sql, 1, 0) : $db->sql_query($sql);
            $batch = $db->sql_fetchrowset($result);
            $db->sql_freeresult($result);
        }
        // Return the correct stuff
        if ($missing) {
            return empty($batch) ? false : true;
        }
        return $batch;
    }
Пример #3
0
function isGroup($userid)
{
    $groups = group_memberships(false, $userid);
    $return = false;
    foreach ($groups as $grouprec) {
        if ($grouprec['group_id'] == 22 || $grouprec['group_id'] == 9 || $grouprec['group_id'] == 11 || $grouprec['group_id'] == 12 || $grouprec['group_id'] == 10 || $grouprec['group_id'] == 4) {
            $return = true;
        }
    }
    return $return;
}
Пример #4
0
 private function get_role($localuser)
 {
     $role = $this->config['phpbbwpunicorn_wp_default_role'];
     //TODO: this actually shows a bad design, requiring me to loop over roles whereas a bi-directionnal array could have mesaved from that
     //stock every role into a single multi dim array?
     $potential_roles[] = $role ? $role : [];
     $roles = new \WP_Roles();
     foreach (array_reverse(array_keys($roles->roles)) as $wp_role) {
         $phpbb_roles = unserialize($this->config['phpbbwpunicorn_role_' . $wp_role]);
         foreach ($phpbb_roles as $phpbb_role) {
             $user_groups = group_memberships(false, $localuser['user_id']);
             foreach ($user_groups as $user_group) {
                 if ($phpbb_role == $user_group["group_id"]) {
                     $potential_roles[] = $wp_role;
                 }
             }
         }
     }
     //pooooooooooor design, gush.
     //Which one are we supposed to return? Lol. first of order per ID Desc?
     return $potential_roles[count($potential_roles) - 1];
 }
Пример #5
0
    /**
     * Display permission mask (assign to template)
     */
    function display_mask($mode, $permission_type, &$hold_ary, $user_mode = 'user', $local = false, $group_display = true)
    {
        global $template, $user, $db, $phpbb_root_path, $phpEx;
        // Define names for template loops, might be able to be set
        $tpl_pmask = 'p_mask';
        $tpl_fmask = 'f_mask';
        $tpl_category = 'category';
        $tpl_mask = 'mask';
        $l_acl_type = isset($user->lang['ACL_TYPE_' . ($local ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type)]) ? $user->lang['ACL_TYPE_' . ($local ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type)] : 'ACL_TYPE_' . ($local ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type);
        // Allow trace for viewing permissions and in user mode
        $show_trace = $mode == 'view' && $user_mode == 'user' ? true : false;
        // Get names
        if ($user_mode == 'user') {
            $sql = 'SELECT user_id as ug_id, username as ug_name
				FROM ' . USERS_TABLE . '
				WHERE user_id IN (' . implode(', ', array_keys($hold_ary)) . ')
				ORDER BY username ASC';
        } else {
            $sql = 'SELECT group_id as ug_id, group_name as ug_name, group_type
				FROM ' . GROUPS_TABLE . '
				WHERE group_id IN (' . implode(', ', array_keys($hold_ary)) . ')
				ORDER BY group_type DESC, group_name ASC';
        }
        $result = $db->sql_query($sql);
        $ug_names_ary = array();
        while ($row = $db->sql_fetchrow($result)) {
            $ug_names_ary[$row['ug_id']] = $user_mode == 'user' ? $row['ug_name'] : ($row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $row['ug_name']] : $row['ug_name']);
        }
        $db->sql_freeresult($result);
        // Get used forums
        $forum_ids = array();
        foreach ($hold_ary as $ug_id => $row) {
            $forum_ids = array_merge($forum_ids, array_keys($row));
        }
        $forum_ids = array_unique($forum_ids);
        $forum_names_ary = array();
        if ($local) {
            $forum_names_ary = make_forum_select(false, false, true, false, false, true);
        } else {
            $forum_names_ary[0] = $l_acl_type;
        }
        // Get available roles
        $sql = 'SELECT *
			FROM ' . ACL_ROLES_TABLE . "\n\t\t\tWHERE role_type = '" . $db->sql_escape($permission_type) . "'\n\t\t\tORDER BY role_order ASC";
        $result = $db->sql_query($sql);
        $roles = array();
        while ($row = $db->sql_fetchrow($result)) {
            $roles[$row['role_id']] = $row;
        }
        $db->sql_freeresult($result);
        $cur_roles = $this->acl_role_data($user_mode, $permission_type, array_keys($hold_ary));
        // Build js roles array (role data assignments)
        $s_role_js_array = '';
        if (sizeof($roles)) {
            $s_role_js_array = array();
            // Make sure every role (even if empty) has its array defined
            foreach ($roles as $_role_id => $null) {
                $s_role_js_array[$_role_id] = "\n" . 'role_options[' . $_role_id . '] = new Array();' . "\n";
            }
            $sql = 'SELECT r.role_id, o.auth_option, r.auth_setting
				FROM ' . ACL_ROLES_DATA_TABLE . ' r, ' . ACL_OPTIONS_TABLE . ' o
				WHERE o.auth_option_id = r.auth_option_id
					AND r.role_id IN (' . implode(', ', array_keys($roles)) . ')';
            $result = $db->sql_query($sql);
            while ($row = $db->sql_fetchrow($result)) {
                $flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1);
                if ($flag == $row['auth_option']) {
                    continue;
                }
                $s_role_js_array[$row['role_id']] .= 'role_options[' . $row['role_id'] . '][\'' . $row['auth_option'] . '\'] = ' . $row['auth_setting'] . '; ';
            }
            $db->sql_freeresult($result);
            $s_role_js_array = implode('', $s_role_js_array);
        }
        $template->assign_var('S_ROLE_JS_ARRAY', $s_role_js_array);
        // Now obtain memberships
        $user_groups_default = $user_groups_custom = array();
        if ($user_mode == 'user' && $group_display) {
            $sql = 'SELECT group_id, group_name, group_type
				FROM ' . GROUPS_TABLE . '
				ORDER BY group_type DESC, group_name ASC';
            $result = $db->sql_query($sql);
            $groups = array();
            while ($row = $db->sql_fetchrow($result)) {
                $groups[$row['group_id']] = $row;
            }
            $db->sql_freeresult($result);
            $memberships = group_memberships(false, array_keys($hold_ary), false);
            // User is not a member of any group? Bad admin, bad bad admin...
            if ($memberships) {
                foreach ($memberships as $row) {
                    if ($groups[$row['group_id']]['group_type'] == GROUP_SPECIAL) {
                        $user_groups_default[$row['user_id']][] = $user->lang['G_' . $groups[$row['group_id']]['group_name']];
                    } else {
                        $user_groups_custom[$row['user_id']][] = $groups[$row['group_id']]['group_name'];
                    }
                }
            }
            unset($memberships, $groups);
        }
        // If we only have one forum id to display or being in local mode and more than one user/group to display,
        // we switch the complete interface to group by user/usergroup instead of grouping by forum
        // To achive this, we need to switch the array a bit
        if (sizeof($forum_ids) == 1 || $local && sizeof($ug_names_ary) > 1) {
            $hold_ary_temp = $hold_ary;
            $hold_ary = array();
            foreach ($hold_ary_temp as $ug_id => $row) {
                foreach ($row as $forum_id => $auth_row) {
                    $hold_ary[$forum_id][$ug_id] = $auth_row;
                }
            }
            unset($hold_ary_temp);
            foreach ($hold_ary as $forum_id => $forum_array) {
                $content_array = $categories = array();
                $this->build_permission_array($hold_ary[$forum_id], $content_array, $categories, array_keys($ug_names_ary));
                $template->assign_block_vars($tpl_pmask, array('NAME' => $forum_id == 0 ? $forum_names_ary[0] : $forum_names_ary[$forum_id]['forum_name'], 'CATEGORIES' => implode('</th><th>', $categories), 'L_ACL_TYPE' => $l_acl_type, 'S_LOCAL' => $local ? true : false, 'S_GLOBAL' => !$local ? true : false, 'S_NUM_CATS' => sizeof($categories), 'S_VIEW' => $mode == 'view' ? true : false, 'S_NUM_OBJECTS' => sizeof($content_array), 'S_USER_MODE' => $user_mode == 'user' ? true : false, 'S_GROUP_MODE' => $user_mode == 'group' ? true : false));
                foreach ($content_array as $ug_id => $ug_array) {
                    // Build role dropdown options
                    $current_role_id = isset($cur_roles[$ug_id][$forum_id]) ? $cur_roles[$ug_id][$forum_id] : 0;
                    $s_role_options = '';
                    foreach ($roles as $role_id => $role_row) {
                        $role_description = !empty($user->lang[$role_row['role_description']]) ? $user->lang[$role_row['role_description']] : nl2br($role_row['role_description']);
                        $title = $role_description ? ' title="' . $role_description . '"' : '';
                        $s_role_options .= '<option value="' . $role_id . '"' . ($role_id == $current_role_id ? ' selected="selected"' : '') . $title . '>' . $role_row['role_name'] . '</option>';
                    }
                    if ($s_role_options) {
                        $s_role_options = '<option value="0"' . (!$current_role_id ? ' selected="selected"' : '') . ' title="' . htmlspecialchars($user->lang['NO_ROLE_ASSIGNED_EXPLAIN']) . '">' . $user->lang['NO_ROLE_ASSIGNED'] . '</option>' . $s_role_options;
                    }
                    $template->assign_block_vars($tpl_pmask . '.' . $tpl_fmask, array('NAME' => $ug_names_ary[$ug_id], 'S_ROLE_OPTIONS' => $s_role_options, 'UG_ID' => $ug_id, 'FORUM_ID' => $forum_id));
                    $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace);
                }
            }
        } else {
            foreach ($ug_names_ary as $ug_id => $ug_name) {
                if (!isset($hold_ary[$ug_id])) {
                    continue;
                }
                $content_array = $categories = array();
                $this->build_permission_array($hold_ary[$ug_id], $content_array, $categories, array_keys($forum_names_ary));
                $template->assign_block_vars($tpl_pmask, array('NAME' => $ug_name, 'CATEGORIES' => implode('</th><th>', $categories), 'USER_GROUPS_DEFAULT' => $user_mode == 'user' && isset($user_groups_default[$ug_id]) && sizeof($user_groups_default[$ug_id]) ? implode(', ', $user_groups_default[$ug_id]) : '', 'USER_GROUPS_CUSTOM' => $user_mode == 'user' && isset($user_groups_custom[$ug_id]) && sizeof($user_groups_custom[$ug_id]) ? implode(', ', $user_groups_custom[$ug_id]) : '', 'L_ACL_TYPE' => $l_acl_type, 'S_LOCAL' => $local ? true : false, 'S_GLOBAL' => !$local ? true : false, 'S_NUM_CATS' => sizeof($categories), 'S_VIEW' => $mode == 'view' ? true : false, 'S_NUM_OBJECTS' => sizeof($content_array), 'S_USER_MODE' => $user_mode == 'user' ? true : false, 'S_GROUP_MODE' => $user_mode == 'group' ? true : false));
                foreach ($content_array as $forum_id => $forum_array) {
                    // Build role dropdown options
                    $current_role_id = isset($cur_roles[$ug_id][$forum_id]) ? $cur_roles[$ug_id][$forum_id] : 0;
                    $s_role_options = '';
                    foreach ($roles as $role_id => $role_row) {
                        $role_description = !empty($user->lang[$role_row['role_description']]) ? $user->lang[$role_row['role_description']] : nl2br($role_row['role_description']);
                        $title = $role_description ? ' title="' . $role_description . '"' : '';
                        $s_role_options .= '<option value="' . $role_id . '"' . ($role_id == $current_role_id ? ' selected="selected"' : '') . $title . '>' . $role_row['role_name'] . '</option>';
                    }
                    if ($s_role_options) {
                        $s_role_options = '<option value="0"' . (!$current_role_id ? ' selected="selected"' : '') . ' title="' . htmlspecialchars($user->lang['NO_ROLE_ASSIGNED_EXPLAIN']) . '">' . $user->lang['NO_ROLE_ASSIGNED'] . '</option>' . $s_role_options;
                    }
                    if (!$forum_id) {
                        $folder_image = '';
                    } else {
                        if ($forum_names_ary[$forum_id]['forum_status'] == ITEM_LOCKED) {
                            $folder_image = '<img src="images/icon_folder_lock_small.gif" width="19" height="18" alt="' . $user->lang['FORUM_LOCKED'] . '" />';
                        } else {
                            switch ($forum_names_ary[$forum_id]['forum_type']) {
                                case FORUM_LINK:
                                    $folder_image = '<img src="images/icon_folder_link_small.gif" width="22" height="18" alt="' . $user->lang['FORUM_LINK'] . '" />';
                                    break;
                                default:
                                    $folder_image = $forum_names_ary[$forum_id]['left_id'] + 1 != $forum_names_ary[$forum_id]['right_id'] ? '<img src="images/icon_folder_sub_small.gif" width="22" height="18" alt="' . $user->lang['SUBFORUM'] . '" />' : '<img src="images/icon_folder_small.gif" width="19" height="18" alt="' . $user->lang['FOLDER'] . '" />';
                                    break;
                            }
                        }
                    }
                    $template->assign_block_vars($tpl_pmask . '.' . $tpl_fmask, array('NAME' => $forum_id == 0 ? $forum_names_ary[0] : $forum_names_ary[$forum_id]['forum_name'], 'PADDING' => $forum_id == 0 ? '' : $forum_names_ary[$forum_id]['padding'], 'FOLDER_IMAGE' => $folder_image, 'S_ROLE_OPTIONS' => $s_role_options, 'UG_ID' => $ug_id, 'FORUM_ID' => $forum_id));
                    $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace);
                }
            }
        }
    }
Пример #6
0
    public function process_block_modules()
    {
        global $phpbb_root_path, $config, $table_prefix, $helper;
        global $db, $user, $avatar_img, $request, $template, $auth;
        global $k_config, $k_groups, $k_blocks, $page_header;
        global $phpbb_path_helper;
        $this->php_ext = $phpbb_path_helper->get_php_ext();
        $block_cache_time = $k_config['k_block_cache_time_default'];
        $blocks_width = $config['blocks_width'];
        $blocks_enabled = $config['blocks_enabled'];
        $use_block_cookies = isset($k_config['use_block_cookies']) ? $k_config['use_block_cookies'] : 0;
        if (!$blocks_enabled) {
            $template->assign_vars(array('PORTAL_MESSAGE' => $user->lang('BLOCKS_DISABLED')));
        }
        $all = '';
        $show_center = $show_left = $show_right = false;
        $LB = $CB = $RB = array();
        $active_blocks = array();
        // if styles use large block images change path to images //
        $block_image_path = $phpbb_root_path . 'ext/phpbbireland/portal/images/block_images/block/';
        $big_image_path = $phpbb_root_path . 'ext/phpbbireland/portal/images/block_images/large/';
        $this_page = explode(".", $user->page['page']);
        $user_id = $user->data['user_id'];
        //		$logo = sgp_get_rand_logo();
        //		var_dump($logo);
        $theme = rawurlencode($user->style['style_path']);
        $template->assign_vars(array('EXT_TEMPLATE_PATH' => $phpbb_root_path . 'ext/phpbbireland/portal/styles/' . $theme, 'EXT_IMAGE_PATH' => $phpbb_root_path . 'ext/phpbbireland/portal/images/', 'MOD_IMAGE_LANG_PATH' => $phpbb_root_path . 'ext/phpbbireland/portal/styles/' . $theme . '/theme/' . $user->data['user_lang'] . '/'));
        include_once $phpbb_root_path . 'ext/phpbbireland/portal/includes/sgp_functions.' . $this->php_ext;
        // Grab data for this user //
        $sql = "SELECT group_id, user_type, user_style, user_avatar, user_avatar_type, username, user_left_blocks, user_center_blocks, user_right_blocks\n\t\t\tFROM " . USERS_TABLE . "\n\t\t\tWHERE user_id = {$user_id}";
        if ($result = $db->sql_query($sql)) {
            $row = $db->sql_fetchrow($result);
            $user_avatar = $row['user_avatar'];
            $user_style = $row['user_style'];
            $usertype = $row['user_type'];
            $groupid = $row['group_id'];
            $left = $row['user_left_blocks'];
            $LB = explode(',', $left);
            $center = $row['user_center_blocks'];
            $CB = explode(',', $center);
            $right = $row['user_right_blocks'];
            $RB = explode(',', $right);
            $LCR = array_merge((array) $LB, (array) $CB, (array) $RB);
            $left .= ',';
            $center .= ',';
            $all .= $left .= $center .= $right;
        } else {
            trigger_error($user->lang['ERROR_USER_TABLE']);
        }
        // Process block positions for members only //
        if ($row['group_id'] != ANONYMOUS) {
            if (isset($_COOKIE[$config['cookie_name'] . '_sgp_left']) || isset($_COOKIE[$config['cookie_name'] . '_sgp_center']) || isset($_COOKIE[$config['cookie_name'] . '_sgp_right']) && $use_block_cookies) {
                $left = $request->variable($config['cookie_name'] . '_sgp_left', '', false, true);
                $left = str_replace("left[]=", "", $left);
                $left = str_replace("&amp;", ',', $left);
                $LBA = explode(',', $left);
                $center = $request->variable($config['cookie_name'] . '_sgp_center', '', false, true);
                $center = str_replace("center[]=", "", $center);
                $center = str_replace("&amp;", ',', $center);
                $CBA = explode(',', $center);
                $right = $request->variable($config['cookie_name'] . '_sgp_right', '', false, true);
                $right = str_replace("right[]=", "", $right);
                $right = str_replace("&amp;", ',', $right);
                $RBA = explode(',', $right);
                // store cookie data (block positions in user table)
                if (!empty($left)) {
                    $sql = 'UPDATE ' . USERS_TABLE . '
						SET user_left_blocks = ' . "'" . $db->sql_escape($left) . "'" . ', user_center_blocks = ' . "'" . $db->sql_escape($center) . "'" . ', user_right_blocks = ' . "'" . $db->sql_escape($right) . "'" . '
						WHERE user_id = ' . (int) $user->data['user_id'];
                    $db->sql_query($sql);
                    // set switch clear cookies now that we have them stored (we use javascript)//
                    $template->assign_vars(array('S_CLEAR_CACHE' => true));
                }
            }
            if (empty($row['user_left_blocks'])) {
                $sql = "SELECT *\n\t\t\t\t\tFROM " . K_BLOCKS_TABLE . "\n\t\t\t\t\tWHERE active = 1\n\t\t\t\t\t\tAND (view_pages <> '0')\n\t\t\t\t\t\tORDER BY ndx ASC";
            } else {
                $sql = "SELECT *\n\t\t\t\t\tFROM " . K_BLOCKS_TABLE . "\n\t\t\t\t\tWHERE active = 1\n\t\t\t\t\t\tAND (view_pages <> '0')\n\t\t\t\t\t\tAND " . $db->sql_in_set('id', $LCR) . "\n\t\t\t\t\tORDER BY find_in_set(id,'" . $all . "')";
            }
        } else {
            $sql = "SELECT *\n\t\t\t\tFROM " . K_BLOCKS_TABLE . "\n\t\t\t\tWHERE active = 1\n\t\t\t\t\t\tAND (view_pages <> '0')\n\t\t\t\t\t\tORDER BY ndx ASC";
        }
        $result = $db->sql_query($sql, $block_cache_time);
        while ($row = $db->sql_fetchrow($result)) {
            $active_blocks[] = $row;
            $arr[$row['id']] = explode(',', $row['view_pages']);
        }
        $this_page_name = $this->get_current_page();
        $id = $request->variable('style', 0);
        if ($id) {
            if (strstr($this_page_name, 'portal')) {
                $page_id = get_page_id('portal');
            } else {
                if (strstr($this_page_name, 'index')) {
                    $page_id = get_page_id('index');
                } else {
                    $page_id = get_page_id($this_page_name);
                }
            }
        } else {
            $page_id = get_page_id($this_page_name);
        }
        //var_dump('RETURNED: ' . $this_page_name . ' ID: ' . $page_id);
        if ($page_id == 0) {
            $page_id = $this_page[0];
            $page_id = get_page_id($this_page[0]);
        }
        foreach ($active_blocks as $active_block) {
            $filename = substr($active_block['html_file_name'], 0, strpos($active_block['html_file_name'], '.'));
            if (file_exists($phpbb_root_path . 'ext/phpbbireland/portal/blocks/' . $filename . '.' . $this->php_ext)) {
                if (in_array($page_id, $arr[$active_block['id']])) {
                    //var_dump('process_block_modules > foreach returned' . $filename);
                    include $phpbb_root_path . 'ext/phpbbireland/portal/blocks/' . $filename . '.' . $this->php_ext;
                }
            }
        }
        $db->sql_freeresult($result);
        if (!function_exists('group_memberships')) {
            include $phpbb_root_path . 'includes/functions_user.' . $this->php_ext;
        }
        $memberships = array();
        $memberships = group_memberships(false, $user->data['user_id'], false);
        // Main processing of block data here //
        if ($active_blocks) {
            $L = $R = $C = 0;
            foreach ($active_blocks as $row) {
                $block_position = $row['position'];
                // override default position with user designated position //
                if (in_array($row['id'], $LB)) {
                    $block_position = 'L';
                } else {
                    if (in_array($row['id'], $CB)) {
                        $block_position = 'C';
                    } else {
                        if (in_array($row['id'], $RB)) {
                            $block_position = 'R';
                        }
                    }
                }
                $block_id = $row['id'];
                $block_ndx = $row['ndx'];
                $block_title = $row['title'];
                $block_active = $row['active'];
                $block_type = $row['type'];
                $block_view_groups = $row['view_groups'];
                $block_view_all = $row['view_all'];
                $block_scroll = $row['scroll'];
                $block_height = $row['block_height'];
                $html_file_name = $row['html_file_name'];
                $img_file_name = $row['img_file_name'];
                $view_pages = $row['view_pages'];
                $arr = explode(',', $view_pages);
                $grps = explode(",", $block_view_groups);
                $process_block = false;
                $block_title = get_menu_lang_name($row['title']);
                // process blocks for different groups //
                if (isset($memberships)) {
                    foreach ($memberships as $member) {
                        // First we check to see if the view_all over-ride is set (saves having to enter all groups) //
                        if ($block_view_all) {
                            $process_block = true;
                        } else {
                            for ($j = 0; $j < ($jcount = count($grps)); $j++) {
                                if ($grps[$j] == $member['group_id']) {
                                    $process_block = true;
                                }
                            }
                        }
                    }
                    //unset($memberships);
                }
                if ($process_block && in_array($page_id, $arr)) {
                    switch ($block_position) {
                        case 'L':
                            $left_block_ary[$L] = $html_file_name;
                            $left_block_id[$L] = $block_id;
                            $left_block_ndx[$L] = $block_ndx;
                            $left_block_title[$L] = $block_title;
                            $left_block_img[$L] = $img_file_name;
                            $left_block_scroll[$L] = $block_scroll;
                            $left_block_height[$L] = $block_height;
                            $L++;
                            $show_left = true;
                            //show_blocks($this_page_name, $block_position);
                            break;
                        case 'C':
                            $center_block_ary[$C] = $html_file_name;
                            $center_block_id[$C] = $block_id;
                            $center_block_ndx[$C] = $block_ndx;
                            $center_block_title[$C] = $block_title;
                            $center_block_img[$C] = $img_file_name;
                            $center_block_scroll[$C] = $block_scroll;
                            $center_block_height[$C] = $block_height;
                            $C++;
                            $show_center = true;
                            //show_blocks($this_page_name, $block_position);
                            break;
                        case 'R':
                            $right_block_ary[$R] = $html_file_name;
                            $right_block_id[$R] = $block_id;
                            $right_block_ndx[$R] = $block_ndx;
                            $right_block_title[$R] = $block_title;
                            $right_block_img[$R] = $img_file_name;
                            $right_block_scroll[$R] = $block_scroll;
                            $right_block_height[$R] = $block_height;
                            $R++;
                            $show_right = true;
                            //show_blocks($this_page_name, $block_position);
                            break;
                        default:
                    }
                    ///var_dump($html_file_name);
                }
            }
        }
        //unset($active_blocks);
        if (isset($left_block_ary) && $show_left) {
            foreach ($left_block_ary as $block => $value) {
                $template->assign_block_vars('left_block_files', array('LEFT_BLOCKS' => $this->build_block_modules($value), 'LEFT_BLOCK_ID' => 'L_' . $left_block_id[$block], 'LEFT_BLOCK_TITLE' => $left_block_title[$block], 'LEFT_BLOCK_SCROLL' => $left_block_scroll[$block], 'LEFT_BLOCK_HEIGHT' => $left_block_height[$block], 'LEFT_BLOCK_IMG' => $left_block_img[$block] ? $block_image_path . $left_block_img[$block] : $block_image_path . 'none.gif', 'LEFT_BLOCK_IMG_2' => file_exists($big_image_path . $left_block_img[$block]) ? $big_image_path . $left_block_img[$block] : $big_image_path . 'none.png', 'S_CONTENT_FLOW_BEGIN' => $user->lang['DIRECTION'] == 'ltr' ? 'left' : 'right', 'S_CONTENT_FLOW_END' => $user->lang['DIRECTION'] == 'ltr' ? 'right' : 'left'));
            }
        }
        //unset($left_block_ary);
        if (isset($right_block_ary) && $show_right) {
            foreach ($right_block_ary as $block => $value) {
                $template->assign_block_vars('right_block_files', array('RIGHT_BLOCKS' => $this->build_block_modules($value), 'RIGHT_BLOCK_ID' => 'R_' . $right_block_id[$block], 'RIGHT_BLOCK_TITLE' => $right_block_title[$block], 'RIGHT_BLOCK_SCROLL' => $right_block_scroll[$block], 'RIGHT_BLOCK_HEIGHT' => $right_block_height[$block], 'RIGHT_BLOCK_IMG' => $right_block_img[$block] ? $block_image_path . $right_block_img[$block] : $block_image_path . 'none.gif', 'RIGHT_BLOCK_IMG_2' => file_exists($big_image_path . $right_block_img[$block]) ? $big_image_path . $right_block_img[$block] : $big_image_path . 'none.png', 'S_CONTENT_FLOW_BEGIN' => $user->lang['DIRECTION'] == 'ltr' ? 'left' : 'right', 'S_CONTENT_FLOW_END' => $user->lang['DIRECTION'] == 'ltr' ? 'right' : 'left'));
            }
        }
        //unset($right_block_ary);
        if (isset($center_block_ary) && $show_center) {
            foreach ($center_block_ary as $block => $value) {
                $template->assign_block_vars('center_block_files', array('CENTER_BLOCKS' => $this->build_block_modules($value), 'CENTER_BLOCK_ID' => 'C_' . $center_block_id[$block], 'CENTER_BLOCK_TITLE' => $center_block_title[$block], 'CENTER_BLOCK_SCROLL' => $center_block_scroll[$block], 'CENTER_BLOCK_HEIGHT' => $center_block_height[$block], 'CENTER_BLOCK_IMG' => $center_block_img[$block] ? $block_image_path . $center_block_img[$block] : $block_image_path . 'none.gif', 'CENTER_BLOCK_IMG_2' => file_exists($big_image_path . $center_block_img[$block]) ? $big_image_path . $center_block_img[$block] : $big_image_path . 'none.png', 'S_CONTENT_FLOW_BEGIN' => $user->lang['DIRECTION'] == 'ltr' ? 'left' : 'right', 'S_CONTENT_FLOW_END' => $user->lang['DIRECTION'] == 'ltr' ? 'right' : 'left'));
            }
        }
        //unset($center_block_ary);
        $avatar_data = array('avatar' => $user->data['user_avatar'], 'avatar_width' => $user->data['user_avatar_width'], 'avatar_height' => $user->data['user_avatar_height'], 'avatar_type' => $user->data['user_avatar_type']);
        $template->assign_vars(array('ASSETS_PATH' => $phpbb_root_path . 'ext/phpbbireland/portal/styles/' . rawurlencode($user->style['style_path']) . '/template/assets/', 'AVATAR' => phpbb_get_avatar($avatar_data, $user->lang['USER_AVATAR'], false), 'BLOCK_WIDTH' => $blocks_width . 'px', 'PORTAL_ACTIVE' => $config['portal_enabled'], 'PORTAL_BUILD' => $config['portal_build'], 'PORTAL_VERSION' => $config['portal_version'], 'READ_ARTICLE_IMG' => $user->img('btn_read_article', 'READ_ARTICLE'), 'POST_COMMENTS_IMG' => $user->img('btn_post_comments', 'POST_COMMENTS'), 'VIEW_COMMENTS_IMG' => $user->img('btn_view_comments', 'VIEW_COMMENTS'), 'SITE_NAME' => $config['sitename'], 'S_USER_LOGGED_IN' => $user->data['user_id'] != ANONYMOUS ? true : false, 'S_SHOW_LEFT_BLOCKS' => $show_left, 'S_SHOW_RIGHT_BLOCKS' => $show_right, 'S_BLOCKS_ENABLED' => $blocks_enabled, 'S_K_FOOTER_IMAGES_ALLOW' => $k_config['k_footer_images_allow'] ? true : false, 'S_CONTENT_FLOW_BEGIN' => $user->lang['DIRECTION'] == 'ltr' ? 'left' : 'right', 'S_CONTENT_FLOW_END' => $user->lang['DIRECTION'] == 'ltr' ? 'right' : 'left', 'USER_NAME' => $user->data['username'], 'USERNAME_FULL' => get_username_string('full', $user->data['user_id'], $user->data['username'], $user->data['user_colour']), 'U_INDEX' => append_sid("{$phpbb_root_path}index.{$this->php_ext}"), 'U_PORTAL' => append_sid("{$phpbb_root_path}portal"), 'U_STAFF' => append_sid("{$phpbb_root_path}memberlist.{$this->php_ext}", 'mode=leaders'), 'U_SEARCH_BOOKMARKS' => append_sid("{$phpbb_root_path}ucp.{$this->php_ext}", 'i=main&mode=bookmarks'), 'PORTAL_HEADER_BLOCKS' => false, 'PORTAL_FOOTER_BLOCKS' => false, 'U_PORTAL_ARRANGE' => append_sid("{$phpbb_root_path}portal.{$this->php_ext}", "arrange=1"), 'S_ARRANGE' => false, 'HIDE_IMG' => '<img src="ext/phpbbireland/portal/images/hide.png"  alt="' . $user->lang['SHOWHIDE'] . '" title="' . $user->lang['SHOWHIDE'] . '" height="16" width="14" />', 'MOVE_IMG' => '<img src="ext/phpbbireland/portal/images/move.png"  alt="' . $user->lang['MOVE'] . '" title="' . $user->lang['MOVE'] . '" height="16" width="14" />', 'SHOW_IMG' => '<img src="ext/phpbbireland/portal/images/show.png"  alt="' . $user->lang['SHOW'] . '" title="' . $user->lang['SHOW'] . '" height="16" width="14" />'));
    }
    function _anon_groups(&$_in_guests, &$_other_groups)
    {
        global $db;
        // Fetch the groups our user is in
        if (!function_exists('group_memberships')) {
            include PHPBB_ROOT_PATH . 'includes/functions_user.' . PHP_EXT;
        }
        $groups = group_memberships(false, ANONYMOUS);
        if (empty($groups)) {
            $groups = array();
        }
        // Get the group id of GUESTS
        $sql = 'SELECT group_id
			FROM ' . GROUPS_TABLE . "\n\t\t\tWHERE group_name = 'GUESTS'";
        $result = $db->sql_query_limit($sql, 1, 0);
        $gid = $db->sql_fetchfield('group_id', false, $result);
        $db->sql_freeresult($result);
        // Build the information
        foreach ($groups as $group => $group_data) {
            if ($group_data['group_id'] == $gid) {
                $_in_guests = $group_data['group_id'];
                continue;
            }
            $_other_groups[] = $group_data['group_id'];
        }
        if ($_in_guests === false) {
            return $gid;
        }
    }
Пример #8
0
    /**
     * Display permission mask (assign to template)
     */
    function display_mask($mode, $permission_type, &$hold_ary, $user_mode = 'user', $local = false, $group_display = true)
    {
        global $template, $user, $db, $phpbb_container;
        /* @var $phpbb_permissions \phpbb\permissions */
        $phpbb_permissions = $phpbb_container->get('acl.permissions');
        /** @var \phpbb\group\helper $group_helper */
        $group_helper = $phpbb_container->get('group_helper');
        // Define names for template loops, might be able to be set
        $tpl_pmask = 'p_mask';
        $tpl_fmask = 'f_mask';
        $tpl_category = 'category';
        $tpl_mask = 'mask';
        $l_acl_type = $phpbb_permissions->get_type_lang($permission_type, $local ? 'local' : 'global');
        // Allow trace for viewing permissions and in user mode
        $show_trace = $mode == 'view' && $user_mode == 'user' ? true : false;
        // Get names
        if ($user_mode == 'user') {
            $sql = 'SELECT user_id as ug_id, username as ug_name
				FROM ' . USERS_TABLE . '
				WHERE ' . $db->sql_in_set('user_id', array_keys($hold_ary)) . '
				ORDER BY username_clean ASC';
        } else {
            $sql = 'SELECT group_id as ug_id, group_name as ug_name, group_type
				FROM ' . GROUPS_TABLE . '
				WHERE ' . $db->sql_in_set('group_id', array_keys($hold_ary)) . '
				ORDER BY group_type DESC, group_name ASC';
        }
        $result = $db->sql_query($sql);
        $ug_names_ary = array();
        while ($row = $db->sql_fetchrow($result)) {
            $ug_names_ary[$row['ug_id']] = $user_mode == 'user' ? $row['ug_name'] : $group_helper->get_name($row['ug_name']);
        }
        $db->sql_freeresult($result);
        // Get used forums
        $forum_ids = array();
        foreach ($hold_ary as $ug_id => $row) {
            $forum_ids = array_merge($forum_ids, array_keys($row));
        }
        $forum_ids = array_unique($forum_ids);
        $forum_names_ary = array();
        if ($local) {
            $forum_names_ary = make_forum_select(false, false, true, false, false, false, true);
            // Remove the disabled ones, since we do not create an option field here...
            foreach ($forum_names_ary as $key => $value) {
                if (!$value['disabled']) {
                    continue;
                }
                unset($forum_names_ary[$key]);
            }
        } else {
            $forum_names_ary[0] = $l_acl_type;
        }
        // Get available roles
        $sql = 'SELECT *
			FROM ' . ACL_ROLES_TABLE . "\n\t\t\tWHERE role_type = '" . $db->sql_escape($permission_type) . "'\n\t\t\tORDER BY role_order ASC";
        $result = $db->sql_query($sql);
        $roles = array();
        while ($row = $db->sql_fetchrow($result)) {
            $roles[$row['role_id']] = $row;
        }
        $db->sql_freeresult($result);
        $cur_roles = $this->acl_role_data($user_mode, $permission_type, array_keys($hold_ary));
        // Build js roles array (role data assignments)
        $s_role_js_array = '';
        if (sizeof($roles)) {
            $s_role_js_array = array();
            // Make sure every role (even if empty) has its array defined
            foreach ($roles as $_role_id => $null) {
                $s_role_js_array[$_role_id] = "\n" . 'role_options[' . $_role_id . '] = new Array();' . "\n";
            }
            $sql = 'SELECT r.role_id, o.auth_option, r.auth_setting
				FROM ' . ACL_ROLES_DATA_TABLE . ' r, ' . ACL_OPTIONS_TABLE . ' o
				WHERE o.auth_option_id = r.auth_option_id
					AND ' . $db->sql_in_set('r.role_id', array_keys($roles));
            $result = $db->sql_query($sql);
            while ($row = $db->sql_fetchrow($result)) {
                $flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1);
                if ($flag == $row['auth_option']) {
                    continue;
                }
                $s_role_js_array[$row['role_id']] .= 'role_options[' . $row['role_id'] . '][\'' . addslashes($row['auth_option']) . '\'] = ' . $row['auth_setting'] . '; ';
            }
            $db->sql_freeresult($result);
            $s_role_js_array = implode('', $s_role_js_array);
        }
        $template->assign_var('S_ROLE_JS_ARRAY', $s_role_js_array);
        unset($s_role_js_array);
        // Now obtain memberships
        $user_groups_default = $user_groups_custom = array();
        if ($user_mode == 'user' && $group_display) {
            $sql = 'SELECT group_id, group_name, group_type
				FROM ' . GROUPS_TABLE . '
				ORDER BY group_type DESC, group_name ASC';
            $result = $db->sql_query($sql);
            $groups = array();
            while ($row = $db->sql_fetchrow($result)) {
                $groups[$row['group_id']] = $row;
            }
            $db->sql_freeresult($result);
            $memberships = group_memberships(false, array_keys($hold_ary), false);
            // User is not a member of any group? Bad admin, bad bad admin...
            if ($memberships) {
                foreach ($memberships as $row) {
                    $user_groups_default[$row['user_id']][] = $group_helper->get_name($groups[$row['group_id']]['group_name']);
                }
            }
            unset($memberships, $groups);
        }
        // If we only have one forum id to display or being in local mode and more than one user/group to display,
        // we switch the complete interface to group by user/usergroup instead of grouping by forum
        // To achieve this, we need to switch the array a bit
        if (sizeof($forum_ids) == 1 || $local && sizeof($ug_names_ary) > 1) {
            $hold_ary_temp = $hold_ary;
            $hold_ary = array();
            foreach ($hold_ary_temp as $ug_id => $row) {
                foreach ($forum_names_ary as $forum_id => $forum_row) {
                    if (isset($row[$forum_id])) {
                        $hold_ary[$forum_id][$ug_id] = $row[$forum_id];
                    }
                }
            }
            unset($hold_ary_temp);
            foreach ($hold_ary as $forum_id => $forum_array) {
                $content_array = $categories = array();
                $this->build_permission_array($hold_ary[$forum_id], $content_array, $categories, array_keys($ug_names_ary));
                $template->assign_block_vars($tpl_pmask, array('NAME' => $forum_id == 0 ? $forum_names_ary[0] : $forum_names_ary[$forum_id]['forum_name'], 'PADDING' => $forum_id == 0 ? '' : $forum_names_ary[$forum_id]['padding'], 'CATEGORIES' => implode('</th><th>', $categories), 'L_ACL_TYPE' => $l_acl_type, 'S_LOCAL' => $local ? true : false, 'S_GLOBAL' => !$local ? true : false, 'S_NUM_CATS' => sizeof($categories), 'S_VIEW' => $mode == 'view' ? true : false, 'S_NUM_OBJECTS' => sizeof($content_array), 'S_USER_MODE' => $user_mode == 'user' ? true : false, 'S_GROUP_MODE' => $user_mode == 'group' ? true : false));
                @reset($content_array);
                while (list($ug_id, $ug_array) = each($content_array)) {
                    // Build role dropdown options
                    $current_role_id = isset($cur_roles[$ug_id][$forum_id]) ? $cur_roles[$ug_id][$forum_id] : 0;
                    // Output current role id to template
                    $template->assign_var('S_ROLE_ID', $current_role_id);
                    @reset($roles);
                    while (list($role_id, $role_row) = each($roles)) {
                        $role_description = !empty($user->lang[$role_row['role_description']]) ? $user->lang[$role_row['role_description']] : nl2br($role_row['role_description']);
                        $role_name = !empty($user->lang[$role_row['role_name']]) ? $user->lang[$role_row['role_name']] : $role_row['role_name'];
                        $template->assign_block_vars('role_options', array('ID' => $role_id, 'ROLE_NAME' => $role_name, 'TITLE' => $role_description, 'SELECTED' => $role_id == $current_role_id));
                    }
                    if (!$current_role_id && $mode != 'view') {
                        $s_custom_permissions = false;
                        foreach ($ug_array as $key => $value) {
                            if ($value['S_NEVER'] || $value['S_YES']) {
                                $s_custom_permissions = true;
                                break;
                            }
                        }
                    } else {
                        $s_custom_permissions = false;
                    }
                    $template->assign_block_vars($tpl_pmask . '.' . $tpl_fmask, array('NAME' => $ug_names_ary[$ug_id], 'UG_ID' => $ug_id, 'S_CUSTOM' => $s_custom_permissions, 'FORUM_ID' => $forum_id));
                    $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $mode == 'view', $show_trace);
                    unset($content_array[$ug_id]);
                }
                unset($hold_ary[$forum_id]);
            }
        } else {
            foreach ($ug_names_ary as $ug_id => $ug_name) {
                if (!isset($hold_ary[$ug_id])) {
                    continue;
                }
                $content_array = $categories = array();
                $this->build_permission_array($hold_ary[$ug_id], $content_array, $categories, array_keys($forum_names_ary));
                $template->assign_block_vars($tpl_pmask, array('NAME' => $ug_name, 'CATEGORIES' => implode('</th><th>', $categories), 'USER_GROUPS_DEFAULT' => $user_mode == 'user' && isset($user_groups_default[$ug_id]) && sizeof($user_groups_default[$ug_id]) ? implode($user->lang['COMMA_SEPARATOR'], $user_groups_default[$ug_id]) : '', 'USER_GROUPS_CUSTOM' => $user_mode == 'user' && isset($user_groups_custom[$ug_id]) && sizeof($user_groups_custom[$ug_id]) ? implode($user->lang['COMMA_SEPARATOR'], $user_groups_custom[$ug_id]) : '', 'L_ACL_TYPE' => $l_acl_type, 'S_LOCAL' => $local ? true : false, 'S_GLOBAL' => !$local ? true : false, 'S_NUM_CATS' => sizeof($categories), 'S_VIEW' => $mode == 'view' ? true : false, 'S_NUM_OBJECTS' => sizeof($content_array), 'S_USER_MODE' => $user_mode == 'user' ? true : false, 'S_GROUP_MODE' => $user_mode == 'group' ? true : false));
                @reset($content_array);
                while (list($forum_id, $forum_array) = each($content_array)) {
                    // Build role dropdown options
                    $current_role_id = isset($cur_roles[$ug_id][$forum_id]) ? $cur_roles[$ug_id][$forum_id] : 0;
                    // Output current role id to template
                    $template->assign_var('S_ROLE_ID', $current_role_id);
                    @reset($roles);
                    while (list($role_id, $role_row) = each($roles)) {
                        $role_description = !empty($user->lang[$role_row['role_description']]) ? $user->lang[$role_row['role_description']] : nl2br($role_row['role_description']);
                        $role_name = !empty($user->lang[$role_row['role_name']]) ? $user->lang[$role_row['role_name']] : $role_row['role_name'];
                        $template->assign_block_vars('role_options', array('ID' => $role_id, 'ROLE_NAME' => $role_name, 'TITLE' => $role_description, 'SELECTED' => $role_id == $current_role_id));
                    }
                    if (!$current_role_id && $mode != 'view') {
                        $s_custom_permissions = false;
                        foreach ($forum_array as $key => $value) {
                            if ($value['S_NEVER'] || $value['S_YES']) {
                                $s_custom_permissions = true;
                                break;
                            }
                        }
                    } else {
                        $s_custom_permissions = false;
                    }
                    $template->assign_block_vars($tpl_pmask . '.' . $tpl_fmask, array('NAME' => $forum_id == 0 ? $forum_names_ary[0] : $forum_names_ary[$forum_id]['forum_name'], 'PADDING' => $forum_id == 0 ? '' : $forum_names_ary[$forum_id]['padding'], 'S_CUSTOM' => $s_custom_permissions, 'UG_ID' => $ug_id, 'FORUM_ID' => $forum_id));
                    $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $mode == 'view', $show_trace);
                }
                unset($hold_ary[$ug_id], $ug_names_ary[$ug_id]);
            }
        }
    }
Пример #9
0
$phpEx = 'php';
include $phpbb_root_path . 'common.' . $phpEx;
include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
include $phpbb_root_path . 'includes/functions_user.' . $phpEx;
include $phpbb_root_path . 'config.' . $phpEx;
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$user->get_profile_fields($user->data['user_id']);
//------------- Global Information of User -------------//
// Get Users Name
$userName = $user->data['username'];
$userNameClean = $user->data['username_clean'];
$userID = $user->data['user_id'];
// Get Users Groups
$userGroups = group_memberships(false, $user->data['user_id']);
$userGroupCou = count($userGroups);
$userGroupIDs = array();
for ($x = 0; $x < $userGroupCou; $x++) {
    array_push($userGroupIDs, $userGroups[$x]['group_id']);
}
// Get Users Class
$userMainClass = $user->profile_fields['pf_main_class'];
$userAlt1Class = $user->profile_fields['pf_alt_one_class'];
$userAlt2Class = $user->profile_fields['pf_alt_two_class'];
$userAlt3Class = $user->profile_fields['pf_alt_three_class'];
// Get Users Colour
$userColour = $user->data['colour'];
// Get Users Timezone
$userTimeZone = $_SESSION['userTimeZone'];
// Set Users Character Array
Пример #10
0
 /**
  * Is user in a specified watch group
  *
  * @param int $user_id User identifier
  * @return bool True if in group, false otherwise
  * @access protected
  */
 protected function in_watch_group($user_id)
 {
     $group_id_ary = !$this->config['sec_usergroups'] ? array() : json_decode(trim($this->config['sec_usergroups']), true);
     if (empty($group_id_ary)) {
         return false;
     }
     if (!function_exists('group_memberships')) {
         include $this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext;
     }
     return group_memberships($group_id_ary, $user_id, true);
 }
Пример #11
0
    function main($id, $mode)
    {
        global $db, $user, $auth, $template, $config, $phpbb_root_path, $phpEx;
        $Navigation = new \bbdkp\views\viewNavigation('ucp');
        $user->add_lang(array('mods/raidplanner', 'mods/dkp_common'));
        if (!function_exists('group_memberships')) {
            include_once $phpbb_root_path . 'includes/functions_user.' . $phpEx;
        }
        $this->eventlist = new \bbdkp\controller\raidplanner\rpevents($Navigation->getDkpsysId());
        // get the groups of which this user is part of.
        $groups = group_memberships(false, $user->data['user_id']);
        $group_options = "";
        // build the sql to get access
        foreach ($groups as $grouprec) {
            if ($group_options != "") {
                $group_options .= " OR ";
            }
            $group_options .= "group_id = " . $grouprec['group_id'] . " OR group_id_list LIKE '%," . $grouprec['group_id'] . ",%'";
        }
        // build template
        $daycount = request_var('daycount', 7);
        $disp_date_format = $config['rp_date_format'];
        $disp_date_time_format = $config['rp_date_time_format'];
        // show all in coming year
        $start_temp_date = time() - 86400;
        $sort_timestamp_cutoff = $start_temp_date + 86400 * 365;
        // get
        $sql_array = array('SELECT' => ' r.raidplan_id  ', 'FROM' => array(RP_RAIDS_TABLE => 'r'), 'WHERE' => '
		    	 (r.raidplan_access_level = 2)
		    	OR  (r.poster_id = ' . $db->sql_escape($user->data['user_id']) . ' )
		    	OR  (r.raidplan_access_level = 1 AND (' . $group_options . ') )
		        AND r.raidplan_start_time >= ' . (int) $start_temp_date . '
		        AND r.raidplan_start_time <= ' . (int) $sort_timestamp_cutoff, 'ORDER_BY' => 'r.raidplan_start_time ASC ');
        $sql = $db->sql_build_query('SELECT', $sql_array);
        $result = $db->sql_query_limit($sql, $config['rp_display_next_raidplans'], 0);
        while ($row = $db->sql_fetchrow($result)) {
            unset($raidplan);
            $raidplan = new Raidplan($Navigation->getGameId(), $Navigation->getGuildId(), $this->eventlist->events, $row['raidplan_id']);
            if (!isset($this->eventlist->events[$raidplan->getEventType()])) {
                //this event is closed, so fetch the whole eventlist including closed ones.
                $this->eventlist = new \bbdkp\controller\raidplanner\rpevents(0);
            }
            if (strlen($this->eventlist->events[$raidplan->getEventType()]['imagename']) > 1) {
                $eventimg = $phpbb_root_path . "images/bbdkp/event_images/" . $this->eventlist->events[$raidplan->getEventType()]['imagename'] . ".png";
            } else {
                $eventimg = $phpbb_root_path . "images/bbdkp/event_images/dummy.png";
            }
            $subj = $raidplan->getSubject();
            if ($config['rp_display_truncated_name'] > 0) {
                if (utf8_strlen($raidplan->getSubject()) > $config['rp_display_truncated_name']) {
                    $subj = truncate_string(utf8_strlen($raidplan->getSubject()), $config['rp_display_truncated_name']) . '…';
                }
            }
            $delete_url = "";
            $edit_url = "";
            if ($user->data['is_registered']) {
                // can user edit ?
                if ($auth->acl_get('u_raidplanner_edit_raidplans') && ($user->data['user_id'] == $raidplan->getPoster() || $auth->acl_get('m_raidplanner_edit_other_users_raidplans'))) {
                    $edit_url = append_sid("{$phpbb_root_path}dkp.{$phpEx}", "page=planner&amp;view=raidplan&amp;action=showadd&amp;raidplanid=" . $raidplan->id);
                }
                //can user delete ?
                if ($auth->acl_get('u_raidplanner_delete_raidplans') && ($user->data['user_id'] == $raidplan->getPoster() || $auth->acl_get('m_raidplanner_delete_other_users_raidplans'))) {
                    $delete_url = append_sid("{$phpbb_root_path}dkp.{$phpEx}", "page=planner&amp;view=raidplan&amp;action=delete&amp;raidplanid=" . $raidplan->id);
                }
            }
            $template->assign_block_vars('raids', array('RAID_ID' => $raidplan->id, 'IMAGE' => $eventimg, 'EVENTNAME' => $this->eventlist->events[$raidplan->getEventType()]['event_name'], 'EVENT_URL' => append_sid("{$phpbb_root_path}dkp.{$phpEx}", "page=planner&amp;view=raidplan&amp;raidplanid=" . $raidplan->id), 'EVENT_ID' => $raidplan->id, 'COLOR' => $this->eventlist->events[$raidplan->getEventType()]['color'], 'SUBJECT' => $subj, 'U_DELETE' => $delete_url, 'U_EDIT' => $edit_url, 'POSTER' => $raidplan->getPosterUrl(), 'START_TIME' => $user->format_date($raidplan->getStartTime(), $disp_date_time_format, true), 'START_TIME' => $user->format_date($raidplan->getStartTime(), $config['rp_date_format'], true), 'END_TIME' => $user->format_date($raidplan->getEndTime(), $config['rp_time_format'], true), 'DISPLAY_BOLD' => $user->data['user_id'] == $raidplan->getPoster() ? true : false));
            // get signups
            foreach ($raidplan->getRaidroles() as $key => $role) {
                foreach ($role['role_signups'] as $signup) {
                    if (is_object($signup) && $signup instanceof RaidplanSignup) {
                        switch ($signup->getSignupVal()) {
                            case 0:
                                $signupcolor = '#00FF00';
                                $signuptext = $user->lang['YES'];
                                break;
                            case 1:
                                $signupcolor = '#FF0000';
                                $signuptext = $user->lang['NO'];
                                break;
                            case 2:
                                $signupcolor = '#FFCC33';
                                $signuptext = $user->lang['MAYBE'];
                                break;
                        }
                        $template->assign_block_vars('raids.signups', array('COLOR' => $signupcolor, 'CHARNAME' => $signup->getDkpmembername(), 'COLORCODE' => $signup->getColorcode() == '' ? '#123456' : $signup->getColorcode(), 'CLASS_IMAGE' => strlen($signup->getImagename()) > 1 ? $phpbb_root_path . "images/bbdkp/class_images/" . $signup->getImagename() . ".png" : '', 'S_CLASS_IMAGE_EXISTS' => strlen($signup->getImagename()) > 1 ? true : false, 'VALUE_TXT' => " : " . $signuptext));
                    }
                }
            }
        }
        $db->sql_freeresult($result);
        switch ($mode) {
            case 'raidplanner_registration':
                $this->tpl_name = 'planner/ucp_planner';
                $template->assign_vars(array('U_COUNT_ACTION' => $this->u_action, 'DAYCOUNT' => $daycount));
                break;
        }
    }
Пример #12
0
 /**
  * Return boolean if user is above remote or uploaded quota depending on image
  * 
  * @return boolean
  *
  */
 function above_image_quotas()
 {
     global $phpbb_root_path, $phpEx, $user;
     include_once $phpbb_root_path . 'includes/functions_user.' . $phpEx;
     //Get All Users Images So We Can Workout Current Quota Usage
     $user_upload_image_data = $this->get_user_upload_images($user->data['user_id']);
     $user_remote_image_data = $this->get_user_remote_images($user->data['user_id']);
     //Get Users Group Memberships Now As We Should Do This Only Once
     $group_memberships = group_memberships(false, array($user->data['user_id']), false);
     //You Have Reached Your Image Quota
     if ($this->image_is_remote() and sizeof($user_remote_image_data) >= $this->get_user_remote_image_quota($group_memberships) or $this->image_is_local() and sizeof($user_upload_image_data) >= $this->get_user_upload_image_quota($group_memberships)) {
         return true;
     }
 }
Пример #13
0
$sql = "SELECT * FROM " . K_MENUS_TABLE . "\n\tWHERE menu_type = " . HEAD_MENUS . "\n\tORDER BY ndx ASC";
if (!($result = $db->sql_query($sql, $block_cache_time))) {
    if (!($result = $db->sql_query($sql))) {
        trigger_error($user->lang['ERROR_PORTAL_MENUS']);
    }
}
$portal_menus = array();
while ($row = $db->sql_fetchrow($result)) {
    $portal_menus[] = $row;
}
$db->sql_freeresult($result);
if (!function_exists('group_memberships')) {
    include $phpbb_root_path . 'includes/functions_user.' . $phpEx;
}
$memberships = array();
$memberships = group_memberships(false, $user->data['user_id'], false);
$menu_count = count($portal_menus);
for ($i = 0; $i < $menu_count; $i++) {
    $u_id = '';
    // initiate our var user u_id, if we need to pass user id
    $isamp = '';
    // initiate our var isamp, if we need to use it
    $menu_view_groups = $portal_menus[$i]['view_groups'];
    $menu_item_view_all = $portal_menus[$i]['view_all'];
    $process_menu_item = false;
    // skip process if everyone can view this menus //
    if ($menu_item_view_all == 0) {
        $grps = explode(",", $menu_view_groups);
        if ($memberships) {
            foreach ($memberships as $member) {
                for ($j = 0; $j < count($grps); $j++) {
Пример #14
0
 function get_group_memberships($user)
 {
     $groups = array();
     $group_set = group_memberships(false, (int) $user);
     foreach ($group_set as $group) {
         $groups[(int) $group['group_id']] = array('id' => (int) $group['group_id'], 'leader' => (bool) $group['group_leader'], 'pending' => (bool) $group['user_pending']);
     }
     return $groups;
 }
Пример #15
0
 private function syncgroups()
 {
     // Si l'utilisateur est login alors voir les groups qu'il a et les ajouter s'il n'existe pas.
     // En profiter pour maj l'user
     //todo: code la maj du realname
     // maj des groups
     if (!function_exists('get_group_id')) {
         include $this->phpbb_root_path . 'includes/functions_convert.' . $this->php_ext;
     }
     if (!function_exists('group_memberships')) {
         include $this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext;
     }
     if (!function_exists('get_group_name')) {
         include $this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext;
     }
     $passage_groups = explode(' ', get_apache_header($this->config['passage_groups']));
     $phpbb_groups = group_memberships(false, $this->user->data['user_id'], false);
     // Append
     if (!empty($phpbb_groups) and !empty($passage_groups)) {
         foreach ($passage_groups as $p_grg) {
             if (is_array($phpbb_groups)) {
                 if (false == in_array($p_grg, $phpbb_groups)) {
                     group_user_add(get_group_id($p_grg), $this->user->data['user_id']);
                 }
             }
         }
         // Clean
         if (is_array($phpbb_groups)) {
             foreach ($phpbb_groups as $bb_grp) {
                 if (false == in_array(get_group_name($bb_grp['group_id']), $passage_groups)) {
                     group_user_del($bb_grp['group_id'], $this->user->data['user_id']);
                 }
             }
         }
     }
 }
Пример #16
0
 public function generate_menus()
 {
     static $process = 0;
     $menu_image_path = $this->phpbb_root_path . 'ext/phpbbireland/portal/images/block_images/menu/';
     // process all menus at once //
     if ($process) {
         return;
     }
     $this->user->add_lang_ext('phpbbireland/portal', 'kiss_block_variables');
     $p_count = count($k_menus);
     $hash = $request->variable('hash', '');
     if (!function_exists('group_memberships')) {
         include $this->phpbb_root_path . 'includes/functions_user.' . $this->phpEx;
     }
     $memberships = array();
     $memberships = group_memberships(false, $this->user->data['user_id'], false);
     for ($i = 1; $i < $p_count + 1; $i++) {
         if (isset($this->k_menus[$i]['menu_type'])) {
             $u_id = '';
             $isamp = '';
             $menu_view_groups = $this->k_menus[$i]['view_groups'];
             $menu_item_view_all = $this->k_menus[$i]['view_all'];
             // skip process if everyone can view this menus //
             if ($menu_item_view_all == 1) {
                 $process_menu_item = true;
             } else {
                 $process_menu_item = false;
             }
             if (!$process_menu_item) {
                 $grps = explode(",", $menu_view_groups);
                 if ($memberships) {
                     foreach ($memberships as $member) {
                         for ($j = 0; $j < count($grps); $j++) {
                             if ($grps[$j] == $member['group_id']) {
                                 $process_menu_item = true;
                             }
                         }
                     }
                 }
             }
             if ($k_menus[$i]['append_uid'] == 1) {
                 $isamp = '&amp';
                 $u_id = $user->data['user_id'];
             } else {
                 $u_id = '';
                 $isamp = '';
             }
             if ($process_menu_item) {
                 $name = strtoupper($this->k_menus[$i]['name']);
                 $tmp_name = str_replace(' ', '_', $name);
                 $name = !empty($user->lang[$tmp_name]) ? $this->user->lang[$tmp_name] : $this->k_menus[$i]['name'];
                 if (strstr($this->k_menus[$i]['link_to'], 'http')) {
                     $link = $this->k_menus[$i]['link_to'] ? $this->k_menus[$i]['link_to'] : '';
                 } else {
                     if ($this->k_menus[$i]['append_sid']) {
                         if (strpos($this->k_menus[$i]['link_to'], 'hash')) {
                             $link = $this->user->data['is_registered'] || $this->config['load_anon_lastread'] ? append_sid("{$this->phpbb_root_path}index.{$this->phpEx}", 'hash=' . generate_link_hash('global') . '&amp;mark=forums') : '';
                         } else {
                             $link = $this->auth->acl_get('a_') && !empty($this->user->data['is_registered']) ? append_sid("{$this->phpbb_root_path}{$this->k_menus[$i]['link_to']}", false, true, $this->user->session_id) : '';
                         }
                     } else {
                         $link = $this->k_menus[$i]['link_to'] ? append_sid("{$this->phpbb_root_path}" . $this->k_menus[$i]['link_to'] . $u_id) : '';
                     }
                 }
                 $is_sub_heading = $this->k_menus[$i]['sub_heading'] ? true : false;
                 // we use js to manage open ibn tab //
                 switch ($k_menus[$i]['extern']) {
                     case 1:
                         $link_option = 'rel="external"';
                         break;
                     case 2:
                         $link_option = ' onclick="window.open(this.href); return false;"';
                         break;
                     default:
                         $link_option = '';
                         break;
                 }
                 // can be reduce later...
                 if ($this->k_menus[$i]['menu_type'] == NAV_MENUS) {
                     $template->assign_block_vars('portal_nav_menus_row', array('PORTAL_LINK_OPTION' => $link_option, 'PORTAL_MENU_HEAD_NAME' => $is_sub_heading ? $name : '', 'PORTAL_MENU_NAME' => $name, 'PORTAL_MENU_ICON' => $this->k_menus[$i]['menu_icon'] ? '<img src="' . $menu_image_path . $this->k_menus[$i]['menu_icon'] . '" height="16" width="16" alt="" />' : '<img src="' . $menu_image_path . 'spacer.gif" height="15px" width="15px" alt="" />', 'U_PORTAL_MENU_LINK' => $this->k_menus[$i]['sub_heading'] ? '' : $link, 'S_SOFT_HR' => $this->k_menus[$i]['soft_hr'], 'S_SUB_HEADING' => $this->k_menus[$i]['sub_heading'] ? true : false));
                 } else {
                     if ($this->k_menus[$i]['menu_type'] == SUB_MENUS) {
                         $template->assign_block_vars('portal_sub_menus_row', array('PORTAL_LINK_OPTION' => $link_option, 'PORTAL_MENU_HEAD_NAME' => $is_sub_heading ? $name : '', 'PORTAL_MENU_NAME' => $name, 'PORTAL_MENU_ICON' => $this->k_menus[$i]['menu_icon'] ? '<img src="' . $menu_image_path . $this->k_menus[$i]['menu_icon'] . '" height="16" width="16" alt="" />' : '<img src="' . $menu_image_path . 'spacer.gif" height="15px" width="15px" alt="" />', 'U_PORTAL_MENU_LINK' => $this->k_menus[$i]['sub_heading'] ? '' : $link, 'S_SOFT_HR' => $this->k_menus[$i]['soft_hr'], 'S_SUB_HEADING' => $this->k_menus[$i]['sub_heading'] ? true : false));
                     } else {
                         if ($this->k_menus[$i]['menu_type'] == LINKS_MENUS) {
                             $template->assign_block_vars('portal_link_menus_row', array('LINK_OPTION' => $link_option, 'PORTAL_LINK_MENU_HEAD_NAME' => $is_sub_heading ? $name : '', 'PORTAL_LINK_MENU_NAME' => $is_sub_heading ? '' : $name, 'U_PORTAL_LINK_MENU_LINK' => $is_sub_heading ? '' : $link, 'PORTAL_LINK_MENU_ICON' => $this->k_menus[$i]['menu_icon'] == 'NONE' ? '' : '<img src="' . $menu_image_path . $this->k_menus[$i]['menu_icon'] . '" alt="" />', 'S_SOFT_HR' => $this->k_menus[$i]['soft_hr'], 'S_SUB_HEADING' => $this->k_menus[$i]['sub_heading'] ? true : false));
                         }
                     }
                 }
             }
         }
     }
     $process = 1;
     $template->assign_vars(array('S_USER_LOGGED_IN' => $this->user->data['user_id'] != ANONYMOUS ? true : false, 'U_INDEX' => append_sid("{$phpbb_root_path}index.{$this->phpEx}"), 'U_PORTAL' => append_sid("{$phpbb_root_path}portal")));
 }
Пример #17
0
    function main($id, $mode)
    {
        global $config, $phpbb_root_path, $phpEx, $phpbb_admin_path;
        global $db, $user, $auth, $cache, $template;
        global $request, $phpbb_container, $phpbb_log;
        $user->add_lang('groups');
        $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
        $mark_ary = $request->variable('mark', array(0));
        $submit = $request->variable('submit', false, false, \phpbb\request\request_interface::POST);
        $delete = $request->variable('delete', false, false, \phpbb\request\request_interface::POST);
        $error = $data = array();
        /** @var \phpbb\group\helper $group_helper */
        $group_helper = $phpbb_container->get('group_helper');
        switch ($mode) {
            case 'membership':
                $this->page_title = 'UCP_USERGROUPS_MEMBER';
                if ($submit || isset($_POST['change_default'])) {
                    $action = isset($_POST['change_default']) ? 'change_default' : $request->variable('action', '');
                    $group_id = $action == 'change_default' ? $request->variable('default', 0) : $request->variable('selected', 0);
                    if (!$group_id) {
                        trigger_error('NO_GROUP_SELECTED');
                    }
                    $sql = 'SELECT group_id, group_name, group_type
						FROM ' . GROUPS_TABLE . "\n\t\t\t\t\t\tWHERE group_id IN ({$group_id}, {$user->data['group_id']})";
                    $result = $db->sql_query($sql);
                    $group_row = array();
                    while ($row = $db->sql_fetchrow($result)) {
                        $row['group_name'] = $group_helper->get_name($row['group_name']);
                        $group_row[$row['group_id']] = $row;
                    }
                    $db->sql_freeresult($result);
                    if (!sizeof($group_row)) {
                        trigger_error('GROUP_NOT_EXIST');
                    }
                    switch ($action) {
                        case 'change_default':
                            // User already having this group set as default?
                            if ($group_id == $user->data['group_id']) {
                                trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
                            }
                            if (!$auth->acl_get('u_chggrp')) {
                                trigger_error($user->lang['NOT_AUTHORISED'] . $return_page);
                            }
                            // User needs to be member of the group in order to make it default
                            if (!group_memberships($group_id, $user->data['user_id'], true)) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_attributes('default', $group_id, $user->data['user_id']);
                                $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_CHANGE', false, array('reportee_id' => $user->data['user_id'], sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$user->data['group_id']]['group_name'], $group_row[$group_id]['group_name'])));
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
                            } else {
                                $s_hidden_fields = array('default' => $group_id, 'change_default' => true);
                                confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'resign':
                            // User tries to resign from default group but is not allowed to change it?
                            if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp')) {
                                trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
                            }
                            if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            list(, $row) = each($row);
                            $sql = 'SELECT group_type
								FROM ' . GROUPS_TABLE . '
								WHERE group_id = ' . $group_id;
                            $result = $db->sql_query($sql);
                            $group_type = (int) $db->sql_fetchfield('group_type');
                            $db->sql_freeresult($result);
                            if ($group_type != GROUP_OPEN && $group_type != GROUP_FREE) {
                                trigger_error($user->lang['CANNOT_RESIGN_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_del($group_id, $user->data['user_id']);
                                $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_RESIGN', false, array('reportee_id' => $user->data['user_id'], $group_row[$group_id]['group_name']));
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang[$row['user_pending'] ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'resign', 'submit' => true);
                                confirm_box(false, $row['user_pending'] ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'join':
                            $sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
								FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
								WHERE ug.user_id = u.user_id
									AND ug.group_id = ' . $group_id . '
									AND ug.user_id = ' . $user->data['user_id'];
                            $result = $db->sql_query($sql);
                            $row = $db->sql_fetchrow($result);
                            $db->sql_freeresult($result);
                            if ($row) {
                                if ($row['user_pending']) {
                                    trigger_error($user->lang['ALREADY_IN_GROUP_PENDING'] . $return_page);
                                }
                                trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
                            }
                            // Check permission to join (open group or request)
                            if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE) {
                                trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                if ($group_row[$group_id]['group_type'] == GROUP_FREE) {
                                    group_user_add($group_id, $user->data['user_id']);
                                } else {
                                    group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
                                }
                                $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_JOIN' . ($group_row[$group_id]['group_type'] == GROUP_FREE ? '' : '_PENDING'), false, array('reportee_id' => $user->data['user_id'], $group_row[$group_id]['group_name']));
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang[$group_row[$group_id]['group_type'] == GROUP_FREE ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'join', 'submit' => true);
                                confirm_box(false, $group_row[$group_id]['group_type'] == GROUP_FREE ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'demote':
                            if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            list(, $row) = each($row);
                            if (!$row['group_leader']) {
                                trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_attributes('demote', $group_id, $user->data['user_id']);
                                $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_DEMOTE', false, array('reportee_id' => $user->data['user_id'], $group_row[$group_id]['group_name']));
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'demote', 'submit' => true);
                                confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                    }
                }
                $sql = 'SELECT g.*, ug.group_leader, ug.user_pending
					FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
					WHERE ug.user_id = ' . $user->data['user_id'] . '
						AND g.group_id = ug.group_id
					ORDER BY g.group_type DESC, g.group_name';
                $result = $db->sql_query($sql);
                $group_id_ary = array();
                $leader_count = $member_count = $pending_count = 0;
                while ($row = $db->sql_fetchrow($result)) {
                    $block = $row['group_leader'] ? 'leader' : ($row['user_pending'] ? 'pending' : 'member');
                    switch ($row['group_type']) {
                        case GROUP_OPEN:
                            $group_status = 'OPEN';
                            break;
                        case GROUP_CLOSED:
                            $group_status = 'CLOSED';
                            break;
                        case GROUP_HIDDEN:
                            $group_status = 'HIDDEN';
                            break;
                        case GROUP_SPECIAL:
                            $group_status = 'SPECIAL';
                            break;
                        case GROUP_FREE:
                            $group_status = 'FREE';
                            break;
                    }
                    $template->assign_block_vars($block, array('GROUP_ID' => $row['group_id'], 'GROUP_NAME' => $group_helper->get_name($row['group_name']), 'GROUP_DESC' => $row['group_type'] != GROUP_SPECIAL ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => $row['group_type'] != GROUP_SPECIAL ? false : true, 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 'GROUP_COLOUR' => $row['group_colour'], 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=group&amp;g=' . $row['group_id']), 'S_GROUP_DEFAULT' => $row['group_id'] == $user->data['group_id'] ? true : false, 'S_ROW_COUNT' => ${$block . '_count'}++));
                    $group_id_ary[] = (int) $row['group_id'];
                }
                $db->sql_freeresult($result);
                // Hide hidden groups unless user is an admin with group privileges
                $sql_and = $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
                $sql = 'SELECT group_id, group_name, group_colour, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type, group_founder_manage
					FROM ' . GROUPS_TABLE . '
					WHERE ' . (sizeof($group_id_ary) ? $db->sql_in_set('group_id', $group_id_ary, true) . ' AND ' : '') . "\n\t\t\t\t\t\tgroup_type {$sql_and}\n\t\t\t\t\tORDER BY group_type DESC, group_name";
                $result = $db->sql_query($sql);
                $nonmember_count = 0;
                while ($row = $db->sql_fetchrow($result)) {
                    switch ($row['group_type']) {
                        case GROUP_OPEN:
                            $group_status = 'OPEN';
                            break;
                        case GROUP_CLOSED:
                            $group_status = 'CLOSED';
                            break;
                        case GROUP_HIDDEN:
                            $group_status = 'HIDDEN';
                            break;
                        case GROUP_SPECIAL:
                            $group_status = 'SPECIAL';
                            break;
                        case GROUP_FREE:
                            $group_status = 'FREE';
                            break;
                    }
                    $template->assign_block_vars('nonmember', array('GROUP_ID' => $row['group_id'], 'GROUP_NAME' => $group_helper->get_name($row['group_name']), 'GROUP_DESC' => $row['group_type'] != GROUP_SPECIAL ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => $row['group_type'] != GROUP_SPECIAL ? false : true, 'GROUP_CLOSED' => $row['group_type'] != GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') ? false : true, 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 'S_CAN_JOIN' => $row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE ? true : false, 'GROUP_COLOUR' => $row['group_colour'], 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=group&amp;g=' . $row['group_id']), 'S_ROW_COUNT' => $nonmember_count++));
                }
                $db->sql_freeresult($result);
                $template->assign_vars(array('S_CHANGE_DEFAULT' => $auth->acl_get('u_chggrp') ? true : false, 'S_LEADER_COUNT' => $leader_count, 'S_MEMBER_COUNT' => $member_count, 'S_PENDING_COUNT' => $pending_count, 'S_NONMEMBER_COUNT' => $nonmember_count, 'S_UCP_ACTION' => $this->u_action));
                break;
            case 'manage':
                $this->page_title = 'UCP_USERGROUPS_MANAGE';
                $action = isset($_POST['addusers']) ? 'addusers' : $request->variable('action', '');
                $group_id = $request->variable('g', 0);
                include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
                add_form_key('ucp_groups');
                if ($group_id) {
                    $sql = 'SELECT g.*, t.teampage_position AS group_teampage
						FROM ' . GROUPS_TABLE . ' g
						LEFT JOIN ' . TEAMPAGE_TABLE . ' t
							ON (t.group_id = g.group_id)
						WHERE g.group_id = ' . $group_id;
                    $result = $db->sql_query($sql);
                    $group_row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$group_row) {
                        trigger_error($user->lang['NO_GROUP'] . $return_page);
                    }
                    // Check if the user is allowed to manage this group if set to founder only.
                    if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage']) {
                        trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . $return_page, E_USER_WARNING);
                    }
                    $group_name = $group_row['group_name'];
                    $group_type = $group_row['group_type'];
                    $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
                    $template->assign_vars(array('GROUP_NAME' => $group_helper->get_name($group_name), 'GROUP_INTERNAL_NAME' => $group_name, 'GROUP_COLOUR' => isset($group_row['group_colour']) ? $group_row['group_colour'] : '', 'GROUP_DESC_DISP' => generate_text_for_display($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_bitfield'], $group_row['group_desc_options']), 'GROUP_TYPE' => $group_row['group_type'], 'AVATAR' => empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar, 'AVATAR_IMAGE' => empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar, 'AVATAR_WIDTH' => isset($group_row['group_avatar_width']) ? $group_row['group_avatar_width'] : '', 'AVATAR_HEIGHT' => isset($group_row['group_avatar_height']) ? $group_row['group_avatar_height'] : ''));
                }
                switch ($action) {
                    case 'edit':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $file_uploads = @ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on' ? true : false;
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $data = $submit_ary = array();
                        $update = isset($_POST['update']) ? true : false;
                        $error = array();
                        // Setup avatar data for later
                        $avatars_enabled = false;
                        $avatar_drivers = null;
                        $avatar_data = null;
                        $avatar_error = array();
                        if ($config['allow_avatar']) {
                            /* @var $phpbb_avatar_manager \phpbb\avatar\manager */
                            $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
                            $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
                            // This is normalised data, without the group_ prefix
                            $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
                        }
                        // Handle deletion of avatars
                        if ($request->is_set_post('avatar_delete')) {
                            if (confirm_box(true)) {
                                $phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_');
                                $cache->destroy('sql', GROUPS_TABLE);
                                $message = $action == 'edit' ? 'GROUP_UPDATED' : 'GROUP_CREATED';
                                trigger_error($user->lang[$message] . $return_page);
                            } else {
                                confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array('avatar_delete' => true, 'i' => $id, 'mode' => $mode, 'g' => $group_id, 'action' => $action)));
                            }
                        }
                        // Did we submit?
                        if ($update) {
                            $group_name = $request->variable('group_name', '', true);
                            $group_desc = $request->variable('group_desc', '', true);
                            $group_type = $request->variable('group_type', GROUP_FREE);
                            $allow_desc_bbcode = $request->variable('desc_parse_bbcode', false);
                            $allow_desc_urls = $request->variable('desc_parse_urls', false);
                            $allow_desc_smilies = $request->variable('desc_parse_smilies', false);
                            $submit_ary = array('colour' => $request->variable('group_colour', ''), 'rank' => $request->variable('group_rank', 0), 'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0, 'message_limit' => $request->variable('group_message_limit', 0), 'max_recipients' => $request->variable('group_max_recipients', 0), 'legend' => $group_row['group_legend'], 'teampage' => $group_row['group_teampage']);
                            if ($config['allow_avatar']) {
                                // Handle avatar
                                $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
                                $config_name = preg_replace('#^avatar\\.driver.#', '', $driver_name);
                                if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete')) {
                                    $driver = $phpbb_avatar_manager->get_driver($driver_name);
                                    $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
                                    if ($result && empty($avatar_error)) {
                                        $result['avatar_type'] = $driver_name;
                                        $submit_ary = array_merge($submit_ary, $result);
                                    }
                                }
                                // Merge any avatars errors into the primary error array
                                $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
                            }
                            if (!check_form_key('ucp_groups')) {
                                $error[] = $user->lang['FORM_INVALID'];
                            }
                            // Validate submitted colour value
                            if ($colour_error = validate_data($submit_ary, array('colour' => array('hex_colour', true)))) {
                                // Replace "error" string with its real, localised form
                                $error = array_merge($error, $colour_error);
                            }
                            if (!sizeof($error)) {
                                // Only set the rank, colour, etc. if it's changed or if we're adding a new
                                // group. This prevents existing group members being updated if no changes
                                // were made.
                                // However there are some attributes that need to be set everytime,
                                // otherwise the group gets removed from the feature.
                                $set_attributes = array('legend', 'teampage');
                                $group_attributes = array();
                                $test_variables = array('rank' => 'int', 'colour' => 'string', 'avatar' => 'string', 'avatar_type' => 'string', 'avatar_width' => 'int', 'avatar_height' => 'int', 'receive_pm' => 'int', 'legend' => 'int', 'teampage' => 'int', 'message_limit' => 'int', 'max_recipients' => 'int');
                                foreach ($test_variables as $test => $type) {
                                    if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes))) {
                                        settype($submit_ary[$test], $type);
                                        $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
                                    }
                                }
                                if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies))) {
                                    $cache->destroy('sql', GROUPS_TABLE);
                                    $cache->destroy('sql', TEAMPAGE_TABLE);
                                    $message = $action == 'edit' ? 'GROUP_UPDATED' : 'GROUP_CREATED';
                                    trigger_error($user->lang[$message] . $return_page);
                                }
                            }
                            if (sizeof($error)) {
                                $error = array_map(array(&$user, 'lang'), $error);
                                $group_rank = $submit_ary['rank'];
                                $group_desc_data = array('text' => $group_desc, 'allow_bbcode' => $allow_desc_bbcode, 'allow_smilies' => $allow_desc_smilies, 'allow_urls' => $allow_desc_urls);
                            }
                        } else {
                            if (!$group_id) {
                                $group_name = $request->variable('group_name', '', true);
                                $group_desc_data = array('text' => '', 'allow_bbcode' => true, 'allow_smilies' => true, 'allow_urls' => true);
                                $group_rank = 0;
                                $group_type = GROUP_OPEN;
                            } else {
                                $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
                                $group_rank = $group_row['group_rank'];
                            }
                        }
                        $sql = 'SELECT *
							FROM ' . RANKS_TABLE . '
							WHERE rank_special = 1
							ORDER BY rank_title';
                        $result = $db->sql_query($sql);
                        $rank_options = '<option value="0"' . (!$group_rank ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
                        while ($row = $db->sql_fetchrow($result)) {
                            $selected = $group_rank && $row['rank_id'] == $group_rank ? ' selected="selected"' : '';
                            $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
                        }
                        $db->sql_freeresult($result);
                        $type_free = $group_type == GROUP_FREE ? ' checked="checked"' : '';
                        $type_open = $group_type == GROUP_OPEN ? ' checked="checked"' : '';
                        $type_closed = $group_type == GROUP_CLOSED ? ' checked="checked"' : '';
                        $type_hidden = $group_type == GROUP_HIDDEN ? ' checked="checked"' : '';
                        // Load up stuff for avatars
                        if ($config['allow_avatar']) {
                            $avatars_enabled = false;
                            $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
                            foreach ($avatar_drivers as $current_driver) {
                                $driver = $phpbb_avatar_manager->get_driver($current_driver);
                                $avatars_enabled = true;
                                $template->set_filenames(array('avatar' => $driver->get_template_name()));
                                if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error)) {
                                    $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
                                    $driver_upper = strtoupper($driver_name);
                                    $template->assign_block_vars('avatar_drivers', array('L_TITLE' => $user->lang($driver_upper . '_TITLE'), 'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'), 'DRIVER' => $driver_name, 'SELECTED' => $current_driver == $selected_driver, 'OUTPUT' => $template->assign_display('avatar')));
                                }
                            }
                        }
                        if (isset($phpbb_avatar_manager) && !$update) {
                            // Merge any avatars errors into the primary error array
                            $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
                        }
                        $template->assign_vars(array('S_EDIT' => true, 'S_INCLUDE_SWATCH' => true, 'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"', 'S_ERROR' => sizeof($error) ? true : false, 'S_SPECIAL_GROUP' => $group_type == GROUP_SPECIAL ? true : false, 'S_AVATARS_ENABLED' => $config['allow_avatar'] && $avatars_enabled, 'S_GROUP_MANAGE' => true, 'ERROR_MSG' => sizeof($error) ? implode('<br />', $error) : '', 'GROUP_RECEIVE_PM' => isset($group_row['group_receive_pm']) && $group_row['group_receive_pm'] ? ' checked="checked"' : '', 'GROUP_MESSAGE_LIMIT' => isset($group_row['group_message_limit']) ? $group_row['group_message_limit'] : 0, 'GROUP_MAX_RECIPIENTS' => isset($group_row['group_max_recipients']) ? $group_row['group_max_recipients'] : 0, 'GROUP_DESC' => $group_desc_data['text'], 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'], 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'], 'S_DESC_SMILIES_CHECKED' => $group_desc_data['allow_smilies'], 'S_RANK_OPTIONS' => $rank_options, 'GROUP_TYPE_FREE' => GROUP_FREE, 'GROUP_TYPE_OPEN' => GROUP_OPEN, 'GROUP_TYPE_CLOSED' => GROUP_CLOSED, 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN, 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL, 'GROUP_FREE' => $type_free, 'GROUP_OPEN' => $type_open, 'GROUP_CLOSED' => $type_closed, 'GROUP_HIDDEN' => $type_hidden, 'S_UCP_ACTION' => $this->u_action . "&amp;action={$action}&amp;g={$group_id}", 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string()));
                        break;
                    case 'list':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $start = $request->variable('start', 0);
                        // Grab the leaders - always, on every page...
                        $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug\n\t\t\t\t\t\t\tWHERE ug.group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND u.user_id = ug.user_id\n\t\t\t\t\t\t\t\tAND ug.group_leader = 1\n\t\t\t\t\t\t\tORDER BY ug.user_pending DESC, u.username_clean";
                        $result = $db->sql_query($sql);
                        while ($row = $db->sql_fetchrow($result)) {
                            $template->assign_block_vars('leader', array('USERNAME' => $row['username'], 'USERNAME_COLOUR' => $row['user_colour'], 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']), 'S_GROUP_DEFAULT' => $row['group_id'] == $group_id ? true : false, 'JOINED' => $row['user_regdate'] ? $user->format_date($row['user_regdate']) : ' - ', 'USER_POSTS' => $row['user_posts'], 'USER_ID' => $row['user_id']));
                        }
                        $db->sql_freeresult($result);
                        // Total number of group members (non-leaders)
                        $sql = 'SELECT COUNT(user_id) AS total_members
							FROM ' . USER_GROUP_TABLE . "\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND group_leader = 0";
                        $result = $db->sql_query($sql);
                        $total_members = (int) $db->sql_fetchfield('total_members');
                        $db->sql_freeresult($result);
                        // Grab the members
                        $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug\n\t\t\t\t\t\t\tWHERE ug.group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND u.user_id = ug.user_id\n\t\t\t\t\t\t\t\tAND ug.group_leader = 0\n\t\t\t\t\t\t\tORDER BY ug.user_pending DESC, u.username_clean";
                        $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
                        $pending = false;
                        $approved = false;
                        while ($row = $db->sql_fetchrow($result)) {
                            if ($row['user_pending'] && !$pending) {
                                $template->assign_block_vars('member', array('S_PENDING' => true));
                                $template->assign_var('S_PENDING_SET', true);
                                $pending = true;
                            } else {
                                if (!$row['user_pending'] && !$approved) {
                                    $template->assign_block_vars('member', array('S_APPROVED' => true));
                                    $template->assign_var('S_APPROVED_SET', true);
                                    $approved = true;
                                }
                            }
                            $template->assign_block_vars('member', array('USERNAME' => $row['username'], 'USERNAME_COLOUR' => $row['user_colour'], 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']), 'S_GROUP_DEFAULT' => $row['group_id'] == $group_id ? true : false, 'JOINED' => $row['user_regdate'] ? $user->format_date($row['user_regdate']) : ' - ', 'USER_POSTS' => $row['user_posts'], 'USER_ID' => $row['user_id']));
                        }
                        $db->sql_freeresult($result);
                        $s_action_options = '';
                        $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
                        foreach ($options as $option => $lang) {
                            $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
                        }
                        /* @var $pagination \phpbb\pagination */
                        $pagination = $phpbb_container->get('pagination');
                        $base_url = $this->u_action . "&amp;action={$action}&amp;g={$group_id}";
                        $start = $pagination->validate_start($start, $config['topics_per_page'], $total_members);
                        $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
                        $template->assign_vars(array('S_LIST' => true, 'S_ACTION_OPTIONS' => $s_action_options, 'U_ACTION' => $this->u_action . "&amp;g={$group_id}", 'S_UCP_ACTION' => $this->u_action . "&amp;g={$group_id}", 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=searchuser&amp;form=ucp&amp;field=usernames')));
                        break;
                    case 'approve':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $user->add_lang('acp/groups');
                        // Approve, demote or promote
                        group_user_attributes('approve', $group_id, $mark_ary, false, false);
                        trigger_error($user->lang['USERS_APPROVED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        break;
                    case 'default':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
                        if (confirm_box(true)) {
                            if (!sizeof($mark_ary)) {
                                $start = 0;
                                do {
                                    $sql = 'SELECT user_id
										FROM ' . USER_GROUP_TABLE . "\n\t\t\t\t\t\t\t\t\t\tWHERE group_id = {$group_id}\n\t\t\t\t\t\t\t\t\t\tORDER BY user_id";
                                    $result = $db->sql_query_limit($sql, 200, $start);
                                    $mark_ary = array();
                                    if ($row = $db->sql_fetchrow($result)) {
                                        do {
                                            $mark_ary[] = $row['user_id'];
                                        } while ($row = $db->sql_fetchrow($result));
                                        group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
                                        $start = sizeof($mark_ary) < 200 ? 0 : $start + 200;
                                    } else {
                                        $start = 0;
                                    }
                                    $db->sql_freeresult($result);
                                } while ($start);
                            } else {
                                group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
                            }
                            $user->add_lang('acp/groups');
                            trigger_error($user->lang['GROUP_DEFS_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            $user->add_lang('acp/common');
                            confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array('mark' => $mark_ary, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action)));
                        }
                        // redirect to last screen
                        redirect($this->u_action . '&amp;action=list&amp;g=' . $group_id);
                        break;
                    case 'deleteusers':
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
                        if (confirm_box(true)) {
                            if (!$group_id) {
                                trigger_error($user->lang['NO_GROUP'] . $return_page);
                            }
                            $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
                            if ($error) {
                                trigger_error($user->lang[$error] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                            }
                            trigger_error($user->lang['GROUP_USERS_REMOVE'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array('mark' => $mark_ary, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action)));
                        }
                        // redirect to last screen
                        redirect($this->u_action . '&amp;action=list&amp;g=' . $group_id);
                        break;
                    case 'addusers':
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $names = $request->variable('usernames', '', true);
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!$names) {
                            trigger_error($user->lang['NO_USERS'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $name_ary = array_unique(explode("\n", $names));
                        $group_name = $group_helper->get_name($group_row['group_name']);
                        $default = $request->variable('default', 0);
                        if (confirm_box(true)) {
                            // Add user/s to group
                            if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row)) {
                                trigger_error($user->lang[$error] . $return_page);
                            }
                            trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            $s_hidden_fields = array('default' => $default, 'usernames' => $names, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action);
                            confirm_box(false, $user->lang('GROUP_CONFIRM_ADD_USERS', sizeof($name_ary), implode($user->lang['COMMA_SEPARATOR'], $name_ary)), build_hidden_fields($s_hidden_fields));
                        }
                        trigger_error($user->lang['NO_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        break;
                    default:
                        $user->add_lang('acp/common');
                        $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
							FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
							WHERE ug.user_id = ' . $user->data['user_id'] . '
								AND g.group_id = ug.group_id
								AND ug.group_leader = 1
							ORDER BY g.group_type DESC, g.group_name';
                        $result = $db->sql_query($sql);
                        while ($value = $db->sql_fetchrow($result)) {
                            $template->assign_block_vars('leader', array('GROUP_NAME' => $group_helper->get_name($value['group_name']), 'GROUP_DESC' => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']), 'GROUP_TYPE' => $value['group_type'], 'GROUP_ID' => $value['group_id'], 'GROUP_COLOUR' => $value['group_colour'], 'U_LIST' => $this->u_action . "&amp;action=list&amp;g={$value['group_id']}", 'U_EDIT' => $this->u_action . "&amp;action=edit&amp;g={$value['group_id']}"));
                        }
                        $db->sql_freeresult($result);
                        break;
                }
                break;
        }
        $this->tpl_name = 'ucp_groups_' . $mode;
    }
Пример #18
0
    function main($id, $mode)
    {
        global $config, $phpbb_root_path, $phpEx;
        global $db, $user, $auth, $cache, $template;
        $user->add_lang('groups');
        $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
        $mark_ary = request_var('mark', array(0));
        $submit = !empty($_POST['submit']) ? true : false;
        $delete = !empty($_POST['delete']) ? true : false;
        $error = $data = array();
        switch ($mode) {
            case 'membership':
                $this->page_title = 'UCP_USERGROUPS_MEMBER';
                if ($submit || isset($_POST['change_default'])) {
                    $action = isset($_POST['change_default']) ? 'change_default' : request_var('action', '');
                    $group_id = $action == 'change_default' ? request_var('default', 0) : request_var('selected', 0);
                    if (!$group_id) {
                        trigger_error('NO_GROUP_SELECTED');
                    }
                    $sql = 'SELECT group_id, group_name, group_type
						FROM ' . GROUPS_TABLE . "\n\t\t\t\t\t\tWHERE group_id IN ({$group_id}, {$user->data['group_id']})";
                    $result = $db->sql_query($sql);
                    $group_row = array();
                    while ($row = $db->sql_fetchrow($result)) {
                        $row['group_name'] = $row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
                        $group_row[$row['group_id']] = $row;
                    }
                    $db->sql_freeresult($result);
                    if (!sizeof($group_row)) {
                        trigger_error('GROUP_NOT_EXIST');
                    }
                    switch ($action) {
                        case 'change_default':
                            // User already having this group set as default?
                            if ($group_id == $user->data['group_id']) {
                                trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
                            }
                            if (!$auth->acl_get('u_chggrp')) {
                                trigger_error($user->lang['NOT_AUTHORISED'] . $return_page);
                            }
                            // User needs to be member of the group in order to make it default
                            if (!group_memberships($group_id, $user->data['user_id'], true)) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_attributes('default', $group_id, $user->data['user_id']);
                                add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_CHANGE', sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$user->data['group_id']]['group_name'], $group_row[$group_id]['group_name']));
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
                            } else {
                                $s_hidden_fields = array('default' => $group_id, 'change_default' => true);
                                confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'resign':
                            // User tries to resign from default group but is not allowed to change it?
                            if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp')) {
                                trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
                            }
                            if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            list(, $row) = each($row);
                            $sql = 'SELECT group_type
								FROM ' . GROUPS_TABLE . '
								WHERE group_id = ' . $group_id;
                            $result = $db->sql_query($sql);
                            $group_type = (int) $db->sql_fetchfield('group_type');
                            $db->sql_freeresult($result);
                            if ($group_type != GROUP_OPEN && $group_type != GROUP_FREE) {
                                trigger_error($user->lang['CANNOT_RESIGN_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_del($group_id, $user->data['user_id']);
                                add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_RESIGN', $group_row[$group_id]['group_name']);
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang[$row['user_pending'] ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'resign', 'submit' => true);
                                confirm_box(false, $row['user_pending'] ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'join':
                            $sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
								FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
								WHERE ug.user_id = u.user_id
									AND ug.group_id = ' . $group_id . '
									AND ug.user_id = ' . $user->data['user_id'];
                            $result = $db->sql_query($sql);
                            $row = $db->sql_fetchrow($result);
                            $db->sql_freeresult($result);
                            if ($row) {
                                if ($row['user_pending']) {
                                    trigger_error($user->lang['ALREADY_IN_GROUP_PENDING'] . $return_page);
                                }
                                trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
                            }
                            // Check permission to join (open group or request)
                            if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE) {
                                trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                if ($group_row[$group_id]['group_type'] == GROUP_FREE) {
                                    group_user_add($group_id, $user->data['user_id']);
                                    $email_template = 'group_added';
                                } else {
                                    group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
                                    $email_template = 'group_request';
                                }
                                include_once $phpbb_root_path . 'includes/functions_messenger.' . $phpEx;
                                $messenger = new messenger();
                                $sql = 'SELECT u.username, u.username_clean, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang
									FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
									WHERE ug.user_id = u.user_id
										AND ' . ($group_row[$group_id]['group_type'] == GROUP_FREE ? "ug.user_id = {$user->data['user_id']}" : 'ug.group_leader = 1') . "\n\t\t\t\t\t\t\t\t\t\tAND ug.group_id = {$group_id}";
                                $result = $db->sql_query($sql);
                                while ($row = $db->sql_fetchrow($result)) {
                                    $messenger->template($email_template, $row['user_lang']);
                                    $messenger->to($row['user_email'], $row['username']);
                                    $messenger->im($row['user_jabber'], $row['username']);
                                    $messenger->assign_vars(array('USERNAME' => htmlspecialchars_decode($row['username']), 'GROUP_NAME' => htmlspecialchars_decode($group_row[$group_id]['group_name']), 'REQUEST_USERNAME' => $user->data['username'], 'U_PENDING' => generate_board_url() . "/ucp.{$phpEx}?i=groups&mode=manage&action=list&g={$group_id}", 'U_GROUP' => generate_board_url() . "/memberlist.{$phpEx}?mode=group&g={$group_id}"));
                                    $messenger->send($row['user_notify_type']);
                                }
                                $db->sql_freeresult($result);
                                $messenger->save_queue();
                                add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_JOIN' . ($group_row[$group_id]['group_type'] == GROUP_FREE ? '' : '_PENDING'), $group_row[$group_id]['group_name']);
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang[$group_row[$group_id]['group_type'] == GROUP_FREE ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'join', 'submit' => true);
                                confirm_box(false, $group_row[$group_id]['group_type'] == GROUP_FREE ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                        case 'demote':
                            if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                                trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                            }
                            list(, $row) = each($row);
                            if (!$row['group_leader']) {
                                trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                            }
                            if (confirm_box(true)) {
                                group_user_attributes('demote', $group_id, $user->data['user_id']);
                                add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_DEMOTE', $group_row[$group_id]['group_name']);
                                meta_refresh(3, $this->u_action);
                                trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
                            } else {
                                $s_hidden_fields = array('selected' => $group_id, 'action' => 'demote', 'submit' => true);
                                confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
                            }
                            break;
                    }
                }
                $sql = 'SELECT g.*, ug.group_leader, ug.user_pending
					FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
					WHERE ug.user_id = ' . $user->data['user_id'] . '
						AND g.group_id = ug.group_id
					ORDER BY g.group_type DESC, g.group_name';
                $result = $db->sql_query($sql);
                $group_id_ary = array();
                $leader_count = $member_count = $pending_count = 0;
                while ($row = $db->sql_fetchrow($result)) {
                    $block = $row['group_leader'] ? 'leader' : ($row['user_pending'] ? 'pending' : 'member');
                    switch ($row['group_type']) {
                        case GROUP_OPEN:
                            $group_status = 'OPEN';
                            break;
                        case GROUP_CLOSED:
                            $group_status = 'CLOSED';
                            break;
                        case GROUP_HIDDEN:
                            $group_status = 'HIDDEN';
                            break;
                        case GROUP_SPECIAL:
                            $group_status = 'SPECIAL';
                            break;
                        case GROUP_FREE:
                            $group_status = 'FREE';
                            break;
                    }
                    $template->assign_block_vars($block, array('GROUP_ID' => $row['group_id'], 'GROUP_NAME' => $row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 'GROUP_DESC' => $row['group_type'] != GROUP_SPECIAL ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => $row['group_type'] != GROUP_SPECIAL ? false : true, 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 'GROUP_COLOUR' => $row['group_colour'], 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=group&amp;g=' . $row['group_id']), 'S_GROUP_DEFAULT' => $row['group_id'] == $user->data['group_id'] ? true : false, 'S_ROW_COUNT' => ${$block . '_count'}++));
                    $group_id_ary[] = (int) $row['group_id'];
                }
                $db->sql_freeresult($result);
                // Hide hidden groups unless user is an admin with group privileges
                $sql_and = $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
                $sql = 'SELECT group_id, group_name, group_colour, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type, group_founder_manage
					FROM ' . GROUPS_TABLE . '
					WHERE ' . (sizeof($group_id_ary) ? $db->sql_in_set('group_id', $group_id_ary, true) . ' AND ' : '') . "\n\t\t\t\t\t\tgroup_type {$sql_and}\n\t\t\t\t\tORDER BY group_type DESC, group_name";
                $result = $db->sql_query($sql);
                $nonmember_count = 0;
                while ($row = $db->sql_fetchrow($result)) {
                    switch ($row['group_type']) {
                        case GROUP_OPEN:
                            $group_status = 'OPEN';
                            break;
                        case GROUP_CLOSED:
                            $group_status = 'CLOSED';
                            break;
                        case GROUP_HIDDEN:
                            $group_status = 'HIDDEN';
                            break;
                        case GROUP_SPECIAL:
                            $group_status = 'SPECIAL';
                            break;
                        case GROUP_FREE:
                            $group_status = 'FREE';
                            break;
                    }
                    $template->assign_block_vars('nonmember', array('GROUP_ID' => $row['group_id'], 'GROUP_NAME' => $row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 'GROUP_DESC' => $row['group_type'] != GROUP_SPECIAL ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'], 'GROUP_SPECIAL' => $row['group_type'] != GROUP_SPECIAL ? false : true, 'GROUP_CLOSED' => $row['group_type'] != GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') ? false : true, 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 'S_CAN_JOIN' => $row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE ? true : false, 'GROUP_COLOUR' => $row['group_colour'], 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=group&amp;g=' . $row['group_id']), 'S_ROW_COUNT' => $nonmember_count++));
                }
                $db->sql_freeresult($result);
                $template->assign_vars(array('S_CHANGE_DEFAULT' => $auth->acl_get('u_chggrp') ? true : false, 'S_LEADER_COUNT' => $leader_count, 'S_MEMBER_COUNT' => $member_count, 'S_PENDING_COUNT' => $pending_count, 'S_NONMEMBER_COUNT' => $nonmember_count, 'S_UCP_ACTION' => $this->u_action));
                break;
            case 'manage':
                $this->page_title = 'UCP_USERGROUPS_MANAGE';
                $action = isset($_POST['addusers']) ? 'addusers' : request_var('action', '');
                $group_id = request_var('g', 0);
                include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
                add_form_key('ucp_groups');
                if ($group_id) {
                    $sql = 'SELECT *
						FROM ' . GROUPS_TABLE . "\n\t\t\t\t\t\tWHERE group_id = {$group_id}";
                    $result = $db->sql_query($sql);
                    $group_row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$group_row) {
                        trigger_error($user->lang['NO_GROUP'] . $return_page);
                    }
                    // Check if the user is allowed to manage this group if set to founder only.
                    if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage']) {
                        trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . $return_page, E_USER_WARNING);
                    }
                    $group_name = $group_row['group_name'];
                    $group_type = $group_row['group_type'];
                    $avatar_img = !empty($group_row['group_avatar']) ? get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR') : '<img src="' . $phpbb_root_path . 'adm/images/no_avatar.gif" alt="" />';
                    $template->assign_vars(array('GROUP_NAME' => $group_type == GROUP_SPECIAL ? $user->lang['G_' . $group_name] : $group_name, 'GROUP_INTERNAL_NAME' => $group_name, 'GROUP_COLOUR' => isset($group_row['group_colour']) ? $group_row['group_colour'] : '', 'GROUP_DESC_DISP' => generate_text_for_display($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_bitfield'], $group_row['group_desc_options']), 'GROUP_TYPE' => $group_row['group_type'], 'AVATAR' => $avatar_img, 'AVATAR_IMAGE' => $avatar_img, 'AVATAR_WIDTH' => isset($group_row['group_avatar_width']) ? $group_row['group_avatar_width'] : '', 'AVATAR_HEIGHT' => isset($group_row['group_avatar_height']) ? $group_row['group_avatar_height'] : ''));
                }
                switch ($action) {
                    case 'edit':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $file_uploads = @ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on' ? true : false;
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $data = $submit_ary = array();
                        $update = isset($_POST['update']) ? true : false;
                        $error = array();
                        $avatar_select = basename(request_var('avatar_select', ''));
                        $category = basename(request_var('category', ''));
                        $can_upload = file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads ? true : false;
                        // Did we submit?
                        if ($update) {
                            $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
                            $group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
                            $group_type = request_var('group_type', GROUP_FREE);
                            $allow_desc_bbcode = request_var('desc_parse_bbcode', false);
                            $allow_desc_urls = request_var('desc_parse_urls', false);
                            $allow_desc_smilies = request_var('desc_parse_smilies', false);
                            $submit_ary = array('colour' => request_var('group_colour', ''), 'rank' => request_var('group_rank', 0), 'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0, 'message_limit' => request_var('group_message_limit', 0), 'max_recipients' => request_var('group_max_recipients', 0));
                            $data['uploadurl'] = request_var('uploadurl', '');
                            $data['remotelink'] = request_var('remotelink', '');
                            $data['width'] = request_var('width', '');
                            $data['height'] = request_var('height', '');
                            $delete = request_var('delete', '');
                            if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink']) {
                                // Avatar stuff
                                $var_ary = array('uploadurl' => array('string', true, 5, 255), 'remotelink' => array('string', true, 5, 255), 'width' => array('string', true, 1, 3), 'height' => array('string', true, 1, 3));
                                if (!($error = validate_data($data, $var_ary))) {
                                    $data['user_id'] = "g{$group_id}";
                                    if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload) {
                                        list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
                                    } else {
                                        if ($data['remotelink']) {
                                            list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
                                        }
                                    }
                                }
                            } else {
                                if ($avatar_select && $config['allow_avatar_local']) {
                                    // check avatar gallery
                                    if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category)) {
                                        $submit_ary['avatar_type'] = AVATAR_GALLERY;
                                        list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
                                        $submit_ary['avatar'] = $category . '/' . $avatar_select;
                                    }
                                } else {
                                    if ($delete) {
                                        $submit_ary['avatar'] = '';
                                        $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
                                    } else {
                                        if ($data['width'] && $data['height']) {
                                            // Only update the dimensions?
                                            if ($config['avatar_max_width'] || $config['avatar_max_height']) {
                                                if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) {
                                                    $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
                                                }
                                            }
                                            if (!sizeof($error)) {
                                                if ($config['avatar_min_width'] || $config['avatar_min_height']) {
                                                    if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) {
                                                        $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
                                                    }
                                                }
                                            }
                                            if (!sizeof($error)) {
                                                $submit_ary['avatar_width'] = $data['width'];
                                                $submit_ary['avatar_height'] = $data['height'];
                                            }
                                        }
                                    }
                                }
                            }
                            if (isset($submit_ary['avatar']) && $submit_ary['avatar'] && !isset($group_row['group_avatar']) || $delete) {
                                if (isset($group_row['group_avatar']) && $group_row['group_avatar']) {
                                    avatar_delete('group', $group_row, true);
                                }
                            }
                            if (!check_form_key('ucp_groups')) {
                                $error[] = $user->lang['FORM_INVALID'];
                            }
                            if (!sizeof($error)) {
                                // Only set the rank, colour, etc. if it's changed or if we're adding a new
                                // group. This prevents existing group members being updated if no changes
                                // were made.
                                $group_attributes = array();
                                $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit', 'max_recipients');
                                foreach ($test_variables as $test) {
                                    if ($action == 'add' || isset($submit_ary[$test]) && $group_row['group_' . $test] != $submit_ary[$test]) {
                                        $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
                                    }
                                }
                                if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies))) {
                                    $cache->destroy('sql', GROUPS_TABLE);
                                    $message = $action == 'edit' ? 'GROUP_UPDATED' : 'GROUP_CREATED';
                                    trigger_error($user->lang[$message] . $return_page);
                                }
                            }
                            if (sizeof($error)) {
                                $group_rank = $submit_ary['rank'];
                                $group_desc_data = array('text' => $group_desc, 'allow_bbcode' => $allow_desc_bbcode, 'allow_smilies' => $allow_desc_smilies, 'allow_urls' => $allow_desc_urls);
                            }
                        } else {
                            if (!$group_id) {
                                $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
                                $group_desc_data = array('text' => '', 'allow_bbcode' => true, 'allow_smilies' => true, 'allow_urls' => true);
                                $group_rank = 0;
                                $group_type = GROUP_OPEN;
                            } else {
                                $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
                                $group_rank = $group_row['group_rank'];
                            }
                        }
                        $sql = 'SELECT *
							FROM ' . RANKS_TABLE . '
							WHERE rank_special = 1
							ORDER BY rank_title';
                        $result = $db->sql_query($sql);
                        $rank_options = '<option value="0"' . (!$group_rank ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
                        while ($row = $db->sql_fetchrow($result)) {
                            $selected = $group_rank && $row['rank_id'] == $group_rank ? ' selected="selected"' : '';
                            $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
                        }
                        $db->sql_freeresult($result);
                        $type_free = $group_type == GROUP_FREE ? ' checked="checked"' : '';
                        $type_open = $group_type == GROUP_OPEN ? ' checked="checked"' : '';
                        $type_closed = $group_type == GROUP_CLOSED ? ' checked="checked"' : '';
                        $type_hidden = $group_type == GROUP_HIDDEN ? ' checked="checked"' : '';
                        $display_gallery = isset($_POST['display_gallery']) ? true : false;
                        if ($config['allow_avatar_local'] && $display_gallery) {
                            avatar_gallery($category, $avatar_select, 4);
                        }
                        $avatars_enabled = $can_upload || ($config['allow_avatar_local'] || $config['allow_avatar_remote']) ? true : false;
                        $template->assign_vars(array('S_EDIT' => true, 'S_INCLUDE_SWATCH' => true, 'S_CAN_UPLOAD' => $can_upload, 'S_FORM_ENCTYPE' => $can_upload ? ' enctype="multipart/form-data"' : '', 'S_ERROR' => sizeof($error) ? true : false, 'S_SPECIAL_GROUP' => $group_type == GROUP_SPECIAL ? true : false, 'S_AVATARS_ENABLED' => $avatars_enabled, 'S_DISPLAY_GALLERY' => $config['allow_avatar_local'] && !$display_gallery ? true : false, 'S_IN_GALLERY' => $config['allow_avatar_local'] && $display_gallery ? true : false, 'ERROR_MSG' => sizeof($error) ? implode('<br />', $error) : '', 'GROUP_RECEIVE_PM' => isset($group_row['group_receive_pm']) && $group_row['group_receive_pm'] ? ' checked="checked"' : '', 'GROUP_MESSAGE_LIMIT' => isset($group_row['group_message_limit']) ? $group_row['group_message_limit'] : 0, 'GROUP_MAX_RECIPIENTS' => isset($group_row['group_max_recipients']) ? $group_row['group_max_recipients'] : 0, 'GROUP_DESC' => $group_desc_data['text'], 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'], 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'], 'S_DESC_SMILIES_CHECKED' => $group_desc_data['allow_smilies'], 'S_RANK_OPTIONS' => $rank_options, 'AVATAR_MAX_FILESIZE' => $config['avatar_filesize'], 'GROUP_TYPE_FREE' => GROUP_FREE, 'GROUP_TYPE_OPEN' => GROUP_OPEN, 'GROUP_TYPE_CLOSED' => GROUP_CLOSED, 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN, 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL, 'GROUP_FREE' => $type_free, 'GROUP_OPEN' => $type_open, 'GROUP_CLOSED' => $type_closed, 'GROUP_HIDDEN' => $type_hidden, 'U_SWATCH' => append_sid("{$phpbb_root_path}adm/swatch.{$phpEx}", 'form=ucp&amp;name=group_colour'), 'S_UCP_ACTION' => $this->u_action . "&amp;action={$action}&amp;g={$group_id}", 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024)));
                        break;
                    case 'list':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $start = request_var('start', 0);
                        // Grab the leaders - always, on every page...
                        $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug\n\t\t\t\t\t\t\tWHERE ug.group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND u.user_id = ug.user_id\n\t\t\t\t\t\t\t\tAND ug.group_leader = 1\n\t\t\t\t\t\t\tORDER BY ug.user_pending DESC, u.username_clean";
                        $result = $db->sql_query($sql);
                        while ($row = $db->sql_fetchrow($result)) {
                            $template->assign_block_vars('leader', array('USERNAME' => $row['username'], 'USERNAME_COLOUR' => $row['user_colour'], 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']), 'S_GROUP_DEFAULT' => $row['group_id'] == $group_id ? true : false, 'JOINED' => $row['user_regdate'] ? $user->format_date($row['user_regdate']) : ' - ', 'USER_POSTS' => $row['user_posts'], 'USER_ID' => $row['user_id']));
                        }
                        $db->sql_freeresult($result);
                        // Total number of group members (non-leaders)
                        $sql = 'SELECT COUNT(user_id) AS total_members
							FROM ' . USER_GROUP_TABLE . "\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND group_leader = 0";
                        $result = $db->sql_query($sql);
                        $total_members = (int) $db->sql_fetchfield('total_members');
                        $db->sql_freeresult($result);
                        // Grab the members
                        $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug\n\t\t\t\t\t\t\tWHERE ug.group_id = {$group_id}\n\t\t\t\t\t\t\t\tAND u.user_id = ug.user_id\n\t\t\t\t\t\t\t\tAND ug.group_leader = 0\n\t\t\t\t\t\t\tORDER BY ug.user_pending DESC, u.username_clean";
                        $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
                        $pending = false;
                        $approved = false;
                        while ($row = $db->sql_fetchrow($result)) {
                            if ($row['user_pending'] && !$pending) {
                                $template->assign_block_vars('member', array('S_PENDING' => true));
                                $template->assign_var('S_PENDING_SET', true);
                                $pending = true;
                            } else {
                                if (!$row['user_pending'] && !$approved) {
                                    $template->assign_block_vars('member', array('S_APPROVED' => true));
                                    $template->assign_var('S_APPROVED_SET', true);
                                    $approved = true;
                                }
                            }
                            $template->assign_block_vars('member', array('USERNAME' => $row['username'], 'USERNAME_COLOUR' => $row['user_colour'], 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']), 'S_GROUP_DEFAULT' => $row['group_id'] == $group_id ? true : false, 'JOINED' => $row['user_regdate'] ? $user->format_date($row['user_regdate']) : ' - ', 'USER_POSTS' => $row['user_posts'], 'USER_ID' => $row['user_id']));
                        }
                        $db->sql_freeresult($result);
                        $s_action_options = '';
                        $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
                        foreach ($options as $option => $lang) {
                            $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
                        }
                        $template->assign_vars(array('S_LIST' => true, 'S_ACTION_OPTIONS' => $s_action_options, 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start), 'PAGINATION' => generate_pagination($this->u_action . "&amp;action={$action}&amp;g={$group_id}", $total_members, $config['topics_per_page'], $start), 'U_ACTION' => $this->u_action . "&amp;g={$group_id}", 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.{$phpEx}", 'mode=searchuser&amp;form=ucp&amp;field=usernames')));
                        break;
                    case 'approve':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $user->add_lang('acp/groups');
                        // Approve, demote or promote
                        group_user_attributes('approve', $group_id, $mark_ary, false, false);
                        trigger_error($user->lang['USERS_APPROVED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        break;
                    case 'default':
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $group_row['group_name'] = $group_row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
                        if (confirm_box(true)) {
                            if (!sizeof($mark_ary)) {
                                $start = 0;
                                do {
                                    $sql = 'SELECT user_id
										FROM ' . USER_GROUP_TABLE . "\n\t\t\t\t\t\t\t\t\t\tWHERE group_id = {$group_id}\n\t\t\t\t\t\t\t\t\t\tORDER BY user_id";
                                    $result = $db->sql_query_limit($sql, 200, $start);
                                    $mark_ary = array();
                                    if ($row = $db->sql_fetchrow($result)) {
                                        do {
                                            $mark_ary[] = $row['user_id'];
                                        } while ($row = $db->sql_fetchrow($result));
                                        group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
                                        $start = sizeof($mark_ary) < 200 ? 0 : $start + 200;
                                    } else {
                                        $start = 0;
                                    }
                                    $db->sql_freeresult($result);
                                } while ($start);
                            } else {
                                group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
                            }
                            $user->add_lang('acp/groups');
                            trigger_error($user->lang['GROUP_DEFS_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            $user->add_lang('acp/common');
                            confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array('mark' => $mark_ary, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action)));
                        }
                        break;
                    case 'deleteusers':
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $group_row['group_name'] = $group_row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
                        if (confirm_box(true)) {
                            if (!$group_id) {
                                trigger_error($user->lang['NO_GROUP'] . $return_page);
                            }
                            $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
                            if ($error) {
                                trigger_error($user->lang[$error] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                            }
                            trigger_error($user->lang['GROUP_USERS_REMOVE'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array('mark' => $mark_ary, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action)));
                        }
                        break;
                    case 'addusers':
                        $user->add_lang(array('acp/groups', 'acp/common'));
                        $names = utf8_normalize_nfc(request_var('usernames', '', true));
                        if (!$group_id) {
                            trigger_error($user->lang['NO_GROUP'] . $return_page);
                        }
                        if (!$names) {
                            trigger_error($user->lang['NO_USERS'] . $return_page);
                        }
                        if (!($row = group_memberships($group_id, $user->data['user_id']))) {
                            trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
                        }
                        list(, $row) = each($row);
                        if (!$row['group_leader']) {
                            trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
                        }
                        $name_ary = array_unique(explode("\n", $names));
                        $group_name = $group_row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
                        $default = request_var('default', 0);
                        if (confirm_box(true)) {
                            // Add user/s to group
                            if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row)) {
                                trigger_error($user->lang[$error] . $return_page);
                            }
                            trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        } else {
                            $s_hidden_fields = array('default' => $default, 'usernames' => $names, 'g' => $group_id, 'i' => $id, 'mode' => $mode, 'action' => $action);
                            confirm_box(false, sprintf($user->lang['GROUP_CONFIRM_ADD_USER' . (sizeof($name_ary) == 1 ? '' : 'S')], implode(', ', $name_ary)), build_hidden_fields($s_hidden_fields));
                        }
                        trigger_error($user->lang['NO_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
                        break;
                    default:
                        $user->add_lang('acp/common');
                        $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
							FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
							WHERE ug.user_id = ' . $user->data['user_id'] . '
								AND g.group_id = ug.group_id
								AND ug.group_leader = 1
							ORDER BY g.group_type DESC, g.group_name';
                        $result = $db->sql_query($sql);
                        while ($value = $db->sql_fetchrow($result)) {
                            $template->assign_block_vars('leader', array('GROUP_NAME' => $value['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $value['group_name']] : $value['group_name'], 'GROUP_DESC' => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']), 'GROUP_TYPE' => $value['group_type'], 'GROUP_ID' => $value['group_id'], 'GROUP_COLOUR' => $value['group_colour'], 'U_LIST' => $this->u_action . "&amp;action=list&amp;g={$value['group_id']}", 'U_EDIT' => $this->u_action . "&amp;action=edit&amp;g={$value['group_id']}"));
                        }
                        $db->sql_freeresult($result);
                        break;
                }
                break;
        }
        $this->tpl_name = 'ucp_groups_' . $mode;
    }
Пример #19
0
<?php

$tpl = new raintpl();
$tpl->assign('steamid', str_replace("STEAM_0", "STEAM_1", $user->data['steamid']));
$tpl->assign('isAdmin', group_memberships(19, $user->data['user_id'], true) || group_memberships(18, $user->data['user_id'], true) ? 1 : 0);
draw($tpl->draw("page_roleplay", $return_string = true), "roleplay", array("angular.route.min.js", "heatmap.min.js", "jquery.maphilight.js", "angular.dnd.min.js"));
Пример #20
0
                    }
                }
            }
        }
        $admin_id_ary = array_unique($admin_id_ary);
        $global_mod_id_ary = array_unique($global_mod_id_ary);
        $mod_id_ary = array_merge($mod_id_ary, $global_mod_id_ary);
        $mod_id_ary = array_unique($mod_id_ary);
        // Admin group id...
        $sql = 'SELECT group_id
			FROM ' . GROUPS_TABLE . "\n\t\t\tWHERE group_name = 'ADMINISTRATORS'";
        $result = $db->sql_query($sql);
        $admin_group_id = (int) $db->sql_fetchfield('group_id');
        $db->sql_freeresult($result);
        // Get group memberships for the admin id ary...
        $admin_memberships = group_memberships($admin_group_id, $admin_id_ary);
        $admin_user_ids = array();
        if (!empty($admin_memberships)) {
            // ok, we only need the user ids...
            foreach ($admin_memberships as $row) {
                $admin_user_ids[$row['user_id']] = true;
            }
        }
        unset($admin_memberships);
        $sql = 'SELECT forum_id, forum_name
			FROM ' . FORUMS_TABLE;
        $result = $db->sql_query($sql);
        $forums = array();
        while ($row = $db->sql_fetchrow($result)) {
            $forums[$row['forum_id']] = $row['forum_name'];
        }
Пример #21
0
     $phpbbUserRow = $result['user_row'];
     $user_id = $phpbbUserRow['user_id'];
     $userInfos = array();
     // Here we need to find if user is admin, officer or member!
     foreach ($admins as $admin_group) {
         if (!isset($userRole) && group_memberships($admin_group, $user_id, true)) {
             $userRole = 'admin';
         }
     }
     foreach ($officers as $officer_group) {
         if (!isset($userRole) && group_memberships($officer_group, $user_id, true)) {
             $userRole = 'officer';
         }
     }
     foreach ($members as $member_group) {
         if (!isset($userRole) && group_memberships($member_group, $user_id, true)) {
             $userRole = 'member';
         }
     }
     if (isset($userRole)) {
         // Everything is OK!
         $isAuthenticated = true;
         $userInfos['email'] = $phpbbUserRow['user_email'];
         $userInfos['role'] = $userRole;
     } else {
         $isAuthenticated = false;
     }
     // Return json to mushraider
     $userInfos['authenticated'] = $isAuthenticated;
     echo json_encode($userInfos);
 } else {