Subversion Repositories cheapmusic

Rev

Rev 72 | Rev 74 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

include_once ($_SERVER['DOCUMENT_ROOT'] . '/php/dnsexit.php');
include_once ($_SERVER['DOCUMENT_ROOT'] . '/php/sessions_db.php');
include_once ($_SERVER['DOCUMENT_ROOT'] . '/php/cryptor.php');
include_once ($_SERVER['DOCUMENT_ROOT'] . "/php/vendors.php");
include_once ($_SERVER['DOCUMENT_ROOT'] . '/php/tools.php');

$configFile = parse_ini_file($_SERVER['DOCUMENT_ROOT'] . FCM_CONFIGFILE, true);
$crypt = Cryptor::getInstance($configFile['cryptor']);
$tmpSessionTab = (isset($_POST["sessionTab"]) && $_POST["sessionTab"] > 0 ? $_POST["sessionTab"] : null);
$handler = MySessionHandler::getInstance($tmpSessionTab, $configFile['mysqli']);
$vendors = Vendors::getInstance();
$vendors->setVendor($configFile['ebay'], Vendors::EBAY);
$vendors->setVendor($configFile['discogs'], Vendors::DISCOGS);
$vendors->setVendor($configFile['linkshare'], Vendors::LINKSHARE);
$vendors->setVendor($configFile['cjaffiliate'], Vendors::CJAFFILIATE);
$vendors->setVendor($configFile['walmart'], Vendors::WALMART);
$vendors->setVendor($configFile['itunes'], Vendors::ITUNES);
$loginConfig = $configFile['login'];
unset($configFile);

ini_set("session.cookie_httponly", 1);
ini_set("session.cookie_secure", 1);
session_set_save_handler($handler, true);
if (!empty($_COOKIE['PHPSESSID'])) {
    session_id($_COOKIE['PHPSESSID']);
}
@session_start();

initSessionVariables();

$sent = processWishlist();
// bugbug logfile
exit (0);




function processWishlist() {
    global $wlFreqHoursArr;
    $lastUid = -1;
    $lastCount = 0;
    $totalSent = 0;
    $str = '';
    $toc = '';
    $conn = MySessionHandler::getDBSessionId();

    $sql = "SELECT id, uid, barcode, title, artist, cond, format, currency, price, checked
            FROM wishlist
            WHERE price > 0.00
            ORDER BY uid";

    if ($result = mysqli_query($conn, $sql)) {
        if (mysqli_num_rows($result) > 0) {
            while ($wl = mysqli_fetch_assoc($result)) {
                if ($lastUid != $wl['uid']) {
                    if ($lastUid != '-1' && $lastCount > 0) {
                        updateUserCheckedDate($user['id']);
                        ++$totalSent;
                        emailWishlistResults($user, $str, $toc);
                        $str = '';
                        $toc = '';
                    }
                    $user = getUser($wl['uid']);
                    $_SESSION['buyer']['Zip'] = $user['zip'];
                    $lastCount = 0;
                }
                $lastUid = $wl['uid'];

                $diff = time() - $user['wlChecked'];
                if ($diff > $wlFreqHoursArr[$user['wlFreq']]) {
                    if (!empty($wl['barcode'])) {
                        $_SESSION['barcode']['Type'] = clsLibGTIN::GTINCheck($wl['barcode'], false, 1);
                        $_SESSION['barcode']['Value'] = clsLibGTIN::GTINCheck($wl['barcode']);
                    } else {
                        $_SESSION['barcode']['Type'] = '';
                        $_SESSION['barcode']['Value'] = '';
                    }
                    $arr = searchAll($wl['artist'] . " " . $wl['title'], true);
                    $arr = filterWishlistResults($arr, $wl);
                    updateWishlistCheckedDate($wl['id']);
                    if (!empty($arr)) {
                        ++$lastCount;
                        list($a, $b) = formatResults($arr, $wl, $lastCount);
                        $str .= $a;
                        $toc .= $b;
                    }
                }
            }

            if ($lastCount > 0) {
                updateUserCheckedDate($user['id']);
                ++$totalSent;
                emailWishlistResults($user, $str, $toc);
            }

        }
    }
    else if (mysqli_errno($conn)) {
        error_log("MySQL Read Wishlist SQL: " . $sql);
        error_log("MySQL Read Wishlist Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");
    }

    return $totalSent;
}

function filterWishlistResults($arr, $wl) {
    foreach ($arr as $key => $row) {
        if ($wl['cond'] != 'Any' && $row["Condition"] != $wl['cond']) {
            unset($arr[$key]);
        }

        if ($wl['format'] != 'Any' && $row["MediaType"] != $wl['format']) {
            unset($arr[$key]);
        }

        if ($row["ConvertedTotalPrice"] > $wl['price']) {
            unset($arr[$key]);
        }
    }

    return $arr;
}

function formatResults($arr, $wl, $cnt) {
    global $mediaTypeTextArr;
    global $mediaTypeImageArr;
    $str = '';
    $toc = '';

    $str .= "<h3 id=\"jump_" . $cnt . "\">" . $cnt . ") " . $wl["artist"]  . " - " . $wl["title"] . "</h3>";
    $str .= "<p>Condition: " . $wl["cond"] . " | Format: " . $wl["format"]  . " | Price Cap: " . print_monetary($wl["price"], $wl["currency"]) . "</p>";
    $str .= "<table style=\"width: 100%; margin-bottom: 1rem;border-collapse: collapse; font-size: 80%; border: 1px solid #dee2e6 !important;\">";
    $str .= "<thead style=\"background-color:black;color:white;\"><tr><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">Image</th><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">Title / Merchant</th><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">Condition</th><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">Price</th><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">S/H</th><th style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">Total</th></tr></thead>";
    $str .= "<tbody>";

    $toc .= "<li><a href=\"#jump_" . $cnt . "\">" . $wl["artist"]  . " - " . $wl["title"] . "</a>&nbsp;<span style=\"display: inline-block;padding: 0.25em 0.4em;font-size: 75%;font-weight: 700;line-height: 1;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: 0.25rem;color: #fff;background-color: #343a40;\">" . count($arr) . "</span></li>";

    foreach ($arr as $key => $row) {
            $href = "href=\"" . $row["URL"] . "\" target=\"_blank\" onclick=\"saveTransfer('" . $row["URL"] . "'); return true;\"";
            $title = $row["Title"];
            if (mb_strlen($row["Title"], 'UTF-8') > MAXTITLELENGTH) {
                $title = mb_substr($row["Title"], 0, MAXTITLELENGTH, 'UTF-8') . '...';
            }

            $str .= "<tr>";

            // Image
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6\"><a " . $href . " data-toggle=\"tooltip\" title=\"Buy It Now\"><img style=\"width:100%;max-width: 200px;height: auto;\" src=\"" . $row["Image"] . "\" alt=\"Item Image\"></a></td>";

            // Title / Merchant
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\"><span style=\"font-weight: 700 !important;\"><a " . $href . " data-toggle=\"tooltip\" title=\"Buy It Now\">" . $title . "</a></span>";
            $str .= "<br/><br/>";
            $str .= "<span style=\"font-weight: 700 !important;\">" . $row["Merchant"] . "</span>";
            if ($row["FeedbackScore"] != - 1) {
                $str .= "<span><br/>" . $row["SellerName"] . " (" . number_format($row["FeedbackScore"], 0, "", ",") . " / " . $row["FeedbackPercent"] . "%)</span>";
            }
            else if (!empty($row["SellerName"])) {
                $str .= "<span><br/>" . $row["SellerName"] . "</span>";
            }
            if (!empty($row["TimeLeft"])) {
                $str .= "<br>" . $row["TimeLeft"];
            }
            $str .= "</td>";

            // Condition
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left\">";
            $mediaTypeImage = $mediaTypeImageArr[$row["MediaType"]] . '.svg';
            $altText = $mediaTypeTextArr[$row["MediaType"]];
            $str .= "<span style=\"font-weight: 700 !important;\">" . $row["DetailCondition"] . "</span>";
            $str .= "<br/><br/>";
            $str .= "<img style=\"max-width:2em\" src=\"https://" . $_SERVER["SERVER_NAME"] . "/images/" . $mediaTypeImage . "\" alt=\"" . $altText . "\">";
            $str .= "</td>";

            // Price
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">" . print_monetary($row["Price"], $row["Currency"]);
            if ($row["Currency"] != $_SESSION["buyer"]["Currency"]) {
                $str .= "<br/>&asymp; " . print_monetary($row["ConvertedPrice"], $_SESSION["buyer"]["Currency"]);
            }
            if ($row["BestOffer"] == "true") {
                $str .= "<br>Best Offer Accepted";
            }
            $str .= "</td>";

            // Shipping and Handling Cost
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;\">";
            if ($row["ShippingCost"] == 0.00) {
                $str .= "Free Shipping";
            }
            else {
                $str .= print_monetary($row["ShippingCost"], $row["ShippingCurrency"]);
            }
            if ($row["ShippingCost"] > 0.00 && $row["ShippingCurrency"] != $_SESSION["buyer"]["Currency"]) {
                $str .= "<br/>&asymp; " . print_monetary($row["ConvertedShippingCost"], $_SESSION["buyer"]["Currency"]);
            }
            if ($row["HandlingTime"] > 0) {
                $str .= "<br>Handling Time " . $row["HandlingTime"] . " day" . ($row["HandlingTime"] > 1 ? "s" : "");
            }
            if ($row["ShippingCost"] > 0.00 && $row["FreeShippingCap"] > 0) {
                $str .= "<br>Free Shipping over " . print_monetary($row["FreeShippingCap"], $_SESSION["buyer"]["Currency"]);
            }
            $str .= "<br/><img style=\"max-width: 100%;height: auto;\" title=\"Ships from " . getCountry($row["Country"]) . "\" data-toggle=\"tooltip\" data-placement=\"right\" data-delay=\"200\" src=\"https://" . $_SERVER["SERVER_NAME"] . "/images/flags/" . $row["Country"] . ".png\" alt=\"" . getCountry($row["Country"]) . " Flag\"></td>";

            // Total Price
            $str .= "<td style=\"padding: 0.75rem;vertical-align: top;border-top: 1px solid #dee2e6;text-align: left !important;font-weight: 700 !important;\">" . print_monetary($row["ConvertedTotalPrice"], $_SESSION["buyer"]["Currency"]) . "</td>";

            $str .= "</tr>";

    }

    $str .= "</tbody>";
    $str .= "</table>";
    $str .= "<a style=\"text-decoration: none\" href=\"#toc\">&#8593;</a>";

    return array($str, $toc);
}

function updateWishlistCheckedDate($id) {
    $nul = 'NULL';
    $conn = MySessionHandler::getDBSessionId();

    $checked = mysqli_real_escape_string($conn, time());

    $sql = "UPDATE wishlist
            SET checked = '$checked'
            WHERE id = '$id'";

    if ($result = mysqli_query($conn, $sql)) {
        return 0;
    }
    else {
        error_log("MySQL Update Wishlist SQL: " . $sql);
        error_log("MySQL Update Wishlist Error: " . mysqli_error($conn) . " (" . $error . ")");
        return -1;
    }

    return -1;
}

function getUser($uid) {
    $conn = MySessionHandler::getDBSessionId();

    $sql = "SELECT id, first_name, last_name, email, zip, wlEmailFlag, wlFreq, wlChecked
            FROM users
            WHERE id = '$uid'";

    if ($result = mysqli_query($conn, $sql)) {
        if (mysqli_num_rows($result) > 0) {
            $row = mysqli_fetch_assoc($result);
            return $row;
        }
    }
    else if (mysqli_errno($conn)) {
        error_log("MySQL Read Users SQL: " . $sql);
        error_log("MySQL Read Users Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");
    }

    return [];
}

function updateUserCheckedDate($uid) {
    $nul = 'NULL';
    $conn = MySessionHandler::getDBSessionId();

    $checked = mysqli_real_escape_string($conn, time());

    $sql = "UPDATE users
            SET wlChecked = '$checked'
            WHERE id = '$uid'";

    if ($result = mysqli_query($conn, $sql)) {
        return 0;
    }
    else {
        error_log("MySQL Update Users SQL: " . $sql);
        error_log("MySQL Update Users Error: " . mysqli_error($conn) . " (" . $error . ")");
        return -1;
    }

    return -1;
}

function PHPMailer_Init() {
    // Include PHPMailer library files
    require_once 'login/includes/PHPMailer/Exception.php';
    require_once 'login/includes/PHPMailer/PHPMailer.php';
    require_once 'login/includes/PHPMailer/SMTP.php';

    $mail = new PHPMailer;

    return $mail;
}

function emailWishlistResults($user, $emailBody, $toc) {
    global $loginConfig;
    global $wlFreqArr;

    $to = trim($user["email"]);
    $unsubscribeUrl = "https://" . $_SERVER["SERVER_NAME"] . "/index.php?submit=unsubscribe&id=" . $user["id"] . "&email=" . $to;
    $subject = "Wishlist Price Checks | " . $loginConfig['SITE_NAME'];
    $mailContent = '<html>
                    <head>
                            <title>Find Cheap Music Wishlist Price Checks</title>
                    </head>
                    <body>
                    <table style="width:100%;border-style: none;border-radius:6px;background-color:#ffffff;padding-top:15px;border-collapse:separate">
                <tbody>
                        <tr>
                                <td style="color:#616471;font-weight:400;text-align:left;line-height:190%;padding-top:15px;padding-right:40px;padding-bottom:30px;padding-left:40px;font-size:15px">
                                <h1 style="font-weight:500;font-size:22px;letter-spacing:-1px;line-height:115%;margin:18px 0 0;padding:0;text-align:left;color:#3c7bb6">Wishlist Price Checks</h1>
                                <br>
                                Hi ' . $user["first_name"] . ',<br>This is your ' . strtolower($wlFreqArr[$user["wlFreq"]]) . ' wishlist price check email from <a href="https://' . $_SERVER["SERVER_NAME"] . '/index.php">Find Cheap Music</a>. Below you will find all listings that match the criteria set up at your wishlist.
                                <hr><span id="toc">Table of Contents:</span><ol>' . $toc . '</ol><hr>' . $emailBody
                                . '<p style="text-align:right;">Prices retrieved on ' . gmdate("Y-m-d H:i") . ' UTC. Daily exchange rates update.</p><br>
                                <br>We look forward to serving you,<br><strong>' . $loginConfig['SITE_NAME'] . ' Team</strong>
                                <br><p style="font-style: italic;font-weight: 300;">You subscribed to this periodic email with email address ' . $to . '. Click <a href="' . $unsubscribeUrl . '">here</a> to unsubscribe from further emails. You can reinstate the emails at any time by setting the option \'Email Price Checks\' for your account at <a href="https://' . $_SERVER["SERVER_NAME"] . '/index.php">Find Cheap Music</a> back to \'Yes\'.</p>
                                </td>
                        </tr>
                </tbody>
        </table>
            </body>
            </html>';

    $mailContentText = "This email contains the periodic price checks for your wishlist in HTML fornmat.\r\n\r\n";
    $mailContentText .= "\r\nWe look forward to serving you,\r\n" . $loginConfig['SITE_NAME'] . " Team";

    if ($loginConfig['SMTP'] == true) {
        $mail = PHPMailer_Init();

        // SMTP configuration
        $mail->isSMTP();
        $mail->CharSet = "text/html; charset=UTF-8;";
        $mail->WordWrap = 80;
        $mail->Host = $loginConfig['SMTP_HOST'];
        $mail->SMTPAuth = true;
        $mail->Username = $loginConfig['SMTP_USERNAME'];
        $mail->Password = $loginConfig['SMTP_PASSWORD'];
        $mail->SMTPSecure = $loginConfig['SMTP_SECURE'];
        $mail->Port = $loginConfig['SMTP_PORT'];

        $mail->addCustomHeader("List-Unsubscribe-Post", "List-Unsubscribe=One-Click");
        $mail->addCustomHeader("List-Unsubscribe", "<" . $unsubscribeUrl . ">");

        $mail->setFrom($loginConfig['SENDER_EMAIL'], $loginConfig['SENDER_NAME']);

        $mail->addAddress($to);
        $mail->Subject = $subject;
        $mail->isHTML(true);
        $mail->Body = $mailContent;
        $mail->AltBody = $mailContentText;

        $mail->DKIM_domain = $loginConfig['DKIM_DOMAIN'];
        $mail->DKIM_private = $_SERVER['DOCUMENT_ROOT'] . $loginConfig['DKIM_PRIVATE'];
        $mail->DKIM_selector = $loginConfig['DKIM_SELECTOR'];
        $mail->DKIM_passphrase = $loginConfig['DKIM_PASSPHRASE'];
        $mail->DKIM_identity = $mail->From;
        $mail->DKIM_copyHeaderFields = false;
        $mail->DKIM_extraHeaders = ['List-Unsubscribe', 'List-Help'];

        //$mail->SMTPDebug = 2; // bugbug

        // Send email
        if (!$mail->send()) {
            error_log('Mailer error: ' . $mail->ErrorInfo);
        }
    }
    else {
        //set content-type header for sending HTML email
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        //additional headers
        $headers .= 'From: ' . $loginConfig['SENDER_NAME'] . '<' . $loginConfig['SENDER_EMAIL'] . '>' . "\r\n";
        //send email
        mail($to, $subject, $mailContent, $headers);
    }
}