public function isPageAvailable(BannerTag $bannerTag, $currentUrl, $type)
 {
     // Fetch Disabling Banners
     $dql = 'SELECT b ' . 'FROM AciliaBannerBundle:Banner b ' . 'WHERE b.status = true ' . '  AND b.resourceId = :resourceId ' . '  AND b.type = :typeId ' . '  AND b.publishSince <= :publishSince ' . '  AND (b.publishUntil >= :publishUntil OR b.publishUntil IS NULL OR b.publishUntil = \'0000-00-00\') ' . 'ORDER BY b.modifiedAt DESC ';
     $query = $this->getEntityManager()->createQuery($dql)->setParameter('resourceId', $bannerTag->getResource())->setParameter('typeId', $type)->setParameter('publishSince', date('Y-m-d'))->setParameter('publishUntil', date('Y-m-d'));
     // Iterate Banners
     $banners = $query->getResult();
     foreach ($banners as $banner) {
         if ($this->compareUrl($currentUrl, $banner->getUrlInclude())) {
             return true;
         }
     }
     return false;
 }
 public function getCode($bannerType, $place = null, $referenceId = null)
 {
     $bannerRepository = $this->doctrine->getRepository('AciliaBannerBundle:Banner');
     $bannerTag = '';
     if ($place == null) {
         $place = $this->place;
     }
     // If Place is not defined, Ad can't be shown
     if (null === $place) {
         return $bannerTag;
     }
     if ($referenceId === false) {
         $referenceId = null;
     } elseif ($referenceId == null) {
         $referenceId = $this->referenceId;
     }
     $context = $this->getContext();
     // Get URL
     $currentUrl = $this->requestStack->getMasterRequest()->getPathInfo();
     // Get resource and context
     $event = new ResourceBannerEvent();
     $this->dispatcher->dispatch(ResourceBannerEvent::NAME, $event);
     if ($event->isAvailable()) {
         $resource = $event->getResource();
         // Overwrite ad context if required
         if ($event->getContext() != null) {
             $context = $event->getContext();
         }
         // Banner identifier key
         $key = 'Banner:' . $resource . ':' . $context . ':' . $place . ':' . $bannerType . ':' . $referenceId . ':' . sha1($currentUrl);
         if (isset($this->instances[$key])) {
             return $this->instances[$key];
         }
         $bannerTag = $this->memcache->get($key);
         if ($this->memcache->notFound()) {
             // Create Banner Tag
             $bannerTag = new BannerTag();
             $bannerTag->setResource($resource)->setBannerType($bannerType)->setPlace($place)->setContext($context)->setReferenceId($referenceId)->setCacheKey($key);
             if ($bannerRepository->isPageAvailable($bannerTag, $currentUrl, $this->getType('none'))) {
                 return '<!-- BANNER BEGIN - This page has it\'s Ads Disabled - BANNER END -->';
             }
             // Fill Banner Tag
             $bannerRepository->fillBannerTag($bannerTag, $currentUrl, $this->getType($bannerTag->getBannerType()));
             $fallbacks = $this->fallbacks;
             while ($bannerTag->isEmpty() && count($fallbacks) > 0) {
                 $fallback = array_slice($fallbacks, 0, 1);
                 array_shift($fallbacks);
                 $place = key($fallback);
                 $referenceId = $fallback[$place];
                 $bannerTag->setPlace($place)->setReferenceId($referenceId);
                 // Fill Banner Tag
                 $bannerRepository->fillBannerTag($bannerTag, $currentUrl, $this->getType($bannerTag->getBannerType()));
             }
             // Save on Memcache and internally
             $this->instances[$key] = $bannerTag;
             $this->memcache->set($key, $bannerTag, 60);
         }
     }
     return $bannerTag;
 }