コード例 #1
0
ファイル: ContentManager.php プロジェクト: Opifer/Cms
 public function save(ContentInterface $content)
 {
     if (!$content->getId()) {
         $content->setAuthor($this->tokenStorage->getToken()->getUser());
     }
     return parent::save($content);
 }
コード例 #2
0
ファイル: ContentController.php プロジェクト: Opifer/Cms
 /**
  * View a single content page
  *
  * This Controller action is being routed to from either our custom ContentRouter,
  * or the ExceptionController.
  * @see Opifer\SiteBundle\Router\ContentRouter
  *
  * @param Request          $request
  * @param ContentInterface $content
  * @param int              $statusCode
  *
  * @return Response
  *
  * @throws \Exception
  */
 public function viewAction(Request $request, ContentInterface $content, $statusCode = 200)
 {
     $version = $request->query->get('_version');
     $debug = $this->getParameter('kernel.debug');
     $contentDate = $content->getUpdatedAt();
     $templateDate = $content->getTemplate()->getUpdatedAt();
     $date = $contentDate > $templateDate ? $contentDate : $templateDate;
     $response = new Response();
     $response->setLastModified($date);
     $response->setPublic();
     if (null === $version && false == $debug && $response->isNotModified($request)) {
         // return the 304 Response immediately
         return $response;
     }
     $version = $request->query->get('_version');
     /** @var Environment $environment */
     $environment = $this->get('opifer.content.block_environment');
     $environment->setObject($content);
     $response->setStatusCode($statusCode);
     if (null !== $version && $this->isGranted('ROLE_ADMIN')) {
         $environment->setDraft(true);
     }
     $environment->load();
     return $this->render($environment->getView(), $environment->getViewParameters(), $response);
 }
コード例 #3
0
 /**
  * View a single content page
  *
  * This Controller action is being routed to from either our custom ContentRouter,
  * or the ExceptionController.
  * @see Opifer\SiteBundle\Router\ContentRouter
  *
  * @param Request          $request
  * @param ContentInterface $content
  * @param int              $statusCode
  *
  * @return Response
  *
  * @throws \Exception
  */
 public function viewAction(Request $request, ContentInterface $content, $statusCode = 200)
 {
     $version = $request->query->get('_version');
     $response = new Response();
     /** @var ContentEnvironment $environment */
     $environment = $this->get('opifer.content.block_content_environment');
     $response->setStatusCode($statusCode);
     if (null !== $version && $this->isGranted('ROLE_ADMIN')) {
         $this->getDoctrine()->getManager()->getFilters()->disable('draftversion');
         $environment->load($content->getId(), $version);
     } else {
         $environment->load($content->getId());
     }
     return $this->render($environment->getView(), $environment->getViewParameters());
 }
コード例 #4
0
 /**
  * View a single content page
  *
  * This Controller action is being routed to from either our custom ContentRouter,
  * or the ExceptionController.
  * @see Opifer\SiteBundle\Router\ContentRouter
  *
  * @param Request $request
  * @param Content $content
  *
  * @return Response
  */
 public function viewAction(Request $request, ContentInterface $content, $statusCode = 200)
 {
     $presentation = json_decode($content->getRealPresentation(), true);
     if (!$presentation) {
         throw new \Exception('The template ' . $content->getTemplate()->getName() . ' does not have a layout attached.');
     }
     $layout = json_encode($presentation);
     $layout = $this->get('jms_serializer')->deserialize($layout, $this->container->getParameter('opifer_content.layout_class'), 'json');
     // If the layout has an action, forward to that action and pass the layout
     // and the content.
     if ($layout->getAction()) {
         return $this->forward($layout->getAction(), ['content' => $content, 'layout' => $layout]);
     }
     $response = new Response();
     $response->setStatusCode($statusCode);
     return $this->render($layout->getFilename(), ['content' => $content, 'layout' => $layout], $response);
 }
コード例 #5
0
 /**
  * View a single content page
  *
  * This Controller action is being routed to from either our custom ContentRouter,
  * or the ExceptionController.
  * @see Opifer\SiteBundle\Router\ContentRouter
  *
  * @param Request          $request
  * @param ContentInterface $content
  * @param int              $statusCode
  *
  * @return Response
  *
  * @throws \Exception
  */
 public function viewAction(Request $request, ContentInterface $content, $statusCode = 200)
 {
     $version = $request->query->get('_version');
     $response = new Response();
     /** @var BlockManager $manager */
     $manager = $this->get('opifer.content.block_manager');
     $block = $content->getBlock();
     $response->setStatusCode($statusCode);
     if (null !== $version && $this->isGranted('ROLE_ADMIN')) {
         $block = $content->getBlock();
         $this->getDoctrine()->getManager()->getFilters()->disable('draftversion');
         $manager->revert($block, $version);
     }
     /** @var BlockServiceInterface $service */
     $service = $manager->getService($block);
     $service->setView($content->getTemplate()->getView());
     return $service->execute($block);
 }
コード例 #6
0
 public function getBreadcrumbs(ContentInterface $content)
 {
     $return = [];
     $breadcrumbs = $content->getBreadcrumbs();
     if (sizeof($breadcrumbs) == 1 && key($breadcrumbs) == 'index') {
         return $return;
     }
     $index = 0;
     foreach ($breadcrumbs as $slug => $title) {
         if (substr($slug, -6) == '/index') {
             continue;
         }
         $indexSlug = sizeof($breadcrumbs) - 1 == $index ? $slug : $slug . '/index';
         if ($content = $this->contentManager->getRepository()->findOneBy(['slug' => $indexSlug])) {
             $return[$slug . '/'] = $content->getTitle();
         }
         $index++;
     }
     return $return;
 }
コード例 #7
0
ファイル: ContentManager.php プロジェクト: Opifer/Cms
 /**
  * Duplicate a content item
  *
  * @param ContentInterface $content
  *
  * @return ContentInterface $duplicate
  */
 public function duplicate(ContentInterface $content)
 {
     //duplicate content
     $duplicatedContent = clone $content;
     $duplicatedContent->setTitle(sprintf("%s copy %s", $duplicatedContent->getTitle(), date('r')));
     $duplicatedContent->setSlug(null);
     $duplicatedContent->setActive(false);
     $duplicatedContent->setCreatedAt(new \DateTime());
     //get valueset to clone
     if (null !== ($valueset = $content->getValueSet())) {
         //clone valueset
         $duplicatedValueset = clone $valueset;
         $this->detachAndPersist($duplicatedValueset);
         $duplicatedContent->setValueSet($duplicatedValueset);
     }
     $duplicatedContent->setBlocks(null);
     $this->detachAndPersist($duplicatedContent);
     if ($valueset) {
         //iterate values, clone each and assign duplicate valueset to it
         foreach ($valueset->getValues() as $value) {
             //skip empty attributes
             if (is_null($value->getId())) {
                 continue;
             }
             $duplicatedValue = clone $value;
             $duplicatedValue->setValueSet($duplicatedValueset);
             $this->detachAndPersist($duplicatedValue);
         }
     }
     $this->em->flush();
     return $duplicatedContent;
 }
コード例 #8
0
 /**
  * {@inheritDoc}
  */
 protected function getMainBlock()
 {
     return $this->content->getBlock();
 }
コード例 #9
0
ファイル: ContentManager.php プロジェクト: leonverschuren/Cms
 /**
  * Duplicate a content item
  *
  * @param ContentInterface $content
  */
 public function duplicate(ContentInterface $content)
 {
     //get valueset to clone
     $valueset = $content->getValueSet();
     //clone valueset
     $duplicatedValueset = clone $valueset;
     $this->detachAndPersist($duplicatedValueset);
     //duplicate content
     $duplicatedContent = clone $content;
     $duplicatedContent->setSlug(null);
     $duplicatedContent->setValueSet($duplicatedValueset);
     $this->detachAndPersist($duplicatedContent);
     //iterate values, clone each and assign duplicate valueset to it
     foreach ($valueset->getValues() as $value) {
         //skip empty attributes
         if (is_null($value->getId())) {
             continue;
         }
         $duplicatedValue = clone $value;
         $duplicatedValue->setValueSet($duplicatedValueset);
         $this->detachAndPersist($duplicatedValue);
     }
     $this->em->flush();
     return $duplicatedContent->getId();
 }
コード例 #10
0
ファイル: ContentExtension.php プロジェクト: Opifer/Cms
 /**
  * @param string|ContentInterface $content
  * @param ContentInterface        $child
  *
  * @return bool
  */
 public function isParentOf($content, ContentInterface $child)
 {
     if ($child instanceof Template) {
         return false;
     }
     $parents = $child->getParents();
     foreach ($parents as $parent) {
         if (is_string($content)) {
             if (substr($content, 0, strlen($parent->getSlug())) === $parent->getSlug()) {
                 return true;
             }
         } else {
             if ($parent->getId() == $content->getId()) {
                 return true;
             }
         }
     }
     return false;
 }
コード例 #11
0
 /**
  * Duplicate a content item
  *
  * @param ContentInterface $content
  * @param NestedValue $nestedIn
  */
 public function duplicate(ContentInterface $content, NestedValue $nestedIn = null)
 {
     //get valueset to clone
     $valueset = $content->getValueSet();
     //clone valueset
     $duplicatedValueset = clone $valueset;
     $this->detachAndPersist($duplicatedValueset);
     //duplicate content
     $duplicatedContent = clone $content;
     $duplicatedContent->setSlug(null);
     $duplicatedContent->setValueSet($duplicatedValueset);
     if (!is_null($nestedIn)) {
         $duplicatedContent->setNestedIn($nestedIn);
     }
     $this->detachAndPersist($duplicatedContent);
     //iterate values, clone each and assign duplicate valueset to it
     foreach ($valueset->getValues() as $value) {
         //skip empty attributes
         if (is_null($value->getId())) {
             continue;
         }
         $duplicatedValue = clone $value;
         $duplicatedValue->setValueSet($duplicatedValueset);
         $this->detachAndPersist($duplicatedValue);
         //if type nested, find content that has nested_in value same as id of value
         if ($value instanceof \Opifer\EavBundle\Entity\NestedValue) {
             $nestedContents = $this->getRepository()->findby(['nestedIn' => $value->getId()]);
             foreach ($nestedContents as $nestedContent) {
                 $this->duplicate($nestedContent, $duplicatedValue);
             }
         }
     }
     $this->em->flush();
     return $duplicatedContent->getId();
 }
コード例 #12
0
ファイル: ContentEnvironment.php プロジェクト: dzoke/Cms
 /**
  * {@inheritDoc}
  */
 public function getMainBlock()
 {
     return $this->content->getBlock();
 }