/** * Run the migrations. * * @return void */ public function up() { Schema::table('trackings', function (Blueprint $table) { $table->date('tracking_date'); }); foreach (Tracking::all() as $tracking) { $tracking->tracking_date = $tracking->created_at; $tracking->save(); } }
/** * Run the database seeds. * * @return void */ public function run() { DB::table('trackings')->truncate(); $faker = Faker::create(); foreach (range(1, 20) as $index) { Tracking::create(['image_url' => $faker->imageUrl(640, 480, 'city'), 'facing_id' => Facing::find($faker->numberBetween(1, 20))->id]); } foreach (range(21, 30) as $index) { Tracking::create(['image_url' => $faker->imageUrl(640, 480, 'city'), 'state' => 'Inserted', 'inserted_at' => Carbon::now(), 'facing_id' => Facing::all()->get($faker->numberBetween(1, 20))->id, 'product_id' => Product::all()->get($faker->numberBetween(1, 20))->id, 'brand_id' => Brand::all()->get($faker->numberBetween(1, 20))->id, 'user_id' => User::all()->get($faker->numberBetween(1, 10))->id]); } }
/** * Execute the console command. * * @return mixed */ public function handle() { $pictures = Storage::files(); Tracking::with(['location', 'facing'])->where('image_url', '')->orderBy('id', 'desc')->chunk(200, function ($trackings) use($pictures) { foreach ($trackings as $tracking) { $ref = $this->reference($tracking->location->city, $tracking->facing->name, new Carbon($tracking->tracking_date)); $image_url = "{$ref}.jpg"; if (in_array($image_url, $pictures)) { $tracking->update(['image_url' => $image_url]); $this->info('Tracking #' . $ref . ' updated with image url ' . $image_url); } else { $this->error('Tracking #' . $ref . ' picture missing.'); } } }); }
/** * check delivery status and condition of requested flight */ public function deliveredAdStatus($adID, $flightWebsite, $flight, $dateRange) { $trackingModel = new Tracking(); //kiểm tra độ tuổi if ($flight->age && !$this->checkAge(json_decode($flight->age), Input::get('age')) && !isLocal()) { return self::RESPONSE_TYPE_AGE_LIMIT; } //kiểm tra giới tính if ($flight->sex && !$this->checkGender($flight->sex, Input::get('g')) && !isLocal()) { return self::RESPONSE_TYPE_GENDER_LIMIT; } //kiểm tra vị trí địa lí if ($flight->country && $flight->province && !$this->checkGeo($flight->country, $flight->province)) { return self::RESPONSE_TYPE_GEO_LIMIT; } //kiểm tra frequency capping if (!empty($dateRange) && !$this->checkFrequencyCap($flight, $dateRange, $flightWebsite->id) && !isLocal()) { return self::RESPONSE_TYPE_FREQUENCY_CAPPED; } //TODO : kiểm tra channel // to do kiểm tra theo loại campaign : CPC hay CPM //if( $flight->cost_type == 'cpm' || $flight->cost_type == 'cpc' ){ $event = Tracking::getTrackingEventType($flight->cost_type); $overReport = FALSE; $checkInventory = $this->checkInventory($flight, $flightWebsite, $event, $dateRange); if ($checkInventory !== TRUE) { //full inventory trong ngày // $checkOverInventory = $this->checkOverInventory($flight, $flightWebsite, $event); // if($checkOverInventory !== TRUE){ return $checkInventory; // } // else{ // $overReport = TRUE; // } } else { $checkOvrInventory = $this->checkOverInventory($flight, $flightWebsite, $event); pr($checkOvrInventory); if ($checkOvrInventory === TRUE) { $overReport = TRUE; } } //} // WHEN READY TO DELIVERY //if( $flight->frequency_cap ){ if (!empty($dateRange)) { $todayCapped = $trackingModel->getTodayFreCap($flight); $now = strtotime(date('Y-m-d H:i')); pr($dateRange); foreach ($dateRange as $date) { if (strtotime($date->start) <= $now && strtotime($date->end) >= $now) { if ($date->frequency_cap > 0) { if ($trackingModel->getTimeFreCap($flight) == 0) { $redis = new RedisBaseModel(env('REDIS_HOST', '127.0.0.1'), env('REDIS_PORT_2', '6379'), false); $visitorId = $trackingModel->getVisitorId(); $cacheKey = "Tracking:TimeFrequencyCap_{$flight->id}_{$visitorId}_{$flight->event}"; $cacheField = date('Y_m_d'); $redis->hSet($cacheKey, $cacheField, 0); if ($date->frequency_cap_time > 0) { $redis->expire($cacheKey, $date->frequency_cap_time * 60); } else { $redis->expire($cacheKey, 2); } } if ($todayCapped >= $date->frequency_cap - 1) { $time = time(); $expire = round((strtotime(date('Y-m-d 23:59:59', $time)) - $time) / 60); $trackingModel->setTimeFreCap($flight, $expire); } } } } /*if( $todayCapped >= $flight->frequency_cap_free && $flight->frequency_cap_time > 0 ){ $trackingModel->rememberFrequencyCap($flightWebsite->id, $flight->frequency_cap_time); }*/ } return $overReport ? self::DELIVERY_STATUS_OVER_REPORT : self::DELIVERY_STATUS_OK; }
public function getApiAd() { $this->layout = null; $response = null; $responseType = ''; $deliveryStatus = ''; $requestType = Input::get('rt', Delivery::REQUEST_TYPE_AD); $flightWebsiteID = Input::get('fpid', ''); $zoneID = Input::get('zid', 0); $data = Input::all(); $trackingModel = new Tracking(); $deliveryModel = new Delivery(); $isOverReport = $data['ovr'] = false; $showBanner = showBanner(); if ($showBanner !== FALSE) { $flightWebsiteID = $showBanner; } $responseData = []; $hostReferer = $trackingModel->getRequestReferer(); $responseType = $trackingModel->checkPreProcess($requestType, $hostReferer, $zoneID); //read redis 1 $data['ref'] = $hostReferer; $adZone = $deliveryModel->getAdzone($zoneID); if ($adZone) { $platform = ''; $flightWebsites = $deliveryModel->getAvailableAds($adZone->publisher_site_id, $adZone->ad_format_id, $flightWebsiteID, $platform); if ($flightWebsites) { //sort available flights base on priority and retargeting //TO DO retargeting $flightWebsites = $deliveryModel->sortAvailableFlightWebsites($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); $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]; $arrPlatform = json_decode($ad->platform); if (!empty($arrPlatform) && in_array('mobile_app', $arrPlatform) || 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) { //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 $serveAd = $ad; $data['aid'] = $ad->id; $data['fpid'] = $flightWebsite->id; //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; } } } } if ($responseType != Delivery::RESPONSE_TYPE_ADS_SUCCESS) { $responseType = Delivery::RESPONSE_TYPE_NOT_AVAILABLE; } } if (empty($responseType)) { $responseType = Delivery::RESPONSE_TYPE_INVALID; } elseif ($responseType == Delivery::RESPONSE_TYPE_ADS_SUCCESS) { (new RawTrackingSummary())->addSummary('ads_request', $data['fpid'], $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flight->ad_id, $flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport); if (!empty($serveAd)) { pr($serveAd); $responseData['w'] = intval($serveAd->width); $responseData['h'] = intval($serveAd->height); $responseData['mime'] = !empty($serveAd->mime) ? $serveAd->mime : ''; if ($serveAd->ad_type === 'html') { $responseData['adm'] = urlencode($serveAd->html_source); } else { $responseData['adm'] = urlencode($serveAd->source_url); } $responseData['pos'] = !empty($serveAd->position) ? $serveAd->position : ''; $arrTrackingImpression = []; $arrTrackingImpression[] = urlencode(urlTracking('impression', $data['aid'], $data['fpid'], $zoneID, '', '', $data['ovr'], '') . '&plf=mobile_app'); if (!empty($serveAd->third_impression_track)) { $thirdImpressionTrackArr = explode("\n", $serveAd->third_impression_track); if (!empty($thirdImpressionTrackArr)) { foreach ($thirdImpressionTrackArr as $item) { $arrTrackingImpression[] = urlencode($this->replaceParam($item)); } } } $responseData['nimp'] = $arrTrackingImpression; $arrTrackingClick = []; $arrTrackingClick[] = urlencode(urlTracking('click', $data['aid'], $data['fpid'], $zoneID, '', '', $data['ovr'], '') . '&plf=mobile_app'); if (!empty($serveAd->third_click_track)) { $thirdClickTrackArr = explode("\n", $serveAd->third_click_track); if (!empty($thirdClickTrackArr)) { foreach ($thirdClickTrackArr as $item) { $arrTrackingClick[] = urlencode($this->replaceParam($item)); } } } $responseData['nclk'] = $arrTrackingClick; $responseData['lpage'] = urlencode($this->replaceParam($serveAd->destination_url)); $responseData['xml'] = null; } } pr($responseData); pr($deliveryStatus); pr($responseType, 1); return response()->json($responseData); }
public function replaceParam($url) { $url = str_replace('[timestamp]', time(), $url); $trackingModel = new Tracking(); $hostReferer = $trackingModel->getRequestReferer(); $url = str_replace('[sitename]', getSiteName($hostReferer), $url); $hostReferer = !empty($_SERVER['HTTP_REFERER']) ? urlencode($_SERVER['HTTP_REFERER']) : ''; $url = str_replace('[yomedia_referer]', $hostReferer, $url); return $url; }
function getProcessPreview($totalImpression) { $process = 0; $TrackingInventory = new TrackingInventory(); if (isset($this->event) && $this->event != '') { $event = $this->event; } else { $event = Tracking::getTrackingEventType($this->cost_type); } $rate = $event == 'impression' ? 1000 : 1; $flightInventory = $this->total_inventory * $rate; if ($flightInventory > 0) { $process = round($totalImpression / $flightInventory * 100, 2); } return $process; }