file_entity-8.x-2.x-dev/file_entity.install

file_entity.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the file_entity module.
 */

use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\user\Entity\Role;
use Drupal\user\RoleInterface;
use Drupal\views\Entity\View;

/**
 * Implements hook_schema().
 */
function file_entity_schema() {
  $schema['file_metadata'] = array(
    'description' => 'Cache images dimensions.',
    'fields' => array(
      'fid' => array(
        'description' => 'The {file_managed}.fid of the metadata.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'name' => array(
        'description' => "The name of the metadata (e.g. 'width').",
        'type' => 'varchar',
        'length' => '128',
        'not null' => TRUE,
      ),
      'value' => array(
        'description' => "The value of the metadata (e.g. '200px').",
        'type' => 'blob',
        'not null' => FALSE,
        'size' => 'big',
        'serialize' => TRUE,
      ),
    ),
    'primary key' => array('fid', 'name'),
    'foreign keys' => array(
      'file_managed' => array(
        'table' => 'file_managed',
        'columns' => array('fid' => 'fid'),
      ),
    ),
  );
  return $schema;
}

/**
 * Implements hook_install().
 */
function file_entity_install() {

  // Install the type field first, then update the entity type, and then
  // update the field again.

  /** @var \Drupal\Core\Field\BaseFieldDefinition $type_storage_definition */
  $type_storage_definition = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('file')['type'];
  $type_storage_definition->setInitialValue(FILE_TYPE_NONE);
  \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('type', 'file', 'file_entity', $type_storage_definition);

  $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('file');
  $keys = $entity_type->getKeys();
  $keys['bundle'] = 'type';
  $entity_type->set('entity_keys', $keys);
  \Drupal::entityDefinitionUpdateManager()->updateEntityType($entity_type);

  \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('type', 'file', 'file_entity', $type_storage_definition);

  // Set permissions.
  $roles = Role::loadMultiple();
  foreach ($roles as $rid => $role) {
    user_role_grant_permissions($rid, array('view files'));
  }

  // Classify existing files according to the currently defined file types.
  // Queue all files to be classified during cron runs using the Queue API.
  $queue = \Drupal::queue('file_entity_type_determine');
  $ids = \Drupal::entityQuery('file')
    ->accessCheck(FALSE)
    ->execute();
  foreach ($ids as $id) {
    $queue->createItem($id);
  }

  // Warn users that existing files will not have a file type until the queue
  // has been processed.
  if ($queue->numberOfItems()) {
    \Drupal::messenger()->addMessage(t('Existing files must be classified according to the currently defined file types. These files have been queued for processing and will have their file type determined during cron runs.'));
  }
}

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

  // Delete all configurable fields first, otherwise they are being deleted
  // in the wrong order.
  $field_storages = \Drupal::entityTypeManager()->getStorage('field_storage_config')->loadByProperties(['entity_type' => 'file']);
  foreach ($field_storages as $field_storage) {
    $field_storage->delete();
  }

  // Uninstall the file.type field along with the database column.
  $update_manager = Drupal::service('entity.definition_update_manager');
  $definition = $update_manager->getFieldStorageDefinition('type', 'file');
  $update_manager->uninstallFieldStorageDefinition($definition);

  $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('file');
  $keys = $entity_type->getKeys();
  $keys['bundle'] = '';
  $entity_type->set('entity_keys', $keys);
  \Drupal::entityDefinitionUpdateManager()->updateEntityType($entity_type);

  // Enable the core files view.
  if ($view = View::load('files')) {
    $view->set('status', TRUE);
    $view->save();
  }
}

/**
 * Update existing bogus entries for File types Document.
 */
function file_entity_update_8002(&$sandbox) {
  foreach (\Drupal::configFactory()->listAll('file_entity') as $config_name) {
    $config = \Drupal::configFactory()->getEditable($config_name);
    $config->set('mimetypes', str_replace("\r", "", $config->get('mimetypes')));
    $config->save();
  }
}

/**
 * Update entity form displays to use the new entity browser widget.
 */
function file_entity_update_8003() {

  /** @var \Drupal\Core\Entity\Entity\EntityFormDisplay $form_display */
  foreach (EntityFormDisplay::loadMultiple() as $form_display) {
    $components = $form_display->getComponents();

    $changed = FALSE;
    foreach ($components as $name => $options) {
      if (isset($options['type']) && $options['type'] == 'file_entity_browser') {
        $options['type'] = 'entity_browser_file';
        $form_display->setComponent($name, $options);
        $changed = TRUE;
      }
    }

    if ($changed) {
      $form_display->save();
    }
  }

}

/**
 * Fix entity field mismatches on the file type field.
 */
function file_entity_update_8004() {

  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $original = $entity_definition_update_manager->getFieldStorageDefinition('type', 'file');
  $field_storage = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('file')['type'];

  /** @var \Drupal\Core\Entity\Schema\DynamicallyFieldableEntityStorageSchemaInterface $storage */
  $storage = \Drupal::entityTypeManager()->getStorage('file');

  // Do nothing if there is no field storage schema change reported.
  if ($original && !$storage->requiresFieldStorageSchemaChanges($field_storage, $original)) {
    return;
  }

  // Ensure that the type field is not null, update the actual schema and the
  // stored schema.
  $key_value = \Drupal::keyValue('entity.storage_schema.sql');
  $key_name = 'file.field_schema_data.type';

  $storage_schema = $key_value->get($key_name);
  $storage_schema['file_managed']['fields']['type']['not null'] = TRUE;

  \Drupal::database()->schema()->changeField('file_managed', 'type', 'type', $storage_schema['file_managed']['fields']['type']);
  $key_value->set($key_name, $storage_schema);
}

/**
 * Fix the last installed definition for the 'file' entity type.
 */
function file_entity_update_8005() {
  $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('file');
  $keys = $entity_type->getKeys();
  if (empty($keys['bundle'])) {
    $keys['bundle'] = 'type';
    $entity_type->set('entity_keys', $keys);
    \Drupal::entityDefinitionUpdateManager()->updateEntityType($entity_type);
  }
}

/**
 *
 */
function file_entity_update_8201() {
  // Due to reverting 2655844, need to go forward from here, cannot go backwards.
}

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

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