diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Query.php b/lib/Alchemy/Phrasea/Controller/Prod/Query.php index 3f80ce7f9f..0861988187 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Query.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Query.php @@ -283,7 +283,7 @@ class Query implements ControllerProviderInterface $app->abort(400, 'Provided search engine options are not valid'); } - $pos = (int) $request->request->get('pos', 1); + $pos = (int) $request->request->get('pos', 0); $query = $request->request->get('query', ''); $record = new \record_preview($app, 'RESULT', $pos, '', '', $searchEngine, $query); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Records.php b/lib/Alchemy/Phrasea/Controller/Prod/Records.php index a499c45e11..015e258d8e 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Records.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Records.php @@ -31,6 +31,23 @@ class Records implements ControllerProviderInterface $app['firewall']->requireNotGuest(); }); + /** + * Get the record detailed view + * + * name : record_details + * + * description : Get the detailed view for a specific record + * + * method : POST|GET + * + * parameters : none + * + * return : JSON Response + */ + $controllers->match('/', $this->call('getRecord')) + ->bind('record_details') + ->method('GET|POST'); + /** * Delete a record or a list of records * @@ -82,12 +99,104 @@ class Records implements ControllerProviderInterface return $controllers; } + /** + * Get record detailed view + * + * @param Application $app + * @param Request $request + * @param integer $sbas_id + * @param integer $record_id + * @return JsonResponse + */ + public function getRecord(Application $app, Request $request) + { + if(!$request->isXmlHttpRequest()){ + $app->abort(400); + } + + $searchEngine = null; + $train = ''; + + // Use $request->get as HTTP method can be POST or GET + if ('RESULT' == $env = strtoupper($request->get('env', ''))) { + if (null === $optionsSerial = $request->get('options_serial')) { + $app->abort(400, 'Search engine options are missing'); + } + + if (false !== $options = unserialize($optionsSerial)) { + $searchEngine = new \searchEngine_adapter($app); + $searchEngine->set_options($options); + } else { + $app->abort(400, 'Provided search engine options are not valid'); + } + } + + $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', ''), + $reloadTrain, + $searchEngine, + $query + ); + + if ($record->is_from_reg()) { + $train = $app['twig']->render('prod/preview/reg_train.html.twig', + array('record' => $record) + ); + } + + if ($record->is_from_basket() && $reloadTrain) { + $train = $app['twig']->render('prod/preview/basket_train.html.twig', + array('record' => $record) + ); + } + + if ($record->is_from_feed()) { + $train = $app['twig']->render('prod/preview/feed_train.html.twig', + array('record' => $record) + ); + } + + return $app->json(array( + "desc" => $app['twig']->render('prod/preview/caption.html.twig', array( + 'record' => $record, + 'highlight' => $query, + 'searchEngine' => $searchEngine + )), + "html_preview" => $app['twig']->render('common/preview.html.twig', array( + 'record' => $record + )), + "others" => $app['twig']->render('prod/preview/appears_in.html.twig', array( + 'parents' => $record->get_grouping_parents(), + 'baskets' => $record->get_container_baskets($app['EM'], $app['phraseanet.user']) + )), + "current" => $train, + "history" => $app['twig']->render('prod/preview/short_history.html.twig', array( + 'record' => $record + )), + "popularity" => $app['twig']->render('prod/preview/popularity.html.twig', array( + 'record' => $record + )), + "tools" => $app['twig']->render('prod/preview/tools.html.twig', array( + 'record' => $record + )), + "pos" => $record->get_number(), + "title" => $record->get_title($query, $searchEngine) + )); + } + /** * Delete a record or a list of records * * @param Application $app * @param Request $request - * @return HtmlResponse + * @return JsonResponse */ public function doDeleteRecords(Application $app, Request $request) { diff --git a/www/client/clientFeedBack.php b/www/client/clientFeedBack.php index e09fdf1610..470e864ef0 100644 --- a/www/client/clientFeedBack.php +++ b/www/client/clientFeedBack.php @@ -31,68 +31,6 @@ $parm = $request->get_parms('action', 'env', 'pos', 'cont', 'roll', 'mode', 'col switch ($parm['action']) { case 'LANGUAGE': $output = module_client::getLanguage($app, $lng); - break; - case 'PREVIEW': - - $search_engine = null; - if ($parm['env'] == 'RESULT' && ($options = unserialize($parm['options_serial'])) !== false) { - $search_engine = new searchEngine_adapter($app); - $search_engine->set_options($options); - } - - $record = new record_preview($app, $parm['env'], $parm['pos'], $parm['cont'], $parm['roll'], $search_engine, $parm['query']); - - $train = ''; - - if ($record->is_from_reg()) { - $train = $app['twig']->render('prod/preview/reg_train.html.twig', array( - 'record' => $record - ) - ); - } - - if ($record->is_from_basket() && $parm['roll']) { - $train = $app['twig']->render('prod/preview/basket_train.html.twig', array( - 'record' => $record - ) - ); - } - - - if ($record->is_from_feed()) { - $train = $app['twig']->render('prod/preview/feed_train.html.twig', array( - 'record' => $record - ) - ); - } - - $output = p4string::jsonencode( - array( - "desc" => $app['twig']->render('prod/preview/caption.html.twig', array( - 'record' => $record - , 'highlight' => $parm['query'] - , 'searchEngine' => $search_engine - ) - ) - , "html_preview" => $app['twig']->render('common/preview.html.twig', array('record' => $record) - ) - , "others" => $app['twig']->render('prod/preview/appears_in.html.twig', array( - 'parents' => $record->get_grouping_parents(), - 'baskets' => $record->get_container_baskets($app['EM'], $app['phraseanet.user']) - ) - ) - , "current" => $train - , "history" => $app['twig']->render('prod/preview/short_history.html.twig', array('record' => $record) - ) - , "popularity" => $app['twig']->render('prod/preview/popularity.html.twig', array('record' => $record) - ) - , "tools" => $app['twig']->render('prod/preview/tools.html.twig', array('record' => $record) - ) - , "pos" => $record->get_number() - , "title" => $record->get_title($parm['query'], $search_engine) - ) - ); - break; case 'HOME': $output = phrasea::getHome($app, 'PUBLI', 'client'); diff --git a/www/include/jquery.p4.preview.js b/www/include/jquery.p4.preview.js index 3b96be896c..da01bb2f84 100644 --- a/www/include/jquery.p4.preview.js +++ b/www/include/jquery.p4.preview.js @@ -78,16 +78,15 @@ function openPreview(env, pos, contId, reload){ prevAjax = $.ajax({ type: "POST", - url: "/client/clientFeedBack.php", + url: "/prod/records/", dataType: 'json', data: { - action: "PREVIEW", env: env, pos: pos, cont: contId, roll: roll, - options_serial:options_serial, - query:query + options_serial:options_serial, + query:query }, beforeSend: function(){ if (prevAjaxrunning)