/** * @Route("/update/{id}", name="oro_entityextend_field_update", requirements={"id"="\d+"}, defaults={"id"=0}) * Acl( * id="oro_entityextend_field_update", * label="Update custom field", * type="action", * group_name="" * ) */ public function updateAction(EntityConfigModel $entity) { $request = $this->getRequest(); $fieldName = $request->getSession()->get(sprintf(self::SESSION_ID_FIELD_NAME, $entity->getId())); $fieldType = $request->getSession()->get(sprintf(self::SESSION_ID_FIELD_TYPE, $entity->getId())); if (!$fieldName || !$fieldType) { return $this->redirect($this->generateUrl('oro_entityextend_field_create', ['id' => $entity->getId()])); } /** @var ConfigManager $configManager */ $configManager = $this->get('oro_entity_config.config_manager'); $extendProvider = $configManager->getProvider('extend'); $extendEntityConfig = $extendProvider->getConfig($entity->getClassName()); $relationValues = []; $relationOptions = explode('||', $fieldType); $relationName = $relationOptions[0]; if (isset($relationOptions[1])) { $fieldName = $relationOptions[1]; } $relationOptions = explode('|', $relationOptions[0]); /** * fieldType example: relation|manyToOne|testentity5_relation_7 * check if fieldType has 3rd option [fieldName] */ if (count($relationOptions) == 4) { $fieldType = ExtendHelper::getReversRelationType($relationOptions[0]); $relations = $extendEntityConfig->get('relation'); if (isset($relations[$relationName])) { $relationValues['target_entity'] = $relations[$relationName]['target_entity']; $relationValues['relation_key'] = $relationName; } } $newFieldModel = $configManager->createConfigFieldModel($entity->getClassName(), $fieldName, $fieldType); $extendFieldConfig = $extendProvider->getConfig($entity->getClassName(), $fieldName); $extendFieldConfig->set('owner', ExtendManager::OWNER_CUSTOM); $extendFieldConfig->set('state', ExtendManager::STATE_NEW); $extendFieldConfig->set('extend', true); foreach ($relationValues as $key => $value) { $extendFieldConfig->set($key, $value); } $form = $this->createForm('oro_entity_config_type', null, ['config_model' => $newFieldModel]); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { //persist data inside the form $this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('oro.entity_extend.controller.config_field.message.saved')); if ($extendEntityConfig->get('state') != ExtendManager::STATE_NEW) { $extendEntityConfig->set('state', ExtendManager::STATE_UPDATED); } $extendEntityConfig->set('upgradeable', true); $configManager->persist($extendEntityConfig); $configManager->flush(); return $this->get('oro_ui.router')->actionRedirect(['route' => 'oro_entityconfig_field_update', 'parameters' => ['id' => $newFieldModel->getId()]], ['route' => 'oro_entityconfig_view', 'parameters' => ['id' => $entity->getId()]]); } } /** @var ConfigProvider $entityConfigProvider */ $entityConfigProvider = $this->get('oro_entity_config.provider.entity'); $entityConfig = $entityConfigProvider->getConfig($entity->getClassName()); $fieldConfig = $entityConfigProvider->getConfig($entity->getClassName(), $newFieldModel->getFieldName()); return $this->render('OroEntityConfigBundle:Config:fieldUpdate.html.twig', ['entity_config' => $entityConfig, 'field_config' => $fieldConfig, 'field' => $newFieldModel, 'form' => $form->createView(), 'formAction' => $this->generateUrl('oro_entityextend_field_update', array('id' => $entity->getId())), 'require_js' => $configManager->getProvider('extend')->getPropertyConfig()->getRequireJsModules()]); }
/** * @Route("/update/{id}", name="oro_entityextend_field_update", requirements={"id"="\d+"}, defaults={"id"=0}) * Acl( * id="oro_entityextend_field_update", * label="oro.entity_extend.action.config_field_grid.update", * type="action", * group_name="" * ) */ public function updateAction(EntityConfigModel $entity) { $request = $this->getRequest(); $fieldName = $request->getSession()->get(sprintf(self::SESSION_ID_FIELD_NAME, $entity->getId())); $fieldType = $request->getSession()->get(sprintf(self::SESSION_ID_FIELD_TYPE, $entity->getId())); if (!$fieldName || !$fieldType) { return $this->redirect($this->generateUrl('oro_entityextend_field_create', ['id' => $entity->getId()])); } /** @var ConfigManager $configManager */ $configManager = $this->get('oro_entity_config.config_manager'); $extendProvider = $configManager->getProvider('extend'); $extendEntityConfig = $extendProvider->getConfig($entity->getClassName()); $fieldOptions = ['extend' => ['is_extend' => true, 'owner' => ExtendScope::OWNER_CUSTOM, 'state' => ExtendScope::STATE_NEW]]; // check if a field type is complex, for example reverse relation or public enum $fieldTypeParts = explode('||', $fieldType); if (count($fieldTypeParts) > 1) { if (in_array($fieldTypeParts[0], ['enum', 'multiEnum'])) { // enum $fieldType = $fieldTypeParts[0]; $fieldOptions['enum']['enum_code'] = $fieldTypeParts[1]; } else { $firstPartItems = explode('|', $fieldTypeParts[0]); if (count($firstPartItems) === 4) { // reverse relation $fieldType = ExtendHelper::getReverseRelationType($firstPartItems[0]); $relationKey = $fieldTypeParts[0]; $fieldOptions['extend']['relation_key'] = $relationKey; $relations = $extendEntityConfig->get('relation'); $fieldOptions['extend']['target_entity'] = $relations[$relationKey]['target_entity']; } } } $newFieldModel = $configManager->createConfigFieldModel($entity->getClassName(), $fieldName, $fieldType); $this->updateFieldConfigs($configManager, $newFieldModel, $fieldOptions); $form = $this->createForm('oro_entity_config_type', null, ['config_model' => $newFieldModel]); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { //persist data inside the form $this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('oro.entity_extend.controller.config_field.message.saved')); $extendEntityConfig->set('upgradeable', true); $configManager->persist($extendEntityConfig); $configManager->flush(); return $this->get('oro_ui.router')->redirectAfterSave(['route' => 'oro_entityconfig_field_update', 'parameters' => ['id' => $newFieldModel->getId()]], ['route' => 'oro_entityconfig_view', 'parameters' => ['id' => $entity->getId()]]); } } /** @var ConfigProvider $entityConfigProvider */ $entityConfigProvider = $this->get('oro_entity_config.provider.entity'); $entityConfig = $entityConfigProvider->getConfig($entity->getClassName()); $fieldConfig = $entityConfigProvider->getConfig($entity->getClassName(), $newFieldModel->getFieldName()); return $this->render('OroEntityConfigBundle:Config:fieldUpdate.html.twig', ['entity_config' => $entityConfig, 'field_config' => $fieldConfig, 'field' => $newFieldModel, 'form' => $form->createView(), 'formAction' => $this->generateUrl('oro_entityextend_field_update', ['id' => $entity->getId()]), 'require_js' => $configManager->getProvider('extend')->getPropertyConfig()->getRequireJsModules()]); }
protected function doImport() { $this->client->followRedirects(false); $this->client->request('GET', $this->getUrl('oro_importexport_import_process', ['_format' => 'json', 'processorAlias' => 'oro_entity_config_entity_field.add_or_replace', 'importJob' => 'entity_fields_import_from_csv', 'options[entity_id]' => $this->entity->getId()])); $data = $this->getJsonResponseContent($this->client->getResponse(), 200); $this->assertEquals(['success' => true, 'message' => 'File was successfully imported.', 'errorsUrl' => null], $data); }
/** * @param EntityConfigModel $entity * @return array * * @Route( * "/unique-key/{id}", * name="oro_entityextend_entity_unique_key", * requirements={"id"="\d+"}, * defaults={"id"=0} * ) * Acl( * id="oro_entityextend_entity_unique_key", * label="oro.entity_extend.action.config_entity_grid.unique", * type="action", * group_name="" * ) * @Template */ public function uniqueAction(EntityConfigModel $entity) { $className = $entity->getClassName(); $entityProvider = $this->get('oro_entity_config.provider.entity'); $entityConfig = $entityProvider->getConfig($className); $form = $this->createForm('oro_entity_extend_unique_key_collection_type', $entityConfig->get('unique_key', false, []), ['className' => $className]); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { $entityConfig->set('unique_key', $form->getData()); $entityProvider->persist($entityConfig); $entityProvider->flush(); return $this->redirect($this->generateUrl('oro_entityconfig_view', array('id' => $entity->getId()))); } } return array('form' => $form->createView(), 'entity_id' => $entity->getId(), 'entity_config' => $entityConfig); }
public function testEntityConfigModel() { $className = 'Test\\TestClass'; $entityModel = new EntityConfigModel($className); $this->assertEmpty($entityModel->getId()); $this->assertEquals($className, $entityModel->getClassName()); $className1 = 'Test\\TestClass1'; $entityModel->setClassName($className1); $this->assertEquals($className1, $entityModel->getClassName()); }
/** * @Route( * "/unique-key/{id}", * name="oro_entityextend_entity_unique_key", * requirements={"id"="\d+"}, * defaults={"id"=0} * ) * Acl( * id="oro_entityextend_entity_unique_key", * label="Unique entity unique keys", * type="action", * group_name="" * ) * @Template */ public function uniqueAction(EntityConfigModel $entity) { /** @var ConfigProvider $configProvider */ $configProvider = $this->get('oro_entity_config.provider.extend'); $entityConfig = $configProvider->getConfig($entity->getClassName()); $fieldConfigIds = $configProvider->getIds($entity->getClassName()); $data = $entityConfig->has('unique_key') ? $entityConfig->get('unique_key') : array(); $request = $this->getRequest(); $form = $this->createForm(new UniqueKeyCollectionType(array_filter($fieldConfigIds, function (FieldConfigId $fieldConfigId) { return $fieldConfigId->getFieldType() != 'ref-many'; })), $data); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { $data = $form->getData(); $error = false; $names = array(); foreach ($data['keys'] as $key) { if (in_array($key['name'], $names)) { $error = true; $this->get('session')->getFlashBag()->add('error', sprintf('Name for key should be unique, key "%s" is not unique.', $key['name'])); break; } if (empty($key['name'])) { $error = true; $this->get('session')->getFlashBag()->add('error', 'Name of key can\'t be empty.'); break; } $names[] = $key['name']; } if (!$error) { $entityConfig->set('unique_key', $data); $configProvider->persist($entityConfig); $configProvider->flush(); return $this->redirect($this->generateUrl('oro_entityconfig_view', array('id' => $entity->getId()))); } } } /** @var ConfigProvider $entityConfigProvider */ $entityConfigProvider = $this->get('oro_entity_config.provider.entity'); return array('form' => $form->createView(), 'entity_id' => $entity->getId(), 'entity_config' => $entityConfigProvider->getConfig($entity->getClassName())); }
public function testProperties() { /** test ConfigEntity */ $this->assertNull($this->configEntity->getClassName()); $this->assertEmpty($this->configEntity->getId()); $this->assertNull($this->configEntity->getCreated()); $this->configEntity->setCreated(new \DateTime('2013-01-01')); $this->assertEquals('2013-01-01', $this->configEntity->getCreated()->format('Y-m-d')); $this->assertNull($this->configEntity->getUpdated()); $this->configEntity->setUpdated(new \DateTime('2013-01-01')); $this->assertEquals('2013-01-01', $this->configEntity->getUpdated()->format('Y-m-d')); /** test ConfigEntity prePersist */ $this->configEntity->prePersist(); $currentDate = new \DateTime('now', new \DateTimeZone('UTC')); $this->assertEquals($currentDate->format('Y-m-d'), $this->configEntity->getCreated()->format('Y-m-d')); /** test ConfigEntity preUpdate */ $this->configEntity->preUpdate(); $currentDate = new \DateTime('now', new \DateTimeZone('UTC')); $this->assertEquals($currentDate->format('Y-m-d'), $this->configEntity->getUpdated()->format('Y-m-d')); /** test ConfigField */ $this->assertEmpty($this->configField->getId()); $this->configField->setMode(ConfigModelManager::MODE_READONLY); $this->assertEquals(ConfigModelManager::MODE_READONLY, $this->configField->getMode()); /** test ConfigValue */ $this->assertEmpty($this->configValue->getId()); $this->assertEmpty($this->configValue->getScope()); $this->assertEmpty($this->configValue->getCode()); $this->assertEmpty($this->configValue->getValue()); $this->assertEmpty($this->configValue->getField()); $this->assertFalse($this->configValue->getSerializable()); $this->configValue->setSerializable(true); $this->assertTrue($this->configValue->getSerializable()); $this->assertEmpty($this->configValue->getEntity()); $this->configValue->setEntity($this->configEntity); $this->assertEquals($this->configEntity, $this->configValue->getEntity()); }
/** * Return configured layout actions and requirejs modules * * @param EntityConfigModel $entity * @return array */ protected function getLayoutParams(EntityConfigModel $entity) { $configManager = $this->get('oro_entity_config.config_manager'); $actions = []; $requireJsModules = []; foreach ($configManager->getProviders() as $provider) { $layoutActions = $provider->getPropertyConfig()->getLayoutActions(PropertyConfigContainer::TYPE_FIELD); foreach ($layoutActions as $config) { if (isset($config['filter'])) { foreach ($config['filter'] as $key => $value) { if (is_array($value)) { $error = true; foreach ($value as $v) { if ($provider->getConfig($entity->getClassName())->get($key) == $v) { $error = false; } } if ($error) { continue 2; } } elseif ($provider->getConfig($entity->getClassName())->get($key) != $value) { continue 2; } } } if (isset($config['entity_id']) && $config['entity_id'] == true) { $config['args'] = ['id' => $entity->getId()]; } $actions[] = $config; } $requireJsModules = array_merge($requireJsModules, $provider->getPropertyConfig(PropertyConfigContainer::TYPE_FIELD)->getRequireJsModules()); } return [$actions, $requireJsModules]; }
/** * @param EntityConfigModel $configEntityModel * * @return array */ protected function getEntityLinks(EntityConfigModel $configEntityModel) { return ['entity_id' => $configEntityModel->getId(), 'edit_link' => $this->generateUrl(self::ENTITY_EDIT_ROUTE, ['id' => $configEntityModel->getId()]), 'view_link' => $this->generateUrl(self::ENTITY_VIEW_ROUTE, ['id' => $configEntityModel->getId()])]; }