Rev 72 | Rev 74 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpuse 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 logfileexit (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, checkedFROM wishlistWHERE price > 0.00ORDER 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> <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/>≈ " . 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/>≈ " . 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\">↑</a>";return array($str, $toc);}function updateWishlistCheckedDate($id) {$nul = 'NULL';$conn = MySessionHandler::getDBSessionId();$checked = mysqli_real_escape_string($conn, time());$sql = "UPDATE wishlistSET 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, wlCheckedFROM usersWHERE 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 usersSET 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 filesrequire_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 emailif (!$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 emailmail($to, $subject, $mailContent, $headers);}}