/**
  * 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.');
             }
         }
     });
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 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);
 }
Example #6
0
 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;
 }
Example #7
0
 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;
 }