Example #1
0
 /**
  * @Route("/views/calendar/search/{view}.json", name="views.calendar.search", defaults={"_format": "json"}))
  * @Method({"GET"})
  */
 public function searchAction(View $view, Request $request)
 {
     $search = new Search();
     $form = $this->createForm(SearchFormType::class, $search, ['method' => 'GET', 'light' => true]);
     $form->handleRequest($request);
     $search = $form->getData();
     $body = $this->getSearchService()->generateSearchBody($search);
     /**@var \DateTime $from */
     /**@var \DateTime $to */
     $from = new \DateTime($request->query->get('from'));
     $to = new \DateTime($request->query->get('to'));
     $field = $view->getContentType()->getFieldType()->__get('ems_' . $view->getOptions()['dateRangeField']);
     if (empty($body['query']['bool']['must'])) {
         $body['query']['bool']['must'] = [];
     }
     if ($field->getMappingOptions()['nested']) {
         $body['query']['bool']['must'][] = ['nested' => ['path' => $field->getName(), 'query' => ['range' => [$field->getName() . '.' . $field->getMappingOptions()['fromDateMachineName'] => ['lte' => $to->format('c')]]]]];
         $body['query']['bool']['must'][] = ['nested' => ['path' => $field->getName(), 'query' => ['range' => [$field->getName() . '.' . $field->getMappingOptions()['toDateMachineName'] => ['gte' => $from->format('c')]]]]];
     } else {
         $body['query']['bool']['must'][] = ['range' => [$field->getMappingOptions()['fromDateMachineName'] => ['lte' => $to->format('c')]]];
         $body['query']['bool']['must'][] = ['range' => [$field->getMappingOptions()['toDateMachineName'] => ['gte' => $from->format('c')]]];
     }
     $searchQuery = ['index' => $view->getContentType()->getEnvironment()->getAlias(), 'type' => $view->getContentType()->getName(), "from" => 0, "size" => 1000, "body" => $body];
     $data = $this->getElasticsearch()->search($searchQuery);
     return $this->render('view/custom/calendar_search.json.twig', ['success' => true, 'data' => $data, 'field' => $view->getContentType()->getFieldType()->__get('ems_' . $view->getOptions()['dateRangeField']), 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment()]);
 }
Example #2
0
 /**
  *
  * {@inheritdoc}
  *
  */
 public function getParameters(View $view, FormFactoryInterface $formFactoty, Request $request)
 {
     $searchQuery = ['index' => $view->getContentType()->getEnvironment()->getAlias(), 'type' => $view->getContentType()->getName(), 'search_type' => 'count', 'body' => $view->getOptions()['aggsQuery']];
     $retDoc = $this->client->search($searchQuery);
     foreach (explode('.', $view->getOptions()['pathToBuckets']) as $attribute) {
         $retDoc = $retDoc[$attribute];
     }
     return ['keywords' => $retDoc, 'view' => $view, 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment()];
 }
 function __construct(View $view, Session $session)
 {
     $this->session = $session;
     $this->criterion = [];
     $contentType = $view->getContentType();
     $rootFieldType = $contentType->getFieldType();
     if (!empty($view->getOptions()['categoryFieldPath']) && ($categoryField = $rootFieldType->getChildByPath($view->getOptions()['categoryFieldPath']))) {
         $dataField = new DataField();
         $dataField->setFieldType($categoryField);
         $this->setCategory($dataField);
     }
     $criteriaField = $rootFieldType;
     if ($view->getOptions()['criteriaMode'] == 'internal') {
         $criteriaField = $rootFieldType->__get('ems_' . $view->getOptions()['criteriaField']);
     } else {
         if ($view->getOptions()['criteriaMode'] == 'another') {
         } else {
             throw new \Exception('Should never happen');
         }
     }
     $fieldPaths = preg_split("/\\r\\n|\\r|\\n/", $view->getOptions()['criteriaFieldPaths']);
     foreach ($fieldPaths as $path) {
         $child = $criteriaField->getChildByPath($path);
         if ($child) {
             $dataField = new DataField();
             $dataField->setFieldType($child);
             $this->criterion[$child->getName()] = $dataField;
         } else {
             $this->session->getFlashBag()->add('warning', 'Field path not found ' . $path);
         }
     }
 }
Example #4
0
 /**
  *
  * {@inheritdoc}
  *
  */
 public function getParameters(View $view, FormFactoryInterface $formFactoty, Request $request)
 {
     try {
         $renderQuery = $this->twig->createTemplate($view->getOptions()['body'])->render(['view' => $view, 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment()]);
     } catch (\Exception $e) {
         $renderQuery = "{}";
     }
     $searchQuery = ['index' => $view->getContentType()->getEnvironment()->getAlias(), 'type' => $view->getContentType()->getName(), 'body' => $renderQuery, 'size' => $view->getOptions()['size']];
     $result = $this->client->search($searchQuery);
     try {
         $render = $this->twig->createTemplate($view->getOptions()['template'])->render(['view' => $view, 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment(), 'result' => $result]);
     } catch (\Exception $e) {
         $render = "Something went wrong with the template of the view " . $view->getName() . " for the content type " . $view->getContentType()->getName() . " (" . $e->getMessage() . ")";
     }
     return ['render' => $render, 'view' => $view, 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment()];
 }
Example #5
0
 /**
  *
  * {@inheritdoc}
  *
  */
 public function getParameters(View $view, FormFactoryInterface $formFactoty, Request $request)
 {
     $search = new Search();
     $form = $formFactoty->create(SearchFormType::class, $search, ['method' => 'GET', 'light' => true]);
     return ['view' => $view, 'field' => $view->getContentType()->getFieldType()->__get('ems_' . $view->getOptions()['dateRangeField']), 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment(), 'form' => $form->createView()];
 }
Example #6
0
 public function removeCriteriaRevision(View $view, array $rawData, $targetFieldName, array $loadedRevision = [])
 {
     $multipleField = $this->getMultipleField($view->getContentType()->getFieldType());
     $body = ['query' => ['bool' => ['must' => []]]];
     foreach ($rawData as $name => $key) {
         $body['query']['bool']['must'][] = ['term' => [$name => ['value' => $key]]];
     }
     $result = $this->getElasticsearch()->search(['body' => $body, 'index' => $view->getContentType()->getEnvironment()->getAlias(), 'type' => $view->getContentType()->getName()]);
     if ($result['hits']['total'] == 0) {
         $this->addFlash('warning', 'Criteria hnot found');
     } else {
         if ($result['hits']['total'] == 1) {
             /**@var Revision $revision*/
             $revision = null;
             if (isset($loadedRevision[$result['hits']['hits'][0]['_id']])) {
                 $revision = $loadedRevision[$result['hits']['hits'][0]['_id']];
             } else {
                 $revision = $this->getDataService()->getNewestRevision($view->getContentType()->getName(), $result['hits']['hits'][0]['_id']);
             }
             $multipleValueToRemove = $rawData[$multipleField];
             $rawData = $revision->getRawData();
             if (($key = array_search($multipleValueToRemove, $rawData[$multipleField])) !== false) {
                 $revision = $this->getDataService()->initNewDraft($view->getContentType()->getName(), $result['hits']['hits'][0]['_id']);
                 unset($rawData[$multipleField][$key]);
                 $rawData[$multipleField] = array_values($rawData[$multipleField]);
                 $revision->setRawData($rawData);
                 $message = $multipleValueToRemove;
                 foreach ($rawData as $key => $value) {
                     if ($key != $multipleField && $key != $targetFieldName) {
                         $message .= ', ' . $value;
                     }
                 }
                 $this->addFlash('notice', 'A criteria has been removed for ' . $targetFieldName . ':' . $rawData[$targetFieldName] . ' (' . $message . ')');
                 return $revision;
             } else {
                 $this->addFlash('warning', 'The criteria is already missing for ' . $targetFieldName . ':' . $rawData[$targetFieldName]);
             }
         } else {
             $message = false;
             foreach ($result['hits']['hits'] as $hit) {
                 if ($message) {
                     $message .= ', ';
                 } else {
                     $message = '';
                 }
                 $message .= $hit['_id'];
             }
             $this->addFlash('error', 'Too many criteria found (' . $result['hits']['total'] . '). There is something wrong with this combinaison of criteria!: ' . $message);
         }
     }
     return NULL;
 }
Example #7
0
 /**
  *
  * {@inheritdoc}
  *
  */
 public function getParameters(View $view, FormFactoryInterface $formFactoty, Request $request)
 {
     $criteriaUpdateConfig = new CriteriaUpdateConfig($view, $request->getSession());
     $form = $formFactoty->create(CriteriaFilterType::class, $criteriaUpdateConfig, ['view' => $view, 'method' => 'GET', 'action' => $this->router->generate('views.criteria.table', ['view' => $view->getId()])]);
     $form->handleRequest($request);
     $categoryField = false;
     if ($view->getContentType()->getCategoryField()) {
         $categoryField = $view->getContentType()->getFieldType()->__get('ems_' . $view->getContentType()->getCategoryField());
     }
     return ['criteriaField' => $view->getOptions()['criteriaField'], 'categoryField' => $categoryField, 'view' => $view, 'contentType' => $view->getContentType(), 'environment' => $view->getContentType()->getEnvironment(), 'criterionList' => $view->getContentType()->getFieldType()->__get('ems_' . $view->getOptions()['criteriaField']), 'form' => $form->createView()];
 }