You are here

function thunder_paragraphs_update_8001 in Thunder 8.2

Change gallery paragraph to use simple inline form widget.

File

modules/thunder_paragraphs/thunder_paragraphs.install, line 33
Contains update hooks for Thunder Paragraphs module.

Code

function thunder_paragraphs_update_8001() {

  // List of expected configurations, to ensure it's provided by our configs.
  $expectedConfigs['field.field.paragraph.gallery.field_media']['required'] = FALSE;
  $expectedConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['type'] = 'inline_entity_form_complex';
  $expectedConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['settings']['allow_existing'] = TRUE;
  $expectedConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['settings']['allow_new'] = TRUE;
  $expectedConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['settings']['match_operator'] = 'CONTAINS';
  $expectedConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['third_party_settings']['entity_browser_entity_form']['entity_browser_id'] = 'gallery_browser';

  // Config for Gallery paragraph field and field from display.
  $newConfigs['field.field.paragraph.gallery.field_media']['required'] = TRUE;
  $newConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['type'] = 'inline_entity_form_simple';
  $newConfigs['core.entity_form_display.paragraph.gallery.default']['content']['field_media']['settings']['form_mode'] = 'default';

  // Configurations that will be overwritten without nested merging.
  $forcedConfigs['core.entity_form_display.paragraph.gallery.default'] = [
    [
      'key_path' => [
        'content',
        'field_media',
        'third_party_settings',
      ],
      'value' => [],
    ],
  ];

  // Configurations that will be removed.
  $obsoleteConfigs['core.entity_form_display.paragraph.gallery.default'] = [
    [
      'content',
      'field_media',
      'settings',
      'allow_existing',
    ],
    [
      'content',
      'field_media',
      'settings',
      'allow_new',
    ],
    [
      'content',
      'field_media',
      'settings',
      'match_operator',
    ],
  ];

  /** @var \Drupal\update_helper\UpdateLogger $updateLogger */
  $updateLogger = \Drupal::service('update_helper.logger');

  /** @var \Drupal\Core\Config\ConfigFactoryInterface $configFactory */
  $configFactory = \Drupal::service('config.factory');
  foreach ($newConfigs as $configName => $newConfig) {

    /** @var \Drupal\Core\Config\Config $paragraphConfig */
    $config = $configFactory
      ->getEditable($configName);
    $configData = $config
      ->get();

    // Check that configuration exists before executing update.
    if (empty($configData) || DiffArray::diffAssocRecursive($expectedConfigs[$configName], $configData)) {
      $updateLogger
        ->warning(t('Unable to update configuration for "@configName".', [
        '@configName' => $configName,
      ]));
    }
    else {
      $mergedConfig = NestedArray::mergeDeep($configData, $newConfig);

      // Remove obsolete configurations.
      if (isset($obsoleteConfigs[$configName])) {
        foreach ($obsoleteConfigs[$configName] as $keyPath) {
          NestedArray::unsetValue($mergedConfig, $keyPath);
        }
      }

      // Set exact values for nested arrays.
      if (isset($forcedConfigs[$configName])) {
        foreach ($forcedConfigs[$configName] as $forcedValue) {
          NestedArray::unsetValue($mergedConfig, $forcedValue['key_path'], $forcedValue['value']);
        }
      }
      $config
        ->setData($mergedConfig);
      $config
        ->save();
    }
  }
  $updateLogger
    ->info('Gallery paragraph is updated.');
  return $updateLogger
    ->output();
}