X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/c49fd2c87a55bbd865ca22265e56255a0596c804..2de7e7ae20031796b0f1f7dd42664794a6ba9988:/Form/SnippetType.php

diff --git a/Form/SnippetType.php b/Form/SnippetType.php
index 9c76ff4..8f81b40 100644
--- a/Form/SnippetType.php
+++ b/Form/SnippetType.php
@@ -3,53 +3,123 @@
 namespace Rapsys\AirBundle\Form;
 
 use Symfony\Component\Form\AbstractType;
-use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolver;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+use Symfony\Component\Form\Extension\Core\Type\FileType;
 use Symfony\Component\Form\Extension\Core\Type\HiddenType;
-use Symfony\Component\Form\Extension\Core\Type\TextType;
+use Symfony\Component\Form\Extension\Core\Type\NumberType;
+use Symfony\Component\Form\Extension\Core\Type\SubmitType;
 use Symfony\Component\Form\Extension\Core\Type\TextareaType;
 use Symfony\Component\Form\Extension\Core\Type\UrlType;
-use Symfony\Component\Form\Extension\Core\Type\SubmitType;
-use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+use Symfony\Component\Validator\Constraints\File;
+
 use Rapsys\AirBundle\Form\Extension\Type\HiddenEntityType;
-use Rapsys\AirBundle\Entity\Location;
-use Rapsys\AirBundle\Entity\User;
 use Rapsys\AirBundle\Entity\Snippet;
 
 class SnippetType extends AbstractType {
 	/**
 	 * {@inheritdoc}
 	 */
-	public function buildForm(FormBuilderInterface $builder, array $options) {
-		return $builder
+	public function buildForm(FormBuilderInterface $form, array $options): FormBuilderInterface {
+		//Start build form
+		$form
+			//Add locale, location and user hidden fields
 			->add('locale', HiddenType::class, ['required' => true])
 			->add('location', HiddenEntityType::class, ['required' => true])
-			->add('user', HiddenEntityType::class, ['required' => true])
-			->add('description', TextareaType::class, ['attr' => ['placeholder' => 'Your description', 'cols' => 50, 'rows' => 15], 'constraints' => [new NotBlank(['message' => 'Please provide your description'])], 'required' => true])
-			->add('class', TextareaType::class, ['attr' => ['placeholder' => 'Your class', 'cols' => 50, 'rows' => 15], 'required' => false])
-			->add('contact', UrlType::class, ['attr' => ['placeholder' => 'Your contact'], 'required' => false])
-			->add('donate', UrlType::class, ['attr' => ['placeholder' => 'Your donate'], 'required' => false])
-			->add('link', UrlType::class, ['attr' => ['placeholder' => 'Your link'], 'required' => false])
-			->add('profile', UrlType::class, ['attr' => ['placeholder' => 'Your profile'], 'required' => false])
-			->add('submit', SubmitType::class, ['label' => 'Send', 'attr' => ['class' => 'submit']]);
+			->add('user', HiddenEntityType::class, ['required' => true]);
+
+		//With description
+		if ($options['description']) {
+			$form->add('description', TextareaType::class, ['attr' => ['placeholder' => 'Your description', 'cols' => 50, 'rows' => 15], 'required' => false]);
+		}
+
+		//With class
+		if ($options['class']) {
+			$form->add('class', TextareaType::class, ['attr' => ['placeholder' => 'Your class', 'cols' => 50, 'rows' => 10], 'required' => false]);
+		}
+
+		//With short
+		if ($options['short']) {
+			$form->add('short', TextareaType::class, ['attr' => ['placeholder' => 'Your short', 'cols' => 50, 'rows' => 10], 'required' => false]);
+		}
+
+		//With rate
+		if ($options['rate']) {
+			$form->add('rate', NumberType::class, ['attr' => ['placeholder' => 'Your rate'], 'required' => false]);
+		}
+
+		//With hat
+		if ($options['hat']) {
+			$form->add('hat', CheckboxType::class, ['attr' => ['placeholder' => 'Your hat'], 'required' => false]);
+		}
+
+		//With contact
+		if ($options['contact']) {
+			$form->add('contact', UrlType::class, ['attr' => ['placeholder' => 'Your contact'], 'required' => false]);
+		}
+
+		//With donate
+		if ($options['donate']) {
+			$form->add('donate', UrlType::class, ['attr' => ['placeholder' => 'Your donate'], 'required' => false]);
+		}
+
+		//With link
+		if ($options['link']) {
+			$form->add('link', UrlType::class, ['attr' => ['placeholder' => 'Your link'], 'required' => false]);
+		}
+
+		//With profile
+		if ($options['profile']) {
+			$form->add('profile', UrlType::class, ['attr' => ['placeholder' => 'Your profile'], 'required' => false]);
+		}
+
+		//Add submit
+		$form->add('submit', SubmitType::class, ['label' => 'Send', 'attr' => ['class' => 'submit']]);
+
+		//Return form builder
+		return $form;
 	}
 
 	/**
 	 * {@inheritdoc}
 	 */
-	public function configureOptions(OptionsResolver $resolver) {
-		$resolver->setDefaults(['data_class' => Snippet::class, 'error_bubbling' => true, 'location' => null, 'user' => null]);
-		$resolver->setAllowedTypes('location', [Location::class, 'null']);
-		$resolver->setAllowedTypes('user', [User::class, 'null']);
+	public function configureOptions(OptionsResolver $resolver): void {
+		//Set defaults
+		$resolver->setDefaults(['class' => true, 'contact' => true, 'data_class' => Snippet::class, 'description' => true, 'donate' => true, 'error_bubbling' => true, 'hat' => true, 'link' => true, 'profile' => true, 'rate' => true, 'short' => true]);
+
+		//Add extra class option
+		$resolver->setAllowedTypes('class', 'boolean');
+
+		//Add extra contact option
+		$resolver->setAllowedTypes('contact', 'boolean');
+
+		//Add extra description option
+		$resolver->setAllowedTypes('description', 'boolean');
+
+		//Add extra donate option
+		$resolver->setAllowedTypes('donate', 'boolean');
+
+		//Add extra hat option
+		$resolver->setAllowedTypes('hat', 'boolean');
+
+		//Add extra link option
+		$resolver->setAllowedTypes('link', 'boolean');
+
+		//Add extra profile option
+		$resolver->setAllowedTypes('profile', 'boolean');
+
+		//Add extra rate option
+		$resolver->setAllowedTypes('rate', 'boolean');
+
+		//Add extra short option
+		$resolver->setAllowedTypes('short', 'boolean');
 	}
 
 	/**
 	 * {@inheritdoc}
-	 * XXX: this doesn't work, because it's impossible to generate this same id on other side
-	 * TODO: we would need to be able to generate this id at form creation
-	 *
-	public function getBlockPrefix() {
-		//Prevent collision between instances with an unique block prefix
-		return 'snippet_'.uniqid();
-	}*/
+	 */
+	public function getName(): string {
+		return 'rapsysair_snippet';
+	}
 }