check_auth('u_member_list'); $sort_order = array( 0 => array('member_name', 'member_name desc'), 1 => array('member_earned desc', 'member_earned'), 2 => array('member_spent desc', 'member_spent'), 3 => array('member_adjustment desc', 'member_adjustment'), 4 => array('member_current desc', 'member_current'), 5 => array('member_lastraid desc', 'member_lastraid'), 6 => array('member_level desc', 'member_level'), 7 => array('member_class', 'member_class desc'), 8 => array('rank_name', 'rank_name desc'), 9 => array('class_armor_type', 'class_armor_type desc') ); $current_order = switch_order($sort_order); $cur_hash = hash_filename("listmembers.php"); // // Compare members // if ( isset($_POST['submit']) && ($_POST['submit'] == $user->lang['compare_members']) && isset($_POST['compare_ids']) ) { // To compare members, we take the post checkboxes, // serialize them and pass them to the script again through _GET $compare_ids = serialize($_POST['compare_ids']); $compare_ids = urlencode($compare_ids); redirect('listmembers.php?compare='.$compare_ids); } elseif ( isset($_GET['compare']) ) { $s_compare = true; $uri_addon = ''; $compare_ids = urldecode(stripslashes($_GET['compare'])); $compare_ids = unserialize($compare_ids); // Find 30 days ago, then find how many raids occurred in those 30 days // Do the same for 60 and 90 days $thirty_days = mktime(0, 0, 0, date('m'), date('d')-30, date('Y')); $ninety_days = mktime(0, 0, 0, date('m'), date('d')-90, date('Y')); $raid_count_30 = $db->query_first('SELECT count(*) FROM ' . RAIDS_TABLE . ' WHERE raid_date BETWEEN '.$thirty_days.' AND '.time()); $raid_count_90 = $db->query_first('SELECT count(*) FROM ' . RAIDS_TABLE . ' WHERE raid_date BETWEEN '.$ninety_days.' AND '.time()); // Build an SQL query that includes each of the compare IDs $sql = 'SELECT m.*, (member_earned-member_spent+member_adjustment) AS member_current, c.class_name AS member_class FROM ' . MEMBERS_TABLE . ' m, ' .CLASS_TABLE. " c WHERE ( member_id='".$compare_ids[0]."'"; $cid_count = count($compare_ids); for ( $i = 1; $i < $cid_count; $i++ ) { $sql .= " OR member_id='".$compare_ids[$i]."'"; } $sql .= " ) AND m.member_class_id = c.class_id"; $sql .= " ORDER BY ".$current_order['sql']; $result = $db->query($sql); // Output each row while ( $row = $db->fetch_record($result) ) { $individual_raid_count_30 = 0; $individual_raid_count_90 = 0; $rc_sql = 'SELECT count(*) FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE (ra.raid_id = r.raid_id) AND (ra.member_name='".$row['member_name']."') AND (r.raid_date BETWEEN ".$thirty_days.' AND '.time().')'; $individual_raid_count_30 = $db->query_first($rc_sql); $rc_sql = 'SELECT count(*) FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE (ra.raid_id = r.raid_id) AND (ra.member_name='".$row['member_name']."') AND (r.raid_date BETWEEN ".$ninety_days.' AND '.time().')'; $individual_raid_count_90 = $db->query_first($rc_sql); // Prevent division by 0 $percent_of_raids_30 = ( $raid_count_30 > 0 ) ? round(($individual_raid_count_30 / $raid_count_30) * 100) : 0; $percent_of_raids_90 = ( $raid_count_90 > 0 ) ? round(($individual_raid_count_90 / $raid_count_90) * 100) : 0; // If the member's spent is greater than 0, see how long ago they looted an item if ( $row['member_spent'] > 0 ) { $ll_sql = 'SELECT max(item_date) AS last_loot FROM ' . ITEMS_TABLE . " WHERE item_buyer='".$row['member_name']."'"; $last_loot = $db->query_first($ll_sql); } $tpl->assign_block_vars('members_row', array( 'ROW_CLASS' => $eqdkp->switch_row_class(), 'ID' => $row['member_id'], 'NAME' => $row['member_name'], 'LEVEL' => ( $row['member_level'] > 0 ) ? $row['member_level'] : ' ', 'CLASS' => ( !empty($row['member_class']) ) ? $row['member_class'] : ' ', 'EARNED' => $row['member_earned'], 'SPENT' => $row['member_spent'], 'ADJUSTMENT' => $row['member_adjustment'], 'CURRENT' => $row['member_current'], 'LASTRAID' => ( !empty($row['member_lastraid']) ) ? date($user->style['date_notime_short'], $row['member_lastraid']) : ' ', 'LASTLOOT' => ( isset($last_loot) ) ? date($user->style['date_notime_short'], $last_loot) : ' ', 'RAIDS_30_DAYS' => sprintf($user->lang['of_raids'], $percent_of_raids_30), 'RAIDS_90_DAYS' => sprintf($user->lang['of_raids'], $percent_of_raids_90), 'C_ADJUSTMENT' => color_item($row['member_adjustment']), 'C_CURRENT' => color_item($row['member_current']), 'C_LASTRAID' => 'neutral', 'C_RAIDS_30_DAYS' => color_item($percent_of_raids_30, true), 'C_RAIDS_90_DAYS' => color_item($percent_of_raids_90, true), 'U_VIEW_MEMBER' => 'viewmember.php'.$SID . '&' . URI_NAME . '='.$row['member_name']) ); unset($last_loot); } $db->free_result($result); $footcount_text = $user->lang['listmembers_compare_footcount']; $encoded_ids = urlencode(serialize($compare_ids)); $tpl->assign_vars(array( 'U_COMPARE_MEMBERS' => 'listmembers.php' . $SID . '&compare=' . $encoded_ids . '&') ); } // // Normal member display // else { $s_compare = false; $member_count = 0; $previous_data = ''; // Figure out what data we're comparing from member to member // in order to rank them $sort_index = explode('.', $current_order['uri']['current']); $previous_source = preg_replace('/( (asc|desc))?/i', '', $sort_order[$sort_index[0]][$sort_index[1]]); $show_all = ( (!empty($_GET['show'])) && ($_GET['show'] == 'all') ) ? true : false; // // Filtering // $filter = ( isset($_GET['filter']) ) ? urldecode($_GET['filter']) : 'none'; $filter = ( preg_match('#\-{1,}#', $filter) ) ? 'none' : $filter; // Grab class_id if ( isset($_GET['filter']) ) { $temp_filter = $_GET['filter']; // Just because filter is set doesn't mean its valid - clear it if its set to none if ( preg_match('/ARMOR_/', $temp_filter) ) { $temp_filter = preg_replace('/ARMOR_/', '', $temp_filter); $query_by_armor = 1; $query_by_class = 0; $id = $temp_filter; } elseif ( $temp_filter == "none" ) { $temp_filter = ""; $query_by_armor = 0; $query_by_class = 0; } else { $query_by_class = 1; $query_by_armor = 0; $id = $temp_filter; } } $tpl->assign_block_vars('filter_row', array( 'VALUE' => strtolower("None"), 'SELECTED' => ( $filter == strtolower("None") ) ? ' selected="selected"' : '', 'OPTION' => str_replace('_', ' ', "None")) ); // Add in the cute ---- line, filter on None if some idiot selects it $tpl->assign_block_vars('filter_row', array( 'VALUE' => strtolower("None"), 'SELECTED' => ( $filter == strtolower("NULL") ) ? ' selected="selected"' : '', 'OPTION' => str_replace('_', ' ', "--------")) ); // Grab generic armor information $sql = 'SELECT class_armor_type FROM ' . CLASS_TABLE .''; $sql .= ' GROUP BY class_armor_type'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $tpl->assign_block_vars('filter_row', array( 'VALUE' => "ARMOR_" . strtolower($row['class_armor_type']), 'SELECTED' => ( $filter == strtolower($row['class_armor_type']) ) ? ' selected="selected"' : '', 'OPTION' => str_replace('_', ' ', $row['class_armor_type'])) ); } // Add in the cute ---- line, filter on None if some idiot selects it $tpl->assign_block_vars('filter_row', array( 'VALUE' => strtolower("None"), 'SELECTED' => ( $filter == strtolower("NULL") ) ? ' selected="selected"' : '', 'OPTION' => str_replace('_', ' ', "--------")) ); // Moved the class/race/faction information to the database $sql = 'SELECT class_name, class_id, class_min_level, class_max_level FROM ' . CLASS_TABLE .''; $sql .= ' GROUP BY class_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $tpl->assign_block_vars('filter_row', array( 'VALUE' => $row['class_name'], 'SELECTED' => ( $filter == strtolower($row['class_name']) ) ? ' selected="selected"' : '', 'OPTION' => ( !empty($row['class_name']) ) ? stripslashes($row['class_name']) : '(None)' ) ); } $db->free_result($result); // end database move of race/class/faction // Build SQL query based on GET options $sql = 'SELECT m.*, (m.member_earned-m.member_spent+m.member_adjustment) AS member_current, member_status, r.rank_name, r.rank_hide, r.rank_prefix, r.rank_suffix, c.class_name AS member_class, c.class_armor_type AS armor_type, c.class_min_level AS min_level, c.class_max_level AS max_level FROM ' . MEMBERS_TABLE . ' m, ' . MEMBER_RANKS_TABLE . ' r, ' . CLASS_TABLE . ' c WHERE c.class_id = m.member_class_id AND (m.member_rank_id = r.rank_id)'; if ( !empty($_GET['rank']) ) { $sql .= " AND r.rank_name='" . urldecode($_GET['rank']) . "'"; } if ( $query_by_class == '1' ) { //$sql .= " AND m.member_class_id = $id"; $sql .= " AND c.class_name = '$id'"; } if ( $query_by_armor == '1' ) { $sql .= " AND c.class_armor_type = '".$temp_filter."'"; } $sql .= ' ORDER BY '.$current_order['sql']; if ( !($members_result = $db->query($sql)) ) { message_die('Could not obtain member information', '', __FILE__, __LINE__, $sql); } while ( $row = $db->fetch_record($members_result) ) { // Figure out the rank search URL based on show and filter $u_rank_search = 'listmembers.php' . $SID . '&rank=' . urlencode($row['rank_name']); $u_rank_search .= ( ($eqdkp->config['hide_inactive'] == 1) && (!$show_all) ) ? '&show=' : '&show=all'; $u_rank_search .= ( $filter != 'none' ) ? '&filter=' . $filter : ''; if ( member_display($row) ) { $member_count++; $tpl->assign_block_vars('members_row', array( 'ROW_CLASS' => $eqdkp->switch_row_class(), 'ID' => $row['member_id'], //'COUNT' => ($row[$previous_source] == $previous_data) ? ' ' : $member_count, 'COUNT' => $member_count, 'NAME' => $row['rank_prefix'] . (( $row['member_status'] == '0' ) ? '' . $row['member_name'] . '' : $row['member_name']) . $row['rank_suffix'], 'RANK' => ( !empty($row['rank_name']) ) ? (( $row['rank_hide'] == '1' ) ? '' . '' . stripslashes($row['rank_name']) . '' . '' : '' . stripslashes($row['rank_name']) . '') : ' ', 'LEVEL' => ( $row['member_level'] > 0 ) ? $row['member_level'] : ' ', 'CLASS' => ( !empty($row['member_class']) ) ? $row['member_class'] : ' ', 'ARMOR' => ( !empty($row['armor_type']) ) ? $row['armor_type'] : ' ', 'EARNED' => $row['member_earned'], 'SPENT' => $row['member_spent'], 'ADJUSTMENT' => $row['member_adjustment'], 'CURRENT' => $row['member_current'], 'LASTRAID' => ( !empty($row['member_lastraid']) ) ? date($user->style['date_notime_short'], $row['member_lastraid']) : ' ', 'C_ADJUSTMENT' => color_item($row['member_adjustment']), 'C_CURRENT' => color_item($row['member_current']), 'C_LASTRAID' => 'neutral', 'U_VIEW_MEMBER' => 'viewmember.php' . $SID . '&' . URI_NAME . '='.$row['member_name']) ); $u_rank_search = ''; unset($last_loot); // So that we can compare this member to the next member, // set the value of the previous data to the source $previous_data = $row[$previous_source]; } } $uri_addon = ''; // Added to the end of the sort links $uri_addon .= '&filter=' . urlencode($filter); $uri_addon .= ( isset($_GET['show']) ) ? '&show=' . $_GET['show'] : ''; if ( ($eqdkp->config['hide_inactive'] == 1) && (!$show_all) ) { $footcount_text = sprintf($user->lang['listmembers_active_footcount'], $member_count, ''); } else { $footcount_text = sprintf($user->lang['listmembers_footcount'], $member_count); } $db->free_result($members_result); } $tpl->assign_vars(array( 'F_MEMBERS' => 'listmembers.php'.$SID, 'V_SID' => str_replace('?' . URI_SESSION . '=', '', $SID), 'L_FILTER' => $user->lang['filter'], 'L_NAME' => $user->lang['name'], 'L_RANK' => $user->lang['rank'], 'L_LEVEL' => $user->lang['level'], 'L_CLASS' => $user->lang['class'], 'L_ARMOR' => $user->lang['armor'], 'L_EARNED' => $user->lang['earned'], 'L_SPENT' => $user->lang['spent'], 'L_ADJUSTMENT' => $user->lang['adjustment'], 'L_CURRENT' => $user->lang['current'], 'L_LASTRAID' => $user->lang['lastraid'], 'L_LASTLOOT' => $user->lang['lastloot'], 'L_RAIDS_30_DAYS' => sprintf($user->lang['raids_x_days'], 30), 'L_RAIDS_90_DAYS' => sprintf($user->lang['raids_x_days'], 90), 'BUTTON_NAME' => 'submit', 'BUTTON_VALUE' => $user->lang['compare_members'], 'O_NAME' => $current_order['uri'][0], 'O_RANK' => $current_order['uri'][8], 'O_LEVEL' => $current_order['uri'][6], 'O_CLASS' => $current_order['uri'][7], 'O_ARMOR' => $current_order['uri'][9], 'O_EARNED' => $current_order['uri'][1], 'O_SPENT' => $current_order['uri'][2], 'O_ADJUSTMENT' => $current_order['uri'][3], 'O_CURRENT' => $current_order['uri'][4], 'O_LASTRAID' => $current_order['uri'][5], 'URI_ADDON' => $uri_addon, 'PAGE_HASH' => $cur_hash, 'U_LIST_MEMBERS' => 'listmembers.php' . $SID . '&', 'S_COMPARE' => $s_compare, 'S_NOTMM' => true, 'LISTMEMBERS_FOOTCOUNT' => ( isset($_GET['compare']) ) ? sprintf($footcount_text, sizeof($compare_ids)) : $footcount_text) ); $eqdkp->set_vars(array( 'page_title' => sprintf($user->lang['title_prefix'], $eqdkp->config['guildtag'], $eqdkp->config['dkp_name']).': '.$user->lang['listmembers_title'], 'template_file' => 'listmembers.html', 'display' => true) ); function member_display(&$row) { global $eqdkp; global $query_by_armor, $query_by_class, $filter, $filters, $show_all, $id; // Replace space with underscore (for array indices) // Damn you Shadow Knights! $d_filter = ucwords(str_replace('_', ' ', $filter)); $d_filter = str_replace(' ', '_', $d_filter); $member_display = null; // We're filtering based on class if ( $filter != 'none' ) { if ( $query_by_class == 1 ) { // Check for valid level ranges //if ( $row['member_level'] > $row['min_level'] && $row['member_level'] <= $row['max_level'] ) { $member_display = ( ($row['member_class'] == $id ) ) ? true : false; // } } elseif ( $query_by_armor == 1 ) { $rows = strtolower($row['armor_type']); // Check for valid level ranges if ( $row['member_level'] > $row['min_level'] && $row['member_level'] <= $row['max_level'] ) { $member_display = ( $rows == $id ) ? true : false; } } } else { // Are we showing all? if ( $show_all ) { $member_display = true; } else { // Are we hiding inactive members? if ( $eqdkp->config['hide_inactive'] == '0' ) { //Are we hiding their rank? $member_display = ( $row['rank_hide'] == '0' ) ? true : false; } else { // Are they active? if ( $row['member_status'] == '0' ) { $member_display = false; } else { $member_display = ( $row['rank_hide'] == '0' ) ? true : false; } // Member inactive } // Not showing inactive members } // Not showing all } // Not filtering by class return $member_display; } ?>