public static function Flow::getDefaultFieldConfigForEntityType in CMS Content Sync 2.0.x
Same name and namespace in other branches
- 8 src/Entity/Flow.php \Drupal\cms_content_sync\Entity\Flow::getDefaultFieldConfigForEntityType()
- 2.1.x src/Entity/Flow.php \Drupal\cms_content_sync\Entity\Flow::getDefaultFieldConfigForEntityType()
Parameters
$type:
$bundle:
null $existing:
null $field:
Return value
array
2 calls to Flow::getDefaultFieldConfigForEntityType()
- Flow::createFlow in src/
Entity/ Flow.php - Create a flow configuration programmatically.
- Flow::updateEntityTypeBundleVersion in src/
Entity/ Flow.php - Update the version of an entity type bundle within a flow configuration.
File
- src/
Entity/ Flow.php, line 780
Class
- Flow
- Defines the "Content Sync - Flow" entity.
Namespace
Drupal\cms_content_sync\EntityCode
public static function getDefaultFieldConfigForEntityType($type, $bundle, $existing = null, $field = null) {
if ($field) {
$field_default_values = [
'export' => null,
'import' => null,
];
$entity_type = \Drupal::entityTypeManager()
->getDefinition($type);
// @todo Should be gotten from the Entity Type Handler instead.
$forbidden_fields = [
// These are not relevant or misleading when synchronized.
'revision_default',
'revision_translation_affected',
'content_translation_outdated',
// Field collections.
'host_type',
// Files.
'uri',
'filemime',
'filesize',
// Media.
'thumbnail',
// Taxonomy.
'parent',
// These are standard fields defined by the Flow
// Entity type that entities may not override (otherwise
// these fields will collide with CMS Content Sync functionality)
$entity_type
->getKey('bundle'),
$entity_type
->getKey('id'),
$entity_type
->getKey('uuid'),
$entity_type
->getKey('label'),
$entity_type
->getKey('revision'),
];
$pools = Pool::getAll();
if (count($pools)) {
$reserved = reset($pools)
->getClient()
->getReservedPropertyNames();
$forbidden_fields = array_merge($forbidden_fields, $reserved);
}
if (false !== in_array($field, $forbidden_fields)) {
$field_default_values['handler'] = 'ignore';
$field_default_values['export'] = PushIntent::PUSH_DISABLED;
$field_default_values['import'] = PullIntent::PULL_DISABLED;
return $field_default_values;
}
$field_handler_service = \Drupal::service('plugin.manager.cms_content_sync_field_handler');
$field_definition = \Drupal::service('entity_field.manager')
->getFieldDefinitions($type, $bundle)[$field];
$field_handlers = $field_handler_service
->getHandlerOptions($type, $bundle, $field, $field_definition, true);
if (empty($field_handlers)) {
throw new \Exception('Unsupported field type ' . $field_definition
->getType() . ' for field ' . $type . '.' . $bundle . '.' . $field);
}
reset($field_handlers);
$handler_id = empty($field_default_values['handler']) ? key($field_handlers) : $field_default_values['handler'];
$field_default_values['handler'] = $handler_id;
$field_default_values['export'] = PushIntent::PUSH_AUTOMATICALLY;
$field_default_values['import'] = PullIntent::PULL_AUTOMATICALLY;
$handler = $field_handler_service
->createInstance($handler_id, [
'entity_type_name' => $type,
'bundle_name' => $bundle,
'field_name' => $field,
'field_definition' => $field_definition,
'settings' => $field_default_values,
'sync' => null,
]);
$advanced_settings = $handler
->getHandlerSettings($field_default_values);
if (count($advanced_settings)) {
foreach ($advanced_settings as $name => $element) {
$field_default_values['handler_settings'][$name] = $element['#default_value'];
}
}
return $field_default_values;
}
$entityTypeManager = \Drupal::service('entity_type.manager');
$type = $entityTypeManager
->getDefinition($type, false);
$field_definition = $type ? \Drupal::service('entity_field.manager')
->getFieldDefinitions($type, $bundle) : false;
$result = [];
if ($field_definition) {
foreach ($field_definition as $key => $field) {
$field_id = $type . '-' . $bundle . '-' . $key;
if ($existing && isset($existing[$field_id])) {
continue;
}
$result[$field_id] = self::getDefaultFieldConfigForEntityType($type, $bundle, null, $key);
}
}
return $result;
}