function main($checked_user) { // Get all values $sql = 'SELECT * FROM ' . $this->points_values_table; $result = $this->db->sql_query($sql); $points_values = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); // Get all point config names and config values $sql = 'SELECT config_name, config_value FROM ' . $this->points_config_table; $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $points_config[$row['config_name']] = $row['config_value']; } $this->db->sql_freeresult($result); // Set some variables $start = $this->request->variable('start', 0); $number = $points_values['number_show_per_page']; add_form_key('lottery_tickets'); // Check, if lottery is enabled if (!$points_config['lottery_enable']) { $message = $this->user->lang['LOTTERY_DISABLED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller') . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user is allowed to use the lottery if (!$this->auth->acl_get('u_use_lottery')) { $message = $this->user->lang['NOT_AUTHORISED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller') . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Add part to bar $this->template->assign_block_vars('navlinks', array('U_VIEW_FORUM' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'FORUM_NAME' => $points_values['lottery_name'])); // Add lottery base amount in description $this->template->assign_vars(array('L_LOTTERY_BASE_AMOUNT' => sprintf($this->user->lang['LOTTERY_DESCRIPTION'], sprintf($this->functions_points->number_format_points($points_values['lottery_base_amount'])), $this->config['points_name']))); // Recheck, if lottery was run, for those boards only having one user per day and which don't call the index page first if ($points_values['lottery_draw_period'] != 0 && time() > $points_values['lottery_last_draw_time'] + $points_values['lottery_draw_period']) { $this->functions_points->run_lottery(); } // Check, if user has purchased tickets if ($this->request->variable('purchase_ticket', false) && $this->user->data['user_id'] != ANONYMOUS) { if (!check_form_key('lottery_tickets')) { trigger_error('FORM_INVALID'); } // How many tickets have been bought? $total_tickets_bought = $this->request->variable('total_tickets', 0); // Check, if user already bought tickets $sql_array = array('SELECT' => 'COUNT(ticket_id) AS number_of_tickets', 'FROM' => array($this->points_lottery_tickets_table => 't'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $number_tickets = $this->db->sql_fetchfield('number_of_tickets'); $this->db->sql_freeresult($result); // Check, if the user tries to buy more tickets than allowed if ($total_tickets_bought > $points_values['lottery_max_tickets']) { $message = sprintf($this->user->lang['LOTTERY_MAX_TICKETS_REACH'], $points_values['lottery_max_tickets']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check in user try to buy negative tickets if ($total_tickets_bought <= 0) { $message = $this->user->lang['LOTTERY_NEGATIVE_TICKETS'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if the already bought tickets and the new request are higher than the max set number of tickets if ($number_tickets + $total_tickets_bought > $points_values['lottery_max_tickets']) { $message = sprintf($this->user->lang['LOTTERY_MAX_TICKETS_LEFT'], $points_values['lottery_max_tickets'] - $number_tickets) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if the user sent an empty value if (!$total_tickets_bought) { $message = $this->user->lang['LOTTERY_INVALID_INPUT'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check. if lottery is enabled if ($points_config['lottery_enable'] != 0 && $points_values['lottery_ticket_cost'] != 0) { // Grab users total cash $sql_array = array('SELECT' => '*', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $purchaser = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); // Check, if the user has enough cash to buy tickets if ($points_values['lottery_ticket_cost'] * $total_tickets_bought > $purchaser['user_points']) { $message = $this->user->lang['LOTTERY_LACK_FUNDS'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } // Loop through total purchased tickets and create insert array for ($i = 0, $total_tickets_bought; $i < $total_tickets_bought; $i++) { $sql_insert_ary[] = array('user_id' => $this->user->data['user_id']); } $this->db->sql_multi_insert($this->points_lottery_tickets_table, $sql_insert_ary); // Check again, if lottery is enabled if ($points_config['lottery_enable'] != 0) { // Deduct cost $viewer_cash = $purchaser['user_points'] - $points_values['lottery_ticket_cost'] * $total_tickets_bought; $this->functions_points->set_points($this->user->data['user_id'], $viewer_cash); // Update jackpot $this->functions_points->set_points_values('lottery_jackpot', $points_values['lottery_jackpot'] + $points_values['lottery_ticket_cost'] * $total_tickets_bought); } $message = $this->user->lang['LOTTERY_TICKET_PURCHASED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); $this->template->assign_vars(array('U_ACTION' => $this->u_action)); } // Display main page $history_mode = $this->request->variable('history', ''); if ($history_mode) { // If no one has ever won, why bother doing anything else? if ($points_values['points_winners_total'] = 0) { $message = $this->user->lang['LOTTERY_NO_WINNERS'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } $total_wins = $points_values['points_winners_total']; // Check, if no entries returned, only self search would turn up empty at this point if ($history_mode == 'ego') { $sql_array = array('SELECT' => 'COUNT(id) AS viewer_history', 'FROM' => array($this->points_lottery_history_table => 'h'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $total_wins = (int) $this->db->sql_fetchfield('viewer_history'); $this->db->sql_freeresult($result); if ($total_wins == 0) { $message = $this->user->lang['LOTTERY_NEVER_WON'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } $this->template->assign_vars(array('U_VIEW_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'all')), 'U_TRANSFER_USER' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')), 'U_LOGS' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'logs')), 'U_LOTTERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'U_BANK' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')), 'U_ROBBERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')))); } // Check, if user is viewing all or own entries if ($history_mode == 'all') { $sql_array = array('SELECT' => 'COUNT(id) AS total_entries', 'FROM' => array($this->points_lottery_history_table => 'h')); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $total_entries = (int) $this->db->sql_fetchfield('total_entries'); $this->db->sql_freeresult($result); $sql_array = array('SELECT' => 'h.*, u.*', 'FROM' => array($this->points_lottery_history_table => 'h'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'h.user_id = u.user_id')), 'ORDER_BY' => 'time DESC'); } else { $sql_array = array('SELECT' => 'COUNT(id) AS total_entries', 'FROM' => array($this->points_lottery_history_table => 'h'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $total_entries = (int) $this->db->sql_fetchfield('total_entries'); $this->db->sql_freeresult($result); $sql_array = array('SELECT' => 'h.*, u.*', 'FROM' => array($this->points_lottery_history_table => 'h'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'h.user_id = u.user_id')), 'WHERE' => 'h.user_id = ' . (int) $this->user->data['user_id'], 'ORDER_BY' => 'time DESC'); } $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query_limit($sql, $number, $start); $row_color = $start; while ($row = $this->db->sql_fetchrow($result)) { $row_color++; // Check, if winner is user if ($row['user_id'] != 0) { $history_member = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); } else { $history_member = $this->user->lang['LOTTERY_NO_WINNER']; } $this->template->assign_block_vars('history_row', array('NUMBER' => $row_color, 'U_WINNER_PROFILE' => $history_member, 'WINNER_PROFILE' => $history_member, 'USERNAME' => $row['username'], 'WINNINGS' => sprintf($this->functions_points->number_format_points($row['amount'])), 'DATE' => $this->user->format_date($row['time']), 'ROW_COLOR' => $row_color)); $this->template->assign_vars(array('U_VIEW_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'all')), 'U_VIEW_SELF_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'ego')), 'U_INFO' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'info')), 'U_TRANSFER_USER' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')), 'U_LOGS' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'logs')), 'U_LOTTERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'U_BANK' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')), 'U_ROBBERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')))); } //Start pagination $this->pagination->generate_template_pagination($this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => $history_mode)), 'pagination', 'start', $total_entries, $number, $start); // Viewing a history page $this->template->assign_vars(array('CASH_NAME' => $this->config['points_name'], 'PAGINATION' => $this->user->lang('POINTS_LOG_COUNT', $total_entries), 'LOTTERY_NAME' => $points_values['lottery_name'], 'BANK_NAME' => $points_values['bank_name'], 'S_VIEW_HISTORY' => true, 'U_BACK_TO_LOTTERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'U_VIEW_SELF_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'ego')), 'U_TRANSFER_USER' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')), 'U_LOGS' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'logs')), 'U_LOTTERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'U_BANK' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')), 'U_ROBBERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')))); } else { // Show main lottery page $viewer_total_tickets = ''; if ($this->user->data['user_id'] != ANONYMOUS) { //Select total tickets viewer owns $sql_array = array('SELECT' => 'COUNT(ticket_id) AS num_tickets', 'FROM' => array($this->points_lottery_tickets_table => 'h'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $viewer_total_tickets = (int) $this->db->sql_fetchfield('num_tickets'); $this->db->sql_freeresult($result); } // User color selection $sql_array = array('SELECT' => 'user_id, username, user_colour', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $points_values['lottery_prev_winner_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $row = $this->db->sql_fetchrow($result); if ($row == null) { $username_colored = $this->user->lang['LOTTERY_NO_WINNER']; } else { $username_colored = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); } // Check, if previous winner is a user if ($points_values['lottery_prev_winner_id'] != 0) { $link_member = append_sid("{$this->phpbb_root_path}memberlist.{$this->phpEx}", "mode=viewprofile&u=" . $points_values['lottery_prev_winner_id']); } else { $link_member = ''; } // Select the total number of tickets $sql_array = array('SELECT' => 'COUNT(ticket_id) AS no_of_tickets', 'FROM' => array($this->points_lottery_tickets_table => 't')); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $row = $this->db->sql_fetchrow($result); $no_of_tickets = $row['no_of_tickets']; $this->db->sql_freeresult($result); // Select the total number of players $sql_array = array('SELECT' => 'user_id', 'FROM' => array($this->points_lottery_tickets_table => 't')); $sql = $this->db->sql_build_query('SELECT_DISTINCT', $sql_array); $result = $this->db->sql_query($sql); $no_of_players = 0; while ($row = $this->db->sql_fetchrow($result)) { $no_of_players += 1; } $this->db->sql_freeresult($result); $this->template->assign_vars(array('JACKPOT' => sprintf($this->functions_points->number_format_points($points_values['lottery_jackpot']), $this->config['points_name']), 'POINTS_NAME' => $this->config['points_name'], 'TICKET_COST' => sprintf($this->functions_points->number_format_points($points_values['lottery_ticket_cost'])), 'PREVIOUS_WINNER' => $username_colored, 'NEXT_DRAWING' => $this->user->format_date($points_values['lottery_last_draw_time'] + $points_values['lottery_draw_period'], false, true), 'LOTTERY_NAME' => $points_values['lottery_name'], 'BANK_NAME' => $points_values['bank_name'], 'VIEWER_TICKETS_TOTAL' => $viewer_total_tickets, 'LOTTERY_TICKETS' => $no_of_tickets, 'LOTTERY_PLAYERS' => $no_of_players, 'MAX_TICKETS' => $points_values['lottery_max_tickets'], 'S_PURCHASE_SINGLE' => $viewer_total_tickets == 0 && $points_config['lottery_multi_ticket_enable'] == 0 && $points_config['lottery_enable'] == 1 ? true : false, 'S_PURCHASE_MULTI' => $viewer_total_tickets < $points_values['lottery_max_tickets'] && $points_config['lottery_multi_ticket_enable'] == 1 && $points_config['lottery_enable'] == 1 ? true : false, 'S_MULTI_TICKETS' => $points_config['lottery_multi_ticket_enable'] == 1 ? true : false, 'S_LOTTERY_ENABLE' => $points_config['lottery_enable'] == 1 ? true : false, 'S_DRAWING_ENABLED' => $points_values['lottery_draw_period'] ? true : false, 'U_PREVIOUS_WINNER' => $link_member, 'U_VIEW_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'all')), 'U_VIEW_SELF_HISTORY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery', 'history' => 'ego')), 'U_TRANSFER_USER' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')), 'U_LOGS' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'logs')), 'U_LOTTERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'lottery')), 'U_BANK' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')), 'U_ROBBERY' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')), 'U_INFO' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'info')), 'U_USE_TRANSFER' => $this->auth->acl_get('u_use_transfer'), 'U_USE_LOGS' => $this->auth->acl_get('u_use_logs'), 'U_USE_LOTTERY' => $this->auth->acl_get('u_use_lottery'), 'U_USE_BANK' => $this->auth->acl_get('u_use_bank'), 'U_USE_ROBBERY' => $this->auth->acl_get('u_use_robbery'), 'USER_POINTS' => sprintf($this->functions_points->number_format_points($checked_user['user_points'])))); } // Generate the page header page_header($points_values['lottery_name']); // Generate the page template $this->template->set_filenames(array('body' => 'points/points_lottery.html')); page_footer(); }
public function index_modify_page_title($event) { if (isset($this->config['points_name'])) { $points_config = $this->cache->get('points_config'); $points_values = $this->cache->get('points_values'); // Generate the bank statistics $sql_array = array('SELECT' => 'SUM(holding) AS total_holding, count(user_id) AS total_users', 'FROM' => array($this->points_bank_table => 'b'), 'WHERE' => 'id > 0'); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $b_row = $this->db->sql_fetchrow($result); $bankholdings = $b_row['total_holding'] ? $b_row['total_holding'] : 0; $bankusers = $b_row['total_users']; // Create richest users - cash and bank $limit = $points_values['number_show_top_points']; $sql_array = array('SELECT' => 'u.user_id, u.username, u.user_colour, u.user_points, b.holding', 'FROM' => array(USERS_TABLE => 'u'), 'LEFT_JOIN' => array(array('FROM' => array($this->points_bank_table => 'b'), 'ON' => 'u.user_id = b.user_id'))); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); // Create a new array for the users $rich_users = array(); // Create sorting array $rich_users_sort = array(); // Loop all users array to escape the 0 points users while ($row = $this->db->sql_fetchrow($result)) { if ($row['user_points'] > 0 || $row['holding'] > 0) { $total_points = $row['user_points'] + $row['holding']; $index = $row['user_id']; $rich_users[$index] = array('total_points' => $total_points, 'username' => $row['username'], 'user_colour' => $row['user_colour'], 'user_id' => $index); $rich_users_sort[$index] = $total_points; } } $this->db->sql_freeresult($result); // Sort by points desc arsort($rich_users_sort); // Extract the user ids $rich_users_sort = array_keys($rich_users_sort); // Create new sorted rich users array $rich_users_sorted = array(); // Check, if number of users in array is below the set limit $new_limit = sizeof($rich_users) < $limit ? sizeof($rich_users) : $limit; for ($i = 0; $i < $new_limit; $i++) { $rich_users_sorted[] = $rich_users[$rich_users_sort[$i]]; } // Send to template foreach ($rich_users_sorted as $var) { $this->template->assign_block_vars('rich_user', array('USERNAME' => get_username_string('full', $var['user_id'], $var['username'], $var['user_colour']), 'SUM_POINTS' => $this->functions_points->number_format_points($var['total_points']), 'SUM_POINTS_NAME' => $this->config['points_name'])); } //Generate the points statistics $sql_array = array('SELECT' => 'SUM(user_points) AS total_points', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_points > 0'); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $b_row = $this->db->sql_fetchrow($result); $totalpoints = $b_row['total_points'] ? $b_row['total_points'] : 0; $lottery_time = $this->user->format_date($points_values['lottery_last_draw_time'] + $points_values['lottery_draw_period'], false, true); // Run Lottery if ($points_values['lottery_draw_period'] != 0 && $points_values['lottery_last_draw_time'] + $points_values['lottery_draw_period'] - time() < 0) { if (!function_exists('send_pm')) { include $this->phpbb_root_path . 'includes/functions_privmsgs.' . $this->phpEx; } $this->functions_points->run_lottery(); } $this->template->assign_vars(array('TOTAL_BANK_USER' => sprintf($this->user->lang['POINTS_BUPOINTS_TOTAL'], $bankusers, $points_values['bank_name']), 'TOTAL_BANK_POINTS' => sprintf($this->user->lang['POINTS_BPOINTS_TOTAL'], $this->functions_points->number_format_points($bankholdings), $this->config['points_name'], $points_values['bank_name']), 'TOTAL_POINTS_USER' => sprintf($this->user->lang['POINTS_TOTAL'], $this->functions_points->number_format_points($totalpoints), $this->config['points_name']), 'LOTTERY_TIME' => sprintf($this->user->lang['POINTS_LOTTERY_TIME'], $lottery_time), 'S_DISPLAY_LOTTERY' => $points_config['display_lottery_stats'] ? true : false, 'S_DISPLAY_POINTS_STATS' => $points_config['stats_enable'] ? true : false, 'S_DISPLAY_INDEX' => $points_values['number_show_top_points'] > 0 ? true : false)); } }