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; }