public function submit_post_end($event) { $points_config = $this->cache->get('points_config'); $points_values = $this->cache->get('points_values'); if ($this->config['points_enable']) { $data = $event['data']; $mode = $event['mode']; $poll = $event['poll']; $post_id = (int) $data['post_id']; $topic_id = (int) $data['topic_id']; $forum_id = (int) $data['forum_id']; $user_id = (int) $this->user->data['user_id']; // Send the user_id away to check for a bonus increment $this->functions_points->random_bonus_increment($user_id); /** * Grab our message and strip it clean. * This means removing all BBCode, * and removing text inside code and quote blocks */ $message = $this->functions_points->strip_text($data['message']); // Set default values $topic_word = $topic_char = $forum_topic = 0; $post_word = $post_char = $forum_post = 0; $difference = $total_points = $prev_points = 0; $has_attach = $per_attach = 0; $total_attachments = $points_attach = 0; $has_poll = $per_poll = $points_poll = $total_poll_options = 0; // We grab global points increment $topic_word = $points_values['points_per_topic_word']; // Points per word in a topic $topic_char = $points_values['points_per_topic_character']; // Points per character in a topic $post_word = $points_values['points_per_post_word']; // Points per word in a post (reply) $post_char = $points_values['points_per_post_character']; // Points per word in a post (reply) $has_attach = $points_values['points_per_attach']; // Points for having attachments in your post $per_attach = $points_values['points_per_attach_file']; // Points per attachment in your post $has_poll = $points_values['points_per_poll']; // Points for having a poll in your topic $per_poll = $points_values['points_per_poll_option']; // Points per poll option in your topic // We grab forum specific points increment $sql = 'SELECT forum_peredit, forum_perpost, forum_pertopic, forum_cost_topic, forum_cost_post FROM ' . FORUMS_TABLE . ' WHERE forum_id = ' . (int) $forum_id; $result = $this->db->sql_query($sql); $forum = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); // First we check if we have to pay for new topics/post if ($mode == 'post' && $forum['forum_cost_topic'] > 0 && $this->auth->acl_get('f_pay_topic', (int) $forum_id)) { $this->functions_points->substract_points((int) $user_id, $forum['forum_cost_topic']); } else { if (($mode == 'reply' || $mode == 'quote') && $forum['forum_cost_post'] > 0 && $this->auth->acl_get('f_pay_post', (int) $forum_id)) { $this->functions_points->substract_points((int) $user_id, $forum['forum_cost_post']); } } // We grab some specific message data $sizeof_msg = sizeof(explode(' ', $message)); // Amount of words $chars_msg = utf8_strlen($message); // Amount of characters // Check if the post has attachment, if so calculate attachment points if (!empty($data['attachment_data'])) { $total_attachments = sizeof($data['attachment_data']); $points_attach = $total_attachments * $per_attach + $has_attach; } // Check if the post has a poll, if so calculate poll points if (!empty($poll['poll_options'])) { $total_poll_options = sizeof($poll['poll_options']); $points_poll = $total_poll_options * $per_poll + $has_poll; } // If it's a new topic if ($mode == 'post' && $forum['forum_pertopic'] > 0) { // We calculate the total points $words_points = $topic_word * $sizeof_msg; $chars_points = $topic_char * $chars_msg; $total_points = $words_points + $chars_points + $forum['forum_pertopic'] + $points_attach + $points_poll; // We add the total points $this->functions_points->add_points($user_id, $total_points); // Add to the user $this->functions_points->add_points_to_table($post_id, $total_points, 'topic', $total_attachments, $total_poll_options); // Add to the post table } else { if (($mode == 'reply' || $mode == 'quote') && $forum['forum_perpost'] > 0) { // We calculate the total points $words_points = $post_word * $sizeof_msg; $chars_points = $post_char * $chars_msg; $total_points = $words_points + $chars_points + $forum['forum_perpost'] + $points_attach; // We add the total points $this->functions_points->add_points($user_id, $total_points); // Add to the user $this->functions_points->add_points_to_table($post_id, $total_points, 'post', $total_attachments, 0); // Add to the post table } else { if (($mode == 'edit_topic' || $mode == 'edit_first_post') && $forum['forum_peredit'] > 0) { // We calculate the total points $words_points = $topic_word * $sizeof_msg; $chars_points = $topic_char * $chars_msg; $total_points = $words_points + $chars_points + $forum['forum_peredit'] + $points_attach + $points_poll; // We grab previously received points amount $sql = 'SELECT points_topic_received FROM ' . POSTS_TABLE . ' WHERE post_id = ' . (int) $post_id; $result = $this->db->sql_query($sql); $prev_points = $this->db->sql_fetchfield('points_topic_received'); $this->db->sql_freeresult($result); // We calculate the difference $difference = $total_points - $prev_points; // We add the difference, only if it's positive, cause we're generous :-) if ($difference > 0) { $this->functions_points->add_points($user_id, $difference); // Add to the user $this->functions_points->add_points_to_table($post_id, $total_points, 'topic', $total_attachments, $total_poll_options); // Update to the post table } else { return; // "AM I NOT MERCIFUL??" - Caesar Commodus (Gladiator [2000]) } } else { if (($mode == 'edit' || $mode == 'edit_last_post') && $forum['forum_peredit'] > 0) { // We calculate the total points $words_points = $post_word * $sizeof_msg; $chars_points = $post_char * $chars_msg; $total_points = $words_points + $chars_points + $forum_['forum_peredit'] + $points_attach; // We grab previously received points amount $sql = 'SELECT points_post_received FROM ' . POSTS_TABLE . ' WHERE post_id = ' . (int) $post_id; $result = $this->db->sql_query($sql); $prev_points = $this->db->sql_fetchfield('points_post_received'); $this->db->sql_freeresult($result); // We calculate the difference $difference = $total_points - $prev_points; // We add the difference, only if it's positive, cause we're generous :-) if ($difference > 0) { $this->functions_points->add_points($user_id, $difference); // Add to the user $this->functions_points->add_points_to_table($post_id, $total_points, 'post', $total_attachments, 0); // Update to the post table } else { return; // "AM I NOT MERCIFUL??" - Caesar Commodus (Gladiator [2000]) } } else { // We do nothing.. return; // The only thing necessary for the triumph of evil, is for good men to do nothing. - Edmund Burke } } } } } else { return; } }
function main($checked_user) { // 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); // Grab transfer fee $sql = 'SELECT transfer_fee FROM ' . $this->points_values_table; $result = $this->db->sql_query($sql); $transfer_fee = $this->db->sql_fetchfield('transfer_fee'); $this->db->sql_freeresult($result); // Grab the variables $message = $this->request->variable('comment', '', true); $adm_points = $this->request->variable('adm_points', false); $transfer_id = $this->request->variable('i', 0); $post_id = $this->request->variable('post_id', 0); add_form_key('transfer_points'); // Check, if transferring is allowed if (!$points_config['transfer_enable']) { $message = $this->user->lang['TRANSFER_REASON_TRANSFER'] . '<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' => 'transfer_user')), 'FORUM_NAME' => sprintf($this->user->lang['TRANSFER_TITLE'], $this->config['points_name']))); $submit = isset($_POST['submit']) ? true : false; if ($submit) { if (!check_form_key('transfer_points')) { trigger_error('FORM_INVALID'); } // Get variables for transferring $am = round($this->request->variable('amount', 0.0), 2); $comment = $this->request->variable('comment', '', true); // Check, if the sender has enough cash if ($this->user->data['user_points'] < $am) { $message = sprintf($this->user->lang['TRANSFER_REASON_MINPOINTS'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if the amount is 0 or below if ($am <= 0) { $message = sprintf($this->user->lang['TRANSFER_REASON_UNDERZERO'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if the user is trying to send to himself if ($this->user->data['user_id'] == $checked_user['user_id']) { $message = sprintf($this->user->lang['TRANSFER_REASON_YOURSELF'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Add cash to receiver $amount = (100 - $transfer_fee) / 100 * $am; // Deduct the transfer fee $this->functions_points->add_points($checked_user['user_id'], $amount); // Remove cash from sender $this->functions_points->substract_points($this->user->data['user_id'], $am); // Get current time for logs $current_time = time(); // Add transfer information to the log $text = utf8_normalize_nfc($message); $sql = 'INSERT INTO ' . $this->points_log_table . ' ' . $this->db->sql_build_array('INSERT', array('point_send' => (int) $this->user->data['user_id'], 'point_recv' => (int) $checked_user['user_id'], 'point_amount' => $am, 'point_sendold' => $this->user->data['user_points'], 'point_recvold' => $checked_user['user_points'], 'point_comment' => $text, 'point_type' => '1', 'point_date' => $current_time)); $this->db->sql_query($sql); // Send pm to user if (!$points_config['transfer_pm_enable'] == 0 && $checked_user['user_allow_pm'] == 1) { // Select the user data for the PM $sql_array = array('SELECT' => '*', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $checked_user['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $user_row = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); $points_name = $this->config['points_name']; $comment = $this->db->sql_escape($comment); $pm_subject = utf8_normalize_nfc(sprintf($this->user->lang['TRANSFER_PM_SUBJECT'])); $pm_text = utf8_normalize_nfc(sprintf($this->user->lang['TRANSFER_PM_BODY'], $amount, $points_name, $text)); $poll = $uid = $bitfield = $options = ''; generate_text_for_storage($pm_subject, $uid, $bitfield, $options, false, false, false); generate_text_for_storage($pm_text, $uid, $bitfield, $options, true, true, true); $pm_data = array('address_list' => array('u' => array($checked_user['user_id'] => 'to')), 'from_user_id' => $this->user->data['user_id'], 'from_username' => $this->user->data['username'], 'icon_id' => 0, 'from_user_ip' => '', 'enable_bbcode' => true, 'enable_smilies' => true, 'enable_urls' => true, 'enable_sig' => true, 'message' => $pm_text, 'bbcode_bitfield' => $bitfield, 'bbcode_uid' => $uid); submit_pm('post', $pm_subject, $pm_data, false); } $message = sprintf($this->user->lang['TRANSFER_REASON_TRANSUCC'], $this->functions_points->number_format_points($am), $this->config['points_name'], $checked_user['username']) . '<br /><br />' . ($post_id ? sprintf($this->user->lang['EDIT_P_RETURN_POST'], '<a href="' . append_sid("{$this->phpbb_root_path}viewtopic.{$this->phpEx}", "p=" . $post_id) . '">', '</a>') : sprintf($this->user->lang['EDIT_P_RETURN_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>')); trigger_error($message); $this->template->assign_vars(array('U_ACTION' => $this->u_action)); } $username_full = get_username_string('full', $checked_user['user_id'], $checked_user['username'], $checked_user['user_colour']); $this->template->assign_vars(array('L_TRANSFER_DESCRIPTION' => sprintf($this->user->lang['TRANSFER_DESCRIPTION'], $this->config['points_name']), 'POINTS_NAME' => $this->config['points_name'], 'POINTS_COMMENTS' => $points_config['comments_enable'] ? true : false, 'TRANSFER_FEE' => $transfer_fee, 'U_TRANSFER_NAME' => sprintf($this->user->lang['TRANSFER_TO_NAME'], $username_full, $this->config['points_name']), 'S_ALLOW_SEND_PM' => $this->auth->acl_get('u_sendpm'))); // Generate the page page_header(sprintf($this->user->lang['TRANSFER_TITLE'], $this->config['points_name'])); // Generate the page template $this->template->set_filenames(array('body' => 'points/points_transfer.html')); page_footer(); }
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); // Check, if user is allowed to use the robbery if (!$this->auth->acl_get('u_use_robbery')) { $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); } // Check, if robbery is enabled if (!$points_config['robbery_enable']) { $message = $this->user->lang['ROBBERY_DISABLED'] . '<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' => 'robbery')), 'FORUM_NAME' => sprintf($this->user->lang['POINTS_ROBBERY'], $this->config['points_name']))); // Read out cash of current user $pointsa = $this->user->data['user_points']; // Check key add_form_key('robbery_attack'); $submit = isset($_POST['submit']) ? true : false; if ($submit) { if (!check_form_key('robbery_attack')) { trigger_error('FORM_INVALID'); } // Add all required informations $username = utf8_normalize_nfc($this->request->variable('username', '', true)); $attacked_amount = round($this->request->variable('attacked_amount', 0.0), 2); if ($attacked_amount <= 0) { $message = $this->user->lang['ROBBERY_TOO_SMALL_AMOUNT'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user has entered the name of the user to be robbed if (empty($username)) { $message = $this->user->lang['ROBBERY_NO_ID_SPECIFIED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user tries to rob himself if ($this->user->data['username_clean'] == utf8_clean_string($username)) { $message = $this->user->lang['ROBBERY_SELF'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user is trying to rob to much cash if ($points_values['robbery_loose'] != 0) { if ($this->user->data['user_points'] < $attacked_amount / 100 * $points_values['robbery_loose']) { $message = $this->user->lang['ROBBERY_TO_MUCH'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } // Select the user_id of user to be robbed $sql_array = array('SELECT' => 'user_id', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'username_clean = "' . $this->db->sql_escape(utf8_clean_string($username)) . '"'); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $user_id = (int) $this->db->sql_fetchfield('user_id'); $this->db->sql_freeresult($result); // If no matching user id is found if (!$user_id) { $message = $this->user->lang['POINTS_NO_USER'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // If the robbed user doesn't have enough cash $sql_array = array('SELECT' => 'user_points', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $user_id); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $pointsa = $this->db->sql_fetchfield('user_points'); $this->db->sql_freeresult($result); if ($attacked_amount > $pointsa) { $message = $this->user->lang['ROBBERY_TO_MUCH_FROM_USER'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user tries to rob more than x % of users cash if ($points_values['robbery_max_rob'] != 0) { if ($attacked_amount > $pointsa / 100 * $points_values['robbery_max_rob']) { $message = sprintf($this->user->lang['ROBBERY_MAX_ROB'], $points_values['robbery_max_rob']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } // Get some info about the robbed user $user_namepoints = get_username_string('full', $checked_user['user_id'], $checked_user['username'], $checked_user['user_colour']); // Genarate a random number $rand_base = $points_values['robbery_chance']; $rand_value = rand(0, 100); // If robbery was successful and notification is enabled, send notification if ($rand_value <= $rand_base) { $this->functions_points->add_points($this->user->data['user_id'], $attacked_amount); $this->functions_points->substract_points($user_id, $attacked_amount); // Add robbery to the log $sql = 'INSERT INTO ' . $this->points_log_table . ' ' . $this->db->sql_build_array('INSERT', array('point_send' => (int) $this->user->data['user_id'], 'point_recv' => $user_id, 'point_amount' => $attacked_amount, 'point_sendold' => $this->user->data['user_points'], 'point_recvold' => $pointsa, 'point_comment' => '', 'point_type' => '3', 'point_date' => time())); $this->db->sql_query($sql); if ($points_config['robbery_notify']) { // Increase our notification sent counter $this->config->increment('points_notification_id', 1); // Store the notification data we will use in an array $data = array('points_notify_id' => (int) $this->config['points_notification_id'], 'points_notify_msg' => sprintf($this->user->lang['NOTIFICATION_ROBBERY_SUCCES'], $attacked_amount, $this->config['points_name']), 'sender' => (int) $this->user->data['user_id'], 'receiver' => (int) $user_id, 'mode' => 'robbery'); // Create the notification $this->notification_manager->add_notifications('dmzx.ultimatepoints.notification.type.points', $data); } $message = $this->user->lang['ROBBERY_SUCCESFUL'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } else { if ($points_values['robbery_loose'] != 0) { $lose = $attacked_amount / 100 * $points_values['robbery_loose']; $this->functions_points->substract_points($this->user->data['user_id'], $lose); if ($points_config['robbery_notify']) { // Increase our notification sent counter $this->config->increment('points_notification_id', 1); // Store the notification data we will use in an array $data = array('points_notify_id' => (int) $this->config['points_notification_id'], 'points_notify_msg' => $this->user->lang['NOTIFICATION_ROBBERY_FAILED'], 'sender' => (int) $this->user->data['user_id'], 'receiver' => (int) $user_id, 'mode' => 'robbery'); // Create the notification $this->notification_manager->add_notifications('dmzx.ultimatepoints.notification.type.points', $data); } $message = $this->user->lang['ROBBERY_BAD'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'robbery')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } $this->template->assign_vars(array('USER_NAME' => get_username_string('full', $checked_user['user_id'], $points_config['username'], $points_config['user_colour']), 'U_ACTION' => $this->u_action, 'S_HIDDEN_FIELDS' => $hidden_fields)); } $this->template->assign_vars(array('USER_POINTS' => sprintf($this->functions_points->number_format_points($pointsa)), 'POINTS_NAME' => $this->config['points_name'], 'LOTTERY_NAME' => $points_values['lottery_name'], 'BANK_NAME' => $points_values['bank_name'], 'L_ROBBERY_CHANCE' => sprintf($this->user->lang['ROBBERY_CHANCE'], $this->functions_points->number_format_points($points_values['robbery_max_rob']), $this->functions_points->number_format_points($points_values['robbery_chance'])), 'L_ROBBERY_AMOUNTLOSE' => sprintf($this->user->lang['ROBBERY_AMOUNTLOSE'], $this->functions_points->number_format_points($points_values['robbery_loose'])), 'U_FIND_USERNAME' => append_sid("{$this->phpbb_root_path}memberlist.{$this->phpEx}", "mode=searchuser&form=post&field=username"), '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'))); // Generate the page page_header($this->user->lang['POINTS_ROBBERY']); // Generate the page template $this->template->set_filenames(array('body' => 'points/points_robbery.html')); page_footer(); }
function main() { // 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); // Check Points Config Table if Bank is Enabled $sql = 'SELECT config_value FROM ' . $this->points_config_table . ' WHERE config_name = "bank_enable"'; $result = $this->db->sql_query($sql); $is_bank_enabled = $this->db->sql_fetchfield('config_value'); $this->db->sql_freeresult($result); // Check if bank is enabled if (1 > $points_values['bank_pay_period']) { $message = $this->user->lang['BANK_ERROR_PAYOUTTIME_SHORT'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } if ($is_bank_enabled != 1) { $message = $this->user->lang['BANK_DISABLED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller') . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } if (!$this->auth->acl_get('u_use_bank')) { $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); } $withdrawtotal_check = ''; // Add part to bar $this->template->assign_block_vars('navlinks', array('U_VIEW_FORUM' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')), 'FORUM_NAME' => $points_values['bank_name'])); // Check, if it's time to pay users $time = time(); if ($time - $points_values['bank_last_restocked'] > $points_values['bank_pay_period']) { $this->functions_points->set_points_values('bank_last_restocked', $time); // Pay the users $sql = 'UPDATE ' . $this->points_bank_table . ' SET holding = holding + round((holding / 100) * ' . $points_values['bank_interest'] . ') WHERE holding < ' . $points_values['bank_interestcut'] . ' OR ' . $points_values['bank_interestcut'] . ' = 0'; $this->db->sql_query($sql); // Mantain the bank costs if ($points_values['bank_cost'] != '0') { $sql = 'UPDATE ' . $this->points_bank_table . ' SET holding = holding - ' . $points_values['bank_cost'] . ' WHERE holding >= ' . $points_values['bank_cost'] . ''; $this->db->sql_query($sql); } // Increase our notification sent counter $this->config->increment('points_notification_id', 1); $data = array('points_notify_id' => (int) $this->config['points_notification_id'], 'points_notify_msg' => $this->user->lang['NOTIFICATION_BANK_PAYOUT'], 'sender' => $this->user->data['user_id'], 'receiver' => (int) $this->user->data['user_id'], 'mode' => 'bank'); // Send the notification $this->notification_manager->add_notifications('dmzx.ultimatepoints.notification.type.points', $data); $sql_array = array('SELECT' => 'username', '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); $points_user = $this->db->sql_fetchrow($result); // Add logs $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_MOD_POINTS_BANK_PAYS', false, array($points_user['username'])); } $sql_array = array('SELECT' => '*', 'FROM' => array($this->points_bank_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); $row = $this->db->sql_fetchrow($result); $action = $this->request->variable('action', ''); add_form_key('bank_action'); // Default bank info page if (empty($action)) { $this->template->set_filenames(array('body' => 'points/points_bank.html')); if (!isset($row['holding']) && $this->user->data['user_id'] > 0 && $this->user->data['username'] != ANONYMOUS) { $this->template->assign_block_vars('no_account', array('USER_NO_ACCOUNT' => sprintf($this->user->lang['BANK_USER_NO_ACCOUNT'], $points_values['bank_name']), 'OPEN_ACCOUNT' => sprintf($this->user->lang['BANK_OPEN_ACCOUNT'], '<a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank', 'action' => 'createaccount')) . '" title="' . $this->user->lang['BANK_OPEN_ACCOUNT'] . '!">', '</a>'))); } else { if ($this->user->data['user_id'] > 0 && $this->user->data['username'] != ANONYMOUS) { $this->template->assign_block_vars('has_account', array()); } } $sql_array = array('SELECT' => 'SUM(holding) AS total_holding, count(user_id) AS total_users', 'FROM' => array($this->points_bank_table => 'u'), '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']; $withdrawtotal = $row['fees'] == 'on' ? $row['holding'] - round($row['holding'] / 100 * $points_values['bank_fees']) : $row['holding']; if ($row['fees'] == 'on' && $this->user->lang['BANK_WITHDRAW_RATE']) { $this->template->assign_block_vars('switch_withdraw_fees', array()); } if ($points_values['bank_min_withdraw']) { $this->template->assign_block_vars('switch_min_with', array()); } if ($points_values['bank_min_deposit']) { $this->template->assign_block_vars('switch_min_depo', array()); } $banklocation = ' -> <a href="' . $this->helper->route('dmzx_ultimatepoints_controller') . '" class="nav">' . $points_values['bank_name'] . '</a>'; $title = $points_values['bank_name'] . '; ' . (!is_numeric($row['holding']) ? $this->user->lang['BANK_ACCOUNT_OPENING'] : $this->user->lang['BANK_DEPOSIT_WITHDRAW'] . ' ' . $this->config['points_name']); page_header($points_values['bank_name']); $bank_enable = $is_bank_enabled; $this->template->assign_vars(array('BANK_NAME' => $points_values['bank_name'], 'BANKLOCATION' => $banklocation, 'BANK_OPENED' => $this->user->format_date($bank_enable), 'BANK_HOLDINGS' => sprintf($this->functions_points->number_format_points($bankholdings)), 'BANK_ACCOUNTS' => $bankusers, 'BANK_FEES' => $points_values['bank_fees'], 'BANK_INTEREST' => $points_values['bank_interest'], 'BANK_MIN_WITH' => sprintf($this->functions_points->number_format_points($points_values['bank_min_withdraw'])), 'BANK_MIN_DEPO' => sprintf($this->functions_points->number_format_points($points_values['bank_min_deposit'])), 'BANK_MAX_HOLD' => sprintf($this->functions_points->number_format_points($points_values['bank_interestcut'])), 'BANK_TITLE' => $title, 'POINTS_NAME' => $this->config['points_name'], 'USER_BALANCE' => sprintf($this->functions_points->number_format_points($row['holding'])), 'USER_GOLD' => $this->user->data['user_points'], 'USER_WITHDRAW' => sprintf(number_format($withdrawtotal, 2, '.', '')), 'U_WITHDRAW' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank', 'action' => 'withdraw')), 'U_DEPOSIT' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank', 'action' => 'deposit')))); } else { if ($action == 'createaccount') { if (!$this->user->data['is_registered']) { login_box(); } $this->template->set_filenames(array('body' => 'points/points_bank.html')); if (is_numeric($row['holding'])) { trigger_error(' ' . $this->user->lang['YES_ACCOUNT'] . '!<br /><br />' . sprintf($this->user->lang['BANK_BACK_TO_BANK'], '<a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">', '</a>') . sprintf('<br />' . $this->user->lang['BANK_BACK_TO_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>')); } else { $sql = 'INSERT INTO ' . $this->points_bank_table . ' ' . $this->db->sql_build_array('INSERT', array('user_id' => (int) $this->user->data['user_id'], 'opentime' => time(), 'fees' => 'on')); $this->db->sql_query($sql); trigger_error(' ' . $this->user->lang['BANK_WELCOME_BANK'] . ' ' . $points_values['bank_name'] . '! <br />' . $this->user->lang['BANK_START_BALANCE'] . '<br />' . $this->user->lang['BANK_YOUR_ACCOUNT'] . '!<br /><br />' . sprintf($this->user->lang['BANK_BACK_TO_BANK'], '<a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">', '</a>') . sprintf('<br />' . $this->user->lang['BANK_BACK_TO_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>')); } } else { if ($action == 'deposit') { if (!check_form_key('bank_action')) { trigger_error('FORM_INVALID'); } $deposit = round($this->request->variable('deposit', 0.0), 2); if (!$this->user->data['is_registered']) { login_box(); } if ($deposit < $points_values['bank_min_deposit']) { $message = sprintf($this->user->lang['BANK_DEPOSIT_SMALL_AMOUNT'], $points_values['bank_min_deposit'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } else { if ($deposit < 1) { $message = $this->user->lang['BANK_ERROR_DEPOSIT'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } else { if ($deposit > $this->user->data['user_points']) { $message = sprintf($this->user->lang['BANK_ERROR_NOT_ENOUGH_DEPOSIT'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } } $this->functions_points->substract_points($this->user->data['user_id'], $deposit); $sql_array = array('SELECT' => 'holding, totaldeposit', 'FROM' => array($this->points_bank_table => 'b'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $user_bank = $this->db->sql_fetchrow($result); $user_holding = $user_bank['holding']; $user_totaldeposit = $user_bank['totaldeposit']; $this->db->sql_freeresult($result); $data = array('holding' => $user_holding + $deposit, 'totaldeposit' => $user_totaldeposit + $deposit); $sql = 'UPDATE ' . $this->points_bank_table . ' SET ' . $this->db->sql_build_array('UPDATE', $data) . ' WHERE user_id = ' . (int) $this->user->data['user_id']; $this->db->sql_query($sql); trigger_error(' ' . $this->user->lang['BANK_HAVE_DEPOSIT'] . ' ' . sprintf($this->functions_points->number_format_points($deposit)) . ' ' . $this->config['points_name'] . ' ' . $this->user->lang['BANK_TO_ACCOUNT'] . '<br />' . $this->user->lang['BANK_NEW_BALANCE'] . ' ' . sprintf($this->functions_points->number_format_points($row['holding'] + $deposit)) . '.<br />' . $this->user->lang['BANK_LEAVE_WITH'] . ' ' . sprintf($this->functions_points->number_format_points($this->user->data['user_points'] - $deposit)) . ' ' . $this->config['points_name'] . ' ' . $this->user->lang['BANK_ON_HAND'] . '.<br /><br />' . sprintf($this->user->lang['BANK_BACK_TO_BANK'], '<a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">', '</a>') . sprintf('<br />' . $this->user->lang['BANK_BACK_TO_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>')); } else { if ($action == 'withdraw') { if (!check_form_key('bank_action')) { trigger_error('FORM_INVALID'); } $withdraw = round($this->request->variable('withdraw', 0.0), 2); if (!$this->user->data['is_registered']) { login_box(); } if ($withdraw < $points_values['bank_min_withdraw']) { $message = sprintf($this->user->lang['BANK_WITHDRAW_SMALL_AMOUNT'], $points_values['bank_min_withdraw'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } else { if ($withdraw < 1) { $message = $this->user->lang['BANK_ERROR_WITHDRAW'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } } if ($row['fees'] == 'on') { $withdrawtotal_check = $row['fees'] == 'on' ? $row['holding'] - round($row['holding'] / 100 * $points_values['bank_fees']) : $row['holding']; $fees = round($row['holding'] / 100 * $points_values['bank_fees']); if ($withdraw == $withdrawtotal_check) { $withdrawtotal = $withdraw + $fees; } else { $withdrawtotal = round($withdraw / 100 * $points_values['bank_fees']) + $withdraw; } } else { $withdrawtotal = 0; } if ($row['holding'] < $withdrawtotal) { $message = sprintf($this->user->lang['BANK_ERROR_NOT_ENOUGH_WITHDRAW'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Transfer points to users cash account $this->functions_points->add_points($this->user->data['user_id'], $withdraw); // Update users bank account $sql_array = array('SELECT' => 'holding, totalwithdrew', 'FROM' => array($this->points_bank_table => 'b'), 'WHERE' => 'user_id = ' . (int) $this->user->data['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $user_bank = $this->db->sql_fetchrow($result); $user_holding = $user_bank['holding']; $user_totalwithdrew = $user_bank['totalwithdrew']; $this->db->sql_freeresult($result); $data = array('holding' => $user_holding - $withdrawtotal, 'totalwithdrew' => $user_totalwithdrew + $withdraw); $sql = 'UPDATE ' . $this->points_bank_table . ' SET ' . $this->db->sql_build_array('UPDATE', $data) . ' WHERE user_id = ' . (int) $this->user->data['user_id']; $this->db->sql_query($sql); trigger_error(' ' . $this->user->lang['BANK_HAVE_WITHDRAW'] . ' ' . sprintf($this->functions_points->number_format_points($withdraw)) . ' ' . $this->config['points_name'] . ' ' . $this->user->lang['BANK_FROM_ACCOUNT'] . '. <br />' . $this->user->lang['BANK_NEW_BALANCE'] . ' ' . sprintf($this->functions_points->number_format_points($row['holding'] - $withdrawtotal)) . ' ' . $this->config['points_name'] . '.<br />' . $this->user->lang['BANK_NOW_HAVE'] . ' ' . sprintf($this->functions_points->number_format_points($this->user->data['user_points'] + $withdraw)) . ' ' . $this->config['points_name'] . ' ' . $this->user->lang['BANK_ON_HAND'] . '.<br /><br />' . sprintf($this->user->lang['BANK_BACK_TO_BANK'], '<a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank')) . '">', '</a>') . sprintf('<br />' . $this->user->lang['BANK_BACK_TO_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>')); } else { redirect($this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'bank'))); } } } } // Generate most rich banker to show $limit = $points_values['number_show_top_points']; $sql_array = array('SELECT' => 'u.user_id, u.username, u.user_colour, b.*', 'FROM' => array(USERS_TABLE => 'u'), 'LEFT_JOIN' => array(array('FROM' => array($this->points_bank_table => 'b'), 'ON' => 'u.user_id = b.user_id')), 'WHERE' => 'b.holding > 0', 'ORDER_BY' => 'b.holding DESC, u.username ASC'); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query_limit($sql, $limit); while ($row = $this->db->sql_fetchrow($result)) { $this->template->assign_block_vars('bank', array('USERNAME' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), 'POINT' => sprintf($this->functions_points->number_format_points($row['holding'])))); } $this->db->sql_freeresult($result); // Generate the time format function time_format($secs, $filter = false) { global $user; $output = ''; $filter = $filter ? explode('|', strtolower($filter)) : false; $time_array = array('year' => 60 * 60 * 24 * 365, 'month' => 60 * 60 * 24 * 30, 'week' => 60 * 60 * 24 * 7, 'day' => 60 * 60 * 24, 'hour' => 60 * 60, 'minute' => 60, 'second' => 0); foreach ($time_array as $key => $value) { if ($filter && !in_array($key, $filter)) { continue; } $item = $value ? intval(intval($secs) / $value) : intval($secs); if ($item > 0) { $secs = $secs - $item * $value; $output .= ' ' . $item . ' ' . ($item > 1 ? $user->lang['TIME_' . strtoupper($key) . 'S'] : $user->lang['TIME_' . strtoupper($key)]); } } return $output; } $this->template->assign_vars(array('BANK_INTEREST_PERIOD' => time_format($points_values['bank_pay_period']), 'BANK_COST' => sprintf($this->functions_points->number_format_points($points_values['bank_cost'])), 'LOTTERY_NAME' => $points_values['lottery_name'], 'BANK_NAME' => $points_values['bank_name'], 'BANK_NOBODY_IN_BANK' => sprintf($this->user->lang['BANK_NOBODY_IN_BANK'], $this->config['points_name'], $points_values['bank_name']), 'S_DISPLAY_INDEX' => $points_values['number_show_top_points'] > 0 ? true : false, 'L_BANK_DESCRIPTION' => sprintf($this->user->lang['BANK_DESCRIPTION'], $this->config['points_name']), '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'))); page_footer(); }
function main() { // Only registered users can go beyond this point if (!$this->user->data['is_registered']) { if ($this->user->data['is_bot']) { redirect(append_sid("{$this->phpbb_root_path}index.{$this->phpEx}")); } login_box('', $this->user->lang['LOGIN_INFO']); } $adm_points = $this->request->variable('adm_points', false); $u_id = $this->request->variable('user_id', 0); $post_id = $this->request->variable('post_id', 0); $method = $this->request->variable('method', ''); add_form_key('points_edit'); if (empty($u_id)) { $message = $this->user->lang['EDIT_NO_ID_SPECIFIED'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'points_edit')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } if ($adm_points != false && ($this->auth->acl_get('a_') || $this->auth->acl_get('m_chg_points'))) { $this->template->assign_block_vars('administer_points', array()); $submit = isset($_POST['submit']) ? true : false; if ($submit) { if (!check_form_key('points_edit')) { trigger_error('FORM_INVALID'); } $new_points = round($this->request->variable('points', 0.0), 2); // Do we set new points amount if ($method == 'set') { $this->functions_points->set_points($u_id, $new_points); } else { if ($method == 'add') { $this->functions_points->add_points($u_id, $new_points); } else { if ($method == 'substract') { $this->functions_points->substract_points($u_id, $new_points); } } } $sql_array = array('SELECT' => 'user_id, username, user_points, user_colour', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $u_id); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $points_user = $this->db->sql_fetchrow($result); // Add logs $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_MOD_POINTS', false, array($points_user['username'])); $message = $post_id ? sprintf($this->user->lang['EDIT_P_RETURN_POST'], '<a href="' . append_sid("{$this->phpbb_root_path}viewtopic.{$this->phpEx}", "p=" . $post_id) . '">', '</a>') : sprintf($this->user->lang['EDIT_P_RETURN_INDEX'], '<a href="' . append_sid("{$this->phpbb_root_path}index.{$this->phpEx}") . '">', '</a>'); trigger_error(sprintf($this->user->lang['EDIT_POINTS_SET'], $this->config['points_name']) . $message); } else { $sql_array = array('SELECT' => 'user_id, username, user_points, user_colour', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $u_id); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $row = $this->db->sql_fetchrow($result); if (empty($u_id)) { $message = $this->user->lang['EDIT_USER_NOT_EXIST'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'points_edit')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } $hidden_fields = build_hidden_fields(array('user_id' => $u_id, 'post_id' => $post_id)); $this->template->assign_vars(array('USER_NAME' => get_username_string('full', $u_id, $row['username'], $row['user_colour']), 'POINTS_OF_USER' => sprintf($this->functions_points->number_format_points($row['user_points'])), 'POINTS_NAME' => $this->config['points_name'], 'CURRENT_VALUE' => $row['user_points'], 'L_POINTS_MODIFY' => sprintf($this->user->lang['EDIT_POINTS_MODIFY'], $this->config['points_name']), 'L_P_POINTS_TITLE' => sprintf($this->user->lang['EDIT_P_POINTS_TITLE'], $this->config['points_name']), 'L_USERNAME' => $this->user->lang['USERNAME'], 'S_ACTION' => $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'points_edit', 'adm_points' => '1')), 'S_HIDDEN_FIELDS' => $hidden_fields, 'U_USER_LINK' => append_sid("{$this->phpbb_root_path}memberlist.{$this->phpEx}", "mode=viewprofile&u=" . $u_id))); } } // Generate the page page_header($this->user->lang['EDIT_POINTS_ADMIN']); // Generate the page template $this->template->set_filenames(array('body' => 'points/points_points_edit.html')); page_footer(); }
function main($checked_user) { add_form_key('transfer_user'); // 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); // 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); // Grab the message variable $message = $this->request->variable('comment', '', true); // Check, if transferring is allowed if (!$points_config['transfer_enable']) { $message = $this->user->lang['TRANSFER_REASON_TRANSFER'] . '<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 transfer module if (!$this->auth->acl_get('u_use_transfer')) { $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' => 'transfer_user')), 'FORUM_NAME' => sprintf($this->user->lang['TRANSFER_TITLE'], $this->config['points_name']))); $submit = isset($_POST['submit']) ? true : false; if ($submit) { if (!check_form_key('transfer_user')) { trigger_error('FORM_INVALID'); } // Grab needed variables for the transfer $am = round($this->request->variable('amount', 0.0), 2); $comment = $this->request->variable('comment', '', true); $username1 = $this->request->variable('username', '', true); $username = strtolower($username1); // Select the user data to transfer to $sql_array = array('SELECT' => '*', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'username_clean = "' . $this->db->sql_escape(utf8_clean_string($username)) . '"'); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $transfer_user = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); if ($transfer_user == null) { $message = $this->user->lang['TRANSFER_NO_USER_RETURN'] . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Select the old user_points from user_id to transfer to $sql_array = array('SELECT' => 'user_points', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $transfer_user['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $transfer_user_old_points = (int) $this->db->sql_fetchfield('user_points'); $this->db->sql_freeresult($result); // Check, if the sender has enough cash if ($this->user->data['user_points'] < $am) { $message = sprintf($this->user->lang['TRANSFER_REASON_MINPOINTS'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if the amount is 0 or below if ($am <= 0) { $message = sprintf($this->user->lang['TRANSFER_REASON_UNDERZERO'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Check, if user is trying to send to himself if ($this->user->data['user_id'] == $transfer_user['user_id']) { $message = sprintf($this->user->lang['TRANSFER_REASON_YOURSELF'], $this->config['points_name']) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); } // Add cash to receiver $amount = (100 - $points_values['transfer_fee']) / 100 * $am; // Deduct transfer fee $this->functions_points->add_points($transfer_user['user_id'], $amount); // Remove cash from sender $this->functions_points->substract_points($this->user->data['user_id'], $am); // Get current time for log $current_time = time(); // Add transferring information to the log $text = utf8_normalize_nfc($message); $sql = 'INSERT INTO ' . $this->points_log_table . ' ' . $this->db->sql_build_array('INSERT', array('point_send' => (int) $this->user->data['user_id'], 'point_recv' => (int) $transfer_user['user_id'], 'point_amount' => $am, 'point_sendold' => $this->user->data['user_points'], 'point_recvold' => $transfer_user_old_points, 'point_comment' => $text, 'point_type' => '1', 'point_date' => $current_time)); $this->db->sql_query($sql); // Send pm to receiver, if PM is enabled if (!$points_config['transfer_pm_enable'] == 0 && $transfer_user['user_allow_pm']) { $points_name = $this->config['points_name']; $comment = $this->db->sql_escape($comment); $pm_subject = utf8_normalize_nfc(sprintf($this->user->lang['TRANSFER_PM_SUBJECT'])); $pm_text = utf8_normalize_nfc(sprintf($this->user->lang['TRANSFER_PM_BODY'], $amount, $points_name, $text)); $poll = $uid = $bitfield = $options = ''; generate_text_for_storage($pm_subject, $uid, $bitfield, $options, false, false, false); generate_text_for_storage($pm_text, $uid, $bitfield, $options, true, true, true); $pm_data = array('address_list' => array('u' => array($transfer_user['user_id'] => 'to')), 'from_user_id' => $this->user->data['user_id'], 'from_username' => $this->user->data['username'], 'icon_id' => 0, 'from_user_ip' => '', 'enable_bbcode' => true, 'enable_smilies' => true, 'enable_urls' => true, 'enable_sig' => true, 'message' => $pm_text, 'bbcode_bitfield' => $bitfield, 'bbcode_uid' => $uid); submit_pm('post', $pm_subject, $pm_data, false); } // Change $username back to regular username $sql_array = array('SELECT' => 'username', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => 'user_id = ' . (int) $transfer_user['user_id']); $sql = $this->db->sql_build_query('SELECT', $sql_array); $result = $this->db->sql_query($sql); $show_user = $this->db->sql_fetchfield('username'); $this->db->sql_freeresult($result); // Show the successful transfer message $message = sprintf($this->user->lang['TRANSFER_REASON_TRANSUCC'], $this->functions_points->number_format_points($am), $this->config['points_name'], $show_user) . '<br /><br /><a href="' . $this->helper->route('dmzx_ultimatepoints_controller', array('mode' => 'transfer_user')) . '">« ' . $this->user->lang['BACK_TO_PREV'] . '</a>'; trigger_error($message); $this->template->assign_vars(array('U_ACTION' => $this->u_action)); } $this->template->assign_vars(array('USER_POINTS' => sprintf($this->functions_points->number_format_points($checked_user['user_points'])), 'POINTS_NAME' => $this->config['points_name'], 'POINTS_COMMENTS' => $points_config['comments_enable'] ? true : false, 'TRANSFER_FEE' => $points_values['transfer_fee'], 'LOTTERY_NAME' => $points_values['lottery_name'], 'BANK_NAME' => $points_values['bank_name'], 'L_TRANSFER_DESCRIPTION' => sprintf($this->user->lang['TRANSFER_DESCRIPTION'], $this->config['points_name']), '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_FIND_USERNAME' => append_sid("{$this->phpbb_root_path}memberlist.{$this->phpEx}", "mode=searchuser&form=post&field=username"), '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'), 'S_ALLOW_SEND_PM' => $this->auth->acl_get('u_sendpm'))); // Generate the page page_header(sprintf($this->user->lang['TRANSFER_TITLE'], $this->config['points_name'])); // Generate the page template $this->template->set_filenames(array('body' => 'points/points_transfer_user.html')); page_footer(); }