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; }
/** * 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->getApplication()->getEntityManager(); 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\\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; }
/** * 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; }
public static 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)); }
/** * 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->getEntityManager()->persist($content); $content->setDraft($this->getClassContentManager()->getDraft($content, true)); $this->getEntityManager()->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->getEntityManager()->flush(); } return $this->createJsonResponse(null, 201, ['BB-RESOURCE-UID' => $content->getUid(), 'Location' => $this->getApplication()->getRouting()->getUrlByRouteName('bb.rest.classcontent.get', ['version' => $request->attributes->get('version'), 'type' => $type, 'uid' => $content->getUid()], '', false)]); }
/** * 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'])) { if ($content instanceof ContentSet) { $draft->clear(); } if (AbstractClassContent::STATE_NEW === $content->getState()) { $classname = AbstractClassContent::getClassnameByContentType($content->getContentType()); $this->entityManager->getRepository($classname)->deleteContent($content); } else { $this->entityManager->remove($draft); } } return $this; }
/** * Alias to ClassContentRepository::findOneByTypeAndUid. In addition, it can also manage content's revision. * * @see BackBee\ClassContent\Repository\ClassContentRepository * @param string $type * @param string $uid * @param boolean $hydrateDraft if true and BBUserToken is setted, will try to get and set draft to content * @param boolean $checkoutOnMissing this parameter is used only if hydrateDraft is true * @return AbstractClassContent */ public function findOneByTypeAndUid($type, $uid, $hydrateDraft = false, $checkoutOnMissing = false) { $classname = AbstractClassContent::getClassnameByContentType($type); $content = $this->em->getRepository($classname)->findOneBy(['_uid' => $uid]); if (null !== $content && true === $hydrateDraft && null !== $this->token) { $content->setDraft($this->getDraft($content, $checkoutOnMissing)); } return $content; }
/** * Saves a new entry in media library * * @param Image $imageElement * * @return boolean $response * */ protected function saveAndNew($imageElement, $elementParent = null) { $title = ''; try { if (null !== $elementParent) { // clone the parent $newMediaImage = $elementParent->createClone(); $newMediaImageData = $newMediaImage->getData(); // get cloned image data $clonedImage = $newMediaImageData['image']; $title = $newMediaImageData['title']->getData('value'); } else { $clonedImage = $imageElement->createClone(); // create a new media image element and set the cloned image to it $mediaImageClass = AbstractClassContent::getClassnameByContentType('Media/Image'); $newMediaImage = new $mediaImageClass(); $newMediaImage->__set('image', $clonedImage); } $this->doActualCrop($clonedImage, false, $imageElement); // create the new media element $this->createNewMedia($newMediaImage, $title); return $newMediaImage; } catch (\Exception $e) { throw $e; } }
private function getClassicCollection(Request $request, $mediafolder, $start, $count) { $params = $request->query->all(); $contentType = $request->get('contentType', null); if (null !== $contentType) { try { $params['contentType'] = AbstractClassContent::getClassnameByContentType($contentType); } catch (InvalidContentTypeException $e) { throw new NotFoundHttpException(sprintf('Provided content type (:%s) is invalid.', $params['contentType'])); } } return $this->getMediaRepository()->getMedias($mediafolder, $params, '_modified', 'desc', ['start' => $start, 'limit' => $count]); }