示例#1
0
function edit_bag()
{
    global $output, $bag_id, $sql, $core;
    // check chosen slots for injection
    $slots = array();
    $temp = $_GET["chosen_slot"];
    for ($i = 0; $i < count($temp); $i++) {
        if (is_numeric($temp[$i])) {
            $slots[] = $temp[$i];
        } else {
            error(lang("global", "err_invalid_input"));
        }
    }
    // build query list
    $query_list = "(";
    for ($i = 0; $i < count($temp); $i++) {
        $query_list .= $temp[$i] . ($i < count($temp) - 1 ? ", " : ")");
    }
    // get items
    $query = "SELECT * FROM point_system_prize_bag_items WHERE bag='" . $bag_id . "' AND slot IN " . $query_list;
    $result = $sql["mgr"]->query($query);
    $items = array();
    $item_counts = array();
    while ($row = $sql["mgr"]->fetch_assoc($result)) {
        $items[] = $row["item_id"];
        $item_counts[] = $row["item_count"];
    }
    $item_temp = explode("-", $_GET["item_character"]);
    $item_realm_id = $item_temp[0];
    $item_receiver = $item_temp[1];
    $item_to = $item_temp[2];
    $temp = array();
    $temp_counts = array();
    while (count($items) != 0) {
        if (count($temp)) {
            unset($temp);
            unset($temp_counts);
            $temp = array();
            $temp_counts = array();
        }
        $lim = count($items) > 12 ? 12 : count($items);
        for ($i = 0; $i < $lim; $i++) {
            $temp[] = array_pop($items);
            $temp_counts[] = array_pop($item_counts);
        }
        $mails = array();
        // if the money & item characters are the same, we only need to send one mail
        $mail["receiver"] = $item_receiver;
        $mail["subject"] = lang("points", "mail_subject_bag");
        $mail["body"] = lang("points", "mail_body_bag");
        $mail["att_gold"] = 0;
        $mail["att_item"] = $temp;
        $mail["att_stack"] = $temp_counts;
        $mail["receiver_name"] = $item_to;
        array_push($mails, $mail);
        // send
        if ($core == 1) {
            $result = send_ingame_mail_A($item_realm_id, $mails, true);
        } else {
            $result = send_ingame_mail_MT($item_realm_id, $mails, true);
        }
    }
    // remove the items from the bag
    $query = "DELETE FROM point_system_prize_bag_items WHERE bag='" . $bag_id . "' AND slot IN " . $query_list;
    $result = $sql["mgr"]->query($query);
    redirect("point_system.php?action=view_bag&bag_id=" . $bag_id);
}
示例#2
0
function send_mail()
{
    global $output, $logon_db, $characters_db, $realm_id, $action_permission, $user_name, $from_mail, $mailer_type, $smtp_cfg, $GMailSender, $sql, $core;
    // if we came here from Quest Item Vendor or Ultra Vendor,
    // we need to bypass the normal permissions
    if ($_SESSION["vendor_permission"]) {
        valid_login($action_permission["view"]);
        unset($_SESSION["vendor_permission"]);
    } else {
        valid_login($action_permission["update"]);
    }
    $type = isset($_GET["type"]) ? $_GET["type"] : "ingame_mail";
    if (empty($_GET["body"]) || empty($_GET["subject"]) || empty($_GET["group_sign"]) || empty($_GET["group_send"])) {
        redirect("mail.php?error=1");
    }
    $body = explode("\n", $_GET["body"]);
    $subject = $sql["char"]->quote_smart($_GET["subject"]);
    if (isset($_GET["to"]) && $_GET["to"] != "") {
        $to = $sql["char"]->quote_smart($_GET["to"]);
    } else {
        $to = 0;
        if (!isset($_GET["group_value"]) || $_GET["group_value"] === '') {
            redirect("mail.php?error=1");
        } else {
            $group_value = $sql["char"]->quote_smart($_GET["group_value"]);
            $group_sign = $sql["char"]->quote_smart($_GET["group_sign"]);
            $group_send = $sql["char"]->quote_smart($_GET["group_send"]);
        }
    }
    //$type = addslashes($type);
    $att_gold = $sql["char"]->quote_smart($_GET["money"]);
    for ($i = 0; $i < 12; $i++) {
        $temp_item = $sql["char"]->quote_smart($_GET["att_item" . ($i + 1)]);
        $temp_stack = $sql["char"]->quote_smart($_GET["att_stack" . ($i + 1)]);
        if ($temp_item != 0 && $temp_stack == 0) {
            $temp_stack = 1;
        }
        if ($temp_item != "0") {
            $att_item[] = $temp_item;
            $att_stack[] = $temp_stack;
        }
    }
    switch ($type) {
        case "email":
            require_once "libs/mailer/class.phpmailer.php";
            require_once "libs/mailer/authgMail_lib.php";
            $mail = new PHPMailer();
            $mail->Mailer = $mailer_type;
            if ($mailer_type == "smtp") {
                $mail->Host = $smtp_cfg["host"];
                $mail->Port = $smtp_cfg["port"];
                if ($smtp_cfg["user"] != "") {
                    $mail->SMTPAuth = true;
                    $mail->Username = $smtp_cfg["user"];
                    $mail->Password = $smtp_cfg["pass"];
                }
            }
            $value = NULL;
            for ($i = 0; $i < count($body); $i++) {
                $value .= $body[$i] . "\r\n";
            }
            $body = $value;
            $mail->From = $from_mail;
            $mail->FromName = $user_name;
            $mail->Subject = $subject;
            $mail->IsHTML(true);
            $body = str_replace("\n", "<br />", $body);
            $body = str_replace("\r", " ", $body);
            $body = str_replace(array("\r\n", "\n", "\r"), "<br />", $body);
            $body = preg_replace("/([^\\/=\"\\]])((http|ftp)+(s)?:\\/\\/[^<>\\s]+)/i", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $body);
            $body = preg_replace('/([^\\/=\\"\\]])(www\\.)(\\S+)/', '\\1<a href="http://\\2\\3" target="_blank">\\2\\3</a>', $body);
            $mail->Body = $body;
            $mail->WordWrap = 50;
            if ($to) {
                if (!$GMailSender) {
                    //single Recipient
                    $mail->AddAddress($to);
                    if (!$mail->Send()) {
                        $mail->ClearAddresses();
                        redirect("mail.php?error=3&mail_err=" . $mail->ErrorInfo);
                    } else {
                        $mail->ClearAddresses();
                        redirect("mail.php?error=2");
                    }
                } else {
                    //single Recipient
                    $mail_result = authgMail($from_mail, $user_name, $to, $to, $subject, $body, $smtp_cfg);
                    if ($mail_result["quitcode"] != 221) {
                        redirect("mail.php?error=3&mail_err=" . $mail_result["die"]);
                    } else {
                        redirect("mail.php?error=2");
                    }
                }
            } elseif (isset($group_value)) {
                //group send
                $email_array = array();
                switch ($group_send) {
                    case "gm_level":
                        if ($core == 1) {
                            $result = $sql["logon"]->query("SELECT email FROM accounts WHERE gm" . $group_sign . "'" . $group_value . "'");
                        } else {
                            $result = $sql["logon"]->query("SELECT email FROM account\r\n                  LEFT JOIN account_access ON account_access.id=account.id\r\n                WHERE IFNULL(gmlevel, 0)" . $group_sign . "'" . $group_value . "'");
                        }
                        while ($user = $sql["logon"]->fetch_row($result)) {
                            if ($user[0] != "") {
                                array_push($email_array, $user[0]);
                            }
                        }
                        break;
                    case "locked":
                        //this_is_junk: I'm going to pretend that locked is muted
                        if ($core == 1) {
                            $result = $sql["logon"]->query("SELECT email FROM accounts WHERE muted" . $group_sign . "'" . $group_value . "'");
                        } else {
                            $result = $sql["logon"]->query("SELECT email FROM accounts WHERE locked" . $group_sign . "'" . $group_value . "'");
                        }
                        while ($user = $sql["logon"]->fetch_row($result)) {
                            if ($user[0] != "") {
                                array_push($email_array, $user[0]);
                            }
                        }
                        break;
                    case "banned":
                        //this_is_junk: sigh...
                        $que = $sql["logon"]->query("SELECT id FROM account_banned");
                        while ($banned = $sql->fetch_row($que)) {
                            $result = $sql["logon"]->query("SELECT email FROM accounts WHERE acct='" . $banned[0] . "'");
                            if ($sqlr->result($result, 0, 'email')) {
                                array_push($email_array, $sql->result($result, 0, "email"));
                            }
                        }
                        break;
                    default:
                        redirect("mail.php?error=5");
                        break;
                }
                if (!$GMailSender) {
                    foreach ($email_array as $mail_addr) {
                        $mail->AddAddress($mail_addr);
                        if (!$mail->Send()) {
                            $mail->ClearAddresses();
                            redirect("mail.php?error=3&mail_err=" . $mail->ErrorInfo);
                        } else {
                            $mail->ClearAddresses();
                        }
                    }
                } else {
                    $mail_to = implode(",", $email_array);
                    $mail_result = authgMail($from_mail, $user_name, $mail_to, "", $subject, $body, $smtp_cfg);
                    if ($mail_result["quitcode"] != 221) {
                        redirect("mail.php?error=3&mail_err=" . $mail_result["die"]);
                    } else {
                        redirect("mail.php?error=2");
                    }
                }
                redirect("mail.php?error=2");
            } else {
                redirect("mail.php?error=1");
            }
            break;
        case "ingame_mail":
            $value = NULL;
            for ($i = 0; $i < count($body); $i++) {
                $value .= $body[$i] . " ";
            }
            $body = $value;
            $body = str_replace("\r", " ", $body);
            $body = $sql["char"]->quote_smart($body);
            if ($to) {
                //single Recipient
                $result = $sql["char"]->query("SELECT guid FROM characters WHERE name='" . $to . "'");
                if ($sql["char"]->num_rows($result) == 1) {
                    $receiver = $sql["char"]->result($result, 0, 'guid');
                    $mails = array();
                    $mail["receiver"] = $receiver;
                    $mail["subject"] = $subject;
                    $mail["body"] = $body;
                    $mail["att_gold"] = $att_gold;
                    $mail["att_item"] = $att_item;
                    $mail["att_stack"] = $att_stack;
                    $mail["receiver_name"] = $to;
                    //array_push($mails, array($receiver, $subject, $body, $att_gold, $att_item, $att_stack));
                    array_push($mails, $mail);
                    if ($core == 1) {
                        send_ingame_mail_A($realm_id, $mails);
                    } else {
                        send_ingame_mail_MT($realm_id, $mails);
                    }
                } else {
                    redirect("mail.php?error=4");
                }
                redirect("mail.php?error=2");
                break;
            } elseif (isset($group_value)) {
                //group send
                $char_array = array();
                switch ($group_send) {
                    case "gm_level":
                        if ($core == 1) {
                            $result = $sql["logon"]->query("SELECT acct FROM accounts WHERE gm" . $group_sign . "'" . $group_value . "'");
                        } else {
                            $result = $sql["logon"]->query("SELECT account.id AS acct FROM account\r\n                  LEFT JOIN account_access ON account_access.id=account.id\r\n                WHERE IFNULL(gmlevel, 0)" . $group_sign . "'" . $group_value . "'");
                        }
                        while ($acc = $sql["char"]->fetch_row($result)) {
                            if ($core == 1) {
                                $result_2 = $sql["char"]->query("SELECT name FROM `characters` WHERE acct='" . $acc[0] . "'");
                            } else {
                                $result_2 = $sql["char"]->query("SELECT name FROM `characters` WHERE account='" . $acc[0] . "'");
                            }
                            while ($char = $sql["char"]->fetch_row($result_2)) {
                                array_push($char_array, $char[0]);
                            }
                        }
                        break;
                    case "online":
                        $result = $sql["char"]->query("SELECT name FROM `characters` WHERE online" . $group_sign . "'" . $group_value . "'");
                        while ($user = $sql["char"]->fetch_row($result)) {
                            array_push($char_array, $user[0]);
                        }
                        break;
                    case "char_level":
                        $result = $sql["char"]->query("SELECT name FROM `characters` WHERE level" . $group_sign . "'" . $group_value . "'");
                        while ($user = $sql["char"]->fetch_row($result)) {
                            array_push($char_array, $user[0]);
                        }
                        break;
                    default:
                        redirect("mail.php?error=5");
                }
                $mails = array();
                if ($sql["char"]->num_rows($result)) {
                    foreach ($char_array as $receiver) {
                        $result = $sql["char"]->query("SELECT guid FROM characters WHERE name='" . $receiver . "'");
                        $char_guid = $sql["char"]->fetch_row($result);
                        $mail = array();
                        $mail["receiver"] = $char_guid[0];
                        $mail["subject"] = $subject;
                        $mail["body"] = $body;
                        $mail["att_gold"] = $att_gold;
                        $mail["att_item"] = $att_item;
                        $mail["att_stack"] = $att_stack;
                        $mail["receiver_name"] = $receiver;
                        //array_push($mails, array($receiver, $subject, $body, $att_gold, $att_item, $att_stack));
                        array_push($mails, $mail);
                    }
                    if ($core == 1) {
                        send_ingame_mail_A($realm_id, $mails);
                    } else {
                        send_ingame_mail_MT($realm_id, $mails);
                    }
                    redirect("mail.php?error=2");
                } else {
                    redirect("mail.php?error=4");
                }
            }
            break;
        default:
            redirect("mail.php?error=1");
    }
}