/** * @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()]); }
/** * * {@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()]; }
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); } } }
/** * * {@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()]; }
/** * @Route("/view/add/{type}", name="view.add") */ public function addAction($type, Request $request) { /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); /** @var ContentTypeRepository $contentTypeRepository */ $contentTypeRepository = $em->getRepository('AppBundle:ContentType'); $contentTypes = $contentTypeRepository->findBy(['deleted' => false, 'name' => $type]); if (!$contentTypes || count($contentTypes) != 1) { throw new NotFoundHttpException('Content type not found'); } $view = new View(); $view->setContentType($contentTypes[0]); $form = $this->createForm(ViewType::class, $view); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($view); $em->flush(); $this->addFlash('notice', 'A new view has been created'); return $this->redirectToRoute('view.edit', ['id' => $view->getId()]); } return $this->render('view/add.html.twig', ['contentType' => $contentTypes[0], 'form' => $form->createView()]); }
/** * * {@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()]; }
/** * * {@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()]; }
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; }