public function adsProcess() { $startProcess = microtime(1); $this->layout = null; $response = null; $responseType = ''; $expandFields = array(); $deliveryStatus = ''; $requestType = Input::get('rt', Delivery::REQUEST_TYPE_AD); $flightWebsiteID = Input::get('fpid', ''); $zoneID = Input::get('zid', 0); $websiteID = Input::get('wid', 0); $platform = Input::get('plf', ''); $tag = Input::get('tag', ''); $data = Input::all(); $trackingModel = new Tracking(); $deliveryModel = new Delivery(); $isOverReport = $data['ovr'] = false; $showBanner = showBanner(); if ($showBanner !== FALSE) { $flightWebsiteID = $showBanner; } //$uuid = $trackingModel->getVisitorId(); //ghi log ad request (new RawTrackingAdRequest())->addAdRequest($websiteID, $zoneID); // if($continueProcess){ //check pre process $hostReferer = $trackingModel->getRequestReferer(); $responseType = $trackingModel->checkPreProcess($requestType, $hostReferer, $zoneID); //pre validate ok if (empty($responseType)) { //read redis 1 $data['ref'] = $hostReferer; $adZone = $deliveryModel->getAdzone($zoneID); if ($adZone && !empty($adZone->site)) { $expandFields['ad_format_id'] = $adZone->ad_format_id; if ($adZone->publisher_site_id == $websiteID) { //kiểm tra referrer đúng với site đã đăng ký // if(1){//test only $publisherSite = $deliveryModel->getPublisherSite($adZone->publisher_site_id); pr($publisherSite); $domainCheck = isset($publisherSite->domain_checking) ? $publisherSite->domain_checking : 1; if (!$domainCheck || isSameDomain($hostReferer, getWebDomain($adZone->site->url)) || isLocal()) { // if ($platform == '') { // $platform = $deliveryModel->getPlatform(); // } $platform = ''; //read redis 1 $flightWebsites = $deliveryModel->getAvailableAds($adZone->publisher_site_id, $adZone->ad_format_id, $flightWebsiteID, $platform); if ($flightWebsites) { //lấy ad từ list thỏa điều kiện để trả về $deliveryInfo = $deliveryModel->getFullFlightInfo($flightWebsites, $adZone->publisher_site_id, $adZone->ad_format_id); //random array flight website, priority flight audience $flightWebsites = $deliveryModel->sortAvailableFlightWebsites($flightWebsites, $deliveryInfo); pr($flightWebsites); pr($deliveryInfo); $redis = new RedisBaseModel(env('REDIS_HOST', '127.0.0.1'), env('REDIS_PORT_6', '6379'), false); foreach ($flightWebsites as $k => $flightWebsite) { if (!empty($flightWebsite) && !empty($deliveryInfo['flightDates'][$flightWebsite->flight_id]) && !empty($deliveryInfo['flights'][$flightWebsite->flight_id])) { $flightDates = $deliveryInfo['flightDates'][$flightWebsite->flight_id]; $flight = $deliveryInfo['flights'][$flightWebsite->flight_id]; $ad = $deliveryInfo['ads'][$flight->ad_id]; if ($deliveryModel->checkPlatform($ad) === TRUE || isLocal()) { $checkFlightDate = $deliveryModel->checkFlightDate($flightDates, $flight); //flight date ok if ($checkFlightDate) { $deliveryStatus = $deliveryModel->deliveryAd($ad, $flightWebsite, $flight, $flightDates); if ($deliveryStatus == Delivery::DELIVERY_STATUS_OK || $deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) { if (empty($data['ec']) && !empty($ad->vast_include) && !empty($ad->video_wrapper_tag)) { $xmlVastTag = $this->getVastAdTagUri($ad->id, $this->replaceParam($ad->video_wrapper_tag)); if (empty($xmlVastTag)) { continue; } } if (!empty($flight->filter)) { if (!$deliveryModel->checkTag($flight->filter, urldecode($tag))) { $deliveryStatus = Delivery::TAG_TYPE_INVALID; continue; } } //Check retargeting if (!empty($flight->audience)) { $check = false; $audience = json_decode($flight->audience, true); if (!empty($audience['audience_id'])) { if (isset($_COOKIE["yoAu_{$audience['audience_id']}"]) && !empty($_COOKIE["uuid"])) { if ($_COOKIE["yoAu_{$audience['audience_id']}"] === '1' || substr($_COOKIE["yoAu_{$audience['audience_id']}"], 0, 2) === '1.') { $check = true; } } if ($audience['operator'] === 'not in') { $check = !$check; } } if ($check === false) { $deliveryStatus = Delivery::RESPONSE_TYPE_AUDIENCE_LIMIT; continue; } } //trả về ad này pr($flightWebsite); $serveAd = $ad; $data['ad'] = $ad; $data['aid'] = $ad->id; $data['fpid'] = $flightWebsite->id; $data['flight'] = $flight; //over report if ($deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) { $data['ovr'] = $isOverReport = true; } $responseType = Delivery::RESPONSE_TYPE_ADS_SUCCESS; break; } } else { $deliveryStatus = Delivery::RESPONSE_TYPE_FLIGHTDATE_NOT_AVAILABLE; } } else { $deliveryStatus = Delivery::PLATFORM_TYPE_INVALID; } } } //endforeach } //no ads available if ($responseType != Delivery::RESPONSE_TYPE_ADS_SUCCESS) { $responseType = Delivery::RESPONSE_TYPE_NOT_AVAILABLE; } } else { $responseType = Delivery::RESPONSE_TYPE_REFERRER_NOT_MATCH; } } } } // } //invalid ads request $bLogAdsSuccess = false; if (empty($responseType)) { $responseType = Delivery::RESPONSE_TYPE_INVALID; } elseif ($responseType == Delivery::RESPONSE_TYPE_ADS_SUCCESS) { $bLogAdsSuccess = true; $expandFields = array('flight_id' => $flightWebsite->flight_id, 'ad_format_id' => $adZone->ad_format_id, 'ad_id' => $flight->ad_id, 'campaign_id' => $flight->campaign_id, 'publisher_ad_zone_id' => $adZone->id, 'flight_website_id' => $flightWebsite->id, 'website_id' => $flightWebsite->website_id, 'publisher_base_cost' => $flightWebsite->publisher_base_cost); if ($isOverReport) { $expandFields['ovr'] = 1; } $expandFields['checksum'] = $checksum = $trackingModel->makeChecksumHash($flightWebsite->id); $eventChecksum = Delivery::RESPONSE_TYPE_ADS_SUCCESS; $trackingModel->setChecksumTrackingEvent($checksum, Delivery::RESPONSE_TYPE_ADS_SUCCESS); } $data['url_track_ga'] = $deliveryModel->getUrlTrack3rd($data); //serve Ad // if(0){ if (!empty($serveAd)) { \View::addLocation(base_path() . '/resources/views/delivery'); if (isset($data['ec'])) { if ($data['ec'] == 1) { $data['checksum'] = $expandFields['checksum']; $data['element_id'] = isset($adZone->element_id) ? $adZone->element_id : ''; $data['category_name'] = ''; $adFormat = $deliveryModel->getAdFormat($data['ad']->ad_format_id); if (empty($data['flight']->category_id)) { $campaign = $deliveryModel->getCampaign($data['flight']->campaign_id); if (!empty($campaign)) { $category = $deliveryModel->getCategory($campaign->category_id); $data['category_name'] = isset($category->name) ? str_replace(' ', '_', strtolower($category->name)) : ''; } } else { $category = $deliveryModel->getCategory($data['flight']->category_id); if (!empty($category)) { $data['category_name'] = isset($category->name) ? str_replace(' ', '_', strtolower($category->name)) : ''; } } $data['flight_name'] = isset($data['flight']->name) ? str_replace(' ', '_', $data['flight']->name) : ''; $data['ad_format'] = isset($adFormat->name) ? str_replace(' ', '_', $adFormat->name) : ''; $data['publisher_domain'] = $hostReferer; $data['rd'] = str_random(40); $this->data['data'] = $data; $data['type'] = $serveAd->ad_view ? $serveAd->ad_view : strtolower($data['type']); if (Input::get('test') == 1) { return response(\View::make($data['type'], $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8'); } else { $response = response(\View::make($data['type'], $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8'); } } else { $response = (new VAST())->makeVAST($data['aid'], $data['fpid'], $data['zid'], $expandFields['checksum'], $isOverReport); } } } else { //TO DO : return backup ads if (!empty($adZone)) { $adZone->alternateAds = !empty($adZone->alternateAds) ? $adZone->alternateAds : $deliveryModel->getAlternateAds($adZone->id); if (isset($adZone) && !empty($adZone->alternateAds)) { if (isset($data['ec']) && !$data['ec']) { // TO DO : return backup vast shuffle($adZone->alternateAds); $firstBackup = array_shift($adZone->alternateAds); $response = (new VAST())->makeBackupVast($adZone->id, $firstBackup->code); } else { $this->data['listAlternateAd'] = $adZone->alternateAds; $this->data['zid'] = $adZone->id; $this->data['data']['url_track_ga'] = $data['url_track_ga']; \View::addLocation(base_path() . '/resources/views/delivery'); $response = response(\View::make('rotator', $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8'); } } else { if (isset($data['ec']) && !$data['ec']) { $response = (new VAST())->makeEmptyVast(); } else { $this->data['data']['url_track_ga'] = $data['url_track_ga']; \View::addLocation(base_path() . '/resources/views/delivery'); $response = response(\View::make('url_track_ga', $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8'); } } (new RawTrackingSummary())->addSummaryRequestEmptyAd($adZone->id, $adZone->ad_format_id, $websiteID, $isOverReport); } } //ghi log ad success if ($bLogAdsSuccess) { (new RawTrackingSummary())->addSummary('ads_request', $flightWebsite->website_id, $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flight->ad_id, $flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport); } //response to client $endProcess = microtime(1); pr("Times: " . ($endProcess - $startProcess)); pr($deliveryStatus); pr($responseType, 1); return $response; }