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; } } } } } }
protected function checkAssertsRelation(OptionSetRelation $entity) { $this->assertNull($entity->getId()); $this->assertNull($entity->getField()); $this->assertEquals(1, $entity->getEntityId()); $this->assertEquals($this->setSet(), $entity->getOption()); }
/** * @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; } } }
/** * 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); } } } }