You are here

gutenberg.install in Gutenberg 8.2

Same filename and directory in other branches
  1. 8 gutenberg.install

Install, update and uninstall functions for the gutenberg module.

File

gutenberg.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the gutenberg module.
 */
use Drupal\Core\Database\Database;

/**
 * Implements hook_schema().
 */
function gutenberg_schema() {
  $schema['file_managed_data'] = [
    'description' => '',
    'fields' => [
      'fid' => [
        'description' => 'The {file_managed}.fid this record affects.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'data' => [
        'type' => 'blob',
        'size' => 'big',
        'description' => 'A serialized configuration object data.',
        'not null' => FALSE,
      ],
    ],
  ];
  return $schema;
}

/**
 * Add file_managed_data table to database when updating from RC1.
 */
function gutenberg_update_8001() {
  $spec = gutenberg_schema();
  $schema = Database::getConnection()
    ->schema();
  if (!$schema
    ->tableExists('file_managed_data')) {
    $schema
      ->createTable('file_managed_data', $spec['file_managed_data']);
  }
}

/**
 * Enable the new Gutenberg filter, uninstalling the old ones.
 */
function gutenberg_update_8201(&$sandbox) {
  $config_factory = \Drupal::configFactory();

  // Iterate on all text formats config entities.
  foreach ($config_factory
    ->listAll('filter.format.') as $name) {
    $filter = $config_factory
      ->getEditable($name);
    $deprecated_filters = [
      'filter_block',
      'filter_comment_delimiter',
      'filter_field_mapping',
      'filter_mapping_fields',
      'filter_media_entity_block',
      'filter_oembed',
      'filter_reusable_block',
    ];
    $changed = FALSE;
    $filters = $filter
      ->get('filters');
    $processor_settings = [];

    // Disable deprecated filters in favour of the processor services.
    foreach ($deprecated_filters as $deprecated_filter) {
      if (isset($filters[$deprecated_filter])) {
        if ($deprecated_filter === 'filter_oembed') {
          $processor_settings['oembed'] = [
            'providers' => $filters[$deprecated_filter]['settings']['oembed_providers'],
            'maxwidth' => (int) $filters[$deprecated_filter]['settings']['oembed_maxwidth'],
          ];
        }
        unset($filters[$deprecated_filter]);
        $changed = TRUE;
      }
    }
    if ($changed) {

      // Add the gutenberg filter.
      $filters['gutenberg'] = [
        'id' => 'gutenberg',
        'provider' => 'gutenberg',
        'status' => TRUE,
        'weight' => 1,
        'settings' => [
          'processor_settings' => $processor_settings,
        ],
      ];
      $filter
        ->set('filters', $filters);
      $filter
        ->save(TRUE);
    }
  }
  return t('Migrated existing Gutenberg text filter settings.');
}

/**
 * Apply the Gutenberg formatter on the Reusable blocks body.
 */
function gutenberg_update_8202(&$sandbox) {
  $config_factory = \Drupal::configFactory();
  foreach ($config_factory
    ->listAll('core.entity_view_display.block_content.reusable_block.') as $name) {
    $display_mode = $config_factory
      ->getEditable($name);
    if ($display_mode
      ->get('content.body')) {
      $display_mode
        ->set('content.body.type', 'gutenberg_text');
      $display_mode
        ->set('content.body.settings', [
        'format' => 'gutenberg',
        'content_only' => TRUE,
      ]);
      $display_mode
        ->save(TRUE);
    }
  }
}

/**
 * Rename Gutenberg permission name to "Use gutenberg".
 */
function gutenberg_update_8203(&$sandbox) {

  // Load roles with the legacy gutenberg administer role.
  $roles = user_roles(FALSE, 'gutenberg administer');
  foreach ($roles as $role) {
    $role
      ->revokePermission('gutenberg administer');
    $role
      ->grantPermission('use gutenberg');
    $role
      ->save();
  }
}

/**
 * Implements hook_uninstall().
 */
function gutenberg_uninstall() {

  // Delete text format settings.
  Drupal::configFactory()
    ->getEditable('filter.format.gutenberg')
    ->delete();
}

Functions

Namesort descending Description
gutenberg_schema Implements hook_schema().
gutenberg_uninstall Implements hook_uninstall().
gutenberg_update_8001 Add file_managed_data table to database when updating from RC1.
gutenberg_update_8201 Enable the new Gutenberg filter, uninstalling the old ones.
gutenberg_update_8202 Apply the Gutenberg formatter on the Reusable blocks body.
gutenberg_update_8203 Rename Gutenberg permission name to "Use gutenberg".