Rev 149 | Rev 151 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpuse Fuse\Fuse;include_once ('php/clsLibGTIN.php');include_once ('php/exchangeRates.php');include_once ('php/countryCodes.php');include_once ('php/constants.php');include_once ('php/ebay.php');include_once ('php/discogs.php');include_once ('php/linkshare.php');include_once ('php/cjaffiliate.php');include_once ('php/walmart.php');include_once ('php/itunes.php');include_once ('php/amazon.php');include_once ('php/amazon_scrape.php');include_once ('php/impact.php');include_once ('php/sessions_db.php');include_once ('php/media.php');include_once ('php/class.html.php');include_once ('php/htmlTools.php');error_reporting(E_ALL);// searchfunction performSearch($noDiscogs = false) {$currentMd5SearchTerm = md5SearchTerm($noDiscogs);if (isset($_SESSION['md5LastSearch']) && $currentMd5SearchTerm == $_SESSION['md5LastSearch']) {return;}$_SESSION['md5LastSearch'] = $currentMd5SearchTerm;updatePbFile(true, "Start");getGeoLocation();if ($noDiscogs === false) {findDiscogsMaster();}updatePbFile(false, "Discogs");$_SESSION["resultArr"] = [];expireSearchCache();$_SESSION["resultArr"] = searchAll();verifyResultArr();$_SESSION["resultArr"] = applySearchFilter($_SESSION["resultArr"]);//echo "<pre>";print_r($_SESSION["resultArr"]);echo "</pre>";$_SESSION["lowestPrice"]["Used"] = findLowestCondition("Used");$_SESSION["lowestPrice"]["New"] = findLowestCondition("New");$_SESSION["lowestPrice"]["CD"] = findLowestMediaType("CD");$_SESSION["lowestPrice"]["Record"] = findLowestMediaType("Record");$_SESSION["lowestPrice"]["Digital"] = findLowestMediaType("Digital");$_SESSION["lowestPrice"]["Book"] = findLowestMediaType("Book");$_SESSION["lowestPrice"]["All"] = 0.00;if (array_sum($_SESSION["lowestPrice"]) > 0) {$_SESSION["lowestPrice"]["All"] = minNotNull($_SESSION["lowestPrice"]);}$aiVal = saveSearchResult($noDiscogs);updatePbFile(true, "End:$aiVal");}// search for items on all sitesfunction searchAll($batchFlag = false) {$searchKey = $_SESSION["searchTerm"];$arr = [];if ($_SESSION["filterCondition"]["New"]) {get_vendor($arr, 'get_ebay', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "eBay New"); }if ($_SESSION["filterCondition"]["New"]) {get_vendor($arr, 'get_linkshare', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "Linkshare"); }if ($_SESSION["filterCondition"]["New"]) {get_vendor($arr, 'get_cjaffiliate', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "CJ Affiliate"); }if ($_SESSION["filterCondition"]["New"]) {get_vendor($arr, 'get_walmart', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "Walmart"); }if ($_SESSION["filterCondition"]["New"]) {get_vendor($arr, 'get_itunes', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "iTunes"); }$cntArr = count($arr);get_vendor($arr, 'get_amazon', $searchKey, constant("NEW"));if (!$batchFlag) { updatePbFile(false, "Amazon API"); }if ($cntArr == count($arr)) {get_vendor($arr, 'get_amazon_scrape', $searchKey, constant("NEW"));}if (!$batchFlag) { updatePbFile(false, "Amazon Scrape"); }get_vendor($arr, 'get_impact', $searchKey, constant("NEW"));if (!$batchFlag) { updatePbFile(false, "Impact"); }if ($_SESSION["filterCondition"]["Used"]) {get_vendor($arr, 'get_ebay', $searchKey, constant("USED"));}if (!$batchFlag) { updatePbFile(false, "eBay Used"); }//echo "<pre>";print_r($arr);echo "</pre";$arr = applyExchangeRates($arr);usort($arr, 'compare_price');return $arr;}// Search and mergefunction get_vendor(&$arr, $func, $searchKey, $condition) {$arrTemp = $func($searchKey, $condition);foreach($arrTemp as $value) {$arr[] = $value;}}// delete results from array that do not match the search filtersfunction applySearchFilter($arr) {unset($_SESSION['AdditionalFilterCounters']);unset($_SESSION['AdditionalFilters']);foreach ($arr as $key => $row) {if (!$_SESSION["filterMediaType"][$row["MediaType"]] || !$_SESSION["filterCondition"][$row["Condition"]]) {unset($arr[$key]);} else {if (isset($_SESSION['AdditionalFilterCounters']['Condition']['All'])) {$_SESSION['AdditionalFilterCounters']['Condition']['All']++;} else {$_SESSION['AdditionalFilterCounters']['Condition']['All'] = 1;}if (isset($_SESSION['AdditionalFilterCounters']['Merchant'][$row['Merchant']])) {$_SESSION['AdditionalFilterCounters']['Merchant'][$row['Merchant']]++;} else {$_SESSION['AdditionalFilterCounters']['Merchant'][$row['Merchant']] = 1;$_SESSION['AdditionalFilters']['Merchant'][$row['Merchant']] = true;}if (!empty($row['SellerName'])) {if (isset($_SESSION['AdditionalFilterCounters']['Seller'][$row['SellerName']])) {$_SESSION['AdditionalFilterCounters']['Seller'][$row['SellerName']]++;} else {$_SESSION['AdditionalFilterCounters']['Seller'][$row['SellerName']] = 1;$_SESSION['AdditionalFilters']['Seller'][$row['SellerName']] = true;}}if (isset($_SESSION['AdditionalFilterCounters']['Condition'][$row['Condition']])) {$_SESSION['AdditionalFilterCounters']['Condition'][$row['Condition']]++;} else {$_SESSION['AdditionalFilterCounters']['Condition'][$row['Condition']] = 1;$_SESSION['AdditionalFilters']['Condition'][$row['Condition']] = true;}if (isset($_SESSION['AdditionalFilterCounters']['MediaType'][$row['MediaType']])) {$_SESSION['AdditionalFilterCounters']['MediaType'][$row['MediaType']]++;} else {$_SESSION['AdditionalFilterCounters']['MediaType'][$row['MediaType']] = 1;$_SESSION['AdditionalFilters']['MediaType'][$row['MediaType']] = true;}if (isset($_SESSION['AdditionalFilterCounters']['DetailCondition'][$row['DetailCondition']])) {$_SESSION['AdditionalFilterCounters']['DetailCondition'][$row['DetailCondition']]++;} else {$_SESSION['AdditionalFilterCounters']['DetailCondition'][$row['DetailCondition']] = 1;$_SESSION['AdditionalFilters']['DetailCondition'][$row['DetailCondition']] = true;}if (isset($_SESSION['AdditionalFilterCounters']['ShippingFrom'][$row['Country']])) {$_SESSION['AdditionalFilterCounters']['ShippingFrom'][$row['Country']]++;} else {$_SESSION['AdditionalFilterCounters']['ShippingFrom'][$row['Country']] = 1;$_SESSION['AdditionalFilters']['ShippingFrom'][$row['Country']] = true;}}}if (isset($_SESSION['AdditionalFilters']['Merchant'])) {ksort($_SESSION['AdditionalFilters']['Merchant'], SORT_NATURAL | SORT_FLAG_CASE);}if (isset($_SESSION['AdditionalFilters']['Seller'])) {ksort($_SESSION['AdditionalFilters']['Seller'], SORT_NATURAL | SORT_FLAG_CASE);}if (isset($_SESSION['AdditionalFilters']['Condition'])) {ksort($_SESSION['AdditionalFilters']['Condition'], SORT_NATURAL | SORT_FLAG_CASE);}if (isset($_SESSION['AdditionalFilters']['DetailCondition'])) {ksort($_SESSION['AdditionalFilters']['DetailCondition'], SORT_NATURAL | SORT_FLAG_CASE);}if (isset($_SESSION['AdditionalFilters']['ShippingFrom'])) {ksort($_SESSION['AdditionalFilters']['ShippingFrom'], SORT_NATURAL | SORT_FLAG_CASE);}if (isset($_SESSION['AdditionalFilters']['MediaType'])) {ksort($_SESSION['AdditionalFilters']['MediaType'], SORT_NATURAL | SORT_FLAG_CASE);}return $arr;}// filter view result table $_SESSION["resultArr"] for detailed filter selectionfunction detailFilterResults($selArr) {if (!empty($selArr['filterCondition'])) {foreach($_SESSION['AdditionalFilters']['Condition'] as $key => $value) {$_SESSION['AdditionalFilters']['Condition'][$key] = false;}if (!is_array($selArr['filterCondition'])) { $selArr['filterCondition'] = [ $selArr['filterCondition'] ];}foreach($selArr['filterCondition'] as $value) {$_SESSION['AdditionalFilters']['Condition'][$value] = true;}} else {$selArr['filterCondition'] = [];if (!empty($_SESSION['AdditionalFilters']['Condition'])) {foreach($_SESSION['AdditionalFilters']['Condition'] as $key => $value) {if ($value) {$selArr['filterCondition'][] = $key;}}}}if (!empty($selArr['filterMediaType'])) {foreach($_SESSION['AdditionalFilters']['MediaType'] as $key => $value) {$_SESSION['AdditionalFilters']['MediaType'][$key] = false;}if (!is_array($selArr['filterMediaType'])) { $selArr['filterMediaType'] = [ $selArr['filterMediaType'] ];}foreach($selArr['filterMediaType'] as $value) {$_SESSION['AdditionalFilters']['MediaType'][$value] = true;}} else {$selArr['filterMediaType'] = [];if (!empty($_SESSION['AdditionalFilters']['MediaType'])) {foreach($_SESSION['AdditionalFilters']['MediaType'] as $key => $value) {if ($value) {$selArr['filterMediaType'][] = $key;}}}}if (!empty($selArr['filterShipFrom'])) {foreach($_SESSION['AdditionalFilters']['ShippingFrom'] as $key => $value) {$_SESSION['AdditionalFilters']['ShippingFrom'][$key] = false;}if (!is_array($selArr['filterShipFrom'])) { $selArr['filterShipFrom'] = [ $selArr['filterShipFrom'] ];}foreach($selArr['filterShipFrom'] as $value) {$_SESSION['AdditionalFilters']['ShippingFrom'][$value] = true;}} else {$selArr['filterShipFrom'] = [];if (!empty($_SESSION['AdditionalFilters']['ShippingFrom'])) {foreach($_SESSION['AdditionalFilters']['ShippingFrom'] as $key => $value) {if ($value) {$selArr['filterShipFrom'][] = $key;}}}}if (!empty($selArr['filterMerchant'])) {foreach($_SESSION['AdditionalFilters']['Merchant'] as $key => $value) {$_SESSION['AdditionalFilters']['Merchant'][$key] = false;}if (!is_array($selArr['filterMerchant'])) { $selArr['filterMerchant'] = [ $selArr['filterMerchant'] ];}foreach($selArr['filterMerchant'] as $value) {$_SESSION['AdditionalFilters']['Merchant'][$value] = true;}} else {$selArr['filterMerchant'] = [];if (!empty($_SESSION['AdditionalFilters']['Merchant'])) {foreach($_SESSION['AdditionalFilters']['Merchant'] as $key => $value) {if ($value) {$selArr['filterMerchant'][] = $key;}}}}foreach ($_SESSION["resultArr"] as & $row) {$row["Show"] = true;if (!in_array($row["Condition"], $selArr['filterCondition']) ||!in_array($row["MediaType"], $selArr['filterMediaType']) ||!in_array($row["Merchant"], $selArr['filterMerchant']) ||!in_array($row["Country"], $selArr['filterShipFrom'])) {$row["Show"] = false;}}}function resetDetailFilter() {if (isset($_SESSION['AdditionalFilters']['Merchant'])) {foreach($_SESSION['AdditionalFilters']['Merchant'] as $key => $field) {$_SESSION['AdditionalFilters']['Merchant'][$key] = true;}}if (isset($_SESSION['AdditionalFilters']['Seller'])) {foreach($_SESSION['AdditionalFilters']['Seller'] as $key => $field) {$_SESSION['AdditionalFilters']['Seller'][$key] = true;}}if (isset($_SESSION['AdditionalFilters']['Condition'])) {foreach($_SESSION['AdditionalFilters']['Condition'] as $key => $field) {$_SESSION['AdditionalFilters']['Condition'][$key] = true;}}if (isset($_SESSION['AdditionalFilters']['DetailCondition'])) {foreach($_SESSION['AdditionalFilters']['DetailCondition'] as $key => $field) {$_SESSION['AdditionalFilters']['DetailCondition'][$key] = true;}}if (isset($_SESSION['AdditionalFilters']['ShippingFrom'])) {foreach($_SESSION['AdditionalFilters']['ShippingFrom'] as $key => $field) {$_SESSION['AdditionalFilters']['ShippingFrom'][$key] = true;}}if (isset($_SESSION['AdditionalFilters']['MediaType'])) {foreach($_SESSION['AdditionalFilters']['MediaType'] as $key => $field) {$_SESSION['AdditionalFilters']['MediaType'][$key] = true;}}foreach ($_SESSION["resultArr"] as & $row) {$row["Show"] = true;}}// print result table or card deckfunction printResult() {if ($_SESSION["currentLayout"] == 'TableView') {return buildTable($_SESSION["resultArr"]);}else /* CardView */ {return buildCardDeck($_SESSION["resultArr"]);}}// build HTML table from arrayfunction buildTable($arr, $cnt = "") {global $buyItNowTooltip;$xh = new Html;$xh->init($_SESSION["htmlIndent"]);if (count($arr) > 0) {$xh->add_attribute("class", "table");$xh->tag('div');$xh->add_attribute("class", "table table-striped small w-100 DataTable");$xh->add_attribute("data-paging", "false");$xh->add_attribute("data-searching", "false");$xh->add_attribute("data-state-save", "false");$xh->add_attribute("data-info", "false");$xh->add_attribute("data-ordering", "false");$xh->add_attribute("data-responsive", "true");$xh->add_attribute("id", "storeOfferTable" . $cnt);$xh->tag('table');$xh->add_attribute("class", "thead-dark table-header-sticky");$xh->tag('thead');$xh->tag('tr');$xh->add_attribute("data-name", "image");$xh->add_attribute("data-width", "20%");$xh->add_attribute("data-priority", "1");$xh->tag('th', "Image");$xh->add_attribute("data-name", "title");$xh->add_attribute("data-priority", "1");$xh->add_attribute("class", "text-left");$xh->tag('th', "Title / Merchant");$xh->add_attribute("data-name", "condition");$xh->add_attribute("data-class-name", "text-center");$xh->add_attribute("data-priority", "1");$xh->tag('th', "Condition");$xh->add_attribute("data-name", "price");$xh->add_attribute("data-priority", "2");$xh->tag('th', "Price");$xh->add_attribute("data-name", "shipping");$xh->add_attribute("data-priority", "2");$xh->tag('th', "S/H");$xh->add_attribute("data-name", "total");$xh->add_attribute("data-priority", "1");$xh->tag('th', "Total");$xh->add_attribute("data-name", "link");$xh->add_attribute("data-class-name", "text-center");$xh->add_attribute("data-priority", "3");$xh->tag('th', "");$xh->add_attribute("data-name", "details");$xh->add_attribute("data-priority", "9");// bugbug $xh->add_attribute("data-class-name", "never"); // none// bugbug $xh->tag('th', "Additional Details");$xh->close(); // tr$xh->close(); // thead$xh->tag('tbody');foreach ($arr as $row) {if (!$row["Show"]) {continue;}$title = $row["Title"];if (mb_strlen($row["Title"], 'UTF-8') > MAXTITLELENGTH) {$title = mb_substr($row["Title"], 0, MAXTITLELENGTH, 'UTF-8') . '...';}$title = htmlentities($title);$xh->add_attribute("class", "border");$xh->add_attribute("data-url", $row["URL"]);$xh->add_attribute("data-merchant", $row["Merchant"]);$xh->tag('tr');// Image$xh->tag('td');$xh->add_attribute("href", htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title", $buyItNowTooltip);$xh->tag('a');$xh->add_attribute("class", "affiliate-link-table img-fluid result-table-image lazyload");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", htmlentities($row["Image"]));$xh->add_attribute("alt", "Item Image");$xh->single_tag('img');$xh->close(); // a$xh->close(); // td// Title / Merchant$xh->tag('td');$xh->add_attribute("class", "font-weight-bold");$xh->tag('span');$xh->add_attribute("class", "affiliate-link-table");$xh->add_attribute("href", htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title",$buyItNowTooltip);$xh->tag('a', $title);$xh->close(); // span$xh->brnl();$xh->brnl();$xh->add_attribute("class", "font-weight-bold");$xh->tag('span', htmlentities($row["Merchant"]));if ($row["FeedbackScore"] != - 1) {$xh->brnl();$xh->tag('span', htmlentities($row["SellerName"]) . " (" . number_format($row["FeedbackScore"], 0, "", ", ") . " / " . $row["FeedbackPercent"] . "%)");}else if (!empty($row["SellerName"])) {$xh->brnl();$xh->tag('span', htmlentities($row["SellerName"]));}if (!empty($row["TimeLeft"])) {$xh->brnl();$xh->tag('span', $row["TimeLeft"]);}$xh->close(); // td// Condition$xh->tag('td');$xh->add_attribute("class", "font-weight-bold");$xh->tag('span', $row["DetailCondition"]);$xh->brnl();$xh->brnl();$xh->add_attribute("class",getMediaIconClass($row["MediaType"], "media-icon"));$xh->add_attribute("title",getMediaIconText($row["MediaType"]));$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("data-placement", "right");$xh->add_attribute("data-delay", "200");$xh->tag('i', getMediaIconAlias($row["MediaType"]));$xh->close(); // td// Price$str = 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";}$xh->tag('td', $str);// Shipping and Handling Cost$str = "";if ($row["ShippingCost"] == 0.00) {$str .= "Free Shipping";}else {$str .= print_monetary($row["ShippingCost"], $row["ShippingCurrency"]);if ($row["ShippingEstimated"]) {$str .= "*";}}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/>";$xh->tag('td');$xh->tag('span', $str);$xh->add_attribute("class", "img-fluid lazyload");$xh->add_attribute("title", "Ships from " . getCountry($row["Country"]));$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("data-placement", "right");$xh->add_attribute("data-delay", "200");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", timeStampUrl("images/flags/" . $row["Country"] . ".png"));$xh->add_attribute("alt", getCountry($row["Country"]) . " Flag");$xh->single_tag('img');$xh->close(); // td// Total Price$xh->add_attribute("class", "font-weight-bolder");$xh->tag('td', print_monetary($row["ConvertedTotalPrice"], $_SESSION["buyer"]["Currency"]));// Linkif ($row["Merchant"] == "iTunes") {if ($row["MediaType"] == "Digital") {$linkImage = timeStampUrl("images/US-UK_Apple_Music_Badge_RGB.svg");}else {$linkImage = timeStampUrl("images/US_UK_Apple_Books_Badge_Get_RGB_071818.svg");}$class = "btn";$altText = "iTunes Badge";} else if (strpos($row["Merchant"], "eBay") !== false) {$class = "btn";$altText = "eBay Store";$linkImage = timeStampUrl("images/ebay-right-now.gif");} else if (strpos($row["Merchant"], "Amazon") !== false) {$class = "btn";$altText = "Amazon Store";$linkImage = timeStampUrl("images/amazon-buy3.gif");} else {$class = "btn btn-success";$altText = "";$linkImage = "";}$xh->tag('td');$xh->add_attribute("class", $class);$xh->add_attribute("title", $buyItNowTooltip);$xh->add_attribute("aria-label", "Go to store");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("role", "button");$xh->add_attribute("href", htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->tag('a');if (empty($linkImage)) {$xh->add_attribute("class", "affiliate-link-table material-icons md-36");$xh->tag('i', "store");} else {$xh->add_attribute("class", "affiliate-link-table lazyload");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", $linkImage);$xh->add_attribute("alt", $altText);$xh->single_tag('img');}$xh->close(); // a$xh->close(); // td// bugbug $xh->tag('td', $row["Details"]);$xh->close(); // tr}$xh->close(); // tbody$xh->tag('tfoot');$xh->add_attribute("class", "border");$xh->tag('tr');$xh->add_attribute("class", "font-italic");$xh->add_attribute("colspan", "7");$xh->tag('td', "Prices retrieved on " . gmdate("Y-m-d H:i") . " UTC<br>Daily exchange rates update");$xh->close(); // tr$xh->close(); // tfoot$xh->close(); // table$xh->close(); // div$html = $xh->flush();//error_log(print_r($html, 1));}else {$html = printNoResultsWarning();}return ($html);}// build HTML card deck from arrayfunction buildCardDeck($arr) {global $buyItNowTooltip;$xh = new Html;$xh->init($_SESSION["htmlIndent"]);if (count($arr) > 0) {$xh->add_attribute("class", "card-deck small");$xh->add_attribute("id", "storeOfferCards");$xh->tag('div');foreach ($arr as $row) {if (!$row["Show"]) {continue;}$href = "href=\"" . htmlentities($row["URL"]) . "\" target=\"_blank\" rel=\"sponsored noreferrer noopener\"";$title = $row["Title"];if (mb_strlen($row["Title"], 'UTF-8') > MAXTITLELENGTH) {$title = mb_substr($row["Title"], 0, MAXTITLELENGTH, 'UTF-8') . '...';}$title = htmlentities($title);$xh->add_attribute("class", "card m-2 shadow mx-auto result-card");$xh->add_attribute("data-url", $row["URL"]);$xh->add_attribute("data-merchant", $row["Merchant"]);$xh->tag('div');// Image$xh->add_attribute("class", "p-0 m-0 text-center");$xh->add_attribute("href", htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title", $buyItNowTooltip);$xh->tag('a');$xh->add_attribute("class", "affiliate-link-card p-0 m-0 img-fluid result-card-image lazyload");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", htmlentities($row["Image"]));$xh->add_attribute("alt", $title . " Item Image");$xh->single_tag('img');$xh->close(); // a$xh->add_attribute("class", "card-body d-flex flex-column");$xh->tag('div');// Title / Merchant$xh->add_attribute("class", "card-title font-weight-bold");$xh->tag('p');$xh->add_attribute("class", "affiliate-link-card");$xh->add_attribute("href", htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title", $buyItNowTooltip);$xh->tag('a', $title);$xh->close(); // p$xh->add_attribute("class", "card-text mt-auto");$xh->tag('div');$xh->add_attribute("class", "font-weight-bold");$xh->tag('span', htmlentities($row["Merchant"]));$xh->brnl();// Condition / MediaType$xh->tag('span', $row["DetailCondition"]);$xh->add_attribute("class", getMediaIconClass($row["MediaType"], "media-icon float-right"));$xh->add_attribute("title", getMediaIconText($row["MediaType"]));$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("data-placement", "right");$xh->add_attribute("data-delay", "200");$xh->tag('i', getMediaIconAlias($row["MediaType"]));$xh->brnl();// Total Price$xh->add_attribute("class", "font-weight-bolder");$xh->tag('span', print_monetary($row["ConvertedTotalPrice"], $_SESSION["buyer"]["Currency"]));$xh->close(); // div$xh->close(); // div// Link / Ships from Flag$xh->add_attribute("class", "card-footer");$xh->tag('div');$xh->add_attribute("class", "row");$xh->tag('div');$xh->add_attribute("class", "col-9");$xh->tag('div');if ($row["Merchant"] == "iTunes") {if ($row["MediaType"] == "Digital") {$linkImage = timeStampUrl("images/US-UK_Apple_Music_Badge_RGB.svg");}else {$linkImage = timeStampUrl("images/US_UK_Apple_Books_Badge_Get_RGB_071818.svg");}$class = "btn p-0 m-0";$altText = "iTunes Badge";} else if (strpos($row["Merchant"], "eBay") !== false) {$class = "btn p-0 m-0";$altText = "eBay Store";$linkImage = timeStampUrl("images/ebay-right-now.gif");} else if (strpos($row["Merchant"], "Amazon") !== false) {$class = "btn p-0 m-0";$altText = "Amazon Store";$linkImage = timeStampUrl("images/amazon-buy3.gif");} else {$class = "btn btn-success m-0";$altText = "";$linkImage = "";}$xh->add_attribute("class", "affiliate-link-card " . $class);$xh->add_attribute("title", $buyItNowTooltip);$xh->add_attribute("aria-label", "Go to store");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("role", "button");$xh->add_attribute("href",htmlentities($row["URL"]));$xh->add_attribute("target", "_blank");$xh->add_attribute("rel", "sponsored noreferrer noopener");$xh->tag('a');if (empty($linkImage)) {$xh->add_attribute("class", "affiliate-link-card material-icons md-36");$xh->tag('i', "store");} else {$xh->add_attribute("class", $class . " affiliate-link-card img-fluid p-0 m-0 lazyload");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", $linkImage);$xh->add_attribute("alt",$altText);$xh->single_tag('img');}$xh->close(); // a$xh->close(); // div$xh->add_attribute("class", "col-3");$xh->tag('div');$xh->add_attribute("class", "float-right lazyload");$xh->add_attribute("title", "Ships from " . getCountry($row["Country"]));$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("data-placement", "right");$xh->add_attribute("data-delay", "200");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", timeStampUrl("images/flags/" . $row["Country"] . ".png"));$xh->add_attribute("alt", getCountry($row["Country"]) . " Flag");$xh->single_tag('img');$xh->close(); // div$xh->close(); // div$xh->close(); // div$xh->close(); // div}$xh->close(); // div$xh->add_attribute("class", "py-2 text-right");$xh->tag('div');$xh->add_attribute("class", "py-2 font-italic");$xh->tag('p', "Prices retrieved on " . gmdate("Y-m-d H:i") . " UTC<br>Daily exchange rates update");$xh->close(); // div$html = $xh->flush();}else {$html = printNoResultsWarning();}//error_log(print_r($html, 1));return $html;}function printResultHeader() {$xh = new Html;$xh->init($_SESSION["htmlIndent"]);$xh->add_attribute("class", "navbar bg-dark mt-2 pb-0");$xh->tag('nav');$str = "";if ($_SESSION["lowestPrice"]["New"] > 0) {$str .= 'New from ' . print_monetary($_SESSION["lowestPrice"]["New"], $_SESSION["buyer"]["Currency"]);}if ($_SESSION["lowestPrice"]["New"] > 0 && $_SESSION["lowestPrice"]["Used"] > 0) {$str .= '<br>';}if ($_SESSION["lowestPrice"]["Used"] > 0) {$str .= 'Used from ' . print_monetary($_SESSION["lowestPrice"]["Used"], $_SESSION["buyer"]["Currency"]);}$xh->add_attribute("class", "mr-3");$xh->tag('span', $str);$xh->add_attribute("class", "nav nav-tabs ml-3");$xh->tag('ul');$xh->add_attribute("class", "nav-item border-0 mb-n1");$xh->tag('li');$xh->add_attribute("id", "detailTab");$xh->add_attribute("class", "nav-link active bg-white");$xh->add_attribute("href", "#detailFilter");$xh->tag('a');$xh->tag('span', "Filter");$xh->add_attribute("id", "detailTabArrow");$xh->tag('span');$xh->add_attribute("class", "material-icons material-text");$xh->tag('i', "expand_more");$xh->close(); // span$xh->close(); // a$xh->close(); // li$xh->close(); // ul$xh->add_attribute("class", "ml-auto");$xh->tag('span');if ($_SESSION["currentLayout"] == 'CardView') {$xh->add_attribute("id", "resultViewToggle");$xh->add_attribute("name", "submitBtn");$xh->add_attribute("value", "TableView");$xh->add_attribute("type", "submit");$xh->add_attribute("class", "btn btn-sm btn-rounded filterButton btn-info p-0 m-0 active");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title", "Table View");$xh->add_attribute("aria-label", "Switch to Table View");$xh->tag('button');$xh->add_attribute("class", "material-icons md-36");$xh->tag('i', "view_list");$xh->close(); // button} else {$xh->add_attribute("id", "resultViewToggle");$xh->add_attribute("name", "submitBtn");$xh->add_attribute("value", "CardView");$xh->add_attribute("type", "submit");$xh->add_attribute("class", "btn btn-sm btn-rounded filterButton btn-info p-0 m-0 active");$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("title", "Card View");$xh->add_attribute("aria-label", "Switch To Card View");$xh->tag('button');$xh->add_attribute("class", "material-icons md-36");$xh->tag('i', "view_module");$xh->close(); // button}$xh->close(); // span$xh->add_attribute("class", "navbar-text float-right ml-3");$xh->tag('span');$xh->tag('span', "Showing ");$xh->add_attribute("class", "d-block d-md-none");$xh->tag('span', "<br>");$xh->tag('span', count(array_filter($_SESSION["resultArr"], function ($entry) { return ($entry['Show'] === true); })) . ' of ' . count($_SESSION["resultArr"]));$xh->close(); // span$xh->close(); // nav$xh->add_attribute("class", "tab-content mb-3");$xh->tag('div');$xh->add_attribute("id", "detailFilter");$xh->add_attribute("class", "container tab-pane border");$xh->tag('div');$xh->brnl();$xh->insert_code(detailResultHeader());$xh->close(); // div$xh->close(); // div$html = $xh->flush();//error_log(print_r($html, 1));return $html;}// print summary/header on top of listing tablefunction detailResultHeader() {$xh = new Html;$xh->init($_SESSION["htmlIndent"]);$xh->add_attribute("id", "detailFilterForm");$xh->tag('form');$xh->insert_code(inputSessionTab());$xh->insert_code(inputNonce());$xh->add_attribute("class", "card-group");$xh->tag('div');// Conditionif (isset($_SESSION['AdditionalFilterCounters']['Condition'])) {$xh->add_attribute("class", "card m-2");$xh->tag('div');$xh->add_attribute("class", "card-header font-weight-bold");$xh->tag('div', "Condition");$xh->add_attribute("class", "card-body");$xh->tag('div');$cnt = count($_SESSION['AdditionalFilterCounters']['Condition']);foreach($_SESSION['AdditionalFilters']['Condition'] as $key => $value) {$xh->add_attribute("class", "form-check");$xh->tag('div');$xh->add_attribute("class", "form-check-label");$xh->tag('label');$xh->add_attribute("name", "filterCondition[]");$xh->add_attribute("type", "checkbox");$xh->add_attribute("value", $key);$xh->add_attribute("class", "form-check-input");if ($value) $xh->add_attribute("checked", "");if ($cnt < 1) $xh->add_attribute("disabled", "");$xh->single_tag('input');$xh->tag('span', $key);$xh->add_attribute("class", "badge badge-pill badge-dark ml-2");$xh->tag('span', $_SESSION['AdditionalFilterCounters']['Condition'][$key]);$xh->close(); // label$xh->close(); // div}$xh->close(); // div$xh->close(); // div}// Media Typeif (isset($_SESSION['AdditionalFilterCounters']['MediaType'])) {$xh->add_attribute("class", "card m-2");$xh->tag('div');$xh->add_attribute("class", "card-header font-weight-bold");$xh->tag('div', "Media Type");$xh->add_attribute("class", "card-body");$xh->tag('div');$cnt = count($_SESSION['AdditionalFilterCounters']['MediaType']);foreach($_SESSION['AdditionalFilters']['MediaType'] as $key => $value) {$xh->add_attribute("class", "form-check");$xh->tag('div');$xh->add_attribute("class", "form-check-label");$xh->tag('label');$xh->add_attribute("name", "filterMediaType[]");$xh->add_attribute("type", "checkbox");$xh->add_attribute("value", $key);$xh->add_attribute("class", "form-check-input");if ($value) $xh->add_attribute("checked", "");if ($cnt < 1) $xh->add_attribute("disabled", "");$xh->single_tag('input');$xh->add_attribute("class",getMediaIconClass($key, "material-text"));$xh->tag('i', getMediaIconAlias($key));$xh->tag('span', getMediaIconText($key));$xh->add_attribute("class", "badge badge-pill badge-dark ml-2");$xh->tag('span', $_SESSION['AdditionalFilterCounters']['MediaType'][$key]);$xh->close(); // label$xh->close(); // div}$xh->close(); // div$xh->close(); // div}// Merchantif (isset($_SESSION['AdditionalFilterCounters']['Merchant'])) {$xh->add_attribute("class", "card m-2");$xh->tag('div');$xh->add_attribute("class", "card-header font-weight-bold");$xh->tag('div', "Merchant");$xh->add_attribute("class", "card-body");$xh->tag('div');$cnt = count($_SESSION['AdditionalFilterCounters']['Merchant']);foreach($_SESSION['AdditionalFilters']['Merchant'] as $key => $value) {$xh->add_attribute("class", "form-check");$xh->tag('div');$xh->add_attribute("class", "form-check-label");$xh->tag('label');$xh->add_attribute("name", "filterMerchant[]");$xh->add_attribute("type", "checkbox");$xh->add_attribute("value", $key);$xh->add_attribute("class", "form-check-input");if ($value) $xh->add_attribute("checked", "");if ($cnt < 1) $xh->add_attribute("disabled", "");$xh->single_tag('input');$xh->tag('span', $key);$xh->add_attribute("class", "badge badge-pill badge-dark ml-2");$xh->tag('span', $_SESSION['AdditionalFilterCounters']['Merchant'][$key]);$xh->close(); // label$xh->close(); // div}$xh->close(); // div$xh->close(); // div}// Shipping Fromif (isset($_SESSION['AdditionalFilterCounters']['ShippingFrom'])) {$xh->add_attribute("class", "card m-2");$xh->tag('div');$xh->add_attribute("class", "card-header font-weight-bold");$xh->tag('div', "Shipping From");$xh->add_attribute("class", "card-body");$xh->tag('div');$cnt = count($_SESSION['AdditionalFilterCounters']['ShippingFrom']);foreach($_SESSION['AdditionalFilters']['ShippingFrom'] as $key => $value) {$xh->add_attribute("class", "form-check");$xh->tag('div');$xh->add_attribute("class", "form-check-label");$xh->tag('label');$xh->add_attribute("name", "filterShipFrom[]");$xh->add_attribute("type", "checkbox");$xh->add_attribute("value", $key);$xh->add_attribute("class", "form-check-input");if ($value) $xh->add_attribute("checked", "");if ($cnt < 1) $xh->add_attribute("disabled", "");$xh->single_tag('input');$xh->add_attribute("class", "img-fluid lazyload");$xh->add_attribute("title", "Ships from " . getCountry($key));$xh->add_attribute("data-toggle", "tooltip");$xh->add_attribute("data-delay", "200");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", timeStampUrl("images/flags/" . $key . ".png"));$xh->add_attribute("alt", getCountry($key) . " Flag");$xh->single_tag('img');$xh->add_attribute("class", "badge badge-pill badge-dark ml-2");$xh->tag('span', $_SESSION['AdditionalFilterCounters']['ShippingFrom'][$key]);$xh->close(); // label$xh->close(); // div}$xh->close(); // div$xh->close(); // div}$xh->close(); // div$xh->add_attribute("class", "p-2");$xh->tag('div');$xh->add_attribute("type", "submit");$xh->add_attribute("id", "detailTabSubmit");$xh->add_attribute("class", "btn btn-success detailFilterButton");$xh->add_attribute("name", "submitBtn");$xh->add_attribute("value", "Apply");$xh->tag('button', "Apply");$xh->add_attribute("type", "submit");$xh->add_attribute("id", "detailTabReset");$xh->add_attribute("class", "btn btn-danger detailFilterButton");$xh->add_attribute("name", "submitBtn");$xh->add_attribute("value", "Reset");$xh->tag('button', "Reset");$xh->close(); // div$xh->close(); // form$html = $xh->flush();//error_log(print_r($html, 1));return $html;}// compare price for sort low to highfunction compare_price($a, $b) {return strnatcmp($a['ConvertedTotalPrice'], $b['ConvertedTotalPrice']);}// print monetary values with correct symbol and thousands/decimal delimitersfunction print_monetary($num, $curr) {if ($curr == "USD") {return ("$" . number_format($num, 2, '.', ','));}else if ($curr == "CAD") {return ("C $" . number_format($num, 2, '.', ','));}else if ($curr == "EUR") {return (number_format($num, 2, ',', '.') . "€");}else if ($curr == "GBP") {return ("£" . number_format($num, 2, '.', ','));}else if ($curr == "AUD") {return ("AU $" . number_format($num, 2, '.', ','));}return ($curr . " " . number_format($num, 2, '.', ','));}// find lowest used / new pricesfunction findLowestCondition($condition) {foreach ($_SESSION["resultArr"] as $row) {if (!$row["Show"]) {continue;}if ($condition == $row["Condition"]) {return ($row["ConvertedTotalPrice"]);}}return (0);}// find lowest cd, record, digital and book pricesfunction findLowestMediaType($mediaType) {foreach ($_SESSION["resultArr"] as $row) {if (!$row["Show"]) {continue;}if ($mediaType == $row["MediaType"]) {return ($row["ConvertedTotalPrice"]);}}return (0);}// find lowest non-zero double value in arrayfunction minNotNull(Array $values) {return min(array_diff(array_map('doubleval', $values) , array(0)));}// apply exchange ratesfunction applyExchangeRates($arr) {foreach ($arr as & $value) {$value["ConvertedPrice"] = $value["Price"];$value["ConvertedShippingCost"] = $value["ShippingCost"];if ($_SESSION["buyer"]["Currency"] != $value["Currency"]) {$value["ConvertedPrice"] = number_format($value["Price"] / getExchangeRate($_SESSION["buyer"]["Currency"], $value["Currency"]) , 2, '.', '');}if ($_SESSION["buyer"]["Currency"] != $value["ShippingCurrency"]) {$value["ConvertedShippingCost"] = number_format($value["ShippingCost"] / getExchangeRate($_SESSION["buyer"]["Currency"], $value["ShippingCurrency"]) , 2, '.', '');}$value["ConvertedTotalPrice"] = number_format($value["ConvertedPrice"] + $value["ConvertedShippingCost"], 2, '.', '');}return ($arr);}// sanitize user inputfunction sanitizeInput($str) {$str = trim(preg_replace('/[\t\n\r\s]+/', ' ', $str));$str = stripslashes($str);$str = htmlspecialchars($str);return $str;}// convert certain utf-8 characters to asciifunction cleanString($str) {$utf8 = array('/[áàâãªä]/u' => 'a','/[ÁÀÂÃÄ]/u' => 'A','/[ÍÌÎÏ]/u' => 'I','/[íìîï]/u' => 'i','/[éèêë]/u' => 'e','/[ÉÈÊË]/u' => 'E','/[óòôõºö]/u' => 'o','/[ÓÒÔÕÖ]/u' => 'O','/[úùûü]/u' => 'u','/[ÚÙÛÜ]/u' => 'U','/ç/' => 'c','/Ç/' => 'C','/ñ/' => 'n','/Ñ/' => 'N','/–/' => '-', // UTF-8 hyphen to "normal" hyphen'/[’‘‹›‚]/u' => ' ', // Literally a single quote'/[“”«»„]/u' => ' ', // Double quote'/ /' => ' ', // nonbreaking space (equiv. to 0x160));return preg_replace(array_keys($utf8) , array_values($utf8) , $str);}// Clean the search stringfunction searchFriendlyString($str) {$str = strip_tags($str);$str = stripslashes($str);$str = cleanString($str);$str = str_replace(array("[","]","<",">","(",")"," - "," & "," / ") , " ", $str);$str = trim(preg_replace('/[\t\n\r\s]+/', ' ', $str)); // delete extra whitespacesreturn ucwords($str);}// get a SESSION value, return empty string if not setfunction getSV($var) {if (!isset($_SESSION[$var])) {return ('');}return ($_SESSION[$var]);}// initialize a SESSION value if not setfunction initSV($var, $value) {if (!isset($_SESSION[$var])) {$_SESSION[$var] = $value;}}// initialize sessions variablesfunction initSessionVariables($systemConf) {initSV("resultArr", []);initSV("barcode", array("Type" => "","Value" => ""));initSV("buyer", array("Country" => "United States","Currency" => "USD","Zip" => ""));initSV("filterCondition", array("New" => true,"Used" => true));initSV("filterMediaType", array("CD" => true,"Record" => true,"Digital" => true,"Book" => true));initSV("currentLayout", "TableView");initSV("lowestPrice", array("Used" => 0.00,"New" => 0.00,"CD" => 0.00,"Record" => 0.00,"Digital" => 0.00,"Book" => "0.00","All" => 0.00));$_SESSION["htmlIndent"] = (!empty($systemConf["htmlIndent"]) ? intval($systemConf["htmlIndent"]) : 0);$_SESSION["gtmId"] = (empty($systemConf["gtmId"]) ? "" : $systemConf["gtmId"]);$_SESSION["nonce"] = NonceUtil::generate($systemConf["nonce_secret"], $systemConf["nonce_lifetime"]);initSV("mode", SIMPLE_SEARCH);}function md5SearchTerm($flag) {$data = array();$data['cond'] = $_SESSION['filterCondition'];$data['type'] = $_SESSION['filterMediaType'];$data['buyer'] = $_SESSION['buyer'];$data['flag'] = $flag;$data['term'] = array($_SESSION['searchTerm']);return (md5(json_encode($data)));}// check POST value, return true if set and false if notfunction checkPV($var) {if (isset($_POST[$var])) {return (true);}return (false);}// get POST or GET value, return empty if not setfunction getPGV($var) {if (isset($_POST[$var])) {return ($_POST[$var]);}else if (isset($_GET[$var])) {return ($_GET[$var]);}return ("");}function saveSearchResult($noDiscogs) {$conn = MySessionHandler::getDBSessionId();$access = mysqli_real_escape_string($conn, time());// BUGBUG// country// currency$zip = mysqli_real_escape_string($conn, $_SESSION['buyer']['Zip']);$condNew = $_SESSION['filterCondition']['New'] ? 'Y' : 'N';$condUsed = $_SESSION['filterCondition']['Used'] ? 'Y' : 'N';$mediaCD = $_SESSION['filterMediaType']['CD'] ? 'Y' : 'N';$mediaRecord = $_SESSION['filterMediaType']['Record'] ? 'Y' : 'N';$mediaDigital = $_SESSION['filterMediaType']['Digital'] ? 'Y' : 'N';$mediaBook = $_SESSION['filterMediaType']['Book'] ? 'Y' : 'N';$searchTerm = mysqli_real_escape_string($conn, $_SESSION['searchTerm']);$arr = [];$advSearchTerm = null;if (!empty($_SESSION["advSearch"]["Title"])) {$arr[] = "t" . AS_FIELD . $_SESSION["advSearch"]["Title"];}if (!empty($_SESSION["advSearch"]["Artist"])) {$arr[] = "a" . AS_FIELD . $_SESSION["advSearch"]["Artist"];}if (!empty($_SESSION["advSearch"]["Track"])) {$arr[] = "tr" . AS_FIELD . $_SESSION["advSearch"]["Track"];}if (!empty($_SESSION["advSearch"]["Barcode"])) {$arr[] = "b" . AS_FIELD . $_SESSION["advSearch"]["Barcode"];}if (!empty($_SESSION["advSearch"]["Catno"])) {$arr[] = "c" . AS_FIELD . $_SESSION["advSearch"]["Catno"];}if (!empty($_SESSION["advSearch"]["Label"])) {$arr[] = "l" . AS_FIELD . $_SESSION["advSearch"]["Label"];}if (!empty($_SESSION["advSearch"]["Country"])) {$arr[] = "co" . AS_FIELD . $_SESSION["advSearch"]["Country"];}if (!empty($_SESSION["advSearch"]["Year"])) {$arr[] = "y" . AS_FIELD . $_SESSION["advSearch"]["Year"];}$advSearchTerm = (empty($arr) ? 'NULL' : "'" . mysqli_real_escape_string($conn, join(AS_TOKEN, $arr)) . "'");$lowNew = floatval($_SESSION['lowestPrice']['New']);$lowUsed = floatval($_SESSION['lowestPrice']['Used']);$lowCD = floatval($_SESSION['lowestPrice']['CD']);$lowRecord = floatval($_SESSION['lowestPrice']['Record']);$lowDigital = floatval($_SESSION['lowestPrice']['Digital']);$lowBook = floatval($_SESSION['lowestPrice']['Book']);$count = count($_SESSION['resultArr']);$userId = (empty($_SESSION['sessData']['userID']) ? 'NULL' : $_SESSION['sessData']['userID']);$ip = inet_pton($_SERVER['REMOTE_ADDR']);$onlyStore = $noDiscogs ? 'Y' : 'N';$sql = "INSERTINTO searches(sessId, access, ip, zip, onlyStore, condNew, condUsed, mediaCD, mediaRecord, mediaDigital, mediaBook, searchTerm, advSearchTerm, lowNew, lowUsed, lowCD, lowRecord, lowDigital, lowBook, count, userId)VALUES ('" . session_id() . "', '$access', '$ip', '$zip', '$onlyStore', '$condNew', '$condUsed', '$mediaCD', '$mediaRecord', '$mediaDigital', '$mediaBook', '$searchTerm', $advSearchTerm, $lowNew, $lowUsed, $lowCD, $lowRecord, $lowDigital, $lowBook, $count, $userId)";if (!($result = mysqli_query($conn, $sql))) {error_log("MySQL Write Searches Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}return(mysqli_insert_id($conn));}function getUrl($url, $userAgent = null) {$ch = curl_init();// Set request header with language and charset$header = array("Accept-Language: en-US,en;q=0.5","Accept-Charset: UTF-8,*;q=0.5");curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// Set optional user-agentif ($userAgent) {curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);}curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate");curl_setopt($ch, CURLOPT_AUTOREFERER, true);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);curl_setopt($ch, CURLOPT_TIMEOUT, 15);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_URL, $url);$response = curl_exec($ch);if ($response === false) {error_log('Curl Request Error: ' . curl_error($ch) . ' (' . curl_errno($ch) . ')');error_log('Url: ' . $url);$response = '';}curl_close($ch);return $response;}function getMultiUrl($urls, $userAgent = null) {$multi = curl_multi_init();$channels = [];$response = [];// Set request header with language and charset$header = array("Accept-Language: en-US,en;q=0.5","Accept-Charset: UTF-8,*;q=0.5");// Loop through the URLs, create curl-handles// and attach the handles to our multi-requestforeach ($urls as $url) {$ch = curl_init();curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// Set optional user-agentif ($userAgent) {curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);}curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate");curl_setopt($ch, CURLOPT_AUTOREFERER, true);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);curl_setopt($ch, CURLOPT_TIMEOUT, 15);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_URL, $url);curl_multi_add_handle($multi, $ch);$channels[$url] = $ch;}// While we're still active, execute curl$active = null;do {$mrc = curl_multi_exec($multi, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);while ($active && $mrc == CURLM_OK) {// Wait for activity on any curl-connectionif (curl_multi_select($multi) == -1) {continue;}// Continue to exec until curl is ready to give us more datado {$mrc = curl_multi_exec($multi, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}// Loop through the channels and retrieve the received// content, then remove the handle from the multi-handleforeach ($channels as $url => $channel) {$response[$url] = curl_multi_getcontent($channel);if ($response[$url] === false) {error_log('Curl Request Error: ' . curl_error($channel) . ' (' . curl_errno($channel) . ')');error_log('Url: ' . $url);$response[$url] = '';}curl_multi_remove_handle($multi, $channel);}// Close the multi-handle and return our resultscurl_multi_close($multi);return($response);}// Retrieve search history for current session idfunction getSearchHistory() {$xh = new Html;$xh->init($_SESSION["htmlIndent"]);$sql = "select searchTerm, advSearchTerm, max(access) from searches where onlyStore <> 'Y' and (sessId = '" . session_id() . "'";if (!empty($_SESSION['sessData']['userID'])) {$sql .= " or userID = '" . $_SESSION['sessData']['userID'] . "'";}$sql .= ") group by searchTerm order by max(access) desc, searchTerm limit 0,50;";$conn = MySessionHandler::getDBSessionId();if ($result = mysqli_query($conn, $sql)) {if (mysqli_num_rows($result) > 0) {while ($row = mysqli_fetch_assoc($result)) {$xh->add_attribute("value", $row["advSearchTerm"] ? "*ADV*" . $row["advSearchTerm"] : $row["searchTerm"]);$xh->tag("option", $row["searchTerm"]);}}}else if (mysqli_errno($conn)) {error_log("MySQL Read Searches SQL: " . $sql);error_log("MySQL Read Searches Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}$html = $xh->flush();//error_log(print_r($html, 1));return $html;}// Retrieve coupons codesfunction getCouponCodes() {$lastAdvertiser = "";$xh = new Html;$xh->init($_SESSION["htmlIndent"]);if (!isLoggedIn()) {$xh->add_attribute("class", "container bg-warning text-center py-3");$xh->tag('div');$xh->add_attribute("class", "display-6");$xh->tag('p');$xh->add_attribute("class", "material-icons");$xh->tag('i', "error_outline");$xh->tag('span', " Please login to your Find Cheap Music account in order to see the coupons.");$xh->close(); // p$xh->close(); // div$html = $xh->flush();//error_log(print_r($html, 1));return $html;}$sql = 'select advertiser, date_format(enddate, "%M %e, %Y") as enddate, description, couponcode, url, image from coupons where DATE(NOW()) between startdate and enddate group by advertiser, description order by advertiser, id';$conn = MySessionHandler::getDBSessionId();if ($result = mysqli_query($conn, $sql)) {if (mysqli_num_rows($result) > 0) {$xh->add_attribute("class", "container py-4 border bg-light");$xh->add_attribute("id", "couponList");$xh->tag('div');while ($row = mysqli_fetch_assoc($result)) {if ($row["advertiser"] != $lastAdvertiser) {if (!empty($lastAdvertiser)) {$xh->close(); // ul}$xh->add_attribute("class", "text-center mt-3 mb-1");$xh->tag('h2', $row["advertiser"]);$xh->add_attribute("class", "list-group");$xh->tag('ul');$lastAdvertiser = $row["advertiser"];}if (!empty($row["url"])) {$xh->add_attribute("class", "list-group-item");$xh->tag('li');$xh->add_attribute("class", "container btn btn-link text-center coupon-link");$xh->add_attribute("target", "_blank");$xh->add_attribute("href", htmlentities($row["url"]));$xh->add_attribute("rel", "nofollow noreferrer noopener");$xh->add_attribute("data-advertiser", $row["advertiser"]);$xh->tag('a');$str = '<strong>' . $row["description"];if (!empty($row["couponcode"])) {$str .= ' (Use Coupon Code "' . $row["couponcode"] . '")';}$str .= '</strong>';$xh->tag('div', $str);if (!empty($row["image"])) {$xh->add_attribute("class", "text-center mt-3");$xh->tag('div');$xh->add_attribute("class", "border-0 lazyload");$xh->add_attribute("src", PIXEL);$xh->add_attribute("data-src", htmlentities($row["image"]));$xh->add_attribute("alt", $row["advertiser"] . " Coupon");$xh->single_tag('img');$xh->close(); // div}$xh->close(); // a$xh->close(); // li}}if (!empty($lastAdvertiser)) {$xh->close(); // ul}$xh->add_attribute("nonce", base64_encode($_SESSION["nonce"]));$xh->tag('script');$str = my_trim('document.addEventListener("DOMContentLoaded", function() {');$str .= my_trim(' document.getElementById("couponList").addEventListener("click", function(event) {');$str .= my_trim(' e = event.target.closest("a");');$str .= my_trim(' if (e && e.classList.contains("coupon-link")) {');$str .= my_trim(' window.dataLayer.push({ "event" : "trackEvent", "eventCategory" : "Coupon", "eventAction" : "Click", "eventLabel" : e.getAttribute("data-advertiser")});');$str .= my_trim(' }');$str .= my_trim(' });');$str .= my_trim('});');$xh->insert_code($str);$xh->close(); // script$xh->close(); // div}}else if (mysqli_errno($conn)) {$xh->add_attribute("class", "container bg-info text-center py-3");$xh->tag('div');$xh->add_attribute("class", "display-6");$xh->tag('p');$xh->add_attribute("class", "material-icons");$xh->tag('i', "loyalty");$xh->tag('span', " No Coupons available at the moment...");$xh->close(); // p$xh->close(); // div}$html = $xh->flush();//error_log(print_r($html, 1));return $html;}// Delete left over progressbar files older than 2 daysfunction cleanupPbFiles() {$files = glob("../MyFiles/tmp/pb*.txt");$now = time();foreach ($files as $file) {if (is_file($file)) {if ($now - filemtime($file) >= 60 * 60 * 24 * 2) { // 2 days and olderunlink($file);}}}}// Update progressbar file for a sessionfunction updatePbFile($flag = false, $desc = null) {static $max_pb = 10; // max progressbar stepsstatic $current = 0;static $lastTime = 0;static $startTime = 0;static $timers = [];if ($flag) {if ($desc == "Start") {$current = 0;$timers = [];$startTime = $lastTime = microtime(true);} else if (strpos($desc, "End:") === 0) {$nowTime = microtime(true);$timers["Total"] = intval(($nowTime - $startTime) * 1000);$pieces = explode(":", $desc);savePbTimers($timers, $pieces[1]);}}else {++$current;$nowTime = microtime(true);$diffTime = $nowTime - $lastTime;$lastTime = $nowTime;$timers[$desc] = intval($diffTime * 1000);}if ($current > $max_pb) {error_log("max_pb $max_pb is too small, current step is $current. Adjust tools.php (updatePbFile).");$max_pb = $current;}$filename = session_id() . "_" . MySessionHandler::getSessionTab();$arr_content = array();$percent = intval($current / $max_pb * 100);$arr_content['percent'] = $percent;$arr_content['message'] = $current . " search(es) processed.";$file = "../MyFiles/tmp/pb_" . $filename . ".txt";if ($percent >= 100) {@unlink($file);} else {file_put_contents($file, json_encode($arr_content));}}// Linkshare / CJ Affiliate csv dumpfunction ls_cj_csv($fields) {static $fh = null;$delimiter = ',';$enclosure = '"';$mysql_null = false;if (!$fh) {$fh = fopen("ls_cj.csv", "a+");}$delimiter_esc = preg_quote($delimiter, '/');$enclosure_esc = preg_quote($enclosure, '/');$output = array();foreach ($fields as $field) {if ($field === null && $mysql_null) {$output[] = 'NULL';continue;}$output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field) ? ($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure) : $field;}fwrite($fh, join($delimiter, $output) . "\n");}// Login in checkfunction isLoggedIn() {return (!empty($_SESSION['sessData']['userLoggedIn']) && !empty($_SESSION['sessData']['userID'])) ? true : false;}// unset all login system session datafunction unsetSessData() {unset($_SESSION['sessData']['userLoggedIn']);unset($_SESSION['sessData']['userID']);unset($_SESSION['sessData']['loginType']);}// get user image namefunction getUserImage($userData) {if (empty($userData) || empty($userData['picture'])) {return 'login/assets/images/default.png';}$httpPos = strpos($userData['picture'], 'http');if ($httpPos === false) {return 'login/' . UPLOAD_PATH . 'profile_picture/' . $userData['picture'];}return $userData['picture'];}function startsWith($haystack, $needle) {return substr_compare($haystack, $needle, 0, strlen($needle)) === 0;}function endsWith($haystack, $needle) {return substr_compare($haystack, $needle, -strlen($needle)) === 0;}function displayBarcode($barcode) {$barcode = trim(preg_replace("/[^0-9]/", "", $barcode));$barcodeType = clsLibGTIN::GTINCheck($barcode, false, 1);if ($barcodeType == "UPC" && strlen($barcode) == 12) {return substr($barcode, 0, 1) . "-" . substr($barcode, 1, 5) . "-" . substr($barcode, 6, 5) . "-" . substr($barcode, 11, 1);}else if (($barcodeType == "EAN" || $barcodeType == "ISBN") && strlen($barcode) == 13) {return substr($barcode, 0, 1) . "-" . substr($barcode, 1, 6) . "-" . substr($barcode, 7, 6);}else if ($barcodeType == "EAN" && strlen($barcode) == 14) {return substr($barcode, 0, 1) . "-" . substr($barcode, 1, 2) . "-" . substr($barcode, 3, 5) . "-" . substr($barcode, 8, 5) . "-" . substr($barcode, 13, 1);}else {return $barcode;}}// fuzzy search to verify titles are relevantfunction verifyResultArr() {require_once ('php/Fuse/Bitap/Bitap.php');require_once ('php/Fuse/Bitap/matched_indices.php');require_once ('php/Fuse/Bitap/pattern_alphabet.php');require_once ('php/Fuse/Bitap/regex_search.php');require_once ('php/Fuse/Bitap/score.php');require_once ('php/Fuse/Bitap/search.php');require_once ('php/Fuse/Helpers/deep_value.php');require_once ('php/Fuse/Helpers/is_list.php');require_once ('php/Fuse/Fuse.php');if (!empty($_SESSION["advSearch"]["Barcode"]) || empty($_SESSION["resultArr"]) || empty($_SESSION["searchTerm"])) {return;}$options = ['shouldSort' => false,// 'tokenize' => true,// 'matchAllTokens' => true,// 'findAllMatches' => true,'includeScore' => true,'includeMatches' => true,'threshold' => 0.6,'location' => 0,'distance' => 100,'minMatchCharLength' => 5,'keys' => [ "Title" ]];$fuse = new Fuse($_SESSION["resultArr"], $options);$result = $fuse->search($_SESSION["searchTerm"]);$_SESSION["resultArr"] = [];foreach($result as $r) {$r['item']['score'] = (!empty($r['score']) ? $r['score'] : 0);$r['item']['indices'] = (!empty($r['matches'][0]['indices']) ? $r['matches'][0]['indices'] : []);$_SESSION['resultArr'][] = $r['item'];}/* debug start$lines = [];foreach($_SESSION['resultArr'] as $r) {$p = 0;$t = '';foreach($r['indices'] as $ind) {if ($p < $ind[0]) {$t .= substr($r['Title'], $p, $ind[0] - $p);}$t .= "<b>" . substr($r['Title'], $ind[0], $ind[1] - $ind[0] + 1) . "</b>";$p = $ind[1] + 1;}if ($p < strlen($r['Title'])) {$t .= substr($r['Title'], $p);}$lines[] = array ('score' => $r['score'], 'title' => $t);}usort($lines, 'compare_score');echo "<p>";foreach($lines as $l) {echo $l['score'] . ": " . $l['title'] . "<br/>";}echo "</p>";debug end */}// compare score for sort low to highfunction compare_score($a, $b) {return ($a['score'] > $b['score']);}function my_error_log($msg) {error_log("[" . date("d-M-Y H:m:s") . "] " . $msg . PHP_EOL, 3, $_SERVER['DOCUMENT_ROOT'] . "/../MyFiles/logs/my_php_error.log");}function savePbTimers($timers, $id) {$conn = MySessionHandler::getDBSessionId();$sql = "INSERTINTO searchPerformance(id, Discogs, eBay_New, Linkshare, CJ_Affiliate, Walmart, iTunes, Amazon_API, Amazon_Scrape, Impact, eBay_Used, Total)VALUES ($id, " . $timers['Discogs'] . "," . $timers['eBay New'] . "," . $timers['Linkshare'] . "," . $timers['CJ Affiliate'] . "," . $timers['Walmart'] . "," . $timers['iTunes'] . "," . $timers['Amazon API'] . "," . $timers['Amazon Scrape'] . "," . $timers['Impact'] . "," . $timers['eBay Used'] . "," . $timers['Total'] . ")";if (!($result = mysqli_query($conn, $sql))) {error_log("MySQL Write SearchPerformance Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}return $result;}function saveSearchCache($vendor, $query, $subquery, $text) {$conn = MySessionHandler::getDBSessionId();$created = mysqli_real_escape_string($conn, time());$v = mysqli_real_escape_string($conn, $vendor);$q = mysqli_real_escape_string($conn, $query);$s = mysqli_real_escape_string($conn, $subquery);$r = base64_encode(gzencode($text));$sql = "INSERTINTO searchCache(created, vendor, query, subquery, result)VALUES ('$created', '$v', '$q', '$s', '$r')ON DUPLICATE KEY UPDATE result = '$r'";if (!($result = mysqli_query($conn, $sql))) {error_log("MySQL Write SearchCache Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}return $result;}function expireSearchCache() {$conn = MySessionHandler::getDBSessionId();$t = MySessionHandler::getDBExpirationTime();$expired = mysqli_real_escape_string($conn, time() - $t);$sql = "DELETEFROM searchCacheWHERE created < $expired";if (!($result = mysqli_query($conn, $sql))) {error_log("MySQL Delete SearchCache Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}}function getSearchCache($vendor, $query, $subquery) {$conn = MySessionHandler::getDBSessionId();$v = mysqli_real_escape_string($conn, $vendor);$q = mysqli_real_escape_string($conn, $query);$s = mysqli_real_escape_string($conn, $subquery);$sql = "select result from searchCache where vendor = '$v' and query = '$q' and subquery = '$s'";if ($result = mysqli_query($conn, $sql)) {if (mysqli_num_rows($result) == 1) {if ($row = mysqli_fetch_assoc($result)) {return gzdecode(base64_decode($row["result"]));}}}else if (mysqli_errno($conn)) {error_log("MySQL Read SearchCache SQL: " . $sql);error_log("MySQL Read SearchCache Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}return false;}function getGeoLocation() {if (!empty($_SESSION['buyer']['Zip']) || empty($_SERVER['REMOTE_ADDR'])) {return;}$conn = MySessionHandler::getDBSessionId();$ip = inet_pton($_SERVER['REMOTE_ADDR']);$sql = "select zip from geoLocation where ip = '$ip'";if ($result = mysqli_query($conn, $sql)) {if (mysqli_num_rows($result) == 1) {if ($row = mysqli_fetch_assoc($result)) {$_SESSION['buyer']['Zip'] = $row["zip"];return;}}}else if (mysqli_errno($conn)) {error_log("MySQL Read geoLocation SQL: " . $sql);error_log("MySQL Read geoLocation Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}$vendors = Vendors::getInstance();$config = $vendors->getVendor(Vendors::IPAPI);$key = $config['KEY'];$loc = file_get_contents("http://api.ipapi.com/api/" . $_SERVER['REMOTE_ADDR'] . "?access_key=" . $key);if ($loc == false) {return;}$json = json_decode($loc);if (!empty($json->error)) {error_log("geoLocation Error: " . $json->error->info . " (" . $json->error->code . " | " . $json->error->type . ")");return;}$created = mysqli_real_escape_string($conn, time());$countryCode = mysqli_real_escape_string($conn, $json->{'country_code'});$zip = mysqli_real_escape_string($conn, $json->zip);$language = mysqli_real_escape_string($conn, $json->location->languages[0]->code);$is_eu = mysqli_real_escape_string($conn, $json->location->{'is_eu'} ? '1' : '0');$sql = "INSERTINTO geoLocation(ip, created, countryCode, zip, language, is_eu)VALUES ('$ip', $created, '$countryCode', '$zip', '$language', '$is_eu')";if (!($result = mysqli_query($conn, $sql))) {error_log("MySQL Write geoLocation Error: " . mysqli_error($conn) . " (" . mysqli_errno($conn) . ")");}}function timeStampUrl($file) {if (@file_exists($file)) {return $file . "?" . filemtime($file);}return $file;}function my_trim($str) {return (trim($str) . ($_SESSION["htmlIndent"] > 0 ? "\n" : ""));}function buildDiscogsSearchTerm() {if ($_SERVER["REQUEST_METHOD"] == "POST" || $_SERVER["REQUEST_METHOD"] == "GET") {unset($_SESSION["advSearch"]);$_SESSION["searchTerm"] = "";$_SESSION["advSearchTerm"] = "";}if ($_SERVER["REQUEST_METHOD"] == "POST") {if ($_POST["submitBtn"] == "Search") {if (empty($_POST['searchTerm'])) {return;}if (strpos($_POST["searchTerm"], "*ADV*") === 0) {$_SESSION["advSearchTerm"] = substr($_POST["searchTerm"], 5);$_SESSION["advSearch"] = [];$_SESSION["searchTerm"] = "";$arr = explode(AS_TOKEN, $_SESSION["advSearchTerm"], 5);foreach ($arr as $crit) {$s = explode(AS_FIELD, $crit);$_SESSION["searchTerm"] .= " " . $s[1];if ($s[0] === "t") {$_SESSION["advSearch"]["Title"] = $s[1];} else if ($s[0] === "a") {$_SESSION["advSearch"]["Artist"] = $s[1];} else if ($s[0] === "tr") {$_SESSION["advSearch"]["Track"] = $s[1];} else if ($s[0] === "b") {$_SESSION["advSearch"]["Barcode"] = $s[1];} else if ($s[0] === "c") {$_SESSION["advSearch"]["Catno"] = $s[1];} else if ($s[0] === "l") {$_SESSION["advSearch"]["Label"] = $s[1];} else if ($s[0] === "co") {$_SESSION["advSearch"]["Country"] = $s[1];} else if ($s[0] === "y") {$_SESSION["advSearch"]["Year"] = $s[1];}}$_SESSION["searchTerm"] = trim($_SESSION["searchTerm"]);} else {$_SESSION["searchTerm"] = searchFriendlyString($_POST['searchTerm']);$barcodeType = clsLibGTIN::GTINCheck($_SESSION["searchTerm"], false, 1);$barcodeValue = clsLibGTIN::GTINCheck($_SESSION["searchTerm"]);if (!empty($barcodeType) && !empty($barcodeValue)) {$_SESSION["advSearch"]["Barcode"] = $barcodeValue;$_SESSION["advSearchTerm"] = "b" . AS_FIELD . $barcodeValue;}}} else if ($_POST["submitBtn"] == "advSearch") {$_SESSION["searchTerm"] = searchFriendlyString($_POST["searchTerm"]);$_SESSION["advSearch"] = [];$arr = [];if (!empty($_POST["advTitle"])) {$_SESSION["advSearch"]["Title"] = searchFriendlyString($_POST["advTitle"]);$arr[] = "t" . AS_FIELD . $_SESSION["advSearch"]["Title"];}if (!empty($_POST["advArtist"])) {$_SESSION["advSearch"]["Artist"] = searchFriendlyString($_POST["advArtist"]);$arr[] = "a" . AS_FIELD . $_SESSION["advSearch"]["Artist"];}if (!empty($_POST["advTrack"])) {$_SESSION["advSearch"]["Track"] = searchFriendlyString($_POST["advTrack"]);$arr[] = "tr" . AS_FIELD . $_SESSION["advSearch"]["Track"];}if (!empty($_POST["advBarcode"])) {$_SESSION["advSearch"]["Barcode"] = searchFriendlyString($_POST["advBarcode"]);$arr[] = "b" . AS_FIELD . $_SESSION["advSearch"]["Barcode"];}if (!empty($_POST["advCatno"])) {$_SESSION["advSearch"]["Catno"] = searchFriendlyString($_POST["advCatno"]);$arr[] = "c" . AS_FIELD . $_SESSION["advSearch"]["Catno"];}if (!empty($_POST["advLabel"])) {$_SESSION["advSearch"]["Label"] = searchFriendlyString($_POST["advLabel"]);$arr[] = "l" . AS_FIELD . $_SESSION["advSearch"]["Label"];}if (!empty($_POST["advCountry"])) {$_SESSION["advSearch"]["Country"] = searchFriendlyString($_POST["advCountry"]);$arr[] = "co" . AS_FIELD . $_SESSION["advSearch"]["Country"];}if (!empty($_POST["advYear"])) {$_SESSION["advSearch"]["Year"] = searchFriendlyString($_POST["advYear"]);$arr[] = "y" . AS_FIELD . $_SESSION["advSearch"]["Year"];}$_SESSION["advSearchTerm"] = join(AS_TOKEN, $arr);} else if ($_POST["submitBtn"] == "discogsSearch") {if (!empty($_POST['discogsBarcode']) && empty($_POST['discogsTitle']) && empty($_POST['discogsArtist'])) {$_SESSION["advSearch"]["Barcode"] = searchFriendlyString($_POST['discogsBarcode']);$_SESSION["searchTerm"] = $_SESSION["advSearch"]["Barcode"];$_SESSION["advSearchTerm"] = "b" . AS_FIELD . $_SESSION["searchTerm"];}else{$_SESSION["searchTerm"] = "";$arr = [];if (!empty($_POST['discogsTitle'])) {$_SESSION["advSearch"]["Title"] = searchFriendlyString($_POST['discogsTitle']);$arr[] = "t" . AS_FIELD . $_SESSION["advSearch"]["Title"];$_SESSION["searchTerm"] .= trim($_SESSION["advSearch"]["Title"]);}if (!empty($_POST['discogsTitle']) && !empty($_POST['discogsArtist'])) {$_SESSION["searchTerm"] .= " ";}if (!empty($_POST['discogsArtist'])) {$_SESSION["advSearch"]["Artist"] = searchFriendlyString($_POST['discogsArtist']);$arr[] = "a" . AS_FIELD . $_SESSION["advSearch"]["Artist"];$_SESSION["searchTerm"] .= trim($_SESSION["advSearch"]["Artist"]);}$_SESSION["advSearchTerm"] = join(AS_TOKEN, $arr);}}} else if ($_SERVER["REQUEST_METHOD"] == "GET") {$_SESSION["searchTerm"] = searchFriendlyString($_GET["q"] ?? "");$barcodeType = clsLibGTIN::GTINCheck($_SESSION["searchTerm"], false, 1);$barcodeValue = clsLibGTIN::GTINCheck($_SESSION["searchTerm"]);if (!empty($barcodeType) && !empty($barcodeValue)) {$_SESSION["advSearch"]["Barcode"] = $barcodeValue;$_SESSION["advSearchTerm"] = "b" . AS_FIELD . $barcodeValue;}}}