/**
  * @param $node  NodeInterface
  * @param string $areaId
  *
  * @return null|AreaInterface
  */
 public function findAreaInNodeByAreaId(NodeInterface $node, $areaId)
 {
     foreach ($node->getAreas() as $key => $area) {
         if ($areaId === $key) {
             return $area;
         }
     }
     return null;
 }
 /**
  * @param NodeInterface               $node
  * @param BlockNodePattern|Constraint $constraint
  */
 public function validate($node, Constraint $constraint)
 {
     if ($node->getStatus() instanceof StatusInterface && $node->getStatus()->isPublished()) {
         $areas = $node->getAreas();
         $routePattern = $node->getRoutePattern();
         foreach ($areas as $area) {
             $blocks = $area->getBlocks();
             foreach ($blocks as $block) {
                 $blockLabel = $block->getLabel();
                 $parameters = $this->generateFormManager->getRequiredUriParameter($block);
                 foreach ($parameters as $parameter) {
                     if (false === strpos($routePattern, '{' . $parameter . '}')) {
                         $this->context->buildViolation($constraint->message)->setParameters(array('%blockLabel%' => $blockLabel, '%parameter%' => $parameter))->atPath('routePattern')->addViolation();
                     }
                 }
             }
         }
     }
 }
 /**
  * @param NodeInterface $node
  * @param NodeInterface $newNode
  *
  * @return NodeInterface
  */
 protected function duplicateBlockAndArea(NodeInterface $node, NodeInterface $newNode)
 {
     foreach ($node->getAreas() as $areaId => $area) {
         $newArea = clone $area;
         $newNode->setArea($areaId, $newArea);
         foreach ($area->getBlocks() as $block) {
             if (!$block->isTransverse()) {
                 $newBlock = clone $block;
                 $this->blockRepository->getDocumentManager()->persist($newBlock);
                 $newArea->addBlock($newBlock);
             }
         }
     }
     return $newNode;
 }
 /**
  * @param FacadeInterface $facade
  * @param NodeInterface   $node
  *
  * @return FacadeInterface
  */
 protected function addAreas(FacadeInterface $facade, NodeInterface $node)
 {
     if ($this->hasGroup(CMSGroupContext::AREAS)) {
         foreach ($node->getAreas() as $key => $area) {
             $facade->setAreas($this->getTransformer('area')->transform($area, $node, $key), $key);
         }
     }
     return $facade;
 }