ticketFactory = $ticketFactory; } public static function getEntityFqcn(): string { return TicketInterface::class; } public function configureFields(string $pageName): iterable { return [ IntegerField::new('id') ->hideOnForm(), DateField::new('createdAt')->setFormat('short') ->hideOnForm(), TextField::new('visitorFirstName') ->setTemplatePath('@LcSov/admin/ticket/index_username.html.twig') ->hideOnForm(), TextField::new('visitorEmail') ->setTemplatePath('@LcSov/admin/ticket/index_email.html.twig') ->hideOnForm(), AssociationField::new('user') ->hideOnIndex(), TextField::new('subject'), TextField::new('lastMessage') ->setTemplatePath('@LcSov/admin/ticket/index_lastmessage.html.twig') ->hideOnForm(), ChoiceField::new('type') ->autocomplete() ->setChoices( [ 'entity.Ticket.fields.typeOptions.' . Ticket::TYPE_GENERAL_QUESTION => Ticket::TYPE_GENERAL_QUESTION, 'entity.Ticket.fields.typeOptions.' . Ticket::TYPE_TECHNICAL_PROBLEM => Ticket::TYPE_TECHNICAL_PROBLEM, ] ), ChoiceField::new('status') ->autocomplete() ->setChoices( [ 'entity.Ticket.fields.statusOptions.' . Ticket::TICKET_STATUS_OPEN => Ticket::TICKET_STATUS_OPEN, 'entity.Ticket.fields.statusOptions.' . Ticket::TICKET_STATUS_BEING_PROCESSED => Ticket::TICKET_STATUS_BEING_PROCESSED, 'entity.Ticket.fields.statusOptions.' . Ticket::TICKET_STATUS_CLOSED => Ticket::TICKET_STATUS_CLOSED, ] ) ->setTemplatePath('@LcSov/admin/ticket/index_status.html.twig') ->hideOnForm(), ]; } public function configureCrud(Crud $crud): Crud { $crud ->overrideTemplate('crud/detail', '@LcSov/admin/ticket/detail.html.twig'); return parent::configureCrud($crud); } public function configureActions(Actions $actions): Actions { $actions ->add(Crud::PAGE_INDEX, Action::DETAIL) ->remove(Crud::PAGE_INDEX, Action::EDIT); return parent::configureActions($actions); } public function new(AdminContext $context) { $ticket = $this->ticketFactory->create(); $form = $this->createForm(TicketFormType::class, $ticket); $form->handleRequest($context->getRequest()); if ($form->isSubmitted() && $form->isValid()) { $ticket = $form->getData(); foreach($ticket->getTicketMessages() as $ticketMessage){ $this->get('em')->persist($ticketMessage); } $this->get('em')->persist($ticket); $this->get('em')->flush(); return $this->redirectToRoute('admin_dashboard'); } return $this->render( '@LcSov/admin/ticket/new.html.twig', [ 'form' => $form->createView(), ] ); } }