/**
  * @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()]);
 }
示例#3
0
 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);
 }
示例#5
0
 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];
 }
示例#9
0
 /**
  * @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()])];
 }