You are here

function thunder_media_update_8102 in Thunder 8.2

Introduce image and video paragraph.

File

modules/thunder_media/thunder_media.install, line 649
Contains.

Code

function thunder_media_update_8102() {

  /** @var \Drupal\update_helper\Updater $updater */
  $updater = \Drupal::service('update_helper.updater');
  $updateLogger = $updater
    ->logger();
  \Drupal::service('module_installer')
    ->install([
    'config_update',
  ]);
  $configUpdater = \Drupal::service('config_update.config_update');
  $imports = [
    'paragraphs_type' => [
      'image',
      'video',
    ],
    'field_storage_config' => [
      'paragraph.field_image',
      'paragraph.field_video',
    ],
    'field_config' => [
      'paragraph.image.field_image',
      'paragraph.video.field_video',
    ],
    'view' => [
      'video_browser',
    ],
    'system.simple' => [
      'entity_browser.browser.video_browser',
    ],
    'entity_form_display' => [
      'paragraph.video.default',
      'paragraph.image.default',
    ],
    'entity_view_display' => [
      'paragraph.video.default',
      'paragraph.image.default',
      'paragraph.image.preview',
      'paragraph.video.preview',
    ],
  ];
  $successfulUpdate = TRUE;
  foreach ($imports as $type => $entities) {
    foreach ($entities as $entity) {
      try {
        $configUpdater
          ->import($type, $entity);
        $updateLogger
          ->info(t('Successfully imported configuration: @type -> @entity', [
          '@type' => $type,
          '@entity' => $entity,
        ]));
      } catch (\Exception $e) {
        $successfulUpdate = FALSE;
        $updateLogger
          ->warning(t('Unable to import config: @type -> @entity', [
          '@type' => $type,
          '@entity' => $entity,
        ]));
      }
    }
  }
  if ($successfulUpdate) {

    /** @var \Drupal\user\Entity\Role[] $roles */
    $roles = Role::loadMultiple([
      'editor',
      'seo',
    ]);
    foreach ($roles as $role) {
      try {
        $role
          ->grantPermission('access video_browser entity browser pages');
        $role
          ->save();
        $updateLogger
          ->info(t('Permission for accessing video browser is granted for @user_role user role.', [
          '@user_role' => $role
            ->id(),
        ]));
      } catch (EntityStorageException $storageException) {
        $successfulUpdate = FALSE;
        $updateLogger
          ->warning(t('Unable to change permissions for @user_role user role.', [
          '@user_role' => $role
            ->id(),
        ]));
      }
    }
    $fieldConfigs = [
      'node.article.field_paragraphs',
      'taxonomy_term.channel.field_paragraphs',
      'taxonomy_term.tags.field_paragraphs',
    ];
    foreach ($fieldConfigs as $fieldConfig) {

      /** @var \Drupal\field\Entity\FieldConfig $field */
      $field = FieldConfig::load($fieldConfig);
      if ($field) {
        $settings = $field
          ->getSetting('handler_settings');
        $settings['target_bundles']['image'] = 'image';
        $settings['target_bundles']['video'] = 'video';
        $settings['target_bundles_drag_drop']['image'] = [
          'enabled' => TRUE,
          'weight' => 10,
        ];
        $settings['target_bundles_drag_drop']['video'] = [
          'enabled' => TRUE,
          'weight' => 10,
        ];
        try {
          $field
            ->setSetting('handler_settings', $settings);
          $field
            ->save();
          $updateLogger
            ->info(t('Field @field_id successfully changed.', [
            '@field_id' => $field
              ->id(),
          ]));
        } catch (EntityStorageException $storageException) {
          $successfulUpdate = FALSE;
          $updateLogger
            ->warning(t('Unable to save changes for @field_id field.', [
            '@field_id' => $field
              ->id(),
          ]));
        }
      }
      else {
        $successfulUpdate = FALSE;
        $updateLogger
          ->warning(t('Unable to change field config for @fieldConfig.', [
          '@fieldConfig' => $fieldConfig,
        ]));
      }
    }

    // Update gallery and image entity browser settings.
    $expectedConfigs['multiple_image_browser']['display_configuration']['link_text'] = 'Select entities';
    $expectedConfigs['multiple_image_browser']['widgets']['7d7f8f45-f628-48a3-84a8-c962c73f39e8']['settings']['submit_text'] = 'Select entities';
    $expectedConfigs['image_browser']['display_configuration']['link_text'] = 'Select entities';
    $expectedConfigs['image_browser']['widgets']['f09e2255-6bd8-4301-ba02-1d446f7fca70']['settings']['submit_text'] = 'Select entities';

    // New configuration for entity browsers that should be applied.
    $newConfigs['multiple_image_browser']['display_configuration']['link_text'] = 'Select images';
    $newConfigs['multiple_image_browser']['widgets']['7d7f8f45-f628-48a3-84a8-c962c73f39e8']['settings']['submit_text'] = 'Select images';
    $newConfigs['image_browser']['display_configuration']['link_text'] = 'Select image';
    $newConfigs['image_browser']['widgets']['f09e2255-6bd8-4301-ba02-1d446f7fca70']['settings']['submit_text'] = 'Select image';
    foreach ($newConfigs as $browserId => $newConfig) {
      if (_thunder_media_update_entity_browser_config($browserId, $newConfig, $expectedConfigs[$browserId])) {
        $updateLogger
          ->info(t('Text for @browser_id entity browser is adjusted.', [
          '@browser_id' => $browserId,
        ]));
      }
      else {
        $successfulUpdate = FALSE;
        $updateLogger
          ->warning(t('Unable to update @browser_id entity browser configuration.', [
          '@browser_id' => $browserId,
        ]));
      }
    }
  }
  try {

    /** @var \Drupal\update_helper_checklist\UpdateChecklist $updateChecklist */
    $updateChecklist = \Drupal::service('update_helper_checklist.update_checklist');
    if ($successfulUpdate) {
      $updateChecklist
        ->markUpdatesSuccessful([
        'thunder' => [
          'v1_1__image_video_paragraph',
        ],
      ], FALSE);
    }
    else {
      $updateChecklist
        ->markUpdatesFailed([
        'thunder' => [
          'v1_1__image_video_paragraph',
        ],
      ]);
    }
  } catch (EntityStorageException $ee) {
    $updateLogger
      ->warning(t('Unable to mark update in checklist.'));
  } catch (ServiceNotFoundException $se) {

    // If service is not available, we will just ignore it.
  }

  // Output log result depending on channel used for update execution.
  return $updateLogger
    ->output();
}