entity_class === '' || $this->form_class === '' || $this->twig_template === '' || $this->route_base === '') { throw new \InvalidArgumentException('You have to override the $entity_class, $form_class, $route_base and $twig_template value in your subclasss!'); } } protected function _edit(NamedDBElement $entity, Request $request, EntityManagerInterface $em) { $this->denyAccessUnlessGranted('read', $entity); $form = $this->createForm($this->form_class, $entity); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($entity); $em->flush(); } return $this->render($this->twig_template, [ 'entity' => $entity, 'form' => $form->createView() ]); } protected function _new(Request $request, EntityManagerInterface $em, EntityImporter $importer) { /** @var StructuralDBElement $new_entity */ $new_entity = new $this->entity_class(); $this->denyAccessUnlessGranted('read', $new_entity); //Basic edit form $form = $this->createForm($this->form_class, $new_entity); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($new_entity); $em->flush(); //$this->addFlash('success', $translator->trans('part.created_flash')); return $this->redirectToRoute($this->route_base . '_edit', ['id' => $new_entity->getID()]); } //Import form $import_form = $this->createForm(ImportType::class, ['entity_class' => $this->entity_class]); $import_form->handleRequest($request); if ($import_form->isSubmitted() && $import_form->isValid()) { /** @var UploadedFile $file */ $file = $import_form['file']->getData(); $data = $import_form->getData(); $options = array('parent' => $data['parent'], 'preserve_children' => $data['preserve_children'], 'format' => $data['format'], 'csv_separator' => $data['csv_separator']); $errors = $importer->fileToDBEntities($file, $this->entity_class, $options); foreach ($errors as $name => $error) { /** @var $error ConstraintViolationList */ $this->addFlash('error', $name . ':' . $error); } } //Mass creation form $mass_creation_form = $this->createForm(MassCreationForm::class, ['entity_class' => $this->entity_class]); $mass_creation_form->handleRequest($request); if ($mass_creation_form->isSubmitted() && $mass_creation_form->isValid()) { $data = $mass_creation_form->getData(); dump($data); //Create entries based on input $errors = $importer->massCreation($data['lines'], $this->entity_class, $data['parent']); //Show errors to user: foreach ($errors as $name => $error) { /** @var $error ConstraintViolationList */ $this->addFlash('error', $name . ':' . $error); } } return $this->render($this->twig_template, [ 'entity' => $new_entity, 'form' => $form->createView(), 'import_form' => $import_form->createView(), 'mass_creation_form' => $mass_creation_form->createView() ]); } protected function _delete(Request $request, NamedDBElement $entity, StructuralElementRecursionHelper $recursionHelper) { $this->denyAccessUnlessGranted('delete', $entity); if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { $entityManager = $this->getDoctrine()->getManager(); //Check if we need to remove recursively if ($entity instanceof StructuralDBElement && $request->get('delete_recursive', false)) { $recursionHelper->delete($entity, false); } else { $parent = $entity->getParent(); //Move all sub entities to the current parent foreach ($entity->getSubelements() as $subelement) { $subelement->setParent($parent); $entityManager->persist($subelement); } //Remove current element $entityManager->remove($entity); } //Flush changes $entityManager->flush(); $this->addFlash('success', 'attachment_type.deleted'); } return $this->redirectToRoute($this->route_base . '_new'); } protected function _exportAll(EntityManagerInterface $em, EntityExporter $exporter, Request $request) { $entity = new $this->entity_class(); $this->denyAccessUnlessGranted('read', $entity); $entities = $em->getRepository($this->entity_class)->findAll(); return $exporter->exportEntityFromRequest($entities,$request); } protected function _exportEntity(NamedDBElement $entity, EntityExporter $exporter, Request $request) { $this->denyAccessUnlessGranted('read', $entity); return $exporter->exportEntityFromRequest($entity, $request); } }