/** * @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; }
/** * @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; }
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)); }
/** * @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; }