Exemple #1
0
 /**
  * @param Content|null $originalResource
  * @return Content
  */
 public function duplicate($originalResource)
 {
     if (!$originalResource) {
         return null;
     }
     /** @var Content $newResource */
     $newResource = $this->createNew();
     $newResource->setTitle($originalResource->getTitle());
     $newResource->setSlug($originalResource->getSlug());
     $newResource->setMetaDescription($originalResource->getMetaDescription());
     $newResource->setPageTitle($originalResource->getPageTitle());
     $newResource->setPriority($originalResource->getPriority());
     $newResource->setChangeFrequency($originalResource->getChangeFrequency());
     $newResource->setPublic($originalResource->isPublic());
     $newResource->setPublicationDate($originalResource->getPublicationDate());
     $newResource->setPublishedUntil($originalResource->getPublishedUntil());
     $newResource->setCreated(new \DateTime());
     $newResource->setUpdated(new \DateTime());
     return $newResource;
 }
 /**
  * Returns the previous published content in order if sorted by publication date.
  * Only returns contents that are published and whose publication date does not lie in the future.
  * The order used is the same as in findPublished().
  *
  * @param Content $currentContent The current content
  * @param \DateTime $currentDate The date used to determine if a publication date lies in the future. If null or omitted, today is used.
  * @return null|Content The previous content before $currentContent, or null if $currentContent is the first one.
  */
 public function findPreviousInDateOrder(Content $currentContent, \DateTime $currentDate = null)
 {
     if (null === $currentDate) {
         $currentDate = new \DateTime();
     }
     // Find contents with same date
     $query = $this->createQueryBuilder('n');
     $query->andWhere('n.public = true');
     $query->andWhere('n.publicationDate <= :currentDate');
     $query->andWhere('n.publicationDate = :contentDate');
     $query->andWhere('n.hideAt >= :currentDate');
     $query->orWhere('n.hideAt IS NULL');
     $query->setParameter('currentDate', $currentDate);
     $query->setParameter('contentDate', $currentContent->getPublicationDate());
     $contentsSameDate = $query->getQuery()->getResult();
     if (!empty($contentsSameDate) && !($contentsSameDate[count($contentsSameDate) - 1]->getId() == $currentContent->getId())) {
         // Return next in list
         for ($i = 0; $i < count($contentsSameDate); $i++) {
             if ($contentsSameDate[$i]->getId() == $currentContent->getId()) {
                 return $contentsSameDate[$i + 1];
             }
         }
     }
     // No next one at current date, search for newer ones
     $query = $this->createQueryBuilder('n');
     $query->andWhere('n.public = true');
     $query->andWhere('n.publicationDate <= :currentDate');
     $query->andWhere('n.publicationDate < :contentDate');
     $query->andWhere('n.hideAt >= :currentDate');
     $query->orWhere('n.hideAt IS NULL');
     $query->setParameter('currentDate', $currentDate);
     $query->setParameter('contentDate', $currentContent->getPublicationDate());
     $query->addOrderBy('n.publicationDate', 'desc');
     $query->addOrderBy('n.id', 'asc');
     $query->setMaxResults(1);
     $nextContent = $query->getQuery()->getResult();
     if (empty($nextContent)) {
         // No older contents
         return null;
     } else {
         return $nextContent[0];
     }
 }