/** * Perform a search and return a JSON response. * * @param Request $request * * @return JsonResponse */ public function searchAction(Request $request) { $queryString = $request->query->get('q'); $category = $request->query->get('category', null); $locale = $request->query->get('locale', null); $page = $this->listRestHelper->getPage(); $limit = $this->listRestHelper->getLimit(); $aggregateHits = []; $startTime = microtime(true); $categories = $category ? [$category] : $this->searchManager->getCategoryNames(); foreach ($categories as $category) { $query = $this->searchManager->createSearch($queryString); if ($locale) { $query->locale($locale); } if ($category) { $query->category($category); } foreach ($query->execute() as $hit) { $aggregateHits[] = $hit; } } $time = microtime(true) - $startTime; $adapter = new ArrayAdapter($aggregateHits); $pager = new Pagerfanta($adapter); $pager->setMaxPerPage($limit); $pager->setCurrentPage($page); $representation = new SearchResultRepresentation(new CollectionRepresentation($pager->getCurrentPageResults(), 'result'), 'sulu_search_search', ['locale' => $locale, 'query' => $query, 'category' => $category], (int) $page, (int) $limit, $pager->getNbPages(), 'page', 'limit', false, count($aggregateHits), $this->getCategoryTotals($aggregateHits), number_format($time, 8)); $view = View::create($representation); $context = SerializationContext::create(); $context->enableMaxDepthChecks(); $context->setSerializeNull(true); $view->setSerializationContext($context); return $this->viewHandler->handle($view); }
/** * Perform a search and return a JSON response. * * @param Request $request * * @return Response */ public function searchAction(Request $request) { $queryString = $request->query->get('q'); $index = $request->query->get('index', null); $locale = $request->query->get('locale', null); $page = $this->listRestHelper->getPage(); $limit = $this->listRestHelper->getLimit(); $startTime = microtime(true); $indexes = $index ? [$index] : $this->getAllowedIndexes(); $query = $this->searchManager->createSearch($queryString); if ($locale) { $query->locale($locale); } $query->indexes($indexes); $time = microtime(true) - $startTime; $adapter = new ArrayAdapter($query->execute()); $pager = new Pagerfanta($adapter); $pager->setMaxPerPage($limit); $pager->setCurrentPage($page); $representation = new SearchResultRepresentation(new CollectionRepresentation($pager->getCurrentPageResults(), 'result'), 'sulu_search_search', ['locale' => $locale, 'query' => $query, 'index' => $index], (int) $page, (int) $limit, $pager->getNbPages(), 'page', 'limit', false, $adapter->getNbResults(), $this->getIndexTotals($adapter->getArray()), number_format($time, 8)); $view = View::create($representation); $context = SerializationContext::create(); $context->enableMaxDepthChecks(); $context->setSerializeNull(true); $view->setSerializationContext($context); return $this->viewHandler->handle($view); }
/** * Returns list of snippets. * * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function getSnippetsAction(Request $request) { $this->initEnv($request); $listRestHelper = new ListRestHelper($request); // if the type parameter is falsy, assign NULL to $type $type = $request->query->get('type', null) ?: null; $uuidsString = $request->get('ids'); if ($uuidsString) { $uuids = explode(',', $uuidsString); $snippets = $this->snippetRepository->getSnippetsByUuids($uuids, $this->languageCode); $total = count($snippets); } else { $snippets = $this->snippetRepository->getSnippets($this->languageCode, $type, $listRestHelper->getOffset(), $listRestHelper->getLimit(), $listRestHelper->getSearchPattern(), $listRestHelper->getSortColumn(), $listRestHelper->getSortOrder()); $total = $this->snippetRepository->getSnippetsAmount($this->languageCode, $type, $listRestHelper->getSearchPattern(), $listRestHelper->getSortColumn(), $listRestHelper->getSortOrder()); } $data = []; foreach ($snippets as $snippet) { $snippetData = $snippet->toArray(); $snippetData['localizedTemplate'] = $snippet->getLocalizedTitle($this->languageCode); $data[] = $snippetData; } $data = new ListRepresentation($this->decorateSnippets($data, $this->languageCode), 'snippets', 'get_snippets', $request->query->all(), $listRestHelper->getPage(), $listRestHelper->getLimit(), $total); return $this->viewHandler->handle(View::create($data)); }
/** * Returns list of snippets. * * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function cgetAction(Request $request) { $locale = $this->getLocale($request); // if the type parameter is falsy, assign NULL to $type $type = $request->query->get('type', null) ?: null; $uuidsString = $request->get('ids'); if ($uuidsString) { $uuids = explode(',', $uuidsString); $snippets = $this->snippetRepository->getSnippetsByUuids($uuids, $locale); $total = count($snippets); } else { $snippets = $this->snippetRepository->getSnippets($locale, $type, $this->listRestHelper->getOffset(), $this->listRestHelper->getLimit(), $this->listRestHelper->getSearchPattern(), $this->listRestHelper->getSortColumn(), $this->listRestHelper->getSortOrder()); $total = $this->snippetRepository->getSnippetsAmount($locale, $type, $this->listRestHelper->getSearchPattern(), $this->listRestHelper->getSortColumn(), $this->listRestHelper->getSortOrder()); } $data = new ListRepresentation($snippets, 'snippets', 'get_snippets', $request->query->all(), $this->listRestHelper->getPage(), $this->listRestHelper->getLimit(), $total); return $this->viewHandler->handle(View::create($data)); }