Example #1
0
 /**
  * {@inheritDoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->addViewTransformer(new FileTransformer($this->container->getParameter('sf.web_assets_dir')));
     $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($options) {
         // respond to the event, modify data, or form elements
         $data = $event->getData();
         $object = $event->getForm()->getParent()->getData();
         if (!$object) {
             return;
         }
         $crop = null;
         if (isset($options['img_config'])) {
             $crop = $data['crop'];
             $data = $data['url'];
         }
         $admin = $this->container->get('sf.admin.loader')->getAdminByClass($options['sf_admin_class']);
         $oldValue = $admin->getReflectionProperty($options['sf_admin_property'])->getValue($object);
         $pattern = \Symforce\AdminBundle\Entity\File::getFilesPattern($this->container->getParameter('sf.web_assets_dir'));
         if ($data && preg_match($pattern, $data, $ls)) {
             $em = $admin->getManager();
             $file = $em->getRepository('Symforce\\AdminBundle\\Entity\\File')->loadByUUID($ls[1]);
             $object_id = $admin->getId($object);
             if ($object_id) {
                 $file->setEntityId($object_id);
             }
             if ($crop) {
                 $this->container->get('sf.admin.imagine')->resize($file, $crop, $options['img_config']);
             }
             if ($file->getSessionId()) {
                 if ($oldValue) {
                     $em->remove($oldValue);
                 }
                 $file->setIsHtmlFile(false);
                 $file->setSessionId(null);
                 $em->persist($file);
                 $event->setData($file);
             } else {
                 $event->setData($file);
             }
         } else {
             $event->setData(null);
         }
     });
     $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($options) {
         if (isset($options['required']) && $options['required']) {
             $data = $event->getData();
             $form = $event->getForm();
             if (empty($data['url'])) {
                 $error = $this->container->get('translator')->trans('form.file.required', array('%field%' => isset($options['label']) ? $options['label'] : $form->getName()));
                 $form->addError(new \Symfony\Component\Form\FormError($error));
             }
         }
     });
 }