customfieldProvider = $customFieldProvider; $this->translator = $translator; } /** * Creates a new CustomFieldsGroup entity. */ public function createAction(Request $request) { $entity = new CustomFieldsGroup(); $form = $this->createCreateForm($entity); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); $this->addFlash('success', $this->translator ->trans('The custom fields group has been created')); return $this->redirect($this->generateUrl('customfieldsgroup_show', ['id' => $entity->getId()])); } $this->addFlash('error', $this->translator ->trans('The custom fields group form contains errors')); return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:new.html.twig', [ 'entity' => $entity, 'form' => $form->createView(), ]); } /** * Displays a form to edit an existing CustomFieldsGroup entity. * * @param mixed $id */ public function editAction($id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find CustomFieldsGroup entity.'); } $editForm = $this->createEditForm($entity); return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:edit.html.twig', [ 'entity' => $entity, 'edit_form' => $editForm->createView(), ]); } /** * Lists all CustomFieldsGroup entities. */ public function indexAction() { $em = $this->getDoctrine()->getManager(); $cfGroups = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->findAll(); $defaultGroups = $this->getDefaultGroupsId(); $makeDefaultFormViews = []; foreach ($cfGroups as $group) { if (!in_array($group->getId(), $defaultGroups, true)) { $makeDefaultFormViews[$group->getId()] = $this->createMakeDefaultForm($group)->createView(); } } return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:index.html.twig', [ 'entities' => $cfGroups, 'default_groups' => $defaultGroups, 'make_default_forms' => $makeDefaultFormViews, ]); } /** * Set the CustomField Group with id $cFGroupId as default. */ public function makeDefaultAction(Request $request) { $form = $this->createMakeDefaultForm(null); $form->handleRequest($request); $cFGroupId = $form->get('id')->getData(); $em = $this->getDoctrine()->getManager(); $cFGroup = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->findOneById($cFGroupId); if (!$cFGroup) { throw $this ->createNotFoundException('customFieldsGroup not found with ' . "id {$cFGroupId}"); } $cFDefaultGroup = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsDefaultGroup::class) ->findOneByEntity($cFGroup->getEntity()); if ($cFDefaultGroup) { $em->remove($cFDefaultGroup); $em->flush(); /*this is necessary, if not doctrine * will not remove old entity before adding a new one, * and this leads to violation constraint of unique entity * in postgresql */ } $newCFDefaultGroup = new CustomFieldsDefaultGroup(); $newCFDefaultGroup->setCustomFieldsGroup($cFGroup); $newCFDefaultGroup->setEntity($cFGroup->getEntity()); $em->persist($newCFDefaultGroup); $em->flush(); $this->addFlash('success', $this->translator ->trans('The default custom fields group has been changed')); return $this->redirect($this->generateUrl('customfieldsgroup')); } /** * Displays a form to create a new CustomFieldsGroup entity. */ public function newAction() { $entity = new CustomFieldsGroup(); $form = $this->createCreateForm($entity); return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:new.html.twig', [ 'entity' => $entity, 'form' => $form->createView(), ]); } /** * This function render the customFieldsGroup as a form. * * This function is for testing purpose ! * * The route which call this action is not in Resources/config/routing.yml, * but in Tests/Fixtures/App/app/config.yml * * @param int $id */ public function renderFormAction($id, Request $request) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find CustomFieldsGroups entity.'); } $form = $this->createForm(FormTypeCustomField::class, null, ['group' => $entity]); $form->add('submit_dump', SubmitType::class, ['label' => 'POST AND DUMP']); $form->add('submit_render', SubmitType::class, ['label' => 'POST AND RENDER']); $form->handleRequest($request); $this->get('twig.loader') ->addPath( __DIR__ . '/../Tests/Fixtures/App/app/Resources/views/', $namespace = 'test' ); if ($form->isSubmitted()) { if ($form->get('submit_render')->isClicked()) { return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:render_for_test.html.twig', [ 'fields' => $form->getData(), 'customFieldsGroup' => $entity, ]); } //dump($form->getData()); //dump(json_enccode($form->getData())); } return $this ->render('@test/CustomField/simple_form_render.html.twig', [ 'form' => $form->createView(), ]); } /** * Finds and displays a CustomFieldsGroup entity. * * @param mixed $id */ public function showAction($id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find CustomFieldsGroup entity.'); } $options = $this->getOptionsAvailable($entity->getEntity()); return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:show.html.twig', [ 'entity' => $entity, 'create_field_form' => $this->createCreateFieldForm($entity)->createView(), 'options' => $options, ]); } /** * Edits an existing CustomFieldsGroup entity. * * @param mixed $id */ public function updateAction(Request $request, $id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository(\Chill\CustomFieldsBundle\Entity\CustomFieldsGroup::class)->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find CustomFieldsGroup entity.'); } $editForm = $this->createEditForm($entity); $editForm->handleRequest($request); if ($editForm->isValid()) { $em->flush(); $this->addFlash('success', $this->translator ->trans('The custom fields group has been updated')); return $this->redirect($this->generateUrl('customfieldsgroup_edit', ['id' => $id])); } $this->addFlash('error', $this->translator ->trans('The custom fields group form contains errors')); return $this->render('ChillCustomFieldsBundle:CustomFieldsGroup:edit.html.twig', [ 'entity' => $entity, 'edit_form' => $editForm->createView(), ]); } private function createCreateFieldForm(CustomFieldsGroup $customFieldsGroup) { $fieldChoices = []; foreach ($this->customfieldProvider->getAllFields() as $key => $customType) { $fieldChoices[$key] = $customType->getName(); } $customfield = (new CustomField()) ->setCustomFieldsGroup($customFieldsGroup); $builder = $this->get('form.factory') ->createNamedBuilder(null, FormType::class, $customfield, [ 'method' => 'GET', 'action' => $this->generateUrl('customfield_new'), 'csrf_protection' => false, ]) ->add('type', ChoiceType::class, [ 'choices' => array_combine(array_values($fieldChoices), array_keys($fieldChoices)), ]) ->add('customFieldsGroup', HiddenType::class) ->add('submit', SubmitType::class); $builder->get('customFieldsGroup') ->addViewTransformer(new CustomFieldsGroupToIdTransformer( $this->getDoctrine()->getManager() )); return $builder->getForm(); } /** * Creates a form to create a CustomFieldsGroup entity. * * @param CustomFieldsGroup $entity The entity * * @return \Symfony\Component\Form\Form The form */ private function createCreateForm(CustomFieldsGroup $entity) { $form = $this->createForm(CustomFieldsGroupType::class, $entity, [ 'action' => $this->generateUrl('customfieldsgroup_create'), 'method' => 'POST', ]); $form->add('submit', SubmitType::class, ['label' => 'Create']); return $form; } /** * Creates a form to edit a CustomFieldsGroup entity. * * @param CustomFieldsGroup $entity The entity * * @return \Symfony\Component\Form\Form The form */ private function createEditForm(CustomFieldsGroup $entity) { $form = $this->createForm(CustomFieldsGroupType::class, $entity, [ 'action' => $this->generateUrl('customfieldsgroup_update', ['id' => $entity->getId()]), 'method' => 'PUT', ]); $form->add('submit', SubmitType::class, ['label' => 'Update']); return $form; } /** * create a form to make the group default. * * @param CustomFieldsGroup $group * * @return \Symfony\Component\Form\Form */ private function createMakeDefaultForm(?CustomFieldsGroup $group = null) { return $this->createFormBuilder($group, [ 'method' => 'POST', 'action' => $this->generateUrl('customfieldsgroup_makedefault'), ]) ->add('id', HiddenType::class) ->add('submit', SubmitType::class, ['label' => 'Make default']) ->getForm(); } /** * Get an array of CustomFieldsGroupId which are marked as default * for their entity. * * @return int[] */ private function getDefaultGroupsId() { $em = $this->getDoctrine()->getManager(); $customFieldsGroupIds = $em->createQuery('SELECT g.id FROM ' . 'ChillCustomFieldsBundle:CustomFieldsDefaultGroup d ' . 'JOIN d.customFieldsGroup g') ->getResult(Query::HYDRATE_SCALAR); $result = []; foreach ($customFieldsGroupIds as $row) { $result[] = $row['id']; } return $result; } /** * Return an array of available key option for custom fields group * on the given entity. * * @param string $entity the entity to filter */ private function getOptionsAvailable($entity) { $options = $this->getParameter('chill_custom_fields.' . 'customizables_entities'); foreach ($options as $key => $definition) { if ($definition['class'] === $entity) { foreach ($definition['options'] as $key => $value) { yield $key; } } } // [$entity->getEntity()]; } }