getVar('type_id'); $query = Doctrine::getTable('Banner')->createQuery('b') ->addWhere('b.is_active = ?', true) ->addWhere('b.type_id = ?', $type_id) ->addWhere('b.limit_clicks > b.clicks_count OR b.limit_clicks IS NULL') ->addWhere('b.limit_views > b.views_count OR b.limit_views IS NULL') ->addWhere('b.limit_from <= ? OR b.limit_from IS NULL', date('Y-m-d')) ->addWhere('b.limit_to >= ? OR b.limit_to IS NULL', date('Y-m-d')); $regionIds = $this->getUser()->getRegionIds(); if(count($regionIds)) { $query_region = clone $query; $query_region->innerJoin('b.Regions as r') ->whereIn('r.id', $regionIds); } if(count($regionIds) == 0 || $query_region->count() == 0) { $query->leftJoin('b.Regions as r') ->addWhere('r.id IS NULL'); } else { $query = $query_region; } $this->banner = $this->bannerRotateQuery($query); if($this->banner) { $this->banner->createView($request); } } /** * Zajistí aby bannery rotovaly po 1 minutě. * * @param Doctrine_Query $query * @return Banner */ protected function bannerRotateQuery(Doctrine_Query $query) { $tmp_query = clone $query; $tmp_query->addWhere('last_show > ?', date('Y-m-d H:i:s', strtotime('-1 minute'))) ->addWhere('show_token = ?', true); if($tmp_query->count()) { $banner = $tmp_query->fetchOne(); } else { $tmp_query = clone $query; $tmp_query->set('show_token', 0) ->update(); $query->orderBy('last_show ASC'); $banner = $query->fetchOne(); if($banner) { $banner->setLastShow(date('Y-m-d H:i:s')); $banner->setShowToken(true); $banner->save(); } } return $banner; } }