before(function(Request $request) use ($app) { $app['firewall']->requireAuthentication(); }); /** * Query Phraseanet * * name : prod_query * * description : Query Phraseanet * * method : POST * * parameters : none * * return : JSON Response */ $controllers->post('/', $this->call('query')) ->bind('prod_query'); /** * Get a preview answer train * * name : preview_answer_train * * description : Get a preview answer train * * method : POST * * parameters : none * * return : JSON Response */ $controllers->post('/answer-train/', $this->call('queryAnswerTrain')) ->bind('preview_answer_train'); /** * Get a preview reg train * * name : preview_reg_train * * description : Get a preview reg train * * method : POST * * parameters : none * * return : JSON Response */ $controllers->post('/reg-train/', $this->call('queryRegTrain')) ->bind('preview_reg_train'); return $controllers; } /** * Query Phraseanet to fetch records * * @param Application $app * @param Request $request * @return JsonResponse */ public function query(Application $app, Request $request) { $query = (string) $request->request->get('qry'); $mod = $app['authentication']->getUser()->getPrefs('view'); $json = array(); $options = SearchEngineOptions::fromRequest($app, $request); $form = $options->serialize(); $perPage = (int) $app['authentication']->getUser()->getPrefs('images_per_page'); $app['phraseanet.SE']->setOptions($options); $page = (int) $request->request->get('pag'); $firstPage = $page < 1; if ($page < 1) { $app['phraseanet.SE']->resetCache(); $page = 1; } $result = $app['phraseanet.SE']->query($query, (($page - 1) * $perPage), $perPage); $userQuery = new UserQuery(); $userQuery->setUsrId($app['authentication']->getUser()->get_id()); $userQuery->setQuery($result->getQuery()); $app['EM']->persist($userQuery); $app['EM']->flush(); if ($app['authentication']->getUser()->getPrefs('start_page') === 'LAST_QUERY') { $app['authentication']->getUser()->setPrefs('start_page_query', $result->getQuery()); } foreach ($options->getDataboxes() as $databox) { $colls = array_map(function(\collection $collection) { return $collection->get_coll_id(); }, array_filter($options->getCollections(), function(\collection $collection) use ($databox) { return $collection->get_databox()->get_sbas_id() == $databox->get_sbas_id(); })); $app['phraseanet.SE.logger']->log($databox, $result->getQuery(), $result->getTotal(), $colls); } $proposals = $firstPage ? $result->getProposals() : false; $npages = $result->getTotalPages($perPage); $page = $result->getCurrentPage($perPage); $string = ''; if ($npages > 1) { $d2top = ($npages - $page); $d2bottom = $page; if (min($d2top, $d2bottom) < 4) { if ($d2bottom < 4) { for ($i = 1; ($i <= 4 && (($i <= $npages) === true)); $i++) { if ($i == $page) $string .= ''; else $string .= "" . $i . ""; } if ($npages > 4) $string .= ">>"; } else { $start = $npages - 4; if (($start) > 0) $string .= "<<"; else $start = 1; for ($i = ($start); $i <= $npages; $i++) { if ($i == $page) $string .= ''; else $string .= "" . $i . ""; } } } else { $string .= "<<"; for ($i = ($page - 2); $i <= ($page + 2); $i++) { if ($i == $page) $string .= ''; else $string .= "" . $i . ""; } $string .= ">>"; } } $string .= '
'; $explain = "