bynder-4.0.0-beta1/bynder.install

bynder.install
<?php

/**
 * @file
 * Install, uninstall and update hooks for Bynder module.
 */

use Drupal\bynder\Plugin\Field\FieldType\BynderMetadataItem;
use Drupal\bynder\Plugin\media\Source\Bynder;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Utility\UpdateException;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\system\Entity\Action;

/**
 * Implements hook_requirements().
 */
function bynder_requirements($phase) {
  $requirements = [];

  // Test if we can connect to the Bynder API.
  if ($phase === 'runtime') {
    $api = \Drupal::service('bynder_api');
    try {
      $api->getBrands();
      $requirements['bynder'] = [
        'title' => t('Bynder'),
        'value' => t('Connected to @url', ['@url' => \Drupal::config('bynder.settings')->get('account_domain')]),
      ];
    }
    catch (\Exception $e) {
      $requirements['bynder'] = [
        'title' => t('Bynder'),
        'value' => t('Error connecting to @url', ['@url' => \Drupal::config('bynder.settings')->get('account_domain')]),
        'description' => $e->getMessage(),
        'severity' => REQUIREMENT_ERROR,
      ];
    }
  }

  return $requirements;
}

/**
 * Implements hook_install().
 */
function bynder_install() {
  $source = \Drupal::service('extension.list.module')->getPath('bynder') . '/images/icons';
  $destination = \Drupal::config('media.settings')->get('icon_base_uri');
  \Drupal::service('file_system')->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
  $files = \Drupal::service('file_system')->scanDirectory($source, '/.*\.(svg|png|jpg|jpeg|gif)$/');
  foreach ($files as $file) {
    // When reinstalling this module we don't want to copy the icons when they
    // already exist. The icons could be replaced (by a contrib module or
    // manually), so we don't want to replace the existing files. Removing the
    // files when we uninstall could also be a problem if the files are
    // referenced somewhere else. Since showing an error that it was not
    // possible to copy the files is also confusing, we silently do nothing.
    if (!file_exists($destination . DIRECTORY_SEPARATOR . $file->filename)) {
      \Drupal::service('file_system')->copy($file->uri, $destination, FileSystemInterface::EXISTS_ERROR);
    }
  }
}

/**
 * Install Bynder metaproperty schema.
 */
function bynder_update_8001() {
  // Removed so it won't run on sites that didn't run it yet.
}

/**
 * Remove unecessary database table.
 */
function bynder_update_8002() {
  $database = \Drupal::database();
  if ($database->tableExists('bynder_metaproperty_information')) {
    $database->dropTable('bynder_metaproperty_information');
  }
}

/**
 * Update module's configuration.
 */
function bynder_update_8003() {
  \Drupal::configFactory()->getEditable('bynder.settings')
    ->set('cache_lifetime', 86400)
    ->clear('derivatives')
    ->save();
}

/**
 * Update cached information.
 */
function bynder_update_8004() {
  \Drupal::service('bynder_api')->updateCachedData();
}

/**
 * Set default timeout for API requests.
 */
function bynder_update_8005() {
  \Drupal::configFactory()->getEditable('bynder.settings')
    ->set('timeout', 10)
    ->save();
}

/**
 * Creates bynder_metadata field and set the update frequency.
 */
function bynder_update_8008() {
  // Clear field type plugin caches to allow the new field to be installed.
  \Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions();

  // Update local metadata information once per week (in seconds).
  \Drupal::configFactory()->getEditable('bynder.settings')->set('update_frequency', 7 * 24 * 60 * 60)->save();

  // Add the action config entity to update the Bynder metadata.
  if (!Action::load('bynder_metadata')) {
    $action = Action::create([
      'id' => 'bynder_metadata',
      'label' => 'Update Bynder metadata',
      'type' => 'media',
      'plugin' => 'bynder_metadata',
    ]);
    $action->save();
  }

  // Do nothing if the field already exists.
  if ($metadata_field_storage = FieldStorageConfig::loadByName('media', BynderMetadataItem::METADATA_FIELD_NAME)) {
    if ($metadata_field_storage->getType() !== 'bynder_metadata') {
      throw new UpdateException('The "bynder_metadata" media field already exists. Please remove the it before running the update function.');
    }

    return;
  }

  $entity_type_manager = \Drupal::entityTypeManager();
  $metadata_field_storage = NULL;

  // Create a field instance for each of the Bynder media types.
  foreach (\Drupal::service('bynder')->getBynderMediaTypes() as $media_type_id => $media_type) {
    /** @var \Drupal\bynder\Plugin\media\Source\Bynder $source */
    $source = $media_type->getSource();
    if (!$metadata_field_storage) {
      $metadata_field_storage = $source->createMetadataFieldStorage();
      $metadata_field_storage->save();
    }

    $metadata_field = $source->createMetadataField($media_type);
    $metadata_field->save();

    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
    $form_display = $entity_type_manager->getStorage('entity_form_display')->load("media.$media_type_id.default");
    if ($form_display) {
      $form_display->removeComponent(BynderMetadataItem::METADATA_FIELD_NAME)->save();
    }

    /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $view_display */
    $view_display = $entity_type_manager->getStorage('entity_view_display')->load("media.$media_type_id.default");
    if ($view_display) {
      $view_display->removeComponent(BynderMetadataItem::METADATA_FIELD_NAME)->save();
    }
  }
}

/**
 * Enables the bynder_usage submodule.
 */
function bynder_update_8009() {
  /** @var \Drupal\Core\Extension\ModuleExtensionList $module_list */
  $module_list = \Drupal::service('extension.list.module');
  if ($module_list->exists('entity_usage')) {
    \Drupal::service('module_installer')->install(['bynder_usage']);
  }

  if (!$module_list->exists('dropzonejs') || !$module_list->exists('entity_usage')) {
    return t('Dropzonejs and Entity Usage are now optional dependencies and no longer required. Explicitly require these dependencies to keep upload and usage functionality available: composer require drupal/dropzonejs drupal/entity_usage:1.*');
  }
}

/**
 * Enables the jquery_ui_tooltip module.
 */
function bynder_update_8300() {
  /** @var \Drupal\Core\Extension\ModuleExtensionList $module_list */
  $module_list = \Drupal::service('extension.list.module');
  if ($module_list->exists('jquery_ui_tooltip')) {
    \Drupal::service('module_installer')->install(['jquery_ui_tooltip']);
  }
}

/**
 * Remove old configuration, manual reconfiguration is necessary.
 */
function bynder_update_8400() {
  $config = \Drupal::configFactory()->getEditable('bynder.settings');
  $config->set('account_domain', str_replace('https://', '', $config->get('account_domain')));
  $config->clear('consumer_key');
  $config->clear('consumer_secret');
  $config->clear('token');
  $config->clear('token_secret');
  $config->save();

  return t('Bynder configuration has changed, a permanent token and optionally client id/secret is now required instead of the previous API keys. Reconfigure it on the configuration page.');
}


/**
 * Creates bynder_tranformation field.
 */
function bynder_update_8401() {
  // Do nothing if the field already exists.
  if ($transformations_field_storage = FieldStorageConfig::loadByName('media', Bynder::TRANSFORMATIONS_FIELD_NAME)) {
    if ($transformations_field_storage->getType() !== 'text') {
      throw new UpdateException('The "bynder_transformations" media field already exists. Please remove the it before running the update function.');
    }

    return;
  }

  $entity_type_manager = \Drupal::entityTypeManager();
  $transformations_field_storage = NULL;

  // Create a field instance for each of the Bynder media types.
  foreach (\Drupal::service('bynder')->getBynderMediaTypes() as $media_type_id => $media_type) {
    /** @var \Drupal\bynder\Plugin\media\Source\Bynder $source */
    $source = $media_type->getSource();
    if (!$transformations_field_storage) {
      $transformations_field_storage = $source->createTransformationsFieldStorage();
      $transformations_field_storage->save();
    }

    $transformations_field = $source->createTransformationsField($media_type);
    $transformations_field->save();
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc