public function trackEvent() { // return ''; // ignore_user_abort(true); $this->layout = null; $response = null; $responseType = ''; $expandFields = array(); $deliveryStatus = ''; $event = strtolower(Input::get('evt', '')); $requestType = Input::get('rt', Delivery::REQUEST_TYPE_TRACKING_BEACON); $checksum = Input::get('cs', ''); $flightWebsiteID = Input::get('fpid', 0); $zoneID = Input::get('zid', 0); $isOverReport = Input::get('ovr'); $platform = Input::get('plf', ''); $beacon = Input::get('bc', ''); $hostReferer = Input::get('ref', ''); //custom code for VIB 068 Relaunch form complete tracking if (Input::get('wid') == 48 && $event == 'complete') { $flightWebsiteID = 172; $event = "impression"; } $trackingModel = new Tracking(); $deliveryModel = new Delivery(); //ghi log trước khi xử lý //$logPreProcess = $trackingModel->logPreProcess($requestType, Input::get()); // if($logPreProcess){ if (1) { //kiểm tra referrer if (empty($hostReferer)) { $hostReferer = $trackingModel->getRequestReferer(); } $responseType = $trackingModel->checkPreProcess($requestType, $hostReferer, $zoneID); if (empty($responseType)) { $adZone = $deliveryModel->getAdzone($zoneID); if ($adZone) { $publisherSite = $deliveryModel->getPublisherSite($adZone->publisher_site_id); $domainCheck = isset($publisherSite->domain_checking) ? $publisherSite->domain_checking : 1; if (!$domainCheck || isSameDomain($hostReferer, getWebDomain($adZone->site->url)) || isLocal() || $adZone->id == 241 || $platform === 'mobile_app') { // if ($platform == '') { // $platform = $deliveryModel->getPlatform(); // } $platform = ''; $flightWebsite = $deliveryModel->getFullFlightWebsite($flightWebsiteID, $adZone->publisher_site_id, $adZone->ad_format_id, $platform); if ($flightWebsite) { //checksum if ($flightWebsite->flight->ad_format_id == Delivery::TRACKING_CODE_ADID) { $responseType = Delivery::RESPONSE_TYPE_TRACKING_BEACON_SUCCESS; } elseif ($trackingModel->isValidTrackingBeacon($checksum, $event)) { $responseType = Delivery::RESPONSE_TYPE_TRACKING_BEACON_SUCCESS; } else { $responseType = Delivery::RESPONSE_TYPE_CHECKSUM_ERROR; } } //else invalid } } } if (empty($responseType)) { $responseType = Delivery::RESPONSE_TYPE_INVALID; } elseif ($responseType == Delivery::RESPONSE_TYPE_TRACKING_BEACON_SUCCESS) { $expandFields = array('flight_id' => $flightWebsite->flight_id, 'ad_format_id' => $adZone->ad_format_id, 'ad_id' => $flightWebsite->flight->ad_id, 'campaign_id' => $flightWebsite->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); $expandFields['checksum'] = $checksum; $eventChecksum = $event; $trackingModel->setChecksumTrackingEvent($checksum, $event); //update tracking summary $rawTrackingSummary = new RawTrackingSummary(); if ('impression' == $event && !empty($beacon) && !empty($flightWebsite->ad->third_impression_track)) { $thirdImpressionTrackArr = explode("\n", $flightWebsite->ad->third_impression_track); $arrCurl = array(); foreach ($thirdImpressionTrackArr as $item) { array_push($arrCurl, trim($this->replaceParam($item))); } multipleThreadsRequest($arrCurl); } $rawTrackingSummary->addSummary($event, $flightWebsite->website_id, $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flightWebsite->flight->ad_id, $flightWebsite->flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport); $uuid = $trackingModel->getVisitorId(); if ('impression' === $event || 'click' === $event) { $time = time(); //Collection data if (!empty($flightWebsite->ad->audience_id)) { $audience_id = $flightWebsite->ad->audience_id; $cookie = isset($_COOKIE["yoAu_{$audience_id}"]) ? $_COOKIE["yoAu_{$audience_id}"] : ''; if (!$cookie || substr($cookie, 0, 2) === "0." || $cookie === '1') { setcookie("yoAu_{$audience_id}", "1." . $time, $time + 86400 * 365, '/', getWebDomain(DOMAIN_COOKIE)); $redis = new RedisBaseModel(env('REDIS_HOST', '127.0.0.1'), env('REDIS_PORT_6', '6379'), false); $redis->pfadd("au.{$audience_id}", array($uuid)); } if (substr($cookie, 0, 2) === '1.') { $time = substr($cookie, 2); } $rawTrackingAudience = new RawTrackingAudience(); $rawTrackingAudience->addAudience($uuid, $audience_id, $flightWebsite->ad->id, $time, $event); } //Tracking audience if (!empty($flightWebsite->flight->audience)) { $audience = json_decode($flightWebsite->flight->audience, true); $cookie = isset($_COOKIE["yoAu_{$audience['audience_id']}"]) ? $_COOKIE["yoAu_{$audience['audience_id']}"] : ''; if (substr($cookie, 0, 2) === '1.' || substr($cookie, 0, 2) === '0.') { $time = substr($cookie, 2); } if ($cookie === '1') { setcookie("yoAu_{$audience['audience_id']}", "1." . $time, $time + 86400 * 365, '/', getWebDomain(DOMAIN_COOKIE)); } if ($audience['operator'] == 'not in') { setcookie("yoAu_{$audience['audience_id']}", "0." . $time, $time + 86400 * 365, '/', getWebDomain(DOMAIN_COOKIE)); } $rawTrackingAudience = new RawTrackingAudience(); $rawTrackingAudience->addAudience($uuid, $audience['audience_id'], $flightWebsite->ad->id, $time, $event); } } //udpate inventory //$inventoryMetric = $trackingModel->getTrackingEventType($flightWebsite->flight->cost_type); $inventoryMetric = $trackingModel->getTrackingEventType($flightWebsite->flight->cost_type); if ($event == $inventoryMetric) { //$trackingModel->updateInventory($flightWebsite->flight->id, $flightWebsite->id, $inventoryMetric, $isOverReport); $rawTrackingSummary->updateInventory($flightWebsite->flight->id, $flightWebsite->id, $inventoryMetric, $isOverReport); } if (isset($flightWebsite->flight->event) && $flightWebsite->flight->event != '') { $flightEvent = $flightWebsite->flight->event; } else { // Truong hop nhung flight truoc day khong co setting event $flightEvent = $inventoryMetric; } if ($event == $flightEvent) { //incre today capped this ad by 1 $trackingModel->incFreCap($flightWebsite->flight); } $uniqueEvent = ''; //unique impression if ($event == 'impression') { $uniqueEvent = 'unique_impression'; $expandFields['unique_impression'] = $trackingModel->isUniqueImpression($flightWebsite->id); // update number show retargeting // $deliveryModel->updateRetargeting($flightWebsite->flight, $trackingModel->getVisitorId()); } //unique click if ($event == 'click') { $uniqueEvent = 'unique_click'; $expandFields['unique_click'] = $trackingModel->isUniqueClick($flightWebsite->id); } //add summary unique click or impression if (!empty($expandFields[$uniqueEvent])) { $rawTrackingSummary->addSummary($uniqueEvent, $flightWebsite->website_id, $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flightWebsite->flight->ad_id, $flightWebsite->flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport); } } } //ghi log process //$logAfterProcess = $trackingModel->logAfterProcess($responseType, $expandFields, $logPreProcess); //response to client pr($expandFields); pr($responseType, 1); if ($event == 'click' && Input::get('to')) { //redirect to ad's destination url on click event if (!empty($beacon) && !empty($flightWebsite->ad->third_click_track)) { $thirdClickTrackArr = explode("\n", $flightWebsite->ad->third_click_track); $arrCurl = array(); foreach ($thirdClickTrackArr as $item) { array_push($arrCurl, trim($this->replaceParam($item))); } multipleThreadsRequest($arrCurl); } $conversionModel = new Conversion(); $conversionCampaign = array(); if (!empty($expandFields['campaign_id'])) { $conversionCampaign = $conversionModel->getCampaignConversion($expandFields['campaign_id']); } if (!empty($conversionCampaign)) { $infoConversion = array('wid' => $expandFields['website_id'], 'bid' => $expandFields['ad_id']); $cookieKey = "Conv_{$expandFields['campaign_id']}"; return redirect(urldecode(Input::get('to')))->withCookie(cookie($cookieKey, json_encode($infoConversion), 60)); } else { return redirect(urldecode(Input::get('to'))); } } else { //return 1x1 transparent GIF $response = $trackingModel->outputTransparentGif(); // exit(); } }
function makeVAST($adID, $flightPublisherID, $publisherAdZoneID, $checksum = '', $isOverReport = false, $referrer = '') { // get ad data $deliveryModel = new Delivery(); $ad = $deliveryModel->getAd($adID); $adZone = $deliveryModel->getAdzone($publisherAdZoneID); if ($adZone) { $flightWebsite = $deliveryModel->getFullFlightWebsite($flightPublisherID, $adZone->publisher_site_id, $adZone->ad_format_id, ''); /*if ($flightWebsite) { $rawTrackingSummary = new RawTrackingSummary(); $rawTrackingSummary->addSummary('ads_request', $flightWebsite->website_id, $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flightWebsite->flight->ad_id, $flightWebsite->flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport); }*/ } if ($ad && $flightPublisherID && $publisherAdZoneID) { $XMLView = 'none'; $this->initVast($ad, $flightPublisherID, $publisherAdZoneID, $checksum, $isOverReport, $referrer); if (!empty($this->id)) { if ($this->type_vast == self::VAST_INLINE) { $XMLView = 'inline'; } else { $XMLView = 'wrapper'; } } $this->setHeaderVast(); \View::addLocation(base_path() . '/resources/views/vast'); $body = \View::make($XMLView)->with('ad', $this); return response($body, 200, $this->header); } else { return $this->makeEmptyVast(); } }