raid = array( 'raid_date' => ( !$this->url_id ) ? $this->time : '', 'raid_attendees' => post_or_db('raid_attendees'), 'raid_name' => post_or_db('raid_name'), 'raid_note' => post_or_db('raid_note'), 'raid_value' => post_or_db('raid_value') ); // Vars used to confirm deletion $this->set_vars(array( 'confirm_text' => $user->lang['confirm_delete_raid'], 'uri_parameter' => URI_RAID) ); $this->assoc_buttons(array( 'add' => array( 'name' => 'add', 'process' => 'process_add', 'check' => 'a_raid_add'), 'update' => array( 'name' => 'update', 'process' => 'process_update', 'check' => 'a_raid_upd'), 'delete' => array( 'name' => 'delete', 'process' => 'process_delete', 'check' => 'a_raid_del'), 'form' => array( 'name' => '', 'process' => 'display_form', 'check' => 'a_raid_')) ); // Build the raid array // --------------------------------------------------------- if ( $this->url_id ) { $sql = 'SELECT raid_id, raid_name, raid_date, raid_note, raid_value FROM ' . RAIDS_TABLE . " WHERE raid_id='" . $this->url_id . "'"; $result = $db->query($sql); if ( !$row = $db->fetch_record($result) ) { message_die($user->lang['error_invalid_raid_provided']); } $db->free_result($result); $this->time = $row['raid_date']; $this->raid = array( 'raid_name' => post_or_db('raid_name', $row), 'raid_note' => post_or_db('raid_note', $row), 'raid_value' => post_or_db('raid_value', $row) ); $attendees = array(); $sql = 'SELECT member_name FROM ' . RAID_ATTENDEES_TABLE . " WHERE raid_id='" . $this->url_id . "' ORDER BY member_name"; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $attendees[] = $row['member_name']; } $this->raid['raid_attendees'] = ( !empty($_POST['raid_attendees']) ) ? $_POST['raid_attendees'] : implode(',', $attendees); unset($attendees); } } function error_check() { global $user; setlocale(LC_ALL, 'de_DE'); $this->fv->is_alpha('raid_attendees', $user->lang['fv_alpha_attendees']); $this->fv->is_filled('raid_attendees', $user->lang['fv_required_attendees']); $this->fv->is_within_range('mo', 1, 12, $user->lang['fv_range_month']); $this->fv->is_within_range('d', 1, 31, $user->lang['fv_range_day']); $this->fv->is_within_range('y', 1998, 2090, $user->lang['fv_range_year']); // How ambitious $this->fv->is_within_range('h', 0, 23, $user->lang['fv_range_hour']); $this->fv->is_within_range('mi', 0, 59, $user->lang['fv_range_minute']); $this->fv->is_within_range('s', 0, 59, $user->lang['fv_range_second']); if ( !empty($_POST['raid_value']) ) { $this->fv->is_number('raid_value', $user->lang['fv_number_value']); } if ( (@empty($_POST['raid_name'])) || (@sizeof($_POST['raid_name']) == 0) ) { $this->fv->errors['raid_name'] = $user->lang['fv_required_event_name']; } $this->time = mktime($_POST['h'], $_POST['mi'], $_POST['s'], $_POST['mo'], $_POST['d'], $_POST['y']); return $this->fv->is_error(); } // --------------------------------------------------------- // Process Add // --------------------------------------------------------- function process_add() { global $db, $eqdkp, $user, $tpl, $pm; global $SID; $success_message = ''; // // Raid loop for multiple events // foreach ( $_POST['raid_name'] as $raid_name ) { // // Get the raid value // $raid_value = $this->get_raid_value($raid_name); // // Insert the raid // $query = $db->build_query('INSERT', array( 'raid_name' => stripslashes($raid_name), 'raid_date' => $this->time, 'raid_note' => $_POST['raid_note'], 'raid_value' => $raid_value, 'raid_added_by' => $this->admin_user) ); $db->query('INSERT INTO ' . RAIDS_TABLE . $query); $this_raid_id = $db->insert_id(); // // Attendee handling // // Make sure that each member's name is properly capitalized $raid_attendees = strtolower(preg_replace('/[[:space:]]/i', ' ', $_POST['raid_attendees'])); $raid_attendees = ucwords($raid_attendees); // Make the array unique and sort it by name $members_array = explode(' ', $raid_attendees); $members_array = array_unique($members_array); sort($members_array); reset($members_array); // // Handle members // $this->handle_members($members_array, $raid_value, 'process_add'); // // Insert the attendees // // Get rid of the 'blank' member bug $raid_attendees = implode(',', $members_array); $raid_attendees = preg_replace('/^\,(.+)/', '\1', $raid_attendees); $members_array = explode(',', $raid_attendees); $this->add_attendees($members_array, $this_raid_id); // // Call plugin add hooks // $pm->do_hooks('/admin/addraid.php?action=add'); // // Logging // $log_action = array( 'header' => '{L_ACTION_RAID_ADDED}', 'id' => $this_raid_id, '{L_EVENT}' => $raid_name, '{L_ATTENDEES}' => implode(', ', $members_array), '{L_NOTE}' => $_POST['raid_note'], '{L_VALUE}' => $raid_value, '{L_ADDED_BY}' => $this->admin_user); $this->log_insert(array( 'log_type' => $log_action['header'], 'log_action' => $log_action) ); // // Append success message // $success_message .= sprintf($user->lang['admin_add_raid_success'], $_POST['mo'], $_POST['d'], $_POST['y'], $raid_name) . '
'; unset($raid_value, $raid_name); } // Raid loop // // Update player status if needed // if ( $eqdkp->config['hide_inactive'] == 1 ) { $success_message .= '

' . $user->lang['admin_raid_success_hideinactive']; $success_message .= ' ' . (( $this->update_player_status() ) ? strtolower($user->lang['done']) : strtolower($user->lang['error'])); } // // Success message // $link_list = array( $user->lang['add_items_from_raid'] => 'additem.php' . $SID . '&raid_id=' . $this_raid_id, $user->lang['add_raid'] => 'addraid.php' . $SID, $user->lang['list_raids'] => 'listraids.php' . $SID); $this->admin_die($success_message, $link_list); } // --------------------------------------------------------- // Process Update // --------------------------------------------------------- function process_update() { global $db, $eqdkp, $user, $tpl, $pm; global $SID; // // Get the old data // $this->get_old_data(); // // Remove the attendees from the old raid // $db->query('DELETE FROM ' . RAID_ATTENDEES_TABLE . " WHERE raid_id='" . $this->url_id . "'"); // // Get the raid value // $raid_value = $this->get_raid_value($_POST['raid_name']); // // Remove the value of the old raid from the attendees' earned // $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_earned = member_earned - " . $this->old_raid['raid_value'] . ", member_raidcount = member_raidcount - 1 WHERE member_name IN ('" . str_replace(',', "', '", $this->old_raid['raid_attendees']) . '\')'; $db->query($sql); // // Update the raid // $query = $db->build_query('UPDATE', array( 'raid_date' => $this->time, 'raid_note' => $_POST['raid_note'], 'raid_value' => $raid_value, 'raid_name' => stripslashes($_POST['raid_name']), 'raid_updated_by' => $this->admin_user) ); $db->query('UPDATE ' . RAIDS_TABLE . ' SET ' . $query . " WHERE raid_id='" . $this->url_id . "'"); // // Add the new, updated raid to attendees' earned // $raid_attendees = strtolower(preg_replace('/[[:space:]]/i', ' ', $_POST['raid_attendees'])); $raid_attendees = ucwords($raid_attendees); $n_members_array = explode(' ', $raid_attendees); $n_members_array = array_unique($n_members_array); sort($n_members_array); reset($n_members_array); // // Handle members // $this->handle_members($n_members_array, $raid_value, 'process_update'); // // Insert the attendees // // Get rid of the 'blank' member bug $raid_attendees = implode(',', $n_members_array); $raid_attendees = preg_replace('/^\,(.+)/', '\1', $raid_attendees); $n_members_array = explode(',', $raid_attendees); $this->add_attendees($n_members_array, $this->url_id); // // Update firstraid / lastraid [ #749201 ] // $update_firstraid = array(); // Members who need their firstraid updated $update_lastraid = array(); // Members who need their lastraid updated $sql = 'SELECT member_name, member_firstraid, member_lastraid, member_raidcount FROM ' . MEMBERS_TABLE . " WHERE member_name IN ('" . str_replace(',', "', '", $this->old_raid['raid_attendees']) . '\')'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { // If the raid's date changed... if ( $this->time != $this->old_raid['raid_date'] ) { // If the raid's old date is their firstraid, update their firstraid if ( $row['member_firstraid'] == $this->old_raid['raid_date'] ) { $update_firstraid[] = $row['member_name']; } // If the raid's old date is their lastraid, update their lastraid if ( $row['member_lastraid'] == $this->old_raid['raid_date'] ) { $update_lastraid[] = $row['member_name']; } } } $db->free_result($result); // Find members who were deleted from this raid and revert their first/last $old_attendees = explode(',', $this->old_raid['raid_attendees']); foreach ( $old_attendees as $member_name ) { if ( !in_array($member_name, $n_members_array) ) { $update_firstraid[] = $member_name; $update_lastraid[] = $member_name; } } $update_firstraid = array_unique($update_firstraid); $update_lastraid = array_unique($update_lastraid); sort($update_firstraid); sort($update_lastraid); reset($update_firstraid); reset($update_lastraid); $queries = array(); // Update selected firstraids if needed if ( sizeof($update_firstraid) > 0 ) { $sql = 'SELECT MIN(r.raid_date) AS member_firstraid, ra.member_name FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE ra.raid_id = r.raid_id AND ra.member_name IN ('" . implode("', '", $update_firstraid) . '\') AND r.raid_date > 0 GROUP BY ra.member_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $queries[] = 'UPDATE ' . MEMBERS_TABLE . " SET member_firstraid = '" . $row['member_firstraid'] . "' WHERE member_name = '" . $row['member_name'] . "'"; } $db->free_result($result); } // Updated selected lastraids if needed if ( sizeof($update_lastraid) > 0 ) { $sql = 'SELECT MAX(r.raid_date) AS member_lastraid, ra.member_name FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE ra.raid_id = r.raid_id AND ra.member_name IN ('" . implode("', '", $update_lastraid) . '\') AND r.raid_date > 0 GROUP BY ra.member_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $queries[] = 'UPDATE ' . MEMBERS_TABLE . " SET member_lastraid = '" . $row['member_lastraid'] . "' WHERE member_name = '" . $row['member_name'] . "'"; } $db->free_result($result); } foreach ( $queries as $sql ) { $db->query($sql); } unset($queries, $sql); // // Call plugin update hooks // $pm->do_hooks('/admin/addraid.php?action=update'); // // Logging // $old_attendees_array = explode(',', $this->old_raid['raid_attendees']); $new_attendees_array = $n_members_array; $log_action = array( 'header' => '{L_ACTION_RAID_UPDATED}', 'id' => $this->url_id, '{L_EVENT_BEFORE}' => $this->old_raid['raid_name'], '{L_ATTENDEES_BEFORE}' => implode(', ', $this->find_difference($new_attendees_array, $old_attendees_array)), '{L_NOTE_BEFORE}' => $this->old_raid['raid_note'], '{L_VALUE_BEFORE}' => $this->old_raid['raid_value'], '{L_EVENT_AFTER}' => $this->find_difference($this->old_raid['raid_name'], $_POST['raid_name']), '{L_ATTENDEES_AFTER}' => implode(', ', $this->find_difference($old_attendees_array, $new_attendees_array)), '{L_NOTE_AFTER}' => $this->find_difference($this->old_raid['raid_note'], $_POST['raid_note']), '{L_VALUE_AFTER}' => $this->find_difference($this->old_raid['raid_value'], $raid_value), '{L_UPDATED_BY}' => $this->admin_user); $this->log_insert(array( 'log_type' => $log_action['header'], 'log_action' => $log_action) ); // // Success message // $success_message = sprintf($user->lang['admin_update_raid_success'], $_POST['mo'], $_POST['d'], $_POST['y'], $_POST['raid_name']); // Update player status if needed if ( $eqdkp->config['hide_inactive'] == 1 ) { $success_message .= '

' . $user->lang['admin_raid_success_hideinactive']; $success_message .= ' ' . (( $this->update_player_status() ) ? strtolower($user->lang['done']) : strtolower($user->lang['error'])); } $link_list = array( $user->lang['add_items_from_raid'] => 'additem.php' . $SID . '&raid_id=' . $this->url_id, $user->lang['add_raid'] => 'addraid.php' . $SID, $user->lang['list_raids'] => 'listraids.php' . $SID); $this->admin_die($success_message, $link_list); } // --------------------------------------------------------- // Process Delete (confirmed) // --------------------------------------------------------- function process_confirm() { global $db, $eqdkp, $user, $tpl, $pm; global $SID; // // Get the old data // $this->get_old_data(); // // Take the value away from the attendees // $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_earned = member_earned - " . $this->old_raid['raid_value'] . ", member_raidcount = member_raidcount - 1 WHERE member_name IN ('" . str_replace(',', "', '", $this->old_raid['raid_attendees']) . '\')'; $db->query($sql); // // Remove cost of items from this raid from buyers // $sql = 'SELECT item_id, item_buyer, item_value FROM ' . ITEMS_TABLE . " WHERE raid_id='" . $this->url_id . "'"; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $item_value = ( !empty($row['item_value']) ) ? $row['item_value'] : '0.00'; $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_spent = member_spent - " . $item_value . " WHERE member_name='" . $row['item_buyer'] . "'"; $db->query($sql); } $db->free_result($result); // // Delete associated items // $db->query('DELETE FROM ' . ITEMS_TABLE . " WHERE raid_id='" . $this->url_id . "'"); // // Delete attendees // $db->query('DELETE FROM ' . RAID_ATTENDEES_TABLE . " WHERE raid_id='" . $this->url_id . "'"); // // Remove the raid itself // $db->query('DELETE FROM ' . RAIDS_TABLE . " WHERE raid_id='" . $this->url_id . "'"); // // Update firstraid / lastraid [ #749201 ] // $update_firstraid = array(); // Members who need their firstraid updated $update_lastraid = array(); // Members who need their lastraid updated $zero_firstlast = array(); // Members who only attended one raid: this one - reset their first/last raid $sql = 'SELECT member_name, member_firstraid, member_lastraid, member_raidcount FROM ' . MEMBERS_TABLE . " WHERE member_name IN ('" . str_replace(',', "', '", $this->old_raid['raid_attendees']) . '\')'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { // We already updated their raidcount to reflect this deleted raid; so if it's 0, this was their only raid if ( $row['member_raidcount'] == '0' ) { $zero_firstlast[] = $row['member_name']; } else { // If the raid's old date is their firstraid, update their firstraid if ( $row['member_firstraid'] == $this->old_raid['raid_date'] ) { $update_firstraid[] = $row['member_name']; } // If the raid's old date is their lastraid, update their lastraid if ( $row['member_lastraid'] == $this->old_raid['raid_date'] ) { $update_lastraid[] = $row['member_name']; } } } $db->free_result($result); // Zero the first/last raids if this was their only raid if ( sizeof($zero_firstlast) > 0 ) { $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_firstraid = 0, member_lastraid = 0 WHERE member_name IN ('" . implode("', '", $zero_firstlast) . '\')'; $db->query($sql); } $queries = array(); // Update selected firstraids if needed if ( sizeof($update_firstraid) > 0 ) { $sql = 'SELECT MIN(r.raid_date) AS member_firstraid, ra.member_name FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE ra.raid_id = r.raid_id AND ra.member_name IN ('" . implode("', '", $update_firstraid) . '\') AND r.raid_date > 0 GROUP BY ra.member_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $queries[] = 'UPDATE ' . MEMBERS_TABLE . " SET member_firstraid = '" . $row['member_firstraid'] . "' WHERE member_name = '" . $row['member_name'] . "'"; } $db->free_result($result); } // Updated selected lastraids if needed if ( sizeof($update_lastraid) > 0 ) { $sql = 'SELECT MAX(r.raid_date) AS member_lastraid, ra.member_name FROM ' . RAIDS_TABLE . ' r, ' . RAID_ATTENDEES_TABLE . " ra WHERE ra.raid_id = r.raid_id AND ra.member_name IN ('" . implode("', '", $update_lastraid) . '\') AND r.raid_date > 0 GROUP BY ra.member_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $queries[] = 'UPDATE ' . MEMBERS_TABLE . " SET member_lastraid = '" . $row['member_lastraid'] . "' WHERE member_name = '" . $row['member_name'] . "'"; } $db->free_result($result); } foreach ( $queries as $sql ) { $db->query($sql); } unset($queries, $sql); // // Call plugin delete hooks // $pm->do_hooks('/admin/addraid.php?action=delete'); // // Logging // $log_action = array( 'header' => '{L_ACTION_RAID_DELETED}', 'id' => $this->url_id, '{L_EVENT}' => $this->old_raid['raid_name'], '{L_ATTENDEES}' => str_replace(',', ', ', $this->old_raid['raid_attendees']), '{L_NOTE}' => $this->old_raid['raid_note'], '{L_VALUE}' => $this->old_raid['raid_value']); $this->log_insert(array( 'log_type' => $log_action['header'], 'log_action' => $log_action) ); // // Success message // $success_message = $user->lang['admin_delete_raid_success']; // Update player status if needed if ( $eqdkp->config['hide_inactive'] == 1 ) { $success_message .= '

' . $user->lang['admin_raid_success_hideinactive']; $success_message .= ' ' . (( $this->update_player_status() ) ? strtolower($user->lang['done']) : strtolower($user->lang['error'])); } $link_list = array( $user->lang['add_raid'] => 'addraid.php' . $SID, $user->lang['list_raids'] => 'listraids.php' . $SID); $this->admin_die($success_message, $link_list); } // --------------------------------------------------------- // Process helper methods // --------------------------------------------------------- /** * Populate the old_raid array */ function get_old_data() { global $db, $eqdkp, $user, $tpl, $pm; global $SID; $sql = 'SELECT raid_name, raid_value, raid_note, raid_date FROM ' . RAIDS_TABLE . " WHERE raid_id='" . $this->url_id . "'"; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $this->old_raid = array( 'raid_name' => $row['raid_name'], 'raid_value' => $row['raid_value'], 'raid_note' => $row['raid_note'], 'raid_date' => $row['raid_date'] ); } $db->free_result($result); $sql = 'SELECT r.member_name FROM ' . RAID_ATTENDEES_TABLE . " r, " . MEMBERS_TABLE . " m WHERE m.member_name = r.member_name AND raid_id='" . $this->url_id . "' ORDER BY member_name"; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $attendees[] = $row['member_name']; } $this->old_raid['raid_attendees'] = @implode(',', $attendees); unset($attendees); } /** * Determine this raid's value * * @param $raid_name * @return string Raid value */ function get_raid_value($raid_name) { global $db; // Check if they entered a one-time value; Get the preset value of the raid(s) if not if ( empty($_POST['raid_value']) ) { $raid_value = $db->query_first('SELECT event_value FROM ' . EVENTS_TABLE . " WHERE event_name='" . $raid_name . "'"); if (!isset($raid_value)) { $raid_value = 0; } } else { $raid_value = $_POST['raid_value']; } // Still no post value? if ( empty($raid_value) ) { $raid_value = '0.00'; } return $raid_value; } /** * Get member level/race/class from database or SESSION data * * @param $member_name * @return Array */ function get_member_info($member_name) { global $db, $eqdkp; if ($_SESSION[$member_name]['class'] == "") { unset($_SESSION[$member_name]['class']); } if ($_SESSION[$member_name]['level'] == "") { unset($_SESSION[$member_name]['level']); } if ($_SESSION[$member_name]['race'] == "") { unset($_SESSION[$member_name]['race']); } if ( isset($_SESSION[$member_name]['level']) && isset($_SESSION[$member_name]['class']) ) { $sql = "SELECT race_name FROM " . RACE_TABLE . " WHERE race_name = '" . $_SESSION[$member_name]['race'] . "'"; $race_name = $db->query_first($sql); if (!isset($race_name)) { $race_name = "Unknown"; } $retval = array( 'name' => $_SESSION[$member_name], 'level' => ( isset($_SESSION[$member_name]['level']) ) ? $_SESSION[$member_name]['level'] : false, 'race' => $race_name, 'class' => ( isset($_SESSION[$member_name]['class']) ) ? $_SESSION[$member_name]['class'] : false); unset($_SESSION[$member_name]); } else { $sql = "SELECT member_name, member_race_id, member_class_id, member_level FROM " . MEMBERS_TABLE . " WHERE member_name = '" . $member_name . "'"; $result = $db->query($sql); $info = $db->fetch_record($result); if (!isset($info['member_level'])) { $member_level = "1"; } $sql = "SELECT race_name FROM " . RACE_TABLE . " WHERE race_id = '" . $info['member_race_id'] . "'"; $race_name = $db->query_first($sql); if (!isset($race_name)) { $race_name = "Unknown"; } $sql = "SELECT class_name FROM " . CLASS_TABLE . " WHERE class_id = '" . $info['member_class_id'] . "'"; $class_name = $db->query_first($sql); if (!isset($class_name)) { $class_name = "Unknown"; } $retval = array( 'name' => $member_name, 'race' => $race_name, 'level' => $member_level, 'class' => $class_name); } return $retval; } /** * Insert members into raid attendees table * * @param $members_array Array of members * @param $raid_id */ function add_attendees(&$members_array, $raid_id) { global $db; $query = array(); foreach ( $members_array as $member_name ) { $query[] = "($raid_id, '" . $member_name . "')"; } $sql = 'INSERT INTO ' . RAID_ATTENDEES_TABLE . ' (raid_id, member_name) VALUES ' . implode(', ', $query); $db->query($sql); } /** * Update existing members / add new members * * @param $members_array * @param $raid_value * @param $time_check */ function handle_members(&$members_array, $raid_value, $process) { global $db, $eqdkp, $user, $tpl, $pm; global $SID; // Grab our array of name => class/level/race session_start(); // // Handle existing members // $update_sql_members = array(); $updated_members = array(); $raid_attendees = array(); $sql = 'SELECT m.member_name, m.member_firstraid, m.member_lastraid, m.member_level, r.race_name AS member_race, c.class_name AS member_class, m.member_raidcount FROM ' . MEMBERS_TABLE .' m, '. CLASS_TABLE .' c, '.RACE_TABLE.' r WHERE r.race_id = m.member_race_id AND c.class_id = m.member_class_id'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $member_name = trim(str_replace(' ', '', $row['member_name'])); // Make sure the member is in the attendees list before proceeding if ( (!in_array($member_name, $members_array)) || (empty($member_name)) ) { continue; } $raid_attendees[] = $member_name; // raidcount and/or firstraid is 0 - they exist but we need to set their firstraid to this date [ #705206 ] if ( ($row['member_raidcount'] == '0') || ($row['member_firstraid'] == '0') ) { $sql = 'UPDATE ' . MEMBERS_TABLE . ' SET member_earned = member_earned + ' . $raid_value . ", member_firstraid = '" . $this->time . "', member_lastraid = '" . $this->time . "', member_raidcount = member_raidcount + 1 WHERE member_name = '" . $member_name . "'"; $db->query($sql); $updated_members[] = $member_name; continue; } else { $updated_members[] = $member_name; } // Check for race/class/level data for this member $member_data = $this->get_member_info($member_name); if ( (!(isset($member_data['race']) )) || $member_data['race'] == 'Unknown' ) { $member_data['race'] = $row['member_race']; } if ( (!(isset($member_data['class']) )) || $member_data['class'] == 'Unknown' ) { $member_data['class'] = $row['member_class']; } $member_level = ( is_numeric($member_data['level']) ) ? trim($member_data['level']) : 'member_level'; $member_race = ( is_string($member_data['race']) ) ? trim($member_data['race']) : 'member_race'; $member_class = ( is_string($member_data['class']) ) ? trim($member_data['class']) : 'member_class'; unset($member_data); // Update this member's race/class/level if they changed $time_check = ( $process == 'process_add' ) ? ($this->time > $row['member_lastraid']) : ($this->time <= $row['member_lastraid']); $level_check = ( ($member_level != $row['member_level']) && ($member_level != 'member_level') ) ? true : false; $race_check = ( ($member_race != $row['member_race']) && ($member_race != 'member_race') ) ? true : false; $class_check = ( ($member_class != $row['member_class']) && ($member_class != 'member_class') ) ? true : false; if ( ($time_check) && ($level_check || $race_check || $class_check) ) { // For comparison, quotes need to be added after the if statement above $member_level = ( $member_level != 'member_level' ) ? '\'' . $member_level . '\'' : $member_level; $member_race = ( $member_race != 'member_race' ) ? '\'' . $member_race . '\'' : $member_race; $member_class = ( $member_class != 'member_class' ) ? '\'' . $member_class . '\'' : $member_class; // Process the update $sql = 'UPDATE ' . MEMBERS_TABLE . ' m, ' . CLASS_TABLE . ' c, ' . RACE_TABLE . ' r SET '; $sql .= ' m.member_raidcount = m.member_raidcount + 1, m.member_level = ' . $member_level . ', m.member_race_id = r.race_id, m.member_class_id = c.class_id WHERE r.race_name = '.$member_race.' AND c.class_name = '.$member_class.' AND m.member_name = "' . $member_name . '"'; $db->query($sql); } // And mark member for bunch update later $update_sql_members[] = $member_name; } $db->free_result($result); session_destroy(); // Run the lump update if we need to if ( sizeof($update_sql_members) > 0 ) { $sql = 'UPDATE ' . MEMBERS_TABLE . ' SET member_raidcount = member_raidcount + 1, member_earned = member_earned + ' . $raid_value . " WHERE member_name IN ('" . implode("', '", $update_sql_members) . '\')'; $db->query($sql); } // // Update firstraid / lastraid [ #749201 ] // $this->update_member_firstraid($raid_attendees, $this->time); $this->update_member_lastraid($raid_attendees, $this->time); // // Handle new members // $new_members = array_diff($members_array, $updated_members); foreach ( $new_members as $member_name ) { $member_name = trim($member_name); if ( $member_name != '' ) { $member_data2 = $this->get_member_info($member_name); $class = $member_data2['class']; $race = $member_data2['race']; if ( ! ( isset($class) ) || ($class == "") ) { $class = "Unknown"; } $class_id_number = $db->query_first('SELECT class_id FROM ' . CLASS_TABLE . ' WHERE class_name = "'.$class.'"'); $race_id_number = $db->query_first('SELECT race_id FROM ' . RACE_TABLE . ' WHERE race_name = "'.$race.'"'); if (!isset($race_id_number)) { $race_id_number = 0; } if (!isset($class_id_number)) { $class_id_number = 0; } $query = $db->build_query('INSERT', array( 'member_name' => $member_name, 'member_earned' => $raid_value, 'member_status' => '1', 'member_firstraid' => $this->time, 'member_lastraid' => $this->time, 'member_raidcount' => '1', 'member_level' => $member_data2['level'], 'member_race_id' => $race_id_number, 'member_class_id' => $class_id_number, 'member_rank_id' => '0') ); $db->query('INSERT INTO ' . MEMBERS_TABLE . $query); } } // For any member who has a 0 raidcount, reset their first/last raid to 0 $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_firstraid = '0', member_lastraid='0' WHERE member_raidcount='0'"; $db->query($sql); } /** * Update members' firstraid * * @param array $members_array * @param string $time_check Time to check */ function update_member_firstraid(&$members_array, $time_check) { global $db; if ( sizeof($members_array) > 0 ) { $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_firstraid = '" . $time_check . "' WHERE member_name IN ('" . implode("', '", $members_array) . '\') AND member_firstraid > ' . $time_check; $db->query($sql); } } /** * Update members' lastraid * * @param array $members_array * @param string $time_check Time to check */ function update_member_lastraid(&$members_array, $time_check) { global $db; if ( sizeof($members_array) > 0 ) { $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_lastraid = '" . $time_check . "' WHERE member_name IN ('" . implode("', '", $members_array) . '\') AND member_lastraid < ' . $time_check; $db->query($sql); } } /** * Update active/inactive player status * * @return bool */ function update_player_status() { global $db, $eqdkp, $user; $inactive_time = mktime(0, 0, 0, date('m'), date('d')-$eqdkp->config['inactive_period'], date('Y')); $active_members = array(); $inactive_members = array(); // Don't go through this whole thing of active/inactive adjustments if we don't need to. if ( ($eqdkp->config['active_point_adj'] != '0.00') || ($eqdkp->config['inactive_point_adj'] != '0.00') ) { $time = time(); $sql = 'SELECT member_name, member_status, member_lastraid FROM ' . MEMBERS_TABLE; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { unset($adj_value); unset($adj_reason); // Active -> Inactive if ( ($eqdkp->config['inactive_point_adj'] != '0.00') && ($row['member_status'] == '1') && ($row['member_lastraid'] < $inactive_time) ) { $adj_value = $eqdkp->config['inactive_point_adj']; $adj_reason = 'Inactive adjustment'; $inactive_members[] = $row['member_name']; } // Inactive -> Active elseif ( ($eqdkp->config['active_point_adj'] != '0.00') && ($row['member_status'] == '0') && ($row['member_lastraid'] >= $inactive_time) ) { $adj_value = $eqdkp->config['active_point_adj']; $adj_reason = 'Active adjustment'; $active_members[] = $row['member_name']; } // // Insert individual adjustment // if ( (isset($adj_value)) && (isset($adj_reason)) ) { $group_key = $this->gen_group_key($time, $adj_reason, $adj_value); $query = $db->build_query('INSERT', array( 'adjustment_value' => $adj_value, 'adjustment_date' => $time, 'member_name' => $row['member_name'], 'adjustment_reason' => $adj_reason, 'adjustment_group_key' => $group_key, 'adjustment_added_by' => $user->data['username']) ); $db->query('INSERT INTO ' . ADJUSTMENTS_TABLE . $query); } } // Update inactive members' adjustment if ( sizeof($inactive_members) > 0 ) { $adj_value = $eqdkp->config['inactive_point_adj']; $adj_reason = 'Inactive adjustment'; $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_status='0', member_adjustment = member_adjustment + " . $eqdkp->config['inactive_point_adj'] . " WHERE member_name IN ('" . implode("', '", $inactive_members) . '\')'; $log_action = array( 'header' => '{L_ACTION_INDIVADJ_ADDED}', '{L_ADJUSTMENT}' => $eqdkp->config['inactive_point_adj'], '{L_MEMBERS}' => implode(', ', $inactive_members), '{L_REASON}' => 'Inactive adjustment', '{L_ADDED_BY}' => $user->data['username']); $this->log_insert(array( 'log_type' => $log_action['header'], 'log_action' => $log_action) ); } // Update active members' adjustment if ( sizeof($active_members) > 0 ) { $sql = 'UPDATE ' . MEMBERS_TABLE . " SET member_status='1', member_adjustment = member_adjustment + " . $eqdkp->config['active_point_adj'] . " WHERE member_name IN ('" . implode("', '", $active_members) . '\')'; $db->query($sql); $log_action = array( 'header' => '{L_ACTION_INDIVADJ_ADDED}', '{L_ADJUSTMENT}' => $eqdkp->config['active_point_adj'], '{L_MEMBERS}' => implode(', ', $active_members), '{L_REASON}' => 'Active adjustment', '{L_ADDED_BY}' => $user->data['username']); $this->log_insert(array( 'log_type' => $log_action['header'], 'log_action' => $log_action) ); } } else { // Active -> Inactive $db->query('UPDATE ' . MEMBERS_TABLE . " SET member_status='0' WHERE (member_lastraid < " . $inactive_time . ") AND (member_status='1')"); // Inactive -> Active $db->query('UPDATE ' . MEMBERS_TABLE . " SET member_status='1' WHERE (member_lastraid >= " . $inactive_time . ") AND (member_status='0')"); } // If your class_id doesn't match your level, update your class ID to the one that has // the same class_name, but the correct min and max level. $sql = "SELECT m.member_name, m.member_level, c.class_name, c.class_id, c.class_min_level, c.class_max_level FROM " . MEMBERS_TABLE ." m, " . CLASS_TABLE . " c WHERE m.member_class_id = c.class_id"; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { if ( isset($row['member_level']) && ($row['member_level'] > $row['class_max_level'] || $row['member_level'] < $row['class_min_level'])) { $sql = "SELECT class_id FROM " . CLASS_TABLE . " WHERE class_name = '" . $row['class_name'] ."' AND class_min_level < '" . $row['member_level'] ."' AND class_max_level >= '" . $row['member_level'] ."'"; $new_class_id = $db->query_first($sql); if (!isset($new_class_id)) { $new_class_id = 0; } $sql = "UPDATE " . MEMBERS_TABLE . " SET member_class_id = '" . $new_class_id . "' WHERE member_name = '" . $row['member_name'] . "'"; $db->query($sql); } } return true; } // --------------------------------------------------------- // Display form // --------------------------------------------------------- function display_form() { global $db, $eqdkp, $user, $tpl, $pm; global $SID; // // Find the value of the event, or use the one-time value from the form // $raid_name = ( is_array($this->raid['raid_name']) ) ? (( isset($this->raid['raid_name'][0]) ) ? $this->raid['raid_name'][0] : '' ) : $this->raid['raid_name']; $preset_value = $db->query_first('SELECT event_value FROM ' . EVENTS_TABLE . " WHERE event_name='" . addslashes($raid_name) . "'"); $raid_value = ( $this->raid['raid_value'] == 0 ) ? '' : $this->raid['raid_value']; $raid_value = ( $this->raid['raid_value'] == $preset_value ) ? '' : $this->raid['raid_value']; // // Build member drop-down // $sql = 'SELECT member_name FROM ' . MEMBERS_TABLE . ' ORDER BY member_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $tpl->assign_block_vars('members_row', array( 'VALUE' => $row['member_name'], 'OPTION' => $row['member_name']) ); } $db->free_result($result); // // Build event drop-down // $max_value = $db->query_first('SELECT max(event_value) FROM ' . EVENTS_TABLE); if (!isset($max_value)) { $max_value = 0; } $float = @explode('.', $max_value); $format = '%0' . @strlen($float[0]) . '.2f'; $sql = 'SELECT event_id, event_name, event_value FROM ' . EVENTS_TABLE . ' ORDER BY event_name'; $result = $db->query($sql); while ( $row = $db->fetch_record($result) ) { $select_check = ( is_array($this->raid['raid_name']) ) ? in_array($row['event_name'], $this->raid['raid_name']) : $row['event_name'] == $this->raid['raid_name']; $tpl->assign_block_vars('events_row', array( 'VALUE' => $row['event_name'], 'SELECTED' => ( $select_check ) ? ' selected="selected"' : '', 'OPTION' => '(' . sprintf($format, $row['event_value']) . ') - ' . $row['event_name']) ); } $db->free_result($result); $tpl->assign_vars(array( // Form vars 'F_ADD_RAID' => 'addraid.php' . $SID, 'RAID_ID' => $this->url_id, 'U_ADD_EVENT' => 'addevent.php'.$SID, 'S_EVENT_MULTIPLE' => ( !$this->url_id ) ? true : false, // Form values 'RAID_ATTENDEES' => str_replace(',', "\n", $this->raid['raid_attendees']), 'RAID_VALUE' => $raid_value, 'RAID_NOTE' => stripslashes(htmlspecialchars($this->raid['raid_note'])), 'MO' => date('m', $this->time), 'D' => date('d', $this->time), 'Y' => date('Y', $this->time), 'H' => date('H', $this->time), 'MI' => date('i', $this->time), 'S' => date('s', $this->time), // Language 'L_ADD_RAID_TITLE' => $user->lang['addraid_title'], 'L_ATTENDEES' => $user->lang['attendees'], 'L_PARSE_LOG' => $user->lang['parse_log'], 'L_SEARCH_MEMBERS' => $user->lang['search_members'], 'L_EVENT' => $user->lang['event'], 'L_ADD_EVENT' => strtolower($user->lang['add_event']), 'L_VALUE' => $user->lang['value'], 'L_ADDRAID_VALUE_NOTE' => $user->lang['addraid_value_note'], 'L_DATE' => $user->lang['date'], 'L_TIME' => $user->lang['time'], 'L_ADDRAID_DATETIME_NOTE' => $user->lang['addraid_datetime_note'], 'L_NOTE' => $user->lang['note'], 'L_ADD_RAID' => $user->lang['add_raid'], 'L_RESET' => $user->lang['reset'], 'L_UPDATE_RAID' => $user->lang['update_raid'], 'L_DELETE_RAID' => $user->lang['delete_raid'], // Form validation 'FV_ATTENDEES' => $this->fv->generate_error('raid_attendees'), 'FV_EVENT_NAME' => $this->fv->generate_error('raid_name'), 'FV_VALUE' => $this->fv->generate_error('raid_value'), 'FV_MO' => $this->fv->generate_error('mo'), 'FV_D' => $this->fv->generate_error('d'), 'FV_Y' => $this->fv->generate_error('y'), 'FV_H' => $this->fv->generate_error('h'), 'FV_MI' => $this->fv->generate_error('mi'), 'FV_S' => $this->fv->generate_error('s'), // Javascript messages 'MSG_ATTENDEES_EMPTY' => $user->lang['fv_required_attendees'], 'MSG_NAME_EMPTY' => $user->lang['fv_required_event_name'], 'MSG_GAME_NAME' => $eqdkp->config['default_game'], // Buttons 'S_ADD' => ( !$this->url_id ) ? true : false) ); $eqdkp->set_vars(array( 'page_title' => sprintf($user->lang['admin_title_prefix'], $eqdkp->config['guildtag'], $eqdkp->config['dkp_name']).': '.$user->lang['addraid_title'], 'template_file' => 'admin/addraid.html', 'display' => true) ); } } $add_raid = new Add_Raid; $add_raid->process(); ?>