public function getAction()
 {
     $url = $this->request->getQuery('url');
     $banners = $this->modelsManager->createBuilder()->from(array('b' => 'App\\Models\\Banners'))->innerJoin('App\\Models\\BannersZones', 'b.id = bz.banner_id AND bz.zone_id = ' . $this->request->getQuery('zone_id', 'int'), 'bz')->andWhere('(end_date IS NULL OR end_date > ' . time() . ") AND (start_date IS NULL OR start_date <= " . time() . ") AND active = 1 AND archived = 0")->groupBy('b.id')->getQuery()->execute();
     if (count($banners)) {
         $existsNonzeroPriority = false;
         $banners = $banners->filter(function ($banner) use(&$existsNonzeroPriority, $url) {
             if (!empty($banner->url_mask) && preg_match($banner->url_mask, $url) == 1 || empty($banner->url_mask)) {
                 if (!empty($banner->max_impressions)) {
                     $q = (empty($banner->start_date) ? '' : 'date >= ' . $banner->start_date) . (empty($banner->end_date) ? '' : ' AND date < ' . $banner->end_date);
                     $views = $banner->countViews(array($q));
                     if ($views < $banner->max_impressions) {
                         if ($banner->priority != 0) {
                             $existsNonzeroPriority = true;
                         }
                         return $banner;
                     }
                 } else {
                     if ($banner->priority != 0) {
                         $existsNonzeroPriority = true;
                     }
                     return $banner;
                 }
             }
         });
         $segments = [];
         $end = 0;
         foreach ($banners as $banner) {
             $priority = $existsNonzeroPriority ? $banner->priority : 1;
             $segments[] = ['banner' => $banner, 'start' => $end, 'end' => $end + $priority];
             $end += $priority;
         }
         $rand = rand(0, $end * 100) / 100;
         foreach ($segments as $segment) {
             if ($segment['start'] <= $rand && $segment['end'] > $rand) {
                 $banner_selected = $segment['banner'];
                 break;
             }
         }
         if (isset($banner_selected) && empty($banner_selected->id) || !isset($banner_selected)) {
             return;
         }
         $view = new Views();
         $view->save(array('date' => time(), 'banner_id' => $banner_selected->id));
         $this->view->view = $view->id;
         if ($banner_selected->type == "image") {
             $this->view->pick('rotator/image');
         } elseif ($banner_selected->type == "flash") {
             $this->view->pick('rotator/flash');
         } elseif ($banner_selected->type == "html") {
             $this->view->setRenderLevel(View::LEVEL_NO_RENDER);
             echo $banner_selected->content;
             return;
         }
         $this->view->banner = $banner_selected;
     } else {
         return;
     }
 }
示例#2
0
 /**
  * Displays a single Advert model.
  * @param integer $id
  * @return mixed
  */
 public function actionView($id)
 {
     if (Currency::find()->where(['>', 'date', time()])->orderBy(['date' => SORT_DESC])->asArray()->one() == null) {
         $currency = new Currency();
         if ($currency->exchangeRates()) {
             Yii::$app->session->setFlash('warning', 'Exchange rates might differ from actual ones');
         }
     }
     $model = $this->findModel($id);
     $pic = new Pictures();
     $imgModel = new UploadForm();
     $n = Bookmark::find()->where(['user_id' => Yii::$app->user->identity->getId(), 'advert_id' => $id])->all();
     if ($model->user_id == Yii::$app->user->identity->getId()) {
         if (isset($_POST['delete'])) {
             $model->deletePic();
         }
         if (!empty($n)) {
             $value = 'Delete ' . 'from bookmarks';
         } else {
             $value = 'Add to bookmarks';
         }
         if (Yii::$app->request->isPost) {
             $imgModel->imageFiles = UploadedFile::getInstances($imgModel, 'imageFiles');
             if ($imgModel->upload($id)) {
                 return $this->render('view-my-advert', ['model' => $this->findModel($id), 'imgModel' => $imgModel, 'pic' => $pic]);
             }
         }
         return $this->render('view-my-advert', ['model' => $this->findModel($id), 'imgModel' => $imgModel, 'pic' => $pic, 'value' => $value]);
     } else {
         $views = new Views();
         $n = Bookmark::find()->where(['user_id' => Yii::$app->user->identity->getId(), 'advert_id' => $id])->all();
         if (!empty($n)) {
             $value = 'Delete ' . 'from bookmarks';
         } else {
             $value = 'Add to bookmarks';
         }
         if (!$views->countViews($id)) {
             if ($model->user_id !== Yii::$app->user->identity->getId()) {
                 $advert = new Advert();
                 $advert->countViews($id);
                 $views->advert_id = $id;
                 $views->user_id = Yii::$app->user->identity->getId();
                 $views->save();
             }
         }
         return $this->render('view-adv', ['model' => $this->findModel($id), 'pic' => $pic, 'imgModel' => $imgModel, 'value' => $value]);
     }
 }
示例#3
0
 /**
  * Displays a single Advert model.
  * @param integer $id
  * @return mixed
  */
 public function actionView($id)
 {
     $model = $this->findModel($id);
     $pic = new Pictures();
     $imgModel = new UploadForm();
     if ($model->user_id == Yii::$app->user->identity->getId()) {
         if (isset($_POST['delete'])) {
             $model->deletePic();
         }
         if (Yii::$app->request->isPost) {
             $imgModel->imageFile = UploadedFile::getInstance($imgModel, 'imageFile');
             if ($imgModel->upload($id)) {
                 return $this->render('view-my-advert', ['model' => $this->findModel($id), 'imgModel' => $imgModel, 'pic' => $pic]);
             }
         }
         return $this->render('view-my-advert', ['model' => $this->findModel($id), 'imgModel' => $imgModel, 'pic' => $pic]);
     } else {
         $views = new Views();
         if (!$views->countViews($id)) {
             if ($model->user_id !== Yii::$app->user->identity->getId()) {
                 $advert = new Advert();
                 $advert->countViews($id);
                 $views->advert_id = $id;
                 $views->user_id = Yii::$app->user->identity->getId();
                 $views->save();
             }
         }
         return $this->render('view-adv', ['model' => $this->findModel($id), 'pic' => $pic, 'imgModel' => $imgModel]);
     }
 }