$members = $data['m'] ? $lang['MEMBERS_IN_GROUP'] . ': ' . $data['m'] : $lang['NO_GROUP_MEMBERS']; $candidates = $data['c'] ? $lang['PENDING_MEMBERS'] . ': ' . $data['c'] : $lang['NO_PENDING_GROUP_MEMBERS']; $options .= '<li class="pad_2"><a href="' . GROUP_URL . $data['id'] . '" class="med bold">' . $text . '</a></li>'; $options .= $data['rg'] ? '<ul><li class="med">' . $lang['RELEASE_GROUP'] . '</li>' : '<ul>'; $options .= '<li class="seedmed">' . $members . '</li>'; if (IS_AM) { $options .= '<li class="leechmed">' . $candidates . '</li>'; } $options .= '</ul>'; } return $options; } if ($groups) { $s_hidden_fields = ''; foreach ($groups as $type => $grp) { $template->assign_block_vars('groups', array('MEMBERSHIP' => $lang["GROUP_MEMBER_{$type}"], 'GROUP_SELECT' => build_group($grp))); } $template->assign_vars(array('SELECT_GROUP' => true, 'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'], 'S_USERGROUP_ACTION' => 'group.php', 'S_HIDDEN_FIELDS' => $s_hidden_fields)); } else { if (IS_ADMIN) { redirect('admin/admin_groups.php'); } else { bb_die($lang['NO_GROUPS_EXIST']); } } } else { if (isset($_POST['joingroup']) && $_POST['joingroup']) { if ($group_info['group_type'] != GROUP_OPEN) { bb_die($lang['THIS_CLOSED_GROUP']); } $sql = "SELECT g.group_id, g.group_name, ug.user_id, u.user_email, u.username, u.user_lang\n\t\tFROM " . BB_GROUPS . " g\n\t\tLEFT JOIN " . BB_USERS . " u ON(u.user_id = g.group_moderator)\n\t\tLEFT JOIN " . BB_USER_GROUP . " ug ON(ug.group_id = g.group_id AND ug.user_id = {$userdata['user_id']})\n\t\tWHERE g.group_id = {$group_id}\n\t\t\tAND group_single_user = 0\n\t\t\tAND g.group_type = " . GROUP_OPEN . "\n\t\tLIMIT 1";
/** * Recursively generates subdivision definitions. */ function generate_subdivisions($countryCode, array $parents, $subdivisionPaths, $languages) { $group = build_group($parents); $subdivisions = []; foreach ($subdivisionPaths as $subdivisionPath) { $definition = file_get_contents('raw/' . $subdivisionPath . '.json'); $definition = json_decode($definition, true); // The lname is usable as a latin code when the key is non-latin. $code = $definition['key']; if (isset($definition['lname'])) { $code = $definition['lname']; } if (!isset($subdivisions[$group])) { $subdivisions[$group] = ['country_code' => $countryCode, 'parents' => $parents, 'locale' => '']; if (isset($definition['lang']) && isset($definition['lname'])) { // Only add the locale if there's a local name. $subdivisions[$group]['locale'] = process_locale($definition['lang']); } if (count($subdivisions[$group]['parents']) < 2) { // A single parent is the same as the country code. unset($subdivisions[$group]['parents']); } } // (Ab)use the local_name field to hold latin translations. This allows // us to support only a single translation, but since our only example // here is Canada (with French), it will do. $translationLanguage = reset($languages); if ($translationLanguage) { $translation = file_get_contents('raw/' . $subdivisionPath . '--' . $translationLanguage . '.json'); $translation = json_decode($translation, true); $subdivisions[$group]['locale'] = LocaleHelper::canonicalize($translationLanguage); $definition['lname'] = $definition['name']; $definition['name'] = $translation['name']; } // Remove the locale key if it wasn't filled. if (empty($subdivisions[$group]['locale'])) { unset($subdivisions[$group]['locale']); } // Generate the subdivision. $subdivisions[$group]['subdivisions'][$code] = create_subdivision_definition($countryCode, $definition); if (isset($definition['sub_keys'])) { $subdivisions[$group]['subdivisions'][$code]['has_children'] = true; $subdivisionChildrenPaths = []; $subdivisionChildrenKeys = explode('~', $definition['sub_keys']); foreach ($subdivisionChildrenKeys as $subdivisionChildrenKey) { $subdivisionChildrenPaths[] = $subdivisionPath . '_' . $subdivisionChildrenKey; } $childParents = array_merge($parents, [$code]); $subdivisions += generate_subdivisions($countryCode, $childParents, $subdivisionChildrenPaths, $languages); } } // Apply any found customizations. $customizations = get_subdivision_customizations($group); $subdivisions[$group] = apply_subdivision_customizations($subdivisions[$group], $customizations); // All subdivisions have been removed. Remove the rest of the data. if (empty($subdivisions[$group]['subdivisions'])) { unset($subdivisions[$group]); } return $subdivisions; }