Example #1
0
 public function saveHandler(View $object, Request $request)
 {
     $objectSubviews = new ArrayCollection();
     if (!($subviews = $request->get('viewsSerialized'))) {
         return true;
     }
     $subviews = json_decode($subviews);
     /**
      * @var EntityManager $em
      */
     $em = $this->container->get('doctrine')->getManager();
     $updatedSubViews = [];
     foreach ($subviews as $viewSource) {
         if (!($view = $object->findSubviewWithId($viewSource->id))) {
             switch (true) {
                 case $viewSource->type == View::TYPE_CONTENT_TYPE:
                     $source = $this->container->get('doctrine')->getRepository('YCMSBundle:View\\ContentType')->find($viewSource->id);
                     $view = new ContentView();
                     $view->setAttributes($source->getAttributes());
                     $view->setSourceContentType($source);
                     break;
                 case $viewSource->type == View::TYPE_CONTENT_VIEW:
                     $source = $this->container->get('doctrine')->getRepository('YCMSBundle:View\\ContentView')->find($viewSource->id);
                     $view = clone $source;
                     $view->setSourceView($source);
                     $view->loadAttributesDefaultValues();
                     break;
                 case $viewSource->type == View::TYPE_COLLECTION_VIEW:
                     if (array_key_exists($viewSource->id, $this->_viewTypes)) {
                         $class = $this->_viewTypes[$viewSource->id]['class'];
                         $view = new $class();
                     } else {
                         throw new \Exception();
                     }
                     break;
             }
             $view->setParent($object);
             $view->setObjectTitle($viewSource->name);
             $view->attributesForm = $this->container->get('admin.form.helper')->getVarsFormForAttributes($view);
         } else {
             $updatedSubViews[] = $view->getId();
         }
         $view->setName($viewSource->name);
         $objectSubviews->add($view);
     }
     //removing subviews
     foreach ($object->getSubviews() as $subview) {
         if (!in_array($subview->getId(), $updatedSubViews)) {
             $em->remove($subview);
         }
     }
     foreach ($objectSubviews as $key => $view) {
         /**
          * @var View $view
          */
         $view->attributesForm->handleRequest($request);
         $this->container->get('cms.attribute')->parseAttributesFromForm($view, $view->attributesForm);
         $view->setPosition($key);
         $em->persist($view);
         $em->flush();
     }
 }