public function getClassContentClassnamesByCategory($name) { $category = $this->getCategory($name); if (null === $category) { throw new \InvalidArgumentException("`{$name}` is not a valid classcontent category."); } $classnames = []; foreach ($category->getBlocks() as $block) { $classnames[] = AbstractClassContent::getClassnameByContentType($block->type); } return $classnames; }
/** * Creates classcontent according to provided type. * * @param string $type * @param Request $request * * @return Symfony\Component\HttpFoundation\Response * * @Rest\Security("is_fully_authenticated() & has_role('ROLE_API_USER')") */ public function postAction($type, Request $request) { $classname = AbstractClassContent::getClassnameByContentType($type); $content = new $classname(); $this->granted('CREATE', $content); $this->getDoctrine()->getManager()->persist($content); $content->setDraft($this->getClassContentManager()->getDraft($content, true)); $this->getDoctrine()->getManager()->flush(); $data = $request->request->all(); if (0 < count($data)) { $data = array_merge($data, ['type' => $type, 'uid' => $content->getUid()]); $this->updateClassContent($type, $data['uid'], $data); $this->getDoctrine()->getManager()->flush(); } return $this->createJsonResponse(null, 201, ['BB-RESOURCE-UID' => $content->getUid(), 'Location' => $this->get('router')->generate('bb.rest.classcontent.get', ['version' => $request->attributes->get('version'), 'type' => $type, 'uid' => $content->getUid()])]); }
/** * Returns classcontent if couple (type;uid) is valid. * * @param string $type short namespace of a classcontent * (full: BackBee\ClassContent\Block\paragraph => short: Block/paragraph) * @param string $uid * * @return AbstractClassContent */ public function findOneByTypeAndUid($type, $uid) { $content = null; $classname = AbstractClassContent::getClassnameByContentType($type); if (null === ($content = $this->findOneBy(['_uid' => $uid]))) { throw new \InvalidArgumentException(sprintf('No `%s` exists with uid `%s`.', $classname, $uid)); } return $content; }
/** * Returns every pages that contains provided classcontent. * * @param string $contentType * @param string $contentUid * * @return \Symfony\Component\HttpFoundation\Response */ private function doGetCollectionByContent($contentType, $contentUid) { $content = null; $classname = AbstractClassContent::getClassnameByContentType($contentType); $em = $this->getDoctrine()->getManager(); try { $content = $em->find($classname, $contentUid); } catch (ClassNotFoundException $e) { throw new NotFoundHttpException("No classcontent found with provided type (:{$contentType})"); } if (null === $content) { throw new NotFoundHttpException("No `{$classname}` exists with uid `{$contentUid}`"); } $pages = $em->getRepository("BackBee\\CoreDomain\\ClassContent\\AbstractClassContent")->findPagesByContent($content); $response = $this->createResponse($this->formatCollection($pages)); if (0 < count($pages)) { $response->headers->set('Content-Range', '0-' . (count($pages) - 1) . '/' . count($pages)); } return $response; }
/** * Runs revert post action on content and its draft. * * @param AbstractClassContent $content * @param Revision $draft * * @return ClassContentManager */ private function revertPostProcess(AbstractClassContent $content, Revision $draft) { $data = $draft->jsonSerialize(); if (0 === count($data['parameters']) && (0 === count($data['elements']) || $content instanceof ContentSet && $data['elements']['current'] === $data['elements']['draft'])) { $this->entityManager->remove($draft); if (AbstractClassContent::STATE_NEW === $content->getState()) { $classname = AbstractClassContent::getClassnameByContentType($content->getContentType()); $this->entityManager->getRepository($classname)->deleteContent($content); } } return $this; }
/** * Occurs on rest.controller.classcontentcontroller.getAction.postcall events. * * @param Event $event */ public function onPostCall(Event $event) { $response = $event->getResponse(); if ($response->headers->get('content-type') === 'text/html') { return; } $application = $event->getApplication(); $renderer = $application->getRenderer(); $content = json_decode($response->getContent()); $result = false; if ($content instanceof \StdClass) { if (isset($content->type) && isset($content->parameters)) { if (isset($content->parameters->rendermode)) { $result = true; } } } if (!$result) { return; } $rendermodeParam = $content->parameters->rendermode; $classname = AbstractClassContent::getClassnameByContentType($content->type); $modes = ['default' => 'Default mode']; foreach ($renderer->getAvailableRenderMode(new $classname()) as $mode) { $modes[$mode] = ucfirst(str_replace('_', ' ', $mode)); } $rendermodeParam->options = $modes; $response->setContent(json_encode($content)); }