src/Utility/FormGenerator.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Utility;
  3. use App\Form\FilmApplicationMemberType;
  4. use App\Repository\ProductRepository;
  5. use App\Repository\UserRepository;
  6. use App\String\Constant;
  7. use App\String\ProjectString;
  8. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  9. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  10. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\FormField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\HiddenField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\TelephoneField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;
  21. use Symfony\Component\Validator\Constraints\File;
  22. class FormGenerator 
  23. {
  24.     public function generateForm(string $type) {
  25.         $form = [];
  26.         switch ($type) {
  27.             case Constant::PROJECT_FORM:
  28.                 $form = [
  29.                     FormField::addTab('Administrator'),
  30.                     HiddenField::new('status')->hideOnIndex()->hideOnDetail(),
  31.                     HiddenField::new('tabActive')->hideOnIndex()->hideOnDetail(),
  32.                     ChoiceField::new('filmProjectFunding.approvedFiscal'ProjectString::PROJECT_FUNDING_APPROVE_FISCAL)->setChoices([
  33.                             'Yes' => true,
  34.                         ])
  35.                         ->renderExpanded()
  36.                         ->setColumns(12)
  37.                         ->hideOnIndex()
  38.                         ->setRequired(true)->addCssClass('fiscalSponsorship')
  39.                         ->setFormTypeOptions([
  40.                             'label_html' => true
  41.                         ]),
  42.         
  43.                     TextField::new('filmProjectAdmin.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('administratorFirstName'),
  44.                     TextField::new('filmProjectAdmin.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('administratorLastName'),
  45.                     TextField::new('filmProjectAdmin.address'ProjectString::PROJECT_MEMBER_ADDRESS)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorAddress'),
  46.                     TextField::new('filmProjectAdmin.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorCity'),
  47.                     ChoiceField::new('filmProjectAdmin.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorState')->setChoices(DropdownValues::$states),
  48.                     TextField::new('filmProjectAdmin.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorPostcode')->setFormTypeOptions([
  49.                         'attr' => [
  50.                             'maxlength' => 4,
  51.                             'minlength' => 4,
  52.                         ]
  53.                     ]),
  54.                     TextField::new('filmProjectAdmin.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  55.                     TelephoneField::new('filmProjectAdmin.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorTelephone'),
  56.                     TextField::new('filmProjectAdmin.email'ProjectString::PROJECT_MEMBER_EMAIL)->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('administratorEmail'),
  57.                     ChoiceField::new('filmProjectAdmin.gender'ProjectString::PROJECT_MEMBER_GENDER)->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('administratorGender'),
  58.                     ChoiceField::new('filmProjectAdmin.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(true)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('administratorIsDiverse'),
  59.                     ChoiceField::new('filmProjectAdmin.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(true)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('administratorIsAborigin'),
  60.         
  61.                     FormField::addTab('Film Team'),
  62.         
  63.                     FormField::addPanel('Producer\'s Details')->setHelp('one name only, further team members can be added below'),
  64.                     TextField::new('filmProjectProducer.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('producerFirstName'),
  65.                     TextField::new('filmProjectProducer.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('producerLastName'),
  66.                     TextareaField::new('filmProjectProducer.biography'ProjectString::PROJECT_MEMBER_BIOGRAPHY)->setRequired(true)->setMaxLength(1000)->setColumns(12)->hideOnIndex()->setHelp('Content limited to 1000 characters')->addCssClass('producerBio')->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  67.                     TextField::new('filmProjectProducer.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  68.                     TextField::new('filmProjectProducer.website'ProjectString::PROJECT_MEMBER_WEBSITE)->setColumns(3)->hideOnIndex(),
  69.                     TextField::new('filmProjectProducer.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerCity'),
  70.                     ChoiceField::new('filmProjectProducer.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerState')->setChoices(DropdownValues::$states),
  71.                     TextField::new('filmProjectProducer.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerPostcode')->setFormTypeOptions([
  72.                         'attr' => [
  73.                             'maxlength' => 4,
  74.                             'minlength' => 4,
  75.                         ]
  76.                     ]),
  77.                     TextField::new('filmProjectProducer.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerTelephone'),
  78.                     TextField::new('filmProjectProducer.email''Email')->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('producerEmail'),
  79.                     ChoiceField::new('filmProjectProducer.gender''Gender')->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('producerGender'),
  80.                     ChoiceField::new('filmProjectProducer.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('producerIsDiverse'),
  81.                     ChoiceField::new('filmProjectProducer.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('producerIsAborigin'),
  82.         
  83.                     FormField::addPanel('Director\'s Details')->setHelp('one name only, further team members can be added below'),
  84.                     TextField::new('filmProjectDirector.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('directorFirstName'),
  85.                     TextField::new('filmProjectDirector.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('directorLastName'),
  86.                     TextareaField::new('filmProjectDirector.biography'ProjectString::PROJECT_MEMBER_BIOGRAPHY)->setRequired(true)->setMaxLength(1000)->setColumns(12)->hideOnIndex()->setHelp('Content limited to 1000 characters')->addCssClass('directorBio')->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  87.                     TextField::new('filmProjectDirector.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  88.                     TextField::new('filmProjectDirector.website'ProjectString::PROJECT_MEMBER_WEBSITE)->setColumns(3)->hideOnIndex(),
  89.                     TextField::new('filmProjectDirector.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorCity'),
  90.                     ChoiceField::new('filmProjectDirector.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorState')->setChoices(DropdownValues::$states),
  91.                     TextField::new('filmProjectDirector.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorPostcode')->setFormTypeOptions([
  92.                         'attr' => [
  93.                             'maxlength' => 4,
  94.                             'minlength' => 4,
  95.                         ]
  96.                     ]),
  97.                     TextField::new('filmProjectDirector.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorTelephone'),
  98.                     TextField::new('filmProjectDirector.email''Email')->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('directorEmail'),
  99.                     ChoiceField::new('filmProjectDirector.gender''Gender')->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('directorGender'),
  100.                     ChoiceField::new('filmProjectDirector.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('directorIsDiverse'),
  101.                     ChoiceField::new('filmProjectDirector.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('directorIsAborigin'),
  102.         
  103.                     FormField::addPanel('Additional Team Member\'s Details'),
  104.                     CollectionField::new('filmProjectMembers''Team Member\'s Details')
  105.                         ->setEntryIsComplex()
  106.                         ->setEntryType(FilmApplicationMemberType::class)
  107.                         // ->renderExpanded()
  108.                         ->setColumns('col-12')
  109.                         ->addCssClass('custom-collection-form')
  110.                         ->hideOnIndex(),
  111.                     
  112.                     FormField::addTab('Project Details'),
  113.                     TextField::new('title'ProjectString::PROJECT_DETAILS_TITLE)->setRequired(true)->setColumns(12)->hideOnIndex()->addCssClass('projectTitle'),
  114.                     ChoiceField::new('productionStage'ProjectString::PROJECT_DETAILS_PRODUCTION_STAGE)->setRequired(true)->setChoices([
  115.                         'Development' => 'Development',
  116.                         'Production' => 'Production',
  117.                         'Post-production' => 'Post-Production',
  118.                         'Completed' => 'Film Complete',
  119.                         'Outreach / Impact' => 'Outreach',
  120.                     ])->setColumns(6)->hideOnIndex()->addCssClass('productionStage'),
  121.                     ChoiceField::new('productionType'ProjectString::PROJECT_DETAILS_PRODUCTION_TYPE)->setRequired(true)->setChoices(DropdownValues::FILM_PRODUCTION_TYPES)->setColumns(6)->hideOnIndex()->addCssClass('productionType'),
  122.                     ChoiceField::new('filmProjectDetails.isEpisodes'ProjectString::PROJECT_DETAILS_EPISODES)->setChoices([
  123.                         'Yes' => true,
  124.                         'No' => false,
  125.                     ])->renderExpanded()->setColumns(2)->hideOnIndex()
  126.                     ->setFormTypeOptions(['placeholder' => false]),
  127.                     IntegerField::new('filmProjectDetails.episodeNumber'ProjectString::PROJECT_DETAILS_NUMBER_OF_EPISODES)->setColumns(4)->hideOnIndex()->setFormTypeOptions([
  128.                         'attr' => [
  129.                             'min' => 0,
  130.                             "onInput" => "this.value = Math.abs(this.value)"
  131.                         ]
  132.                     ]),
  133.                     ChoiceField::new('filmProjectDetails.isShortFilm'ProjectString::PROJECT_DETAILS_IS_SHORT_FILM)->setChoices([
  134.                         'Yes' => true,
  135.                         'No' => false,
  136.                     ])->renderExpanded()->setColumns(2)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  137.                     IntegerField::new('filmProjectDetails.shortFilmLength'ProjectString::PROJECT_DETAILS_SHORT_FILM_LENGTH)->setColumns(4)->hideOnIndex()->addCssClass('shortFilmLength')->setFormTypeOptions([
  138.                         'attr' => [
  139.                             'min' => 0,
  140.                             "onInput" => "this.value = Math.abs(this.value)"
  141.                         ]
  142.                     ]),
  143.                     IntegerField::new('filmProjectDetails.productionLength'ProjectString::PROJECT_DETAILS_PRODUCTION_LENGTH)->setRequired(true)->setColumns(8)->hideOnIndex()->addCssClass('lengthOfProductionInMinutes'),
  144.                     ImageField::new('filmProjectDetails.projectHeroImage'ProjectString::PROJECT_DETAILS_PROJECT_HERO_IMAGE)
  145.                         // ->setRequired(true)
  146.                         ->setBasePath('uploads/projects')
  147.                         ->setUploadDir('public/uploads/projects')
  148.                         ->setColumns(4)
  149.                         ->hideOnIndex()
  150.                         ->addCssClass('projectHeroImage')->setFormTypeOptions([
  151.                             'label_attr' => ['class' => 'required'],
  152.                         ])
  153.                         ->setHelp('Recommended resolution is 1280 x 720 and maximum file is limited to 5MB'),
  154.                     UrlField::new('filmProjectDetails.projectTrailerLink'ProjectString::PROJECT_DETAILS_TRAILER_LINK)->setColumns(8)->hideOnIndex(),
  155.                     TextField::new('filmProjectDetails.projectTrailerPassword'ProjectString::PROJECT_DETAILS_TRAILER_PASSWORD)
  156.                         ->setColumns(4)
  157.                         // ->setFormType(PasswordType::class)
  158.                         ->hideOnIndex(),
  159.                     ChoiceField::new('filmProjectDetails.isCompleted'ProjectString::PROJECT_DETAILS_IS_COMPLETED)->setChoices([
  160.                         'Yes' => true,
  161.                         'No' => false,
  162.                     ])->renderExpanded()->setColumns(4)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  163.                     TextField::new('filmProjectDetails.projectCompleteLink'ProjectString::PROJECT_DETAILS_COMPLETE_LINK)->setColumns(8)->hideOnIndex(),
  164.                     TextField::new('filmProjectDetails.screenerPassword'ProjectString::PROJECT_DETAILS_SCREENER_PASSWORD)
  165.                         ->setColumns(12)
  166.                         // ->setFormType(PasswordType::class)
  167.                         ->hideOnIndex(),
  168.                     // ChoiceField::new('filmProjectDetails.isDisplayDonation', ProjectString::PROJECT_DETAILS_DISPLAY_DONATION)->setChoices([
  169.                     //         'Yes' => true,
  170.                     //         'No' => false,
  171.                     // ])->renderExpanded()->setColumns(8)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  172.         
  173.                     // SOCIAL MEDIA
  174.                     FormField::addPanel('Social media'),
  175.                     TextField::new('filmProjectDetails.twitter'ProjectString::PROJECT_DETAILS_TWITTER)
  176.                         ->setColumns(6)
  177.                         ->hideOnIndex(),
  178.                     TextField::new('filmProjectDetails.instagram'ProjectString::PROJECT_DETAILS_INSTAGRAM)
  179.                         ->setColumns(6)
  180.                         ->hideOnIndex(),
  181.                     TextField::new('filmProjectDetails.facebook'ProjectString::PROJECT_DETAILS_FACEBOOK)
  182.                         ->setColumns(6)
  183.                         ->hideOnIndex(),
  184.                     TextField::new('filmProjectDetails.youtube'ProjectString::PROJECT_DETAILS_YOUTUBE)
  185.                         ->setColumns(6)
  186.                         ->hideOnIndex(),
  187.                     TextField::new('filmProjectDetails.vimeo'ProjectString::PROJECT_DETAILS_VIMEO)
  188.                         ->setColumns(6)
  189.                         ->hideOnIndex(),
  190.                     TextField::new('filmProjectDetails.website'ProjectString::PROJECT_DETAILS_WEBSITE)
  191.                         ->setColumns(6)
  192.                         ->hideOnIndex(),
  193.         
  194.         
  195.         
  196.                     FormField::addTab('Story & Impact'),
  197.                     TextareaField::new('filmProjectStoryImpact.synopsis'ProjectString::PROJECT_STORY_IMPACT_SYNOPSIS)
  198.                         ->addCssClass('synopsis')
  199.                         ->setRequired(true)
  200.                         // ->setMaxLength(2000)
  201.                         ->setColumns(12)
  202.                         ->hideOnIndex()
  203.                         ->setHelp('Content limited to 2000 characters')
  204.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 2000]])
  205.                     ,
  206.                     TextareaField::new('filmProjectStoryImpact.logline'ProjectString::PROJECT_STORY_IMPACT_LOGLINE)
  207.                         ->setRequired(true)
  208.                         // ->setMaxLength(120)
  209.                         ->setColumns(12)
  210.                         ->hideOnIndex()->addCssClass('logline')
  211.                         ->setHelp('Content limited to 120 characters')
  212.                         ->setFormTypeOptions(['attr' => ['maxlength' => 120]]),
  213.                     TextareaField::new('filmProjectStoryImpact.issueAddressed'ProjectString::PROJECT_STORY_IMPACT_ISSUE_ADDRESSED)
  214.                         ->setRequired(true)
  215.                         ->setMaxLength(1000)
  216.                         ->setColumns(12)
  217.                         ->hideOnIndex()
  218.                         ->addCssClass('issueAddressed')
  219.                         ->setHelp('Content limited to 1000 characters')
  220.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  221.                     TextareaField::new('filmProjectStoryImpact.creativeTreatment'ProjectString::PROJECT_STORY_IMPACT_CREATIVE_TREATMENT)
  222.                         ->setRequired(true)
  223.                         ->setMaxLength(1000)
  224.                         ->setColumns(12)
  225.                         ->hideOnIndex()
  226.                         ->addCssClass('creativeTreatment')
  227.                         ->setHelp('Content limited to 1000 characters')
  228.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  229.                     ChoiceField::new('filmProjectStoryImpact.primaryImpactArea'ProjectString::PROJECT_STORY_IMPACT_PRIMARY_IMPACT_AREA)->setChoices(DropdownValues::IMPACT_VALUES)
  230.                         ->setRequired(true)
  231.                         ->renderExpanded()
  232.                         ->setColumns(12)
  233.                         ->hideOnIndex()->addCssClass('primaryImpactArea'),
  234.                     ChoiceField::new('filmProjectStoryImpact.secondaryImpactArea'ProjectString::PROJECT_STORY_IMPACT_SECOND_IMPACT_AREA)->setChoices(DropdownValues::IMPACT_VALUES)
  235.                         ->setRequired(false)
  236.                         ->renderExpanded()
  237.                         ->allowMultipleChoices()
  238.                         ->setColumns(12)
  239.                         ->hideOnIndex()->addCssClass('secondaryImpactArea'),
  240.                     ChoiceField::new('filmProjectStoryImpact.topicCovered'ProjectString::PROJECT_STORY_IMPACT_TOPIC_COVERED)->setChoices(DropdownValues::TOPIC_VALUES// TODO: change values of this topic
  241.                         // ->renderExpanded()
  242.                         ->setRequired(true)
  243.                         ->allowMultipleChoices()
  244.                         ->setColumns(12)
  245.                         ->hideOnIndex()
  246.                         ->addCssClass('topicCovered'),
  247.                     TextareaField::new('filmProjectStoryImpact.impactVisionStatement'ProjectString::PROJECT_STORY_IMPACT_IMPACT_VISION_STATEMENT)
  248.                         ->setRequired(true)
  249.                         ->setMaxLength(1000)
  250.                         ->setColumns(12)
  251.                         ->hideOnIndex()->addCssClass('impactVisionStatement')
  252.                         ->setHelp('Content limited to 1000 characters')
  253.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  254.                     ChoiceField::new('filmProjectStoryImpact.outcomes'ProjectString::PROJECT_STORY_IMPACT_OUTCOMES)->setChoices(DropdownValues::OUTCOME_VALUES)
  255.                         ->setRequired(true)
  256.                         ->renderExpanded()
  257.                         ->allowMultipleChoices()
  258.                         ->setColumns(12)
  259.                         ->hideOnIndex()->addCssClass('filmOutcomes'),
  260.                     TextareaField::new('filmProjectStoryImpact.ourcomeInformation'ProjectString::PROJECT_STORY_IMPACT_OUTCOMES_INFORMATION)
  261.                         ->addCssClass('filmOutcomesInfo')
  262.                         ->setRequired(true)
  263.                         ->setMaxLength(1000)
  264.                         ->setColumns(12)
  265.                         ->hideOnIndex()
  266.                         ->setHelp('Content limited to 1000 characters')
  267.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  268.                     TextField::new('filmProjectStoryImpact.audiences'ProjectString::PROJECT_STORY_IMPACT_AUDIENCES)
  269.                         ->setRequired(true)
  270.                         ->setColumns(12)
  271.                         ->hideOnIndex()->addCssClass('filmAudiences'),
  272.                     TextareaField::new('filmProjectStoryImpact.relationshipAccess'ProjectString::PROJECT_STORY_IMPACT_RELATIONSHIP_ACCESS)
  273.                         ->setRequired(false)
  274.                         // ->setMaxLength(1000)
  275.                         ->setColumns(12)
  276.                         ->hideOnIndex()->addCssClass('communityRelationship')
  277.                         ->setHelp('Content limited to 1000 characters')
  278.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 1000]])
  279.                     ,
  280.                     TextareaField::new('filmProjectStoryImpact.whoBenefit'ProjectString::PROJECT_STORY_IMPACT_WHO_BENEFIT)
  281.                         ->setRequired(true)
  282.                         ->setMaxLength(1000)    
  283.                         ->setColumns(12)
  284.                         ->hideOnIndex()->addCssClass('filmBenefits')
  285.                         ->setHelp('Content limited to 1000 characters')
  286.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),  
  287.                     ChoiceField::new('filmProjectStoryImpact.confirmedRole'ProjectString::PROJECT_STORY_IMPACT_CONFIRMED_ROLE)->setChoices(DropdownValues::ROLE_VALUES)
  288.                         ->setRequired(false)
  289.                         ->renderExpanded()
  290.                         ->allowMultipleChoices()
  291.                         ->setColumns(12)
  292.                         ->hideOnIndex()->addCssClass('role'),
  293.                     TextField::new('filmProjectStoryImpact.confirmedRoleName'ProjectString::PROJECT_STORY_IMPACT_CONFIRMED_ROLE_NAME)
  294.                         ->setColumns(12)
  295.                         ->hideOnIndex(),
  296.                     TextareaField::new('filmProjectStoryImpact.callToAction'ProjectString::PROJECT_STORY_IMPACT_CALL_TO_ACTION)
  297.                         ->setRequired(true)
  298.                         ->setMaxLength(1000)
  299.                         ->setColumns(12)
  300.                         ->hideOnIndex()->addCssClass('callsOfAction')
  301.                         ->setHelp('Content limited to 1000 characters')
  302.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  303.                     ChoiceField::new('filmProjectStoryImpact.isFilmImpactPartner'ProjectString::PROJECT_STORY_IMPACT_IS_FILM_IMPACT_PARTNER)->setChoices([
  304.                             'Yes' => true,
  305.                             'No' => false,
  306.                         ])
  307.                         ->renderExpanded()
  308.                         ->setColumns(12)->hideOnIndex(), 
  309.                     TextField::new('filmProjectStoryImpact.partnerName'ProjectString::PROJECT_STORY_IMPACT_PARTNER_NAME)
  310.                         ->setColumns(12)->hideOnIndex()
  311.                         ->setFormTypeOptions([
  312.                             'label_html' => true
  313.                         ])
  314.                         ->setHelp('Separate by comma'),
  315.                     
  316.                     FormField::addPanel('Proposed Timeline'),
  317.                     DateTimeField::new('filmProjectTimeline.developmentTimeline'ProjectString::PROJECT_STORY_IMPACT_DEVELOPMENT_TIMELINE)
  318.                         ->setRequired(true
  319.                         ->renderAsText()
  320.                         ->setColumns(6)
  321.                         ->hideOnIndex()->addCssClass('developmentTimeline'),
  322.                     DateTimeField::new('filmProjectTimeline.productionTimeline'ProjectString::PROJECT_STORY_IMPACT_PRODUCTION_TIMELINE)
  323.                         ->setRequired(true
  324.                         ->renderAsText()
  325.                         ->setColumns(6)
  326.                         ->hideOnIndex()->addCssClass('productionTimeline'),
  327.                     DateTimeField::new('filmProjectTimeline.postProductionTimeline'ProjectString::PROJECT_STORY_IMPACT_POST_PRODUCTION_TIMELINE)
  328.                         ->setRequired(true
  329.                         ->renderAsText()
  330.                         ->setColumns(6)
  331.                         ->hideOnIndex()->addCssClass('postProductionTimeline'),
  332.                     DateTimeField::new('filmProjectTimeline.completionTimeline'ProjectString::PROJECT_STORY_IMPACT_COMPLETION_TIMELINE)
  333.                         ->setRequired(true
  334.                         ->renderAsText()
  335.                         ->renderAsText()
  336.                         ->setColumns(6)
  337.                         ->hideOnIndex()->addCssClass('completionTimeline'),
  338.         
  339.                     FormField::addPanel('Fundraising Campaign'),
  340.                     DateTimeField::new('filmProjectTimeline.fundraisingCampaignStartDate'ProjectString::PROJECT_STORY_IMPACT_FUNDRAISING_CAMPAIGN_START_DATE)
  341.                         ->setRequired(true
  342.                         ->renderAsText()
  343.                         ->setColumns(6)
  344.                         ->hideOnIndex()->addCssClass('campaignStartDate'),
  345.                     DateTimeField::new('filmProjectTimeline.fundraisingCampaignEndDate'ProjectString::PROJECT_STORY_IMPACT_FUNDRAISING_CAMPAIGN_END_DATE)
  346.                         ->setRequired(true
  347.                         ->renderAsText()
  348.                         ->setColumns(6)
  349.                         ->hideOnIndex()->addCssClass('campaignEndDate'),
  350.         
  351.                     FormField::addPanel('Impact Campaign'),
  352.                     DateTimeField::new('filmProjectTimeline.impactCampaignStartDate'ProjectString::PROJECT_STORY_IMPACT_IMPACT_CAMPAIGN_START_DATE)
  353.                         // ->setRequired(true) 
  354.                         ->renderAsText()
  355.                         ->setColumns(6)
  356.                         ->hideOnIndex()->addCssClass('impactCampaignStartDate'),
  357.                     DateTimeField::new('filmProjectTimeline.impactCampaignEndDate'ProjectString::PROJECT_STORY_IMPACT_IMPACT_CAMPAIGN_END_DATE)
  358.                         // ->setRequired(true) 
  359.                         ->renderAsText()
  360.                         ->setColumns(6)
  361.                         ->hideOnIndex()->addCssClass('impactCampaignEndDate'),
  362.         
  363.                     FormField::addTab('Fundraising Strategy'),
  364.                     FormField::addPanel('What Is The Total Budget Of Your Project?')->setHelp('Don\'t use any , or . in this form field'),
  365.                     MoneyField::new('filmProjectFunding.developmentBudget'ProjectString::PROJECT_FUNDING_DEVELOPMENT_BUDGET)
  366.                         ->setRequired(false
  367.                         ->addCssClass('film_project-development_budget budgetInput')
  368.                         ->setCurrency('USD')
  369.                         ->setNumDecimals(0)
  370.                         // ->setFormTypeOptions(['grouping' => true])
  371.                         // ->setHelp('Don\'t use any , or . in this form field')
  372.                         ->hideOnIndex()->addCssClass('developmentBudget'),
  373.                     MoneyField::new('filmProjectFunding.productionBudget'ProjectString::PROJECT_FUNDING_PRODUCTION_BUDGET)
  374.                         ->setRequired(false
  375.                         ->addCssClass('film_project-production_budget budgetInput developmentBudget')
  376.                         ->setCurrency('USD')
  377.                         ->setNumDecimals(0)
  378.                         // ->setFormTypeOptions(['grouping' => true])
  379.                         // ->setHelp('Don\'t use any , or . in this form field')
  380.                         ->hideOnIndex()->addCssClass('productionBudget'),
  381.                     MoneyField::new('filmProjectFunding.postProductionBudget'ProjectString::PROJECT_FUNDING_POST_PRODUCTION_BUDGET)
  382.                         ->setRequired(false
  383.                         ->addCssClass('film_project-post_production_budget budgetInput productionBudget')
  384.                         ->setCurrency('USD')
  385.                         ->setNumDecimals(0)
  386.                         // ->setFormTypeOptions(['grouping' => true])
  387.                         // ->setHelp('Don\'t use any , or . in this form field')
  388.                         ->hideOnIndex()->addCssClass('postProductionBudget'),
  389.                     MoneyField::new('filmProjectFunding.outreach'ProjectString::PROJECT_FUNDING_OUTREACH_BUDGET)
  390.                         ->setRequired(false
  391.                         ->addCssClass('film_project-outreach budgetInput postProductionBudget')
  392.                         ->setCurrency('USD')
  393.                         ->setNumDecimals(0)
  394.                         // ->setFormTypeOptions(['grouping' => true])
  395.                         // ->setHelp('Don\'t use any , or . in this form field')
  396.                         ->hideOnIndex()->addCssClass('outreachBudget'),
  397.                     MoneyField::new('filmProjectFunding.totalBudget'ProjectString::PROJECT_FUNDING_TOTAL_BUDGET)
  398.                         ->setRequired(true
  399.                         ->addCssClass('film_project-total_budget outreachBudget')
  400.                         ->setCurrency('USD')
  401.                         ->setNumDecimals(0)
  402.                         // ->setFormTypeOptions(['grouping' => true])
  403.                         // ->setHelp('Don\'t use any , or . in this form field')
  404.                         ->hideOnIndex()->addCssClass('totalBudget'),
  405.         
  406.                     FormField::addPanel('Please Identify Your Confirmed Funding Amounts?')->setHelp('Don\'t use any , or . in this form field'),
  407.                     MoneyField::new('filmProjectFunding.screenAgencies'ProjectString::PROJECT_FUNDING_SCREEN_AGENCIES)
  408.                         ->setCurrency('USD')
  409.                         ->setNumDecimals(0)
  410.                         ->hideOnIndex()
  411.                         // ->setFormTypeOptions(['grouping' => true])
  412.                         // ->setHelp('Don\'t use any , or . in this form field')
  413.                         ->setRequired(false)->addCssClass('screenAgenciesFunding'),
  414.                     MoneyField::new('filmProjectFunding.government'ProjectString::PROJECT_FUNDING_GOVERNMENT)
  415.                         ->setCurrency('USD')
  416.                         ->setNumDecimals(0)
  417.                         ->hideOnIndex()
  418.                         // ->setFormTypeOptions(['grouping' => true])
  419.                         // ->setHelp('Don\'t use any , or . in this form field')
  420.                         ->setRequired(false)->addCssClass('governmentFunding'),
  421.                     MoneyField::new('filmProjectFunding.corporate'ProjectString::PROJECT_FUNDING_CORPORATE)
  422.                         ->setCurrency('USD')
  423.                         ->setNumDecimals(0)
  424.                         // ->setFormTypeOptions(['grouping' => true])
  425.                         // ->setHelp('Don\'t use any , or . in this form field')
  426.                         ->hideOnIndex()
  427.                         ->setRequired(false)->addCssClass('corporateFunding'),
  428.                     MoneyField::new('filmProjectFunding.philantrophy'ProjectString::PROJECT_FUNDING_PHILANTROPHY)
  429.                         ->setCurrency('USD')
  430.                         ->setNumDecimals(0)
  431.                         // ->setFormTypeOptions(['grouping' => true])
  432.                         // ->setHelp('Don\'t use any , or . in this form field')
  433.                         ->hideOnIndex()
  434.                         ->setRequired(false)->addCssClass('philantrophyFunding'),
  435.                     MoneyField::new('filmProjectFunding.crownfunding'ProjectString::PROJECT_FUNDING_CROWNFUNDING)
  436.                         ->setCurrency('USD')
  437.                         ->setNumDecimals(0)
  438.                         // ->setFormTypeOptions(['grouping' => true])
  439.                         // ->setHelp('Don\'t use any , or . in this form field')
  440.                         ->hideOnIndex()
  441.                         ->setRequired(false)->addCssClass('crowdFunding'),
  442.                     MoneyField::new('filmProjectFunding.otherBudget'ProjectString::PROJECT_FUNDING_OTHER_BUDGET)
  443.                         ->setCurrency('USD')
  444.                         ->setNumDecimals(0)
  445.                         // ->setFormTypeOptions(['grouping' => true])
  446.                         // ->setHelp('Don\'t use any , or . in this form field')
  447.                         ->hideOnIndex()
  448.                         ->setRequired(false)->addCssClass('otherFunding'),
  449.                     
  450.                     TextareaField::new('filmProjectFunding.funderList'ProjectString::PROJECT_FUNDING_FUNDER_LIST)
  451.                         ->setColumns(12)
  452.                         ->hideOnIndex()
  453.                         ->setHelp('Separate by comma'),
  454.                     ChoiceField::new('filmProjectFunding.isConfirmedSupportPublic'ProjectString::PROJECT_FUNDING_IS_CONFIRMED_SUPPORT_PUBLIC)
  455.                         ->setRequired(false)
  456.                         ->setChoices(DropdownValues::$yesNoAnswerAlt)
  457.                         ->setColumns(6)->hideOnIndex(),
  458.                     TextareaField::new('filmProjectFunding.fundraisingStrategy'ProjectString::PROJECT_FUNDING_FUNDRAISING_STRATEGY)
  459.                         ->setMaxLength(1000)
  460.                         ->setColumns(12)
  461.                         ->hideOnIndex()
  462.                         ->setRequired(true)->addCssClass('fundraisingStrategy')
  463.                         ->setHelp('Content limited to 1000 characters')
  464.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  465.                     MoneyField::new('filmProjectFunding.fundraisingGoal'ProjectString::PROJECT_FUNDING_FUNDRAISIING_GOAL)
  466.                         ->setCurrency('USD')
  467.                         ->setNumDecimals(0)
  468.                         ->setColumns(8)
  469.                         ->hideOnIndex()
  470.                         // ->setFormTypeOptions(['grouping' => true])
  471.                         // ->setHelp('Don\'t use any , or . in this form field')
  472.                         ->setRequired(true)->addCssClass('fundraisingGoal')->setTextAlign('left'),
  473.                     ChoiceField::new('filmProjectFunding.campaignEndMethod'ProjectString::PROJECT_FUNDING_CAMPAIGN_END_METHOD)->setChoices([
  474.                             'Target date' => 'Target date',
  475.                             'Target goal' => 'Target goal',
  476.                             'Never ends' => 'Never ends',
  477.                         ])
  478.                         ->setColumns(4)
  479.                         ->hideOnIndex()
  480.                         ->setRequired(true)->addCssClass('campaignEndMethod'), 
  481.                     ChoiceField::new('filmProjectFunding.heardFrom'ProjectString::PROJECT_FUNDING_HEARD_FROM)->setChoices([
  482.                             'I have engaged with Documentary Australia before' => 'I have engaged with Documentary Australia before',
  483.                             'Online search' => 'Online search',
  484.                             'Industry body' => 'Industry body',
  485.                             'Word of mouth' => 'Word of mouth',
  486.                             'Documentary Australia Workshop' => 'Documentary Australia Workshop',
  487.                             'Documentary Australia Event' => 'Documentary Australia Event',
  488.                             'Industry event' => 'Industry event',
  489.                             'Documentary credit' => 'Documentary credit',
  490.                             'Other' => 'Other',
  491.                         ])
  492.                         ->renderExpanded()
  493.                         ->allowMultipleChoices()
  494.                         ->setColumns(12)
  495.                         ->hideOnIndex()
  496.                         ->setRequired(true)->addCssClass('howYouHeardAboutDocumentaryAustralia'),
  497.                     ChoiceField::new('filmProjectFunding.isPreviouslySubmitted'ProjectString::PROJECT_FUNDING_HEARD_IS_PREVIOUSLY_SUBMITTED)->setChoices([
  498.                             'Yes' => true,
  499.                             'No' => false,
  500.                             'Don\'t know' => null,  
  501.                         ])
  502.                         ->renderExpanded()
  503.                         ->setColumns(12)
  504.                         ->hideOnIndex()
  505.                         ->setRequired(false)
  506.                         ->setFormTypeOptions(['placeholder' => false])
  507.                         ->addCssClass('projectPreviouslySubmitted'),
  508.                     TextField::new('filmProjectFunding.previouslySubmittedYear'ProjectString::PROJECT_FUNDING_PREVIOUSLY_SUBMITTED_YEAR)
  509.                         ->setColumns(12)->hideOnIndex()
  510.                         ->setFormTypeOptions([
  511.                             'label_html' => true
  512.                         ])
  513.                         ->addCssClass('previouslySubmittedYear'),
  514.                     TextareaField::new('filmProjectFunding.fiscalSponsorshipProject'ProjectString::PROJECT_FUNDING_HEARD_FISCAL_SPONSORSHIP_PROJECT)
  515.                         ->setColumns(12)
  516.                         ->setHelp('Content limited to 250 characters')
  517.                         ->hideOnIndex()
  518.                         ->setRequired(false)->addCssClass('projectTitles'),
  519.         
  520.                     FormField::addTab('Additional Information')->setPermission(Constant::PORTAL_USER_ROLE),
  521.                     AssociationField::new('product')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  522.                         'query_builder' => function (ProductRepository $er) {
  523.                             return $er->createQueryBuilder('e')
  524.                                 ->andWhere('e.category = :donation')
  525.                                 ->setParameter('donation'Constant::DONATION_PRODUCT_TYPE)
  526.                             ;
  527.                         }
  528.                     ]),
  529.                     AssociationField::new('recurringProduct')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  530.                         'query_builder' => function (ProductRepository $er) {
  531.                             return $er->createQueryBuilder('e')
  532.                                 ->andWhere('e.category = :donation')
  533.                                 ->setParameter('donation'Constant::DONATION_PRODUCT_TYPE)
  534.                             ;
  535.                         }
  536.                     ]),
  537.                     AssociationField::new('owner''Project Owner')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  538.                         'query_builder' => function (UserRepository $er) {
  539.                             return $er->createQueryBuilder('e')
  540.                                 ->andWhere('e.roles LIKE :roles')
  541.                                 ->setParameter('roles''%ROLE_PARTNER%')
  542.                             ;
  543.                         }
  544.                     ]),
  545.                     TextField::new('wordpressPassword''Project Password')->setPermission(Constant::ADMIN_ROLE)
  546.                         ->setColumns(12)->hideOnIndex()
  547.                         ->setFormTypeOptions([
  548.                             'label_html' => true,
  549.                             'disabled' => 'disabled'
  550.                         ])
  551.                         ->addCssClass('projectPassword'),
  552.                 ];
  553.             break;
  554.             case Constant::PROJECT_EDIT_FORM:
  555.                 $form = [
  556.                     FormField::addTab('Administrator'),
  557.                     HiddenField::new('status')->hideOnIndex()->hideOnDetail(),
  558.                     HiddenField::new('tabActive')->hideOnIndex()->hideOnDetail(),
  559.                     ChoiceField::new('filmProjectFunding.approvedFiscal'ProjectString::PROJECT_FUNDING_APPROVE_FISCAL)->setChoices([
  560.                             'Yes' => true,
  561.                         ])
  562.                         ->renderExpanded()
  563.                         ->setColumns(12)
  564.                         ->hideOnIndex()
  565.                         ->setRequired(true)->addCssClass('fiscalSponsorship')
  566.                         ->setFormTypeOptions([
  567.                             'label_html' => true
  568.                         ]),
  569.         
  570.                     TextField::new('filmProjectAdmin.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('administratorFirstName'),
  571.                     TextField::new('filmProjectAdmin.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('administratorLastName'),
  572.                     TextField::new('filmProjectAdmin.address'ProjectString::PROJECT_MEMBER_ADDRESS)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorAddress'),
  573.                     TextField::new('filmProjectAdmin.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorCity'),
  574.                     ChoiceField::new('filmProjectAdmin.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorState')->setChoices(DropdownValues::$states),
  575.                     TextField::new('filmProjectAdmin.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorPostcode')->setFormTypeOptions([
  576.                         'attr' => [
  577.                             'maxlength' => 4,
  578.                             'minlength' => 4,
  579.                         ]
  580.                     ]),
  581.                     TextField::new('filmProjectAdmin.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  582.                     TelephoneField::new('filmProjectAdmin.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('administratorTelephone'),
  583.                     TextField::new('filmProjectAdmin.email'ProjectString::PROJECT_MEMBER_EMAIL)->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('administratorEmail'),
  584.                     ChoiceField::new('filmProjectAdmin.gender'ProjectString::PROJECT_MEMBER_GENDER)->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('administratorGender'),
  585.                     ChoiceField::new('filmProjectAdmin.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(true)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('administratorIsDiverse'),
  586.                     ChoiceField::new('filmProjectAdmin.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(true)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('administratorIsAborigin'),
  587.         
  588.                     FormField::addTab('Film Team'),
  589.         
  590.                     FormField::addPanel('Producer\'s Details')->setHelp('one name only, further team members can be added below'),
  591.                     TextField::new('filmProjectProducer.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('producerFirstName'),
  592.                     TextField::new('filmProjectProducer.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('producerLastName'),
  593.                     TextareaField::new('filmProjectProducer.biography'ProjectString::PROJECT_MEMBER_BIOGRAPHY)->setRequired(true)->setMaxLength(1000)->setColumns(12)->hideOnIndex()->setHelp('Content limited to 1000 characters')->addCssClass('producerBio')->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  594.                     TextField::new('filmProjectProducer.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  595.                     TextField::new('filmProjectProducer.website'ProjectString::PROJECT_MEMBER_WEBSITE)->setColumns(3)->hideOnIndex(),
  596.                     TextField::new('filmProjectProducer.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerCity'),
  597.                     ChoiceField::new('filmProjectProducer.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerState')->setChoices(DropdownValues::$states),
  598.                     TextField::new('filmProjectProducer.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerPostcode')->setFormTypeOptions([
  599.                         'attr' => [
  600.                             'maxlength' => 4,
  601.                             'minlength' => 4,
  602.                         ]
  603.                     ]),
  604.                     TextField::new('filmProjectProducer.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('producerTelephone'),
  605.                     TextField::new('filmProjectProducer.email''Email')->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('producerEmail'),
  606.                     ChoiceField::new('filmProjectProducer.gender''Gender')->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('producerGender'),
  607.                     ChoiceField::new('filmProjectProducer.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('producerIsDiverse'),
  608.                     ChoiceField::new('filmProjectProducer.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('producerIsAborigin'),
  609.         
  610.                     FormField::addPanel('Director\'s Details')->setHelp('one name only, further team members can be added below'),
  611.                     TextField::new('filmProjectDirector.name'ProjectString::PROJECT_MEMBER_FIRST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('directorFirstName'),
  612.                     TextField::new('filmProjectDirector.lastName'ProjectString::PROJECT_MEMBER_LAST_NAME)->setRequired(true)->setColumns(6)->hideOnIndex()->addCssClass('directorLastName'),
  613.                     TextareaField::new('filmProjectDirector.biography'ProjectString::PROJECT_MEMBER_BIOGRAPHY)->setRequired(true)->setMaxLength(1000)->setColumns(12)->hideOnIndex()->setHelp('Content limited to 1000 characters')->addCssClass('directorBio')->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  614.                     TextField::new('filmProjectDirector.organisation'ProjectString::PROJECT_MEMBER_ORGANISATION)->setColumns(9)->hideOnIndex(),
  615.                     TextField::new('filmProjectDirector.website'ProjectString::PROJECT_MEMBER_WEBSITE)->setColumns(3)->hideOnIndex(),
  616.                     TextField::new('filmProjectDirector.city'ProjectString::PROJECT_MEMBER_CITY)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorCity'),
  617.                     ChoiceField::new('filmProjectDirector.state'ProjectString::PROJECT_MEMBER_STATE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorState')->setChoices(DropdownValues::$states),
  618.                     TextField::new('filmProjectDirector.postcode'ProjectString::PROJECT_MEMBER_POSTCODE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorPostcode')->setFormTypeOptions([
  619.                         'attr' => [
  620.                             'maxlength' => 4,
  621.                             'minlength' => 4,
  622.                         ]
  623.                     ]),
  624.                     TextField::new('filmProjectDirector.telephone'ProjectString::PROJECT_MEMBER_TELEPHONE)->setRequired(true)->setColumns(3)->hideOnIndex()->addCssClass('directorTelephone'),
  625.                     TextField::new('filmProjectDirector.email''Email')->setRequired(true)->setColumns(9)->hideOnIndex()->addCssClass('directorEmail'),
  626.                     ChoiceField::new('filmProjectDirector.gender''Gender')->setRequired(true)->setChoices(DropdownValues::$gender)->setColumns(3)->hideOnIndex()->addCssClass('directorGender'),
  627.                     ChoiceField::new('filmProjectDirector.isLingualDiverse'ProjectString::PROJECT_MEMBER_IS_LINGUAL_DIVERSE)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('directorIsDiverse'),
  628.                     ChoiceField::new('filmProjectDirector.isIslanderOrigin'ProjectString::PROJECT_MEMBER_IS_ISLANDER_ORIGIN)->setRequired(false)->setChoices(DropdownValues::$yesNoAnswer)->setColumns(6)->hideOnIndex()->addCssClass('directorIsAborigin'),
  629.         
  630.                     FormField::addPanel('Additional Team Member\'s Details'),
  631.                     CollectionField::new('filmProjectMembers''Team Member\'s Details')
  632.                         ->setEntryIsComplex()
  633.                         ->setEntryType(FilmApplicationMemberType::class)
  634.                         // ->renderExpanded()
  635.                         ->setColumns('col-12')
  636.                         ->addCssClass('custom-collection-form')
  637.                         ->hideOnIndex(),
  638.                     
  639.                     FormField::addTab('Project Details'),
  640.                     TextField::new('title'ProjectString::PROJECT_DETAILS_TITLE)->setRequired(true)->setColumns(12)->hideOnIndex()->addCssClass('projectTitle'),
  641.                     ChoiceField::new('productionStage'ProjectString::PROJECT_DETAILS_PRODUCTION_STAGE)->setRequired(true)->setChoices([
  642.                         'Development' => 'Development',
  643.                         'Production' => 'Production',
  644.                         'Post-production' => 'Post-Production',
  645.                         'Completed' => 'Film Complete',
  646.                         'Outreach / Impact' => 'Outreach',
  647.                     ])->setColumns(6)->hideOnIndex()->addCssClass('productionStage'),
  648.                     ChoiceField::new('productionType'ProjectString::PROJECT_DETAILS_PRODUCTION_TYPE)->setRequired(true)->setChoices(DropdownValues::FILM_PRODUCTION_TYPES)->setColumns(6)->hideOnIndex()->addCssClass('productionType'),
  649.                     ChoiceField::new('filmProjectDetails.isEpisodes'ProjectString::PROJECT_DETAILS_EPISODES)->setChoices([
  650.                         'Yes' => true,
  651.                         'No' => false,
  652.                     ])->renderExpanded()->setColumns(2)->hideOnIndex()
  653.                     ->setFormTypeOptions(['placeholder' => false]),
  654.                     IntegerField::new('filmProjectDetails.episodeNumber'ProjectString::PROJECT_DETAILS_NUMBER_OF_EPISODES)->setColumns(4)->hideOnIndex()->setFormTypeOptions([
  655.                         'attr' => [
  656.                             'min' => 0,
  657.                             "onInput" => "this.value = Math.abs(this.value)"
  658.                         ]
  659.                     ]),
  660.                     ChoiceField::new('filmProjectDetails.isShortFilm'ProjectString::PROJECT_DETAILS_IS_SHORT_FILM)->setChoices([
  661.                         'Yes' => true,
  662.                         'No' => false,
  663.                     ])->renderExpanded()->setColumns(2)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  664.                     IntegerField::new('filmProjectDetails.shortFilmLength'ProjectString::PROJECT_DETAILS_SHORT_FILM_LENGTH)->setColumns(4)->hideOnIndex()->addCssClass('shortFilmLength')->setFormTypeOptions([
  665.                         'attr' => [
  666.                             'min' => 0,
  667.                             "onInput" => "this.value = Math.abs(this.value)"
  668.                         ]
  669.                     ]),
  670.                     IntegerField::new('filmProjectDetails.productionLength'ProjectString::PROJECT_DETAILS_PRODUCTION_LENGTH)->setRequired(true)->setColumns(8)->hideOnIndex()->addCssClass('lengthOfProductionInMinutes'),
  671.                     ImageField::new('filmProjectDetails.projectHeroImage'ProjectString::PROJECT_DETAILS_PROJECT_HERO_IMAGE)
  672.                         // ->setRequired(true)
  673.                         ->setBasePath('uploads/projects')
  674.                         ->setUploadDir('public/uploads/projects')
  675.                         ->setColumns(4)
  676.                         ->hideOnIndex()
  677.                         ->addCssClass('projectHeroImage')->setFormTypeOptions([
  678.                             'label_attr' => ['class' => 'required'],
  679.                         ])
  680.                         ->setHelp('Recommended resolution is 1280 x 720 and maximum file is limited to 5MB'),
  681.                     UrlField::new('filmProjectDetails.projectTrailerLink'ProjectString::PROJECT_DETAILS_TRAILER_LINK)->setColumns(8)->hideOnIndex(),
  682.                     TextField::new('filmProjectDetails.projectTrailerPassword'ProjectString::PROJECT_DETAILS_TRAILER_PASSWORD)
  683.                         ->setColumns(4)
  684.                         // ->setFormType(PasswordType::class)
  685.                         ->hideOnIndex(),
  686.                     ChoiceField::new('filmProjectDetails.isCompleted'ProjectString::PROJECT_DETAILS_IS_COMPLETED)->setChoices([
  687.                         'Yes' => true,
  688.                         'No' => false,
  689.                     ])->renderExpanded()->setColumns(4)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  690.                     TextField::new('filmProjectDetails.projectCompleteLink'ProjectString::PROJECT_DETAILS_COMPLETE_LINK)->setColumns(8)->hideOnIndex(),
  691.                     TextField::new('filmProjectDetails.screenerPassword'ProjectString::PROJECT_DETAILS_SCREENER_PASSWORD)
  692.                         ->setColumns(12)
  693.                         // ->setFormType(PasswordType::class)
  694.                         ->hideOnIndex(),
  695.                     // ChoiceField::new('filmProjectDetails.isDisplayDonation', ProjectString::PROJECT_DETAILS_DISPLAY_DONATION)->setChoices([
  696.                     //         'Yes' => true,
  697.                     //         'No' => false,
  698.                     // ])->renderExpanded()->setColumns(8)->hideOnIndex()->setFormTypeOptions(['placeholder' => false]),
  699.         
  700.                     // SOCIAL MEDIA
  701.                     FormField::addPanel('Social media'),
  702.                     TextField::new('filmProjectDetails.twitter'ProjectString::PROJECT_DETAILS_TWITTER)
  703.                         ->setColumns(6)
  704.                         ->hideOnIndex(),
  705.                     TextField::new('filmProjectDetails.instagram'ProjectString::PROJECT_DETAILS_INSTAGRAM)
  706.                         ->setColumns(6)
  707.                         ->hideOnIndex(),
  708.                     TextField::new('filmProjectDetails.facebook'ProjectString::PROJECT_DETAILS_FACEBOOK)
  709.                         ->setColumns(6)
  710.                         ->hideOnIndex(),
  711.                     TextField::new('filmProjectDetails.youtube'ProjectString::PROJECT_DETAILS_YOUTUBE)
  712.                         ->setColumns(6)
  713.                         ->hideOnIndex(),
  714.                     TextField::new('filmProjectDetails.vimeo'ProjectString::PROJECT_DETAILS_VIMEO)
  715.                         ->setColumns(6)
  716.                         ->hideOnIndex(),
  717.                     TextField::new('filmProjectDetails.website'ProjectString::PROJECT_DETAILS_WEBSITE)
  718.                         ->setColumns(6)
  719.                         ->hideOnIndex(),
  720.         
  721.         
  722.         
  723.                     FormField::addTab('Story & Impact'),
  724.                     TextareaField::new('filmProjectStoryImpact.synopsis'ProjectString::PROJECT_STORY_IMPACT_SYNOPSIS)
  725.                         ->addCssClass('synopsis')
  726.                         ->setRequired(true)
  727.                         // ->setMaxLength(2000)
  728.                         ->setColumns(12)
  729.                         ->hideOnIndex()
  730.                         ->setHelp('Content limited to 2000 characters')
  731.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 2000]])
  732.                     ,
  733.                     TextareaField::new('filmProjectStoryImpact.logline'ProjectString::PROJECT_STORY_IMPACT_LOGLINE)
  734.                         ->setRequired(true)
  735.                         // ->setMaxLength(120)
  736.                         ->setColumns(12)
  737.                         ->hideOnIndex()->addCssClass('logline')
  738.                         ->setHelp('Content limited to 120 characters')
  739.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 120]])
  740.                     ,
  741.                     TextareaField::new('filmProjectStoryImpact.issueAddressed'ProjectString::PROJECT_STORY_IMPACT_ISSUE_ADDRESSED)
  742.                         ->setRequired(true)
  743.                         // ->setMaxLength(1000)
  744.                         ->setColumns(12)
  745.                         ->hideOnIndex()
  746.                         ->addCssClass('issueAddressed')
  747.                         ->setHelp('Content limited to 1000 characters')
  748.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 1000]])
  749.                     ,
  750.                     TextareaField::new('filmProjectStoryImpact.creativeTreatment'ProjectString::PROJECT_STORY_IMPACT_CREATIVE_TREATMENT)
  751.                         ->setRequired(true)
  752.                         // ->setMaxLength(1000)
  753.                         ->setColumns(12)
  754.                         ->hideOnIndex()
  755.                         ->addCssClass('creativeTreatment')
  756.                         ->setHelp('Content limited to 1000 characters')
  757.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 1000]])
  758.                     ,
  759.                     ChoiceField::new('filmProjectStoryImpact.primaryImpactArea'ProjectString::PROJECT_STORY_IMPACT_PRIMARY_IMPACT_AREA)->setChoices(DropdownValues::IMPACT_VALUES)
  760.                         ->setRequired(true)
  761.                         ->renderExpanded()
  762.                         ->setColumns(12)
  763.                         ->hideOnIndex()->addCssClass('primaryImpactArea'),
  764.                     ChoiceField::new('filmProjectStoryImpact.secondaryImpactArea'ProjectString::PROJECT_STORY_IMPACT_SECOND_IMPACT_AREA)->setChoices(DropdownValues::IMPACT_VALUES)
  765.                         ->setRequired(false)
  766.                         ->renderExpanded()
  767.                         ->allowMultipleChoices()
  768.                         ->setColumns(12)
  769.                         ->hideOnIndex()->addCssClass('secondaryImpactArea'),
  770.                     ChoiceField::new('filmProjectStoryImpact.topicCovered'ProjectString::PROJECT_STORY_IMPACT_TOPIC_COVERED)->setChoices(DropdownValues::TOPIC_VALUES// TODO: change values of this topic
  771.                         // ->renderExpanded()
  772.                         ->setRequired(true)
  773.                         ->allowMultipleChoices()
  774.                         ->setColumns(12)
  775.                         ->hideOnIndex()
  776.                         ->addCssClass('topicCovered'),
  777.                     TextareaField::new('filmProjectStoryImpact.impactVisionStatement'ProjectString::PROJECT_STORY_IMPACT_IMPACT_VISION_STATEMENT)
  778.                         ->setRequired(true)
  779.                         ->setMaxLength(1000)
  780.                         ->setColumns(12)
  781.                         ->hideOnIndex()->addCssClass('impactVisionStatement')
  782.                         ->setHelp('Content limited to 1000 characters')
  783.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  784.                     ChoiceField::new('filmProjectStoryImpact.outcomes'ProjectString::PROJECT_STORY_IMPACT_OUTCOMES)->setChoices(DropdownValues::OUTCOME_VALUES)
  785.                         ->setRequired(true)
  786.                         ->renderExpanded()
  787.                         ->allowMultipleChoices()
  788.                         ->setColumns(12)
  789.                         ->hideOnIndex()->addCssClass('filmOutcomes'),
  790.                     TextareaField::new('filmProjectStoryImpact.ourcomeInformation'ProjectString::PROJECT_STORY_IMPACT_OUTCOMES_INFORMATION)
  791.                         ->addCssClass('filmOutcomesInfo')
  792.                         ->setRequired(true)
  793.                         ->setMaxLength(1000)
  794.                         ->setColumns(12)
  795.                         ->hideOnIndex()
  796.                         ->setHelp('Content limited to 1000 characters')
  797.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  798.                     TextField::new('filmProjectStoryImpact.audiences'ProjectString::PROJECT_STORY_IMPACT_AUDIENCES)
  799.                         ->setRequired(true)
  800.                         ->setColumns(12)
  801.                         ->hideOnIndex()->addCssClass('filmAudiences'),
  802.                     TextareaField::new('filmProjectStoryImpact.relationshipAccess'ProjectString::PROJECT_STORY_IMPACT_RELATIONSHIP_ACCESS)
  803.                         ->setRequired(false)
  804.                         // ->setMaxLength(1000)
  805.                         ->setColumns(12)
  806.                         ->hideOnIndex()->addCssClass('communityRelationship')
  807.                         ->setHelp('Content limited to 1000 characters')
  808.                         // ->setFormTypeOptions(['attr' => ['maxlength' => 1000]])
  809.                     ,
  810.                     TextareaField::new('filmProjectStoryImpact.whoBenefit'ProjectString::PROJECT_STORY_IMPACT_WHO_BENEFIT)
  811.                         ->setRequired(true)
  812.                         ->setMaxLength(1000)    
  813.                         ->setColumns(12)
  814.                         ->hideOnIndex()->addCssClass('filmBenefits')
  815.                         ->setHelp('Content limited to 1000 characters')
  816.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),  
  817.                     ChoiceField::new('filmProjectStoryImpact.confirmedRole'ProjectString::PROJECT_STORY_IMPACT_CONFIRMED_ROLE)->setChoices(DropdownValues::ROLE_VALUES)
  818.                         ->setRequired(false)
  819.                         ->renderExpanded()
  820.                         ->allowMultipleChoices()
  821.                         ->setColumns(12)
  822.                         ->hideOnIndex()->addCssClass('role'),
  823.                     TextField::new('filmProjectStoryImpact.confirmedRoleName'ProjectString::PROJECT_STORY_IMPACT_CONFIRMED_ROLE_NAME)
  824.                         ->setColumns(12)
  825.                         ->hideOnIndex(),
  826.                     TextareaField::new('filmProjectStoryImpact.callToAction'ProjectString::PROJECT_STORY_IMPACT_CALL_TO_ACTION)
  827.                         ->setRequired(true)
  828.                         ->setMaxLength(1000)
  829.                         ->setColumns(12)
  830.                         ->hideOnIndex()->addCssClass('callsOfAction')
  831.                         ->setHelp('Content limited to 1000 characters')
  832.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  833.                     ChoiceField::new('filmProjectStoryImpact.isFilmImpactPartner'ProjectString::PROJECT_STORY_IMPACT_IS_FILM_IMPACT_PARTNER)->setChoices([
  834.                             'Yes' => true,
  835.                             'No' => false,
  836.                         ])
  837.                         ->renderExpanded()
  838.                         ->setColumns(12)->hideOnIndex(), 
  839.                     // TextField::new('filmProjectStoryImpact.partnerName', ProjectString::PROJECT_STORY_IMPACT_PARTNER_NAME)
  840.                     //     ->setColumns(12)->hideOnIndex()
  841.                     //     ->setFormTypeOptions([
  842.                     //         'label_html' => true
  843.                     //     ])
  844.                     //     ->setHelp('Separate with comma'),
  845.                     
  846.                     FormField::addPanel('Proposed Timeline'),
  847.                     DateTimeField::new('filmProjectTimeline.developmentTimeline'ProjectString::PROJECT_STORY_IMPACT_DEVELOPMENT_TIMELINE)
  848.                         ->setRequired(true
  849.                         ->renderAsText()
  850.                         ->setColumns(6)
  851.                         ->hideOnIndex()->addCssClass('developmentTimeline'),
  852.                     DateTimeField::new('filmProjectTimeline.productionTimeline'ProjectString::PROJECT_STORY_IMPACT_PRODUCTION_TIMELINE)
  853.                         ->setRequired(true
  854.                         ->renderAsText()
  855.                         ->setColumns(6)
  856.                         ->hideOnIndex()->addCssClass('productionTimeline'),
  857.                     DateTimeField::new('filmProjectTimeline.postProductionTimeline'ProjectString::PROJECT_STORY_IMPACT_POST_PRODUCTION_TIMELINE)
  858.                         ->setRequired(true
  859.                         ->renderAsText()
  860.                         ->setColumns(6)
  861.                         ->hideOnIndex()->addCssClass('postProductionTimeline'),
  862.                     DateTimeField::new('filmProjectTimeline.completionTimeline'ProjectString::PROJECT_STORY_IMPACT_COMPLETION_TIMELINE)
  863.                         ->setRequired(true
  864.                         ->renderAsText()
  865.                         ->renderAsText()
  866.                         ->setColumns(6)
  867.                         ->hideOnIndex()->addCssClass('completionTimeline'),
  868.         
  869.                     FormField::addPanel('Fundraising Campaign'),
  870.                     DateTimeField::new('filmProjectTimeline.fundraisingCampaignStartDate'ProjectString::PROJECT_STORY_IMPACT_FUNDRAISING_CAMPAIGN_START_DATE)
  871.                         ->setRequired(true
  872.                         ->renderAsText()
  873.                         ->setColumns(6)
  874.                         ->hideOnIndex()->addCssClass('campaignStartDate'),
  875.                     DateTimeField::new('filmProjectTimeline.fundraisingCampaignEndDate'ProjectString::PROJECT_STORY_IMPACT_FUNDRAISING_CAMPAIGN_END_DATE)
  876.                         ->setRequired(true
  877.                         ->renderAsText()
  878.                         ->setColumns(6)
  879.                         ->hideOnIndex()->addCssClass('campaignEndDate'),
  880.         
  881.                     FormField::addPanel('Impact Campaign'),
  882.                     DateTimeField::new('filmProjectTimeline.impactCampaignStartDate'ProjectString::PROJECT_STORY_IMPACT_IMPACT_CAMPAIGN_START_DATE)
  883.                         // ->setRequired(true) 
  884.                         ->renderAsText()
  885.                         ->setColumns(6)
  886.                         ->hideOnIndex()->addCssClass('impactCampaignStartDate'),
  887.                     DateTimeField::new('filmProjectTimeline.impactCampaignEndDate'ProjectString::PROJECT_STORY_IMPACT_IMPACT_CAMPAIGN_END_DATE)
  888.                         // ->setRequired(true) 
  889.                         ->renderAsText()
  890.                         ->setColumns(6)
  891.                         ->hideOnIndex()->addCssClass('impactCampaignEndDate'),
  892.         
  893.                     FormField::addTab('Fundraising Strategy'),
  894.                     FormField::addPanel('What Is The Total Budget Of Your Project?')->setHelp('Don\'t use any , or . in this form field'),
  895.                     MoneyField::new('filmProjectFunding.developmentBudget'ProjectString::PROJECT_FUNDING_DEVELOPMENT_BUDGET)
  896.                         ->setRequired(false
  897.                         ->addCssClass('film_project-development_budget budgetInput ')
  898.                         ->setCurrency('USD')
  899.                         ->setNumDecimals(0)
  900.                         // ->setFormTypeOptions(['grouping' => true])
  901.                         // ->setHelp('Don\'t use any , or . in this form field')
  902.                         ->hideOnIndex()->addCssClass('developmentBudget'),
  903.                     MoneyField::new('filmProjectFunding.productionBudget'ProjectString::PROJECT_FUNDING_PRODUCTION_BUDGET)
  904.                         ->setRequired(false
  905.                         ->addCssClass('film_project-production_budget budgetInput')
  906.                         ->setCurrency('USD')
  907.                         ->setNumDecimals(0)
  908.                         // ->setFormTypeOptions(['grouping' => true])
  909.                         // ->setHelp('Don\'t use any , or . in this form field')
  910.                         ->hideOnIndex()->addCssClass('productionBudget'),
  911.                     MoneyField::new('filmProjectFunding.postProductionBudget'ProjectString::PROJECT_FUNDING_POST_PRODUCTION_BUDGET)
  912.                         ->setRequired(false
  913.                         ->addCssClass('film_project-post_production_budget budgetInput')
  914.                         ->setCurrency('USD')
  915.                         ->setNumDecimals(0)
  916.                         // ->setFormTypeOptions(['grouping' => true])
  917.                         // ->setHelp('Don\'t use any , or . in this form field')
  918.                         ->hideOnIndex()->addCssClass('postProductionBudget'),
  919.                     MoneyField::new('filmProjectFunding.outreach'ProjectString::PROJECT_FUNDING_OUTREACH_BUDGET)
  920.                         ->setRequired(false
  921.                         ->addCssClass('film_project-outreach budgetInput')
  922.                         ->setCurrency('USD')
  923.                         ->setNumDecimals(0)
  924.                         // ->setFormTypeOptions(['grouping' => true])
  925.                         // ->setHelp('Don\'t use any , or . in this form field')
  926.                         ->hideOnIndex()->addCssClass('outreachBudget'),
  927.                     MoneyField::new('filmProjectFunding.totalBudget'ProjectString::PROJECT_FUNDING_TOTAL_BUDGET)
  928.                         ->setRequired(true
  929.                         ->addCssClass('film_project-total_budget')
  930.                         ->setCurrency('USD')
  931.                         ->setNumDecimals(0)
  932.                         // ->setFormTypeOptions(['grouping' => true])
  933.                         // ->setHelp('Don\'t use any , or . in this form field')
  934.                         ->hideOnIndex()->addCssClass('totalBudget'),
  935.         
  936.                     FormField::addPanel('Please Identify Your Confirmed Funding Amounts?')->setHelp('Don\'t use any , or . in this form field'),
  937.                     MoneyField::new('filmProjectFunding.screenAgencies'ProjectString::PROJECT_FUNDING_SCREEN_AGENCIES)
  938.                         ->setCurrency('USD')
  939.                         ->hideOnIndex()
  940.                         // ->setFormTypeOptions(['grouping' => true])
  941.                         // ->setHelp('Don\'t use any , or . in this form field')
  942.                         ->setRequired(false)->addCssClass('screenAgenciesFunding'),
  943.                     MoneyField::new('filmProjectFunding.government'ProjectString::PROJECT_FUNDING_GOVERNMENT)
  944.                         ->setCurrency('USD')
  945.                         ->hideOnIndex()
  946.                         // ->setFormTypeOptions(['grouping' => true])
  947.                         // ->setHelp('Don\'t use any , or . in this form field')
  948.                         ->setRequired(false)->addCssClass('governmentFunding'),
  949.                     MoneyField::new('filmProjectFunding.corporate'ProjectString::PROJECT_FUNDING_CORPORATE)
  950.                         ->setCurrency('USD')
  951.                         ->hideOnIndex()
  952.                         // ->setFormTypeOptions(['grouping' => true])
  953.                         // ->setHelp('Don\'t use any , or . in this form field')
  954.                         ->setRequired(false)->addCssClass('corporateFunding'),
  955.                     MoneyField::new('filmProjectFunding.philantrophy'ProjectString::PROJECT_FUNDING_PHILANTROPHY)
  956.                         ->setCurrency('USD')
  957.                         ->hideOnIndex()
  958.                         // ->setFormTypeOptions(['grouping' => true])
  959.                         // ->setHelp('Don\'t use any , or . in this form field')
  960.                         ->setRequired(false)->addCssClass('philantrophyFunding'),
  961.                     MoneyField::new('filmProjectFunding.crownfunding'ProjectString::PROJECT_FUNDING_CROWNFUNDING)
  962.                         ->setCurrency('USD')
  963.                         ->hideOnIndex()
  964.                         // ->setFormTypeOptions(['grouping' => true])
  965.                         // ->setHelp('Don\'t use any , or . in this form field')
  966.                         ->setRequired(false)->addCssClass('crowdFunding'),
  967.                     MoneyField::new('filmProjectFunding.otherBudget'ProjectString::PROJECT_FUNDING_OTHER_BUDGET)
  968.                         ->setCurrency('USD')
  969.                         ->hideOnIndex()
  970.                         // ->setFormTypeOptions(['grouping' => true])
  971.                         // ->setHelp('Don\'t use any , or . in this form field')
  972.                         ->setRequired(false)->addCssClass('otherFunding'),
  973.                     
  974.                     TextareaField::new('filmProjectFunding.funderList'ProjectString::PROJECT_FUNDING_FUNDER_LIST)
  975.                         ->setColumns(12)
  976.                         ->hideOnIndex()
  977.                         ->setHelp('Separate by comma'),
  978.                     ChoiceField::new('filmProjectFunding.isConfirmedSupportPublic'ProjectString::PROJECT_FUNDING_IS_CONFIRMED_SUPPORT_PUBLIC)
  979.                         ->setRequired(false)
  980.                         ->setChoices(DropdownValues::$yesNoAnswerAlt)
  981.                         ->setColumns(6)->hideOnIndex(),
  982.                     TextareaField::new('filmProjectFunding.fundraisingStrategy'ProjectString::PROJECT_FUNDING_FUNDRAISING_STRATEGY)
  983.                         ->setMaxLength(1000)
  984.                         ->setColumns(12)
  985.                         ->hideOnIndex()
  986.                         ->setRequired(true)->addCssClass('fundraisingStrategy')
  987.                         ->setHelp('Content limited to 1000 characters')
  988.                         ->setFormTypeOptions(['attr' => ['maxlength' => 1000]]),
  989.                     MoneyField::new('filmProjectFunding.fundraisingGoal'ProjectString::PROJECT_FUNDING_FUNDRAISIING_GOAL)
  990.                         ->setCurrency('USD')   
  991.                         ->setNumDecimals(0
  992.                         ->setColumns(8)
  993.                         ->hideOnIndex()
  994.                         // ->setFormTypeOptions(['grouping' => true])
  995.                         // ->setHelp('Don\'t use any , or . in this form field')
  996.                         ->setRequired(true)->addCssClass('fundraisingGoal')->setTextAlign('left'),
  997.                     ChoiceField::new('filmProjectFunding.campaignEndMethod'ProjectString::PROJECT_FUNDING_CAMPAIGN_END_METHOD)->setChoices([
  998.                             'Target date' => 'Target date',
  999.                             'Target goal' => 'Target goal',
  1000.                             'Never ends' => 'Never ends',
  1001.                         ])
  1002.                         ->setColumns(4)
  1003.                         ->hideOnIndex()
  1004.                         ->setRequired(true)->addCssClass('campaignEndMethod'), 
  1005.                     ChoiceField::new('filmProjectFunding.heardFrom'ProjectString::PROJECT_FUNDING_HEARD_FROM)->setChoices([
  1006.                             'I have engaged with Documentary Australia before' => 'I have engaged with Documentary Australia before',
  1007.                             'Online search' => 'Online search',
  1008.                             'Industry body' => 'Industry body',
  1009.                             'Word of mouth' => 'Word of mouth',
  1010.                             'Documentary Australia Workshop' => 'Documentary Australia Workshop',
  1011.                             'Documentary Australia Event' => 'Documentary Australia Event',
  1012.                             'Industry event' => 'Industry event',
  1013.                             'Documentary credit' => 'Documentary credit',
  1014.                             'Other' => 'Other',
  1015.                         ])
  1016.                         ->renderExpanded()
  1017.                         ->allowMultipleChoices()
  1018.                         ->setColumns(12)
  1019.                         ->hideOnIndex()
  1020.                         ->setRequired(true)->addCssClass('howYouHeardAboutDocumentaryAustralia'),
  1021.                     ChoiceField::new('filmProjectFunding.isPreviouslySubmitted'ProjectString::PROJECT_FUNDING_HEARD_IS_PREVIOUSLY_SUBMITTED)->setChoices([
  1022.                             'Yes' => true,
  1023.                             'No' => false,
  1024.                             'Don\'t know' => null,  
  1025.                         ])
  1026.                         ->renderExpanded()
  1027.                         ->setColumns(12)
  1028.                         ->hideOnIndex()
  1029.                         ->setRequired(false)
  1030.                         ->setFormTypeOptions(['placeholder' => false])
  1031.                         ->addCssClass('projectPreviouslySubmitted'),
  1032.                     TextField::new('filmProjectFunding.previouslySubmittedYear'ProjectString::PROJECT_FUNDING_PREVIOUSLY_SUBMITTED_YEAR)
  1033.                         ->setColumns(12)->hideOnIndex()
  1034.                         ->setFormTypeOptions([
  1035.                             'label_html' => true
  1036.                         ])
  1037.                         ->addCssClass('previouslySubmittedYear'),
  1038.                     TextareaField::new('filmProjectFunding.fiscalSponsorshipProject'ProjectString::PROJECT_FUNDING_HEARD_FISCAL_SPONSORSHIP_PROJECT)
  1039.                         ->setColumns(12)
  1040.                         ->setHelp('Content limited to 250 characters')
  1041.                         ->hideOnIndex()
  1042.                         ->setRequired(false)->addCssClass('projectTitles'),
  1043.         
  1044.                     FormField::addTab('Additional Information')->setPermission(Constant::ADMIN_ROLE),
  1045.                     AssociationField::new('product')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  1046.                         'query_builder' => function (ProductRepository $er) {
  1047.                             return $er->createQueryBuilder('e')
  1048.                                 ->andWhere('e.category = :donation')
  1049.                                 ->setParameter('donation'Constant::DONATION_PRODUCT_TYPE)
  1050.                             ;
  1051.                         }
  1052.                     ]),
  1053.                     AssociationField::new('recurringProduct')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  1054.                         'query_builder' => function (ProductRepository $er) {
  1055.                             return $er->createQueryBuilder('e')
  1056.                                 ->andWhere('e.category = :donation')
  1057.                                 ->setParameter('donation'Constant::DONATION_PRODUCT_TYPE)
  1058.                             ;
  1059.                         }
  1060.                     ]),
  1061.                     AssociationField::new('owner''Project Owner')->setColumns(4)->setPermission(Constant::ADMIN_ROLE)->hideOnIndex()->setFormTypeOptions([
  1062.                         'query_builder' => function (UserRepository $er) {
  1063.                             return $er->createQueryBuilder('e')
  1064.                                 ->andWhere('e.roles LIKE :roles')
  1065.                                 ->setParameter('roles''%ROLE_PARTNER%')
  1066.                             ;
  1067.                         }
  1068.                     ]),
  1069.                     TextField::new('wordpressPassword''Project Password')->setPermission(Constant::ADMIN_ROLE)
  1070.                         ->setColumns(12)->hideOnIndex()
  1071.                         ->setFormTypeOptions([
  1072.                             'label_html' => true,
  1073.                             'disabled' => 'disabled'
  1074.                         ])
  1075.                         ->addCssClass('projectPassword'),
  1076.                 ];
  1077.             break;
  1078.         }
  1079.         return $form;
  1080.     }
  1081. }