/** * 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); }
/** * @dataProvider dataFieldsProvider */ public function testGetFields($request) { $helper = new ListRestHelper($request, $this->em); $this->assertEquals(explode(',', $request->get('fields')), $helper->getFields()); $this->assertEquals($request->get('sortBy'), $helper->getSortColumn()); $this->assertEquals($request->get('sortOrder', 'asc'), $helper->getSortOrder()); $this->assertEquals($request->get('search'), $helper->getSearchPattern()); $this->assertEquals(explode(',', $request->get('searchFields')), $helper->getSearchFields()); $this->assertEquals($request->get('limit'), $helper->getLimit()); $this->assertEquals($request->get('limit') * ($request->get('page') - 1), $helper->getOffset()); }
public function testGetFields() { $request = new Request(['fields' => 'field1,field2,field3', 'sortBy' => 'id', 'sortOrder' => 'desc', 'search' => 'test', 'searchFields' => 'title', 'limit' => 10, 'page' => 3]); $helper = new ListRestHelper($request, $this->em); $this->assertEquals(['field1', 'field2', 'field3'], $helper->getFields()); $this->assertEquals('id', $helper->getSortColumn()); $this->assertEquals('desc', $helper->getSortOrder()); $this->assertEquals('test', $helper->getSearchPattern()); $this->assertEquals(['title'], $helper->getSearchFields()); $this->assertEquals(10, $helper->getLimit()); $this->assertEquals(20, $helper->getOffset()); }
/** * 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)); }