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['phraseanet.user']->getPrefs('view'); $json = array(); $options = new SearchEngineOptions(); $options->disallowBusinessFields(); $bas = $app['phraseanet.user']->ACL()->get_granted_base(); if (is_array($request->request->get('bas'))) { $bas = array_map(function($base_id) use ($app) { return \collection::get_from_base_id($app, $base_id); }, $request->request->get('bas')); } $databoxes = array(); foreach ($bas as $collection) { if (!isset($databoxes[$collection->get_sbas_id()])) { $databoxes[$collection->get_sbas_id()] = $collection->get_databox(); } } if ($app['phraseanet.user']->ACL()->has_right('modifyrecord')) { $BF = array_filter($bas, function($collection) use ($app) { return $app['phraseanet.user']->ACL()->has_right_on_base($collection->get_base_id(), 'canmodifrecord'); }); $options->allowBusinessFieldsOn($BF); } $status = is_array($request->request->get('status')) ? $request->request->get('status') : array(); $fields = is_array($request->request->get('fields')) ? $request->request->get('fields') : array(); $databoxFields = array(); foreach ($databoxes as $databox) { foreach ($fields as $field) { try { $databoxField = $databox->get_meta_structure()->get_element_by_name($field); } catch (\Exception $e) { continue; } if ($databoxField) { $databoxFields[] = $databoxField; } } } $options->setFields($databoxFields); $options->setStatus($status); $options->onCollections($bas); $options->setSearchType($request->request->get('search_type')); $options->setRecordType($request->request->get('recordtype')); $min_date = $max_date = null; if ($request->request->get('datemin')) { $min_date = \DateTime::createFromFormat('Y/m/d H:i:s', $request->request->get('datemin') . ' 00:00:00'); } if ($request->request->get('datemax')) { $max_date = \DateTime::createFromFormat('Y/m/d H:i:s', $request->request->get('datemax') . ' 23:59:59'); } $options->setMinDate($min_date); $options->setMaxDate($max_date); $databoxDateFields = array(); foreach ($databoxes as $databox) { foreach (explode('|', $request->request->get('datefield')) as $field) { try { $databoxField = $databox->get_meta_structure()->get_element_by_name($field); } catch (\Exception $e) { continue; } if ($databoxField) { $databoxDateFields[] = $databoxField; } } } $options->setDateFields($databoxDateFields); $options->setSort($request->request->get('sort'), $request->request->get('ord', PHRASEA_ORDER_DESC)); $options->useStemming($request->request->get('stemme')); $form = $options->serialize(); $perPage = (int) $app['phraseanet.user']->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); $proposals = $firstPage ? $result->proposals() : false; $npages = $result->totalPages($perPage); $page = $result->currentPage($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 = "