vendor/se7enxweb/admin-ui/src/lib/Form/Type/Content/Draft/ContentEditType.php line 24

Open in your IDE?
  1. <?php
  2. /**
  3. * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. */
  6. declare(strict_types=1);
  7. namespace Ibexa\AdminUi\Form\Type\Content\Draft;
  8. use Ibexa\AdminUi\Form\Data\Content\Draft\ContentEditData;
  9. use Ibexa\AdminUi\Form\Type\ChoiceList\Loader\LanguageChoiceLoader;
  10. use Ibexa\AdminUi\Form\Type\Content\ContentInfoType;
  11. use Ibexa\AdminUi\Form\Type\Content\LocationType;
  12. use Ibexa\AdminUi\Form\Type\Content\VersionInfoType;
  13. use Ibexa\AdminUi\Form\Type\Language\LanguageChoiceType;
  14. use Ibexa\Contracts\Core\Repository\LanguageService;
  15. use Symfony\Component\Form\AbstractType;
  16. use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
  17. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. class ContentEditType extends AbstractType
  21. {
  22. /** @var \Ibexa\Contracts\Core\Repository\LanguageService */
  23. protected $languageService;
  24. /** @var \Ibexa\AdminUi\Form\Type\ChoiceList\Loader\LanguageChoiceLoader */
  25. private $languageChoiceLoader;
  26. /**
  27. * @param \Ibexa\Contracts\Core\Repository\LanguageService $languageService
  28. * @param \Ibexa\AdminUi\Form\Type\ChoiceList\Loader\LanguageChoiceLoader $languageChoiceLoader
  29. */
  30. public function __construct(
  31. LanguageService $languageService,
  32. LanguageChoiceLoader $languageChoiceLoader
  33. ) {
  34. $this->languageService = $languageService;
  35. $this->languageChoiceLoader = $languageChoiceLoader;
  36. }
  37. public function buildForm(FormBuilderInterface $builder, array $options)
  38. {
  39. $builder
  40. ->add(
  41. 'location',
  42. LocationType::class,
  43. ['label' => false, 'attr' => ['hidden' => true]]
  44. )
  45. ->add(
  46. 'content_info',
  47. ContentInfoType::class,
  48. ['label' => false, 'attr' => ['hidden' => true]]
  49. )
  50. ->add(
  51. 'version_info',
  52. VersionInfoType::class,
  53. ['label' => false]
  54. )
  55. ->add(
  56. 'language',
  57. LanguageChoiceType::class,
  58. $this->getLanguageOptions($options)
  59. )
  60. ->add(
  61. 'create',
  62. SubmitType::class,
  63. [
  64. 'attr' => ['hidden' => true],
  65. 'label' => /** @Desc("Create") */
  66. 'content_draft_create_type.create',
  67. ]
  68. );
  69. }
  70. public function configureOptions(OptionsResolver $resolver)
  71. {
  72. $resolver
  73. ->setDefaults([
  74. 'data_class' => ContentEditData::class,
  75. 'translation_domain' => 'forms',
  76. 'language_codes' => false,
  77. 'choice_loader' => $this->languageChoiceLoader,
  78. ])
  79. ->setAllowedTypes('language_codes', ['bool', 'array']);
  80. }
  81. /**
  82. * @param array $options
  83. *
  84. * @return array
  85. */
  86. private function getLanguageOptions(array $options): array
  87. {
  88. $languageOptions = [
  89. 'label' => false,
  90. 'multiple' => false,
  91. 'expanded' => true,
  92. 'choice_loader' => $options['choice_loader'],
  93. ];
  94. if ($options['choice_loader'] instanceof LanguageChoiceLoader && is_array($options['language_codes'])) {
  95. $languageOptions['choice_loader'] = new CallbackChoiceLoader(function () use ($options) {
  96. return array_map([$this->languageService, 'loadLanguage'], $options['language_codes']);
  97. });
  98. }
  99. return $languageOptions;
  100. }
  101. }
  102. class_alias(ContentEditType::class, 'EzSystems\EzPlatformAdminUi\Form\Type\Content\Draft\ContentEditType');