You are here

function _cms_content_sync_override_embedded_entity_save_status_entity in CMS Content Sync 2.1.x

Same name and namespace in other branches
  1. 8 cms_content_sync.module \_cms_content_sync_override_embedded_entity_save_status_entity()
  2. 2.0.x cms_content_sync.module \_cms_content_sync_override_embedded_entity_save_status_entity()
1 call to _cms_content_sync_override_embedded_entity_save_status_entity()
_cms_content_sync_override_embedded_entity_submit in ./cms_content_sync.module
Entity status update.

File

./cms_content_sync.module, line 1726
Module file for cms_content_sync.

Code

function _cms_content_sync_override_embedded_entity_save_status_entity(FieldableEntityInterface $entity, array $form, FormStateInterface $form_state, $tree_position = [], $force_disable = FALSE) {
  $entityFieldManager = Drupal::service('entity_field.manager');

  /** @var \Drupal\Core\Field\FieldDefinitionInterface[] $fields */
  $fields = $entityFieldManager
    ->getFieldDefinitions($entity
    ->getEntityTypeId(), $entity
    ->bundle());
  foreach ($fields as $name => $definition) {
    if ($definition
      ->getType() == 'entity_reference_revisions') {
      $subform =& $form[$name]['widget'];
      $count = $subform['#max_delta'];
      for ($i = 0; $i <= $count; $i++) {
        $value = $force_disable ? FALSE : boolval($form_state
          ->getValue(array_merge($tree_position, [
          $name,
          $i,
          'cms_content_sync_edit_override',
        ])));
        $embedded_entity_type = $form_state
          ->getValue(array_merge($tree_position, [
          $name,
          $i,
          'cms_content_sync_edit_override__entity_type',
        ]));
        $embedded_entity_uuid = $form_state
          ->getValue(array_merge($tree_position, [
          $name,
          $i,
          'cms_content_sync_edit_override__entity_uuid',
        ]));

        // In case editing has been restricted by other code, we have to
        // ignore this item.
        if (!$embedded_entity_type || !$embedded_entity_uuid) {
          continue;
        }
        $embedded_entity = Drupal::service('entity.repository')
          ->loadEntityByUuid($embedded_entity_type, $embedded_entity_uuid);
        if (!$embedded_entity) {
          continue;
        }
        if (!empty($subform[$i]['subform'])) {
          _cms_content_sync_override_embedded_entity_save_status_entity($embedded_entity, $subform[$i]['subform'], $form_state, [
            $name,
            $i,
            'subform',
          ], !$value);
        }
        $entity_status = EntityStatus::getInfosForEntity($embedded_entity
          ->getEntityTypeId(), $embedded_entity
          ->uuid());
        foreach ($entity_status as $info) {
          if (!$info || !$info
            ->getLastPull() || !$info
            ->getFlow()) {
            continue;
          }
          $config = $info
            ->getFlow()
            ->getController()
            ->getEntityTypeConfig($embedded_entity
            ->getEntityTypeId(), $embedded_entity
            ->bundle());
          if ($config['import_updates'] == PullIntent::PULL_UPDATE_FORCE_UNLESS_OVERRIDDEN) {
            if ($value != $info
              ->isOverriddenLocally()) {
              $info
                ->isOverriddenLocally($value);
              $info
                ->save();
              if (!$value && !$force_disable) {
                _cms_content_sync_reset_entity($embedded_entity, $info);
              }
            }
            break;
          }
        }
      }
    }
  }
}