public function applyPaginationToCriteria(Criteria $criteria, array $parameters) : Criteria { if (array_key_exists('limit', $parameters)) { $criteria->set('maxResults', (int) $parameters['limit']); } if (array_key_exists('start', $parameters)) { $criteria->set('firstResult', (int) $parameters['start']); } if (array_key_exists('order', $parameters)) { if (count($parameters['order']) == 2) { $criteria->set('order', [$parameters['order'][0] => $parameters['order'][1]]); } } return $criteria; }
/** * {@inheritdoc} */ public function getOneByCriteria(Criteria $criteria) : ArticleInterface { $criteria->set('maxResults', 1); $article = $this->articleRepository->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); if (null === $article) { throw new NotFoundHttpException('Article was not found'); } return $article; }
/** * {@inheritdoc} */ public function getOneByCriteria(Criteria $criteria) : ArticleMediaInterface { $criteria->set('maxResults', 1); $media = $this->getRepository()->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); if (null === $media) { throw new NotFoundHttpException('Media was not found'); } return $media; }
public function setRoutesContent($env, $manager) { $routes = ['test' => [['name' => 'collection-with-content', 'content' => 'content-assigned-as-route-content']]]; foreach ($routes[$env] as $routeData) { if (array_key_exists('content', $routeData)) { $articleProvider = $this->container->get('swp.provider.article'); $routeProvider = $this->container->get('swp.provider.route'); $route = $routeProvider->getRouteByName($routeData['name']); $criteria = new Criteria(); $criteria->set('slug', $routeData['content']); $route->setContent($articleProvider->getOneByCriteria($criteria)); } } }
/** * Load meta object by provided type and parameters. * * @MetaLoaderDoc( * description="Article Media Loader loads article media from Content Repository", * parameters={ * article="COLLECTION| article Meta object" * } * ) * * @param string $type object type * @param array $parameters parameters needed to load required object type * @param int $responseType response type: collection of meta (LoaderInterface::COLLECTION) * * @return Meta[]|bool false if meta cannot be loaded, an array with Meta instances otherwise */ public function load($type, $parameters = [], $responseType = LoaderInterface::COLLECTION) { if ($responseType === LoaderInterface::COLLECTION) { $criteria = new Criteria(); if (array_key_exists('article', $parameters) && $parameters['article'] instanceof Meta) { $criteria->set('article', $parameters['article']->getValues()); } elseif (isset($this->context->article) && null !== $this->context->article) { $criteria->set('article', $this->context->article->getValues()); } else { return false; } $criteria = $this->applyPaginationToCriteria($criteria, $parameters); $media = $this->articleMediaProvider->getManyByCriteria($criteria); if ($media->count() > 0) { $metaCollection = new MetaCollection(); $metaCollection->setTotalItemsCount($this->articleMediaProvider->getCountByCriteria($criteria)); foreach ($media as $item) { $metaCollection->add($this->metaFactory->create($item)); } return $metaCollection; } } return false; }
/** * Handle Article Media with Image (add renditions, set mimetype etc.). * * @param ArticleMedia $articleMedia * @param string $key unique key shared between media and image rendition * @param ItemInterface $item * * @return ArticleMedia */ protected function createImageMedia(ArticleMedia $articleMedia, string $key, ItemInterface $item) { if (0 === $item->getRenditions()->count()) { return $articleMedia; } $originalRendition = $item->getRenditions()['original']; $criteria = new Criteria(); $criteria->set('assetId', ArticleMedia::handleMediaId($originalRendition->getMedia())); $articleMedia->setMimetype($originalRendition->getMimetype()); $articleMedia->setKey($key); $image = $this->imageRepository->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); $articleMedia->setImage($image); foreach ($item->getRenditions() as $key => $rendition) { $criteria->set('assetId', ArticleMedia::handleMediaId($rendition->getMedia())); $image = $this->imageRepository->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); if (null === $image) { continue; } $imageRendition = $image->getRendition(); if (null === $image->getRendition()) { $imageRendition = $this->createImageRendition($image, $articleMedia, $key, $rendition); $this->imageRepository->persist($imageRendition); } $articleMedia->addRendition($imageRendition); } return $articleMedia; }
/** * Load meta object by provided type and parameters. * * @MetaLoaderDoc( * description="Article Loader loads articles from Content Repository", * parameters={ * contentPath="SINGLE|required content path", * slug="SINGLE|required content slug", * pageName="COLLECTiON|name of Page for required articles" * } * ) * * @param string $type object type * @param array $parameters parameters needed to load required object type * @param int $responseType response type: single meta (LoaderInterface::SINGLE) or collection of metas (LoaderInterface::COLLECTION) * * @return Meta|Meta[]|bool false if meta cannot be loaded, a Meta instance otherwise * * @throws \Exception */ public function load($type, $parameters = [], $responseType = LoaderInterface::SINGLE) { $criteria = new Criteria(); if ($responseType === LoaderInterface::SINGLE) { if (array_key_exists('article', $parameters) && $parameters['article'] instanceof ArticleInterface) { $this->dm->detach($parameters['article']); $criteria->set('id', $parameters['article']->getId()); } elseif (array_key_exists('slug', $parameters)) { $criteria->set('slug', $parameters['slug']); } try { return $this->getArticleMeta($this->articleProvider->getOneByCriteria($criteria)); } catch (NotFoundHttpException $e) { return; } } elseif ($responseType === LoaderInterface::COLLECTION) { $currentPage = $this->context->getCurrentPage(); $route = null; if (null !== $currentPage) { $route = $currentPage->getValues(); } if (array_key_exists('route', $parameters)) { if (null === $route || $route instanceof RouteInterface && $route->getId() !== $parameters['route']) { if (is_int($parameters['route'])) { $route = $this->routeProvider->getOneById($parameters['route']); } elseif (is_string($parameters['route'])) { $route = $this->routeProvider->getOneByStaticPrefix($parameters['route']); } } } if ($route instanceof RouteInterface) { $criteria->set('route', $route); } else { return; } $criteria = $this->applyPaginationToCriteria($criteria, $parameters); $articles = $this->articleProvider->getManyByCriteria($criteria); if ($articles->count() > 0) { $metaCollection = new MetaCollection(); $metaCollection->setTotalItemsCount($this->articleProvider->getCountByCriteria($criteria)); foreach ($articles as $article) { $articleMeta = $this->getArticleMeta($article); if (null !== $articleMeta) { $metaCollection->add($articleMeta); } } unset($articles, $route, $criteria); return $metaCollection; } } return; }