Beispiel #1
0
 /**
  * @param array $classMap [class_name => entity_config_id, ...]
  *
  * @return array [entity_config_id => [field_name => is_configurable, ...], ...]
  */
 protected function loadConfigurableFields(array $classMap)
 {
     $connection = $this->configManager->getEntityManager()->getConnection();
     $fieldRows = $connection->executeQuery('SELECT id, entity_id, field_name, type, mode, data FROM oro_entity_config_field');
     $configurable = [];
     $fields = [];
     foreach ($fieldRows as $row) {
         $fieldId = (int) $row['id'];
         $entityId = (int) $row['entity_id'];
         if (!isset($classMap[$entityId])) {
             continue;
         }
         $className = $classMap[$entityId];
         $fieldName = $row['field_name'];
         $fieldType = $row['type'];
         $isHidden = $row['mode'] === ConfigModel::MODE_HIDDEN;
         $data = array_merge($this->getEmptyData(), $connection->convertToPHPValue($row['data'], 'array'));
         $configurable[$entityId][$fieldName] = true;
         $fields[$className][$fieldName] = ['i' => $fieldId, 'h' => $isHidden, 't' => $fieldType];
         $this->cache->saveFieldConfigValues($data, $className, $fieldName, $fieldType);
     }
     foreach ($fields as $className => $values) {
         $this->cache->saveFields($className, $values);
     }
     return $configurable;
 }
Beispiel #2
0
 /**
  * @param callable $callback
  * @param string   $scope
  * @param string   $className
  * @param bool     $withHidden
  *
  * @return array
  */
 protected function mapFields($callback, $scope, $className, $withHidden)
 {
     $result = [];
     $fields = $this->cache->getFields($className);
     if (null !== $fields) {
         foreach ($fields as $field => $data) {
             if ($withHidden || !$data['h']) {
                 $result[] = $callback($scope, $className, $field, $data['t']);
             }
         }
     } elseif ($this->modelManager->checkDatabase()) {
         $models = $this->modelManager->getModels($className);
         $fields = [];
         /** @var FieldConfigModel $model */
         foreach ($models as $model) {
             $isHidden = $model->isHidden();
             $field = $model->getFieldName();
             $type = $model->getType();
             $fields[$field] = ['t' => $type, 'h' => $isHidden];
             if ($withHidden || !$isHidden) {
                 $result[] = $callback($scope, $className, $field, $type);
             }
         }
         $this->cache->saveFields($className, $fields);
     }
     return $result;
 }
Beispiel #3
0
 public function testDeleteFieldsLocalOnly()
 {
     $fields = ['field1' => ['t' => 'integer', 'h' => true], 'field2' => ['t' => 'string', 'h' => false]];
     $this->cache->expects($this->never())->method('delete');
     $this->configCache->saveFields(self::ENTITY_CLASS, $fields);
     $this->assertTrue($this->configCache->deleteFields(self::ENTITY_CLASS, true));
     $this->assertNull($this->configCache->getFields(self::ENTITY_CLASS));
 }
Beispiel #4
0
 /**
  * @param string $className
  * @param string $fieldName
  *
  * @return array|null ['i' => field_model_id, 'h' => is_hidden_model, 't' => field_type]
  */
 protected function findField($className, $fieldName)
 {
     $result = null;
     $fields = $this->cache->getFields($className);
     if (null === $fields && $this->modelManager->checkDatabase()) {
         $models = $this->modelManager->getModels($className);
         $fields = [];
         /** @var FieldConfigModel $model */
         foreach ($models as $model) {
             $isHidden = $model->isHidden();
             $field = $model->getFieldName();
             $type = $model->getType();
             $fields[$field] = ['i' => $model->getId(), 'h' => $isHidden, 't' => $type];
         }
         $this->cache->saveFields($className, $fields);
     }
     if (null !== $fields && isset($fields[$fieldName])) {
         $result = $fields[$fieldName];
     }
     return $result;
 }