/** * * {@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()]; }
/** * @Route("/views/criteria/table/{view}", name="views.criteria.table")) * @Method({"GET"}) */ public function generateCriteriaTableAction(View $view, Request $request) { /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); /** @var RevisionRepository $revisionRep */ $revisionRep = $em->getRepository('AppBundle:Revision'); $counters = $revisionRep->draftCounterGroupedByContentType([], true); foreach ($counters as $counter) { if ($counter['content_type_id'] == $view->getContentType()->getId()) { $this->addFlash('warning', 'There is ' . $counter['counter'] . ' drafts, you wont be able to update them from here.'); } } $criteriaUpdateConfig = new CriteriaUpdateConfig($view, $request->getSession()); $form = $this->createForm(CriteriaFilterType::class, $criteriaUpdateConfig, ['view' => $view, 'method' => 'GET']); $form->handleRequest($request); /** @var CriteriaUpdateConfig $criteriaUpdateConfig */ $criteriaUpdateConfig = $form->getData(); $contentType = $view->getContentType(); $valid = true; if (!empty($view->getOptions()['categoryFieldPath']) && empty($criteriaUpdateConfig->getCategory()->getTextValue())) { $valid = false; $form->get('category')->addError(new FormError('Category is mandatory')); } foreach ($form->get('criterion')->all() as $child) { if ($child->getConfig()->getName() != $criteriaUpdateConfig->getColumnCriteria() && $child->getConfig()->getName() != $criteriaUpdateConfig->getRowCriteria() && empty($child->getNormData()->getTextValue())) { $valid = false; $child->addError(new FormError('Non-row/column criteria are mandatory')); } } if (!$valid) { return $this->render('view/custom/criteria_view.html.twig', ['view' => $view, 'form' => $form->createView(), 'contentType' => $contentType]); } $criteriaField = $view->getContentType()->getFieldType(); if ($view->getOptions()['criteriaMode'] == 'internal') { $criteriaField = $view->getContentType()->getFieldType()->__get('ems_' . $view->getOptions()['criteriaField']); } else { if ($view->getOptions()['criteriaMode'] == 'another') { } else { throw new \Exception('Should never happen'); } } $columnField = null; $rowField = null; $fieldPaths = preg_split("/\\r\\n|\\r|\\n/", $view->getOptions()['criteriaFieldPaths']); $authorized = $this->isAuthorized($criteriaField); foreach ($fieldPaths as $path) { /**@var \AppBundle\Entity\FieldType $child*/ $child = $criteriaField->getChildByPath($path); if ($child) { if ($child->getName() == $criteriaUpdateConfig->getColumnCriteria()) { $columnField = $child; } else { if ($child->getName() == $criteriaUpdateConfig->getRowCriteria()) { $rowField = $child; } } $authorized = $authorized && $this->isAuthorized($child); } } if (!$authorized) { $this->addFlash('notice', 'Your are not allowed to update data via this view'); } $hiddenform = $this->createForm(CriteriaFilterType::class, $criteriaUpdateConfig, ['view' => $view, 'hidden' => true, 'action' => $this->get('router')->generate('views.criteria.align', ['view' => $view->getId()]), 'attr' => ['id' => 'hiddenFilterForm']]); $tables = $this->generateCriteriaTable($view, $criteriaUpdateConfig, $request); return $this->render('view/custom/criteria_table.html.twig', ['table' => $tables['table'], 'rowFieldType' => $rowField, 'columnFieldType' => $columnField, 'config' => $criteriaUpdateConfig, 'columns' => $tables['criteriaChoiceLists'][$criteriaUpdateConfig->getColumnCriteria()], 'rows' => $tables['criteriaChoiceLists'][$criteriaUpdateConfig->getRowCriteria()], 'criteriaChoiceLists' => $tables['criteriaChoiceLists'], 'view' => $view, 'categoryChoiceList' => $tables['categoryChoiceList'], 'targetContentType' => $tables['targetContentType'], 'authorized' => $authorized, 'hiddenForm' => $hiddenform->createView()]); }