Created
May 20, 2014 11:31
-
-
Save lightsuner/57fd5ca1edae219f74a7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Domain\BrandBundle\Form\Type; | |
use Symfony\Component\Form\AbstractType; | |
use Symfony\Component\Form\FormBuilderInterface; | |
use Symfony\Component\OptionsResolver\OptionsResolverInterface; | |
use Domain\BrandBundle\Form\Type\ColorType; | |
use Doctrine\ORM\EntityRepository; | |
use Symfony\Component\Form\FormEvents; | |
use Symfony\Component\Form\FormEvent; | |
class LookType extends AbstractType | |
{ | |
protected $brand; | |
protected $brand_account; | |
public function __construct(\Domain\CoreBundle\Entity\Brand $brand = null, \Domain\CoreBundle\Entity\BrandAccount $brand_account = null){ | |
$this->brand = $brand; | |
$this->brand_account = $brand_account; | |
} | |
public function buildForm(FormBuilderInterface $builder, array $options) | |
{ | |
$brand = $this->brand; | |
$brand_account = $this->brand_account; | |
$builder | |
->add('number', 'text', [ | |
'label' => 'Style #', | |
'attr' => ['class' => 'validate[required]'], | |
'error_bubbling' => true, | |
]) | |
->add('title', 'text', [ | |
'label' => 'Style Title', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('price', 'text', [ | |
'label' => 'Wholesale Price $', | |
'attr' => ['class' => 'validate[required]'], | |
'error_bubbling' => true, | |
]) | |
->add('retail', 'text', [ | |
'label' => 'Suggested Retail $', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('comments', 'textarea', [ | |
'label' => 'Comments', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('description', 'textarea', [ | |
'label' => 'Description', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('star', null, [ | |
'label' => 'Click here to indicate a star seller', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('logo_id', 'hidden', [ | |
'error_bubbling' => true | |
]) | |
->add('qnty', null, [ | |
'label' => 'Do you want to add inventory quantity to this look?', | |
'required' => false, | |
'error_bubbling' => true, | |
]) | |
->add('categories', 'entity', [ | |
'label' => 'Select Category', | |
'class' => 'CoreBundle:Category', | |
'property' => 'NameByLvl', | |
'query_builder' => function(EntityRepository $er) use($brand_account) { | |
return $er->generateByBrandAccount($brand_account); | |
}, | |
'multiple' => true, | |
'expanded' => false, | |
'attr' => [ | |
'class' => 'selectpicker show-tick show-menu-arrow validate[required] validate-force', | |
'data-size' => 'auto', | |
'data-style' => ' btn-info', | |
'data-selected-text-format' => "count>1" | |
], | |
'error_bubbling' => true, | |
]) | |
->add('sizes', 'entity', [ | |
'label' => 'Select Size', | |
'class' => 'CoreBundle:Size', | |
'group_by' => 'department.name', | |
'query_builder' => function(EntityRepository $er) use($brand) { | |
$departments = $brand->getDepartments(); | |
return $er->generateByDepartments($departments); | |
}, | |
'property' => 'name', | |
'multiple' => true, | |
'expanded' => true, | |
'attr' => ['class' => 'inner-float validate[required]'], | |
'error_bubbling' => true, | |
]) | |
->add('colors', 'collection',[ | |
'label' => 'Add Color (10 char allowed for name)', | |
'type' => new ColorType(), | |
'allow_add' => true, | |
'allow_delete' => true, | |
'prototype' => true, | |
'by_reference' => false, | |
'error_bubbling' => true, | |
'attr' => ['class' => 'validate[required]'] | |
] ) | |
; | |
$factory = $builder->getFormFactory(); | |
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) use($factory){ | |
$this->addImagesField($factory, $event); | |
}); | |
$builder->addEventListener(FormEvents::PRE_BIND, function(FormEvent $event) use($factory){ | |
$this->addImagesField($factory, $event, true); | |
}); | |
} | |
protected function addImagesField($factory, FormEvent $event){ | |
$form = $event->getForm(); | |
$data = $event->getData(); | |
$images_data = [ | |
'label' => "Look's gallery", | |
'class' => 'CoreBundle:Images', | |
'property' => 'JSONImageDataForLook', | |
'multiple' => true, | |
'expanded' => true, | |
'attr' => ['class' => ''], | |
'error_bubbling' => true, | |
'required' => true | |
]; | |
if(is_array($data)){ | |
$images_data['query_builder'] = function(EntityRepository $er) use($data) { | |
$image_ids = !empty($data['images'])? $data['images'] : array(); | |
return $er->getBuilderByIds($image_ids); | |
}; | |
} elseif(is_object($data)){ | |
$images_data['query_builder'] = function(EntityRepository $er) use($data) { | |
return $er->getBuilderByLook($data); | |
}; | |
} | |
$form->add($factory->createNamed('images', 'entity', null, $images_data)); | |
} | |
public function setDefaultOptions(OptionsResolverInterface $resolver) | |
{ | |
$resolver->setDefaults(array( | |
'data_class' => 'Domain\CoreBundle\Entity\Look', | |
'error_bubbling' => true, | |
'cascade_validation' => true | |
)); | |
} | |
public function getName() | |
{ | |
return 'brandlook'; | |
} | |
} |
Author
lightsuner
commented
May 20, 2014
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment