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