/** * Get record detailed view * * @param Application $app * @param Request $request * * @return JsonResponse */ public function getRecord(Application $app, Request $request) { if (!$request->isXmlHttpRequest()) { $app->abort(400); } $searchEngine = $options = null; $train = ''; if ('' === ($env = strtoupper($request->get('env', '')))) { $app->abort(400, '`env` parameter is missing'); } // Use $request->get as HTTP method can be POST or GET if ('RESULT' == ($env = strtoupper($request->get('env', '')))) { try { $options = SearchEngineOptions::hydrate($app, $request->get('options_serial')); $searchEngine = $app['phraseanet.SE']; } catch (\Exception $e) { $app->abort(400, 'Search-engine options are not valid or missing'); } } $pos = (int) $request->get('pos', 0); $query = $request->get('query', ''); $reloadTrain = !!$request->get('roll', false); $record = new \record_preview($app, $env, $pos < 0 ? 0 : $pos, $request->get('cont', ''), $searchEngine, $query, $options); if ($record->is_from_reg()) { $train = $app['twig']->render('prod/preview/reg_train.html.twig', ['record' => $record]); } if ($record->is_from_basket() && $reloadTrain) { $train = $app['twig']->render('prod/preview/basket_train.html.twig', ['record' => $record]); } if ($record->is_from_feed()) { $train = $app['twig']->render('prod/preview/feed_train.html.twig', ['record' => $record]); } return $app->json(["desc" => $app['twig']->render('prod/preview/caption.html.twig', ['record' => $record, 'highlight' => $query, 'searchEngine' => $searchEngine, 'searchOptions' => $options]), "html_preview" => $app['twig']->render('common/preview.html.twig', ['record' => $record]), "others" => $app['twig']->render('prod/preview/appears_in.html.twig', ['parents' => $record->get_grouping_parents(), 'baskets' => $record->get_container_baskets($app['EM'], $app['authentication']->getUser())]), "current" => $train, "history" => $app['twig']->render('prod/preview/short_history.html.twig', ['record' => $record]), "popularity" => $app['twig']->render('prod/preview/popularity.html.twig', ['record' => $record]), "tools" => $app['twig']->render('prod/preview/tools.html.twig', ['record' => $record]), "pos" => $record->get_number(), "title" => str_replace(['[[em]]', '[[/em]]'], ['<em>', '</em>'], $record->get_title($query, $searchEngine))]); }
public function displayCaption(Application $app, $sbas_id, $record_id, $context) { $number = (int) $app['request']->get('number'); $record = new \record_adapter($app, $sbas_id, $record_id, $number); $search_engine = $search_engine_options = null; if ($context == 'answer') { try { $search_engine_options = SearchEngineOptions::hydrate($app, $app['request']->request->get('options_serial')); $search_engine = $app['phraseanet.SE']; } catch (\Exception $e) { $search_engine = null; } } return $app['twig']->render('prod/Tooltip/Caption.html.twig', ['record' => $record, 'view' => $context, 'highlight' => $app['request']->request->get('query'), 'searchEngine' => $search_engine, 'searchOptions' => $search_engine_options]); }
/** * @covers Alchemy\Phrasea\SearchEngine\SearchEngineOptions */ public function testSerialize() { $options = new SearchEngineOptions(self::$DI['app']); $options->onCollections([self::$DI['collection']]); $options->allowBusinessFieldsOn([self::$DI['collection']]); foreach (self::$DI['collection']->get_databox()->get_meta_structure() as $field) { $options->setFields([$field]); $options->setDateFields([$field]); break; } $min_date = new \DateTime('-5 days'); $max_date = new \DateTime('+5 days'); $options->setMinDate(\DateTime::createFromFormat(DATE_ATOM, $min_date->format(DATE_ATOM))); $options->setMaxDate(\DateTime::createFromFormat(DATE_ATOM, $max_date->format(DATE_ATOM))); $serialized = $options->serialize(); $this->assertEquals($options, SearchEngineOptions::hydrate(self::$DI['app'], $serialized)); }
/** * Get a preview answer train * * @param Request $request * @return Response */ public function queryAnswerTrain(Request $request) { if (null === ($optionsSerial = $request->get('options_serial'))) { $this->app->abort(400, 'Search engine options are missing'); } try { $options = SearchEngineOptions::hydrate($this->app, $optionsSerial); } catch (\Exception $e) { $this->app->abort(400, 'Provided search engine options are not valid'); } $pos = (int) $request->request->get('pos', 0); $query = $request->request->get('query', ''); $record = new \record_preview($this->app, 'RESULT', $pos, '', $this->getSearchEngine(), $query, $options); $index = $pos - 3 < 0 ? 0 : $pos - 3; return $this->app->json(['current' => $this->render('prod/preview/result_train.html.twig', ['records' => $record->get_train(), 'index' => $index, 'selected' => $pos])]); }
/** * Get a preview answer train * * @param Application $app * @param Request $request * @return JsonResponse */ public function queryAnswerTrain(Application $app, Request $request) { if (null === ($optionsSerial = $request->request->get('options_serial'))) { $app->abort(400, 'Search engine options are missing'); } try { $options = SearchEngineOptions::hydrate($app, $optionsSerial); } catch (\Exception $e) { $app->abort(400, 'Provided search engine options are not valid'); } $pos = (int) $request->request->get('pos', 0); $query = $request->request->get('query', ''); $record = new \record_preview($app, 'RESULT', $pos, '', $app['phraseanet.SE'], $query, $options); return $app->json(['current' => $app['twig']->render('prod/preview/result_train.html.twig', ['records' => $record->get_train($pos, $query, $app['phraseanet.SE']), 'selected' => $pos])]); }