add('user', UserType::class, [ 'label' => 'label.user', 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addCustomerChoice(FormBuilderInterface $builder) { $builder->add('customer', CustomerType::class, [ 'required' => false, 'project_enabled' => true, 'query_builder' => function (CustomerRepository $repo) { $query = new CustomerQuery(); $query->setResultType(CustomerQuery::RESULT_TYPE_QUERYBUILDER); $query->setOrderBy('name'); return $repo->findByQuery($query); }, ]); } /** * @param FormBuilderInterface $builder * @param null|string $label */ protected function addVisibilityChoice(FormBuilderInterface $builder, string $label = 'label.visible') { $builder->add('visibility', VisibilityType::class, [ 'required' => false, 'placeholder' => null, 'label' => $label ]); } /** * @param FormBuilderInterface $builder */ protected function addPageSizeChoice(FormBuilderInterface $builder) { $builder->add('pageSize', PageSizeType::class, [ 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addUserRoleChoice(FormBuilderInterface $builder) { $builder->add('role', UserRoleType::class, [ 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addDateRangeChoice(FormBuilderInterface $builder, $allowEmpty = true) { $builder->add('daterange', DateRangeType::class, [ 'required' => false, 'allow_empty' => $allowEmpty, ]); } /** * @param FormBuilderInterface $builder */ protected function addProjectChoice(FormBuilderInterface $builder) { $builder->add('project', ProjectType::class, [ 'required' => false, 'activity_enabled' => true, 'choices' => [], 'disabled' => true, ]); $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); if (!isset($data['customer']) || empty($data['customer'])) { return; } $event->getForm()->add('project', ProjectType::class, [ 'group_by' => null, 'required' => false, 'activity_enabled' => true, 'query_builder' => function (ProjectRepository $repo) use ($data) { $query = new ProjectQuery(); $query->setCustomer($data['customer']); $query->setResultType(ProjectQuery::RESULT_TYPE_QUERYBUILDER); $query->setOrderBy('name'); return $repo->findByQuery($query); }, ]); } ); } /** * @param FormBuilderInterface $builder */ protected function addActivityChoice(FormBuilderInterface $builder) { $builder->add('activity', ActivityType::class, [ 'required' => false, 'query_builder' => function (ActivityRepository $repo) { $query = new ActivityQuery(); $query->setResultType(ActivityQuery::RESULT_TYPE_QUERYBUILDER); $query->setGlobalsOnly(true); $query->setOrderGlobalsFirst(true); $query->setOrderBy('name'); return $repo->findByQuery($query); }, ]); $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); if (!isset($data['project']) || empty($data['project'])) { return; } $event->getForm()->add('activity', ActivityType::class, [ 'required' => false, 'query_builder' => function (ActivityRepository $repo) use ($data) { $query = new ActivityQuery(); $query->setResultType(ActivityQuery::RESULT_TYPE_QUERYBUILDER); $query->setProject($data['project']); $query->setOrderGlobalsFirst(true); $query->setOrderBy('name'); return $repo->findByQuery($query); }, ]); } ); } /** * @param FormBuilderInterface $builder */ protected function addHiddenPagination(FormBuilderInterface $builder) { $builder->add('page', HiddenType::class, [ 'empty_data' => 1 ]); } /** * @param FormBuilderInterface $builder */ protected function addTagInputField(FormBuilderInterface $builder) { $builder->add('tags', TagsInputType::class, [ 'required' => false ]); } }