예제 #1
0
 /**
  * @param Module    $module
  * @param Container $container
  *
  * @return array
  */
 public function find(Container $container)
 {
     if (null == $this->module) {
         throw new \Exception('First set a module');
     }
     $data = $this->em->getRepository('BigfishEavBundle:Container')->getFormData($container->getId(), $this->module->getId(), $this->language);
     return $this->columnMapper->map($data);
 }
예제 #2
0
 /**
  * Generate new table and fill it with data.
  *
  * @param Module $module
  * @param bool   $force
  *
  * @return Module
  */
 public function generate(Module $module, $force = false)
 {
     $this->module = $module;
     $this->eavColumns->setModule($module);
     if (!$force) {
         $flatIsGenerated = $this->module->getFlatIsGenerated();
         $generateFlat = $this->module->getGenerateFlat();
         if (!empty($flatIsGenerated) || !$generateFlat) {
             return;
         }
     }
     $moduleId = $this->module->getId();
     $tableName = '_flat_module_' . $moduleId;
     $this->createTable($tableName);
     $this->fillTable($tableName);
     $this->module->setFlatIsGenerated(new \DateTime('now'));
     $this->objectManager->persist($this->module);
     $this->objectManager->flush();
     return $this->module;
 }
예제 #3
0
 /**
  * {@inheritDoc}
  */
 public function load(ObjectManager $manager)
 {
     /**
      * Create module "employees".
      */
     $module = new Module();
     $module->setCategory($this->getReference('category-module'));
     $module->setName('Employees');
     $module->setDescription('This is an automatic generated example.');
     $module->setGenerateFlat(true);
     $manager->persist($module);
     $manager->flush();
     $this->addReference('module-employees', $module);
     $configuration = new Configuration();
     $configuration->setActive(true);
     $configuration->setClassName(get_class($module));
     $configuration->setIdentifier("grid_fields");
     $configuration->setDeleted(false);
     $configuration->setData(array("tv_title"));
     $configuration->setClassPropertyValue($module->getId());
     $manager->persist($configuration);
     $manager->flush();
 }
예제 #4
0
 /**
  * createModuleData.
  */
 public function createModuleData()
 {
     $aFields = $this->getFields();
     $aContent = array();
     foreach ($aFields as $field) {
         $aContent[$field['identifier']] = $field['testData'];
     }
     $oModule = new Module();
     $oModule->setName('Test Module');
     $oModule->setDescription('test');
     $sequence = 0;
     foreach ($aFields as $field) {
         $oField = new Field();
         $oField->setName($field['name']);
         $oField->setFormType($field['form']);
         $oField->setIdentifier($field['identifier']);
         $this->em->persist($oField);
         $oModuleHasField = new ModuleHasField();
         $oModuleHasField->setField($oField);
         $oModuleHasField->setModule($oModule);
         $oModuleHasField->setSequence($sequence);
         $this->em->persist($oModuleHasField);
         ++$sequence;
     }
     $this->em->flush();
     for ($i = 0; $i < $this->rows; ++$i) {
         $container = new Container();
         $container->setModule($oModule);
         $container->setSequence(999);
         $this->em->persist($container);
         $this->em->flush();
         $this->container->enterScope('request');
         $this->container->set('request', new Request(), 'request');
         $object = $this->container->get('eav.module.manager');
         $object->setModule($oModule);
         $object->save($container, $aContent);
     }
     $this->em->clear();
 }
예제 #5
0
 /**
  * @param Request   $request
  * @param Module    $module
  * @param Container $container
  *
  * @return JsonResponse|\Symfony\Component\HttpFoundation\Response
  */
 public function deleteAction(Request $request, Module $module, Container $container)
 {
     $form = $this->createForm(new DeleteContainerType($container, $module));
     if ($this->formHandler->handleDelete($form, $request, $container)) {
         $url = $this->generateUrl('module_item_index', array('module' => $module->getId()));
         return new JsonResponse(array('success' => true, 'url' => $url));
     }
     return $this->render('BigfishEavBundle:Default:delete.html.twig', array('form' => $form->createView(), 'actionUrl' => $this->generateUrl('module_item_delete', array('module' => $module->getId(), 'container' => $container->getId()))));
 }
예제 #6
0
 public function buildEavQuery(\Bigfish\Bundle\EavBundle\Entity\Module $module, $skipFlat = false)
 {
     if ($module && $module->getFlatIsGenerated() && $module->getGenerateFlat() && !$skipFlat) {
         return '_flat_module_' . $module->getId();
     }
     $unions = array();
     $languages = $this->languageManager->getLanguages();
     foreach ($languages as $lang) {
         $qb = $this->createQueryBuilder();
         $qb->addSelect('_container.*');
         $qb->addSelect('"' . $lang . '" as culture');
         $qb->addSelect($this->getInvokeColumns()->setModule($module)->setLanguage($lang)->getSql());
         $qb->from('eav_container', EavTables::CONTAINER_PREFIX);
         if ($module) {
             $qb->where($qb->expr()->eq(EavTables::CONTAINER_PREFIX . '.module_id', ':module_id'));
         }
         $unions[] = $qb->getSQL();
     }
     if (count($unions) > 0) {
         $sql = implode(' UNION ', $unions);
         return '( ' . $sql . ' ) ';
     } else {
         return;
     }
 }
예제 #7
0
 /**
  * @param Module $module
  * @param array  $options
  *
  * @return \Symfony\Component\Form\FormBuilderInterface
  */
 public function createFormBuilder(Module $module, array $options = array(), $formOptions = array(), FormBuilderInterface $parentForm = null)
 {
     $modules = $this->objectManager->getRepository('BigfishEavBundle:Module')->getFields($module->getId());
     $formOptions = array_merge_recursive($formOptions, array('cascade_validation' => true, 'error_bubbling' => true, 'required' => true));
     // build new form
     /** @var $formBuilder \Symfony\Component\Form\FormBuilder **/
     $formBuilder = $parentForm ? $parentForm : $this->formFactory->createBuilder('form', null, $formOptions);
     $prepareBuilder = array();
     $sortedFields = array();
     foreach ($modules as $module) {
         foreach ($module->getField() as $field) {
             $formData = $this->fieldChain->getField($field, $module, $options);
             if ($formData) {
                 $contstraints = $this->constraintChain->getConstraints($field->getConstraints());
                 $required = false;
                 foreach ($contstraints as $constraint) {
                     if ($constraint instanceof NotBlank) {
                         $required = true;
                     }
                 }
                 $formData['formAttributes']['constraints'] = $contstraints;
                 $formData['formAttributes']['required'] = $required;
                 $sortedFields[] = $formData['identifier'];
                 $formBuilder->add($formData['identifier'], $formData['formType'], $formData['formAttributes']);
             }
         }
     }
     foreach ($formBuilder->all() as $builder) {
         $type = $builder->getType()->getName();
         if ($type == 'fieldset') {
             //                var_dump($builder->getType());
             $options = $builder->getOptions();
             $aChildFields = $options['childFields'];
             // remove unused childs and maintain order
             $newFields = array_filter($sortedFields, function ($key) use($aChildFields) {
                 return in_array($key, $aChildFields);
             });
             $subForm = array();
             foreach ($newFields as $childField) {
                 if ($formBuilder->has($childField)) {
                     if (($key = array_search($childField, $sortedFields)) !== false) {
                         unset($sortedFields[$key]);
                     }
                     //                        echo "<hr>";
                     //                        var_dump($formBuilder->get($childField)->getName());
                     //                        var_dump($formBuilder->get($childField)->getRequired());
                     //                        echo "</hr>";
                     $field = $formBuilder->get($childField);
                     $subForm[] = $field;
                     $formBuilder->remove($childField);
                 }
             }
             $elem = $formBuilder->get($builder->getName());
             $formBuilder->remove($builder->getName());
             $formBuilder->add($elem->getName(), $type, array('subforms' => $subForm, 'label' => false, 'required' => false, 'mapped' => false, 'title' => $elem->getOption('title'), 'description' => $elem->getOption('description'), 'fieldsetId' => $elem->getOption('fieldsetId')));
         }
     }
     $this->reorder($formBuilder, $sortedFields);
     // rebuild form
     foreach ($formBuilder->all() as $element) {
         if ($formBuilder->has($element->getName())) {
             $holdElement = $formBuilder->get($element->getName());
             $formBuilder->remove($element->getName());
             $formBuilder->add($holdElement);
             foreach ($holdElement->all() as $child) {
                 if ($element->has($child->getName())) {
                     $formBuilder->add($element->get($child->getName()));
                     $element->remove($child->getName());
                 }
             }
         }
     }
     return $formBuilder;
 }