public function postPersist(LifecycleEventArgs $event)
 {
     /** @var OroEntityManager $em */
     $em = $event->getEntityManager();
     $entity = $event->getEntity();
     $configProvider = $em->getExtendManager()->getConfigProvider();
     $className = get_class($entity);
     if ($configProvider->hasConfig($className)) {
         $config = $configProvider->getConfig($className);
         $schema = $config->get('schema');
         if (isset($schema['relation'])) {
             foreach ($schema['relation'] as $fieldName) {
                 /** @var Config $fieldConfig */
                 $fieldConfig = $configProvider->getConfig($className, $fieldName);
                 if ($fieldConfig->getId()->getFieldType() == 'optionSet' && ($setData = $entity->{Inflector::camelize('get_' . $fieldName)}())) {
                     $model = $configProvider->getConfigManager()->getConfigFieldModel($fieldConfig->getId()->getClassName(), $fieldConfig->getId()->getFieldName());
                     /**
                      * in case of single select field type, should wrap value in array
                      */
                     if ($setData && !is_array($setData)) {
                         $setData = [$setData];
                     }
                     foreach ($setData as $option) {
                         $optionSetRelation = new OptionSetRelation();
                         $optionSetRelation->setData(null, $entity->getId(), $model, $em->getRepository(OptionSet::ENTITY_NAME)->find($option));
                         $em->persist($optionSetRelation);
                         $this->needFlush = true;
                     }
                 }
             }
         }
     }
 }
Example #2
0
 protected function checkAssertsRelation(OptionSetRelation $entity)
 {
     $this->assertNull($entity->getId());
     $this->assertNull($entity->getField());
     $this->assertEquals(1, $entity->getEntityId());
     $this->assertEquals($this->setSet(), $entity->getOption());
 }
Example #3
0
 /**
  * @param LifecycleEventArgs $event
  */
 public function postPersist(LifecycleEventArgs $event)
 {
     /** @var OroEntityManager $em */
     $em = $event->getEntityManager();
     $entity = $event->getEntity();
     $configProvider = $em->getExtendConfigProvider();
     $className = ClassUtils::getClass($entity);
     if (!$configProvider->hasConfig($className)) {
         return;
     }
     $config = $configProvider->getConfig($className);
     $schema = $config->get('schema');
     if (!isset($schema['relation'])) {
         return;
     }
     foreach ($schema['relation'] as $fieldName) {
         if (!$configProvider->hasConfig($className, $fieldName)) {
             continue;
         }
         /** @var ConfigInterface $fieldConfig */
         $fieldConfig = $configProvider->getConfig($className, $fieldName);
         $options = $this->getEntityFieldData($fieldConfig, $fieldName, $entity);
         if (!$options) {
             continue;
         }
         $model = $configProvider->getConfigManager()->getConfigFieldModel($fieldConfig->getId()->getClassName(), $fieldConfig->getId()->getFieldName());
         /**
          * in case of single select field type, should wrap value in array
          */
         if (!is_array($options)) {
             $options = [$options];
         }
         foreach ($options as $option) {
             $optionSetRelation = new OptionSetRelation();
             $optionSetRelation->setData(null, $entity->getId(), $model, $em->getRepository(OptionSet::ENTITY_NAME)->find($option));
             $em->persist($optionSetRelation);
             $this->needFlush = true;
         }
     }
 }
Example #4
0
 /**
  * PRE_SUBMIT event handler
  *
  * @param FormEvent $event
  */
 public function preSubmitData(FormEvent $event)
 {
     $entityId = $this->getEntityId($event);
     if ($entityId) {
         $configFieldModel = $this->configManager->getConfigFieldModel($event->getForm()->getConfig()->getOption('entityClassName'), $event->getForm()->getConfig()->getOption('entityFieldName'));
         $savedOptionIds = $this->getSavedOptionIds($configFieldModel, $entityId);
         $data = $event->getData();
         if (empty($data)) {
             $data = [];
         }
         if (!is_array($data)) {
             $data = [$data];
         }
         /**
          * Save selected options
          */
         $toSave = array_intersect($data, $savedOptionIds);
         foreach ($data as $option) {
             if (!in_array($option, $savedOptionIds)) {
                 $optionRelation = new OptionSetRelation();
                 $optionRelation->setData(null, $entityId, $configFieldModel, $this->options->find($option));
                 $toSave[] = $option;
                 $this->em->persist($optionRelation);
             }
         }
         /**
          * Remove unselected
          */
         if ($entityId && $this->relations->count($configFieldModel->getId(), $entityId)) {
             $toRemove = $this->relations->findByNotIn($configFieldModel->getId(), $entityId, $toSave);
             foreach ($toRemove as $option) {
                 $this->em->remove($option);
             }
         }
     }
 }
 public function preSubmitData(FormEvent $event)
 {
     list($entityId, $model) = $this->prepareEvent($event);
     $saved = [];
     if ($entityId) {
         $saved = $this->relations->findByFieldId($model->getId(), $entityId);
         array_walk($saved, function (&$item) {
             $item = $item->getOption()->getId();
         });
     }
     $data = $event->getData();
     if (empty($data)) {
         $data = [];
     }
     if (!is_array($data)) {
         $data = [$data];
     }
     if ($entityId) {
         /**
          * Save selected options
          */
         $toSave = array_intersect($data, $saved);
         foreach ($data as $option) {
             if (!in_array($option, $saved)) {
                 $optionRelation = new OptionSetRelation();
                 $optionRelation->setData(null, $entityId, $model, $this->options->find($option));
                 $toSave[] = $option;
                 $this->em->persist($optionRelation);
             }
         }
         /**
          * Remove unselected
          */
         if ($entityId && $this->relations->count($model->getId(), $entityId)) {
             $toRemove = $this->relations->findByNotIn($model->getId(), $entityId, $toSave);
             foreach ($toRemove as $option) {
                 $this->em->remove($option);
             }
         }
     }
 }