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']) )
{
redirect('listmembers.php?compare=' . implode(',', $_POST['compare_ids']));
}
elseif ( isset($_GET['compare']) )
{
$s_compare = true;
$uri_addon = '';
$compare = validateCompareInput($_GET['compare']);
// 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 *, (member_earned-member_spent+member_adjustment) AS member_current, c.class_name AS member_class
FROM " . MEMBERS_TABLE . " m, " . CLASS_TABLE . " c
WHERE (m.member_class_id = c.class_id)
AND (member_id IN (" . $compare . "))
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 = $compare;
$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']) and validateRank($_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 = '". ucwords(strtolower($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=' . htmlspecialchars(strip_tags($_GET['show']), ENT_QUOTES) : '';
if ( ($eqdkp->config['hide_inactive'] == 1) && (!$show_all) )
{
$footcount_text = sprintf($user->lang['listmembers_active_footcount'], $member_count,
'