/** * Get the best value of all values of a property for a list of usergroups. * * @param array The list of usergroups. * @param ID_TEXT The identifier of the property. * @return mixed The best property value ('best' is dependant on the property we are looking at). */ function ocf_get_best_group_property($groups, $property) { $big_is_better = array('gift_points_per_day', 'gift_points_base', 'enquire_on_new_ips', 'is_super_admin', 'is_super_moderator', 'max_daily_upload_mb', 'max_attachments_per_post', 'max_avatar_width', 'max_avatar_height', 'max_post_length_comcode', 'max_sig_length_comcode'); //$small_and_perfectly_formed=array('flood_control_submit_secs','flood_control_access_secs'); Not needed by elimination, but nice to have here as a note $go_super_size = in_array($property, $big_is_better); global $USER_GROUPS_CACHED; ocf_ensure_groups_cached($groups); $best_value_so_far = 0; // Initialise type to integer $best_value_so_far = NULL; foreach ($groups as $group) { $this_value = $USER_GROUPS_CACHED[$group]['g_' . $property]; if (is_null($best_value_so_far) || $best_value_so_far < $this_value && $go_super_size || $best_value_so_far > $this_value && !$go_super_size) { $best_value_so_far = $this_value; } } return $best_value_so_far; }
/** * Mass-load details for a list of members into memory, to reduce queries when we access it later. * * @param array List of members. */ function ocf_cache_member_details($members) { require_code('ocf_members'); $member_or_list = ''; foreach ($members as $member) { if ($member_or_list != '') { $member_or_list .= ' OR '; } $member_or_list .= 'm.id=' . strval((int) $member); } if ($member_or_list != '') { $member_rows = $GLOBALS['FORUM_DB']->query('SELECT m.*,text_parsed AS signature FROM ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_members m LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'translate t ON ' . db_string_equal_to('language', user_lang()) . ' AND m.m_signature=t.id WHERE ' . $member_or_list); global $TABLE_LANG_FIELDS; $member_rows_2 = $GLOBALS['FORUM_DB']->query('SELECT f.* FROM ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_member_custom_fields f WHERE ' . str_replace('m.id', 'mf_member_id', $member_or_list), NULL, NULL, false, false, array_key_exists('f_member_custom_fields', $TABLE_LANG_FIELDS) ? $TABLE_LANG_FIELDS['f_member_custom_fields'] : array()); $member_rows_3 = $GLOBALS['FORUM_DB']->query('SELECT gm_group_id,gm_member_id FROM ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_group_members WHERE gm_validated=1 AND (' . str_replace('m.id', 'gm_member_id', $member_or_list) . ')'); global $MEMBER_CACHE_FIELD_MAPPINGS, $GROUP_MEMBERS_CACHE, $SIGNATURES_CACHE; $found_groups = array(); foreach ($member_rows as $row) { $GLOBALS['OCF_DRIVER']->MEMBER_ROWS_CACHED[$row['id']] = $row; if (!ocf_is_ldap_member($row['id'])) { // Primary $pg = $GLOBALS['OCF_DRIVER']->get_member_row_field($row['id'], 'm_primary_group'); $found_groups[$pg] = 1; $GROUP_MEMBERS_CACHE[$row['id']][false][false] = array($pg => 1); } // Signature if (get_page_name() != 'search' && !is_null($row['signature']) && $row['signature'] != '' && $row['m_signature'] != 0) { $SIGNATURES_CACHE[$row['id']] = new ocp_tempcode(); if (!$SIGNATURES_CACHE[$row['id']]->from_assembly($row['signature'], true)) { unset($SIGNATURES_CACHE[$row['id']]); } } } foreach ($member_rows_2 as $row) { $MEMBER_CACHE_FIELD_MAPPINGS[$row['mf_member_id']] = $row; } foreach ($member_rows_3 as $row) { if (!ocf_is_ldap_member($row['gm_member_id'])) { $GROUP_MEMBERS_CACHE[$row['gm_member_id']][false][false][$row['gm_group_id']] = 1; $found_groups[$row['gm_group_id']] = 1; } } require_code('ocf_groups'); ocf_ensure_groups_cached(array_keys($found_groups)); } }
/** * Find the named LDAP usergroup for an OCF ID. Note that the returned MAY NOT ACTUALLY EXIST! * * @param GROUP The OCF ID. * @return ?SHORT_TEXT The named LDAP usergroup (NULL: none). */ function ocf_group_ocfid_to_ldapcn($id) { if ($id == db_get_first_id() + 1) { return get_mapped_admin_group(); } if ($id == get_first_default_group()) { return get_mapped_users_group(); } ocf_ensure_groups_cached(array($id)); global $USER_GROUPS_CACHED; return $USER_GROUPS_CACHED[$id]['g__name']; }