entity_usage.install in Entity Usage 8.4
Same filename and directory in other branches
Install, update and uninstall functions for entity_usage module.
File
entity_usage.installView source
<?php
/**
* @file
* Install, update and uninstall functions for entity_usage module.
*/
use Drupal\Core\Url;
use Drupal\Core\Site\Settings;
use Drupal\entity_usage\Controller\ListUsageController;
/**
* Implements hook_schema().
*/
function entity_usage_schema() {
$schema['entity_usage'] = [
'description' => 'Track entities that reference other entities.',
'fields' => [
'target_id' => [
'description' => 'The target entity ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'target_id_string' => [
'description' => 'The target ID, when the entity uses string IDs.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'target_type' => [
'description' => 'The target entity type.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'source_id' => [
'description' => 'The source entity ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'source_id_string' => [
'description' => 'The source ID, when the entity uses string IDs.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => FALSE,
],
'source_type' => [
'description' => 'The source entity type.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'source_langcode' => [
'description' => 'The source entity language code.',
'type' => 'varchar_ascii',
'length' => 12,
'not null' => TRUE,
'default' => '',
],
'source_vid' => [
'description' => 'The source entity revision ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'method' => [
'description' => 'The method used to track the target, generally the plugin ID.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'field_name' => [
'description' => 'The field in the source entity containing the target entity.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'count' => [
'description' => 'The number of times the target entity is referenced in this case.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
],
'primary key' => [
'target_id',
'target_id_string',
'target_type',
'source_id',
'source_type',
'source_langcode',
'source_vid',
'method',
'field_name',
],
'indexes' => [
'target_entity' => [
'target_type',
'target_id',
],
'target_entity_string' => [
'target_type',
'target_id_string',
],
'source_entity' => [
'source_type',
'source_id',
],
'source_entity_string' => [
'source_type',
'source_id_string',
],
],
];
return $schema;
}
/**
* Include "method" also as primary key for the {entity_usage} table.
*/
function entity_usage_update_8001(&$sandbox) {
$database = \Drupal::database();
$database
->schema()
->dropPrimaryKey('entity_usage');
$new_primary_keys = [
't_id',
't_type',
're_id',
're_type',
'method',
];
$database
->schema()
->addPrimaryKey('entity_usage', $new_primary_keys);
}
/**
* Recreate the entity usage table with the new schema.
*/
function entity_usage_update_8201(&$sandbox) {
$schema = \Drupal::database()
->schema();
$schema
->dropTable('entity_usage');
$new_table_schema = entity_usage_schema();
$schema
->createTable('entity_usage', $new_table_schema['entity_usage']);
}
/**
* Trigger entity usage statistics in the new schema.
*/
function entity_usage_update_8202(&$sandbox) {
// This flag is here only to ensure that sites that have already executed
// update 8202 will not run entity_usage_post_update_regenerate_2x() again.
\Drupal::state()
->set('entity_usage_2x_regenerate', TRUE);
}
/**
* Re-generate entity_usage statistics.
*/
function entity_usage_post_update_regenerate_2x(&$sandbox) {
// The 1.x to 2.x upgrade is no longer used in the 4.x version and the upgrade
// from 1.x to 4.x is not supported. Sites are advised to update to 2.x
// version first, before updating to 4.x.
}
/**
* Include "target_id_string" also as primary key in schema.
*/
function entity_usage_update_8203(&$sandbox) {
// Left empty on purpose.
}
/**
* Add source entity index to the entity_usage table.
*/
function entity_usage_update_8204(&$sandbox) {
// This is deliberately duplicated, instead of calling hook_schema() to
// obtain it.
$spec = [
'description' => 'Track entities that reference other entities.',
'fields' => [
'target_id' => [
'description' => 'The target entity ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'target_id_string' => [
'description' => 'The target ID, when the entity uses string IDs.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'target_type' => [
'description' => 'The target entity type.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'source_id' => [
'description' => 'The source entity ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'source_id_string' => [
'description' => 'The source ID, when the entity uses string IDs.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => FALSE,
],
'source_type' => [
'description' => 'The source entity type.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'source_langcode' => [
'description' => 'The source entity language code.',
'type' => 'varchar_ascii',
'length' => 12,
'not null' => TRUE,
'default' => '',
],
'source_vid' => [
'description' => 'The source entity revision ID.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
'method' => [
'description' => 'The method used to track the target, generally the plugin ID.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'field_name' => [
'description' => 'The field in the source entity containing the target entity.',
'type' => 'varchar_ascii',
'length' => 128,
'not null' => TRUE,
'default' => '',
],
'count' => [
'description' => 'The number of times the target entity is referenced in this case.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
],
],
'primary key' => [
'target_id',
'target_id_string',
'target_type',
'source_id',
'source_type',
'source_langcode',
'source_vid',
'method',
'field_name',
],
'indexes' => [
'target_entity' => [
'target_type',
'target_id',
],
'target_entity_string' => [
'target_type',
'target_id_string',
],
'source_entity' => [
'source_type',
'source_id',
],
'source_entity_string' => [
'source_type',
'source_id_string',
],
],
];
$schema = \Drupal::database()
->schema();
if (!$schema
->indexExists('entity_usage', 'source_entity')) {
$schema
->addIndex('entity_usage', 'source_entity', [
'source_type',
'source_id',
], $spec);
}
if (!$schema
->indexExists('entity_usage', 'source_entity_string')) {
$schema
->addIndex('entity_usage', 'source_entity_string', [
'source_type',
'source_id_string',
], $spec);
}
}
/**
* Initialize the new "usage_controller_items_per_page" config value to 25.
*/
function entity_usage_update_8205(&$sandbox) {
$config = \Drupal::configFactory()
->getEditable('entity_usage.settings');
$items_per_page = $config
->get('usage_controller_items_per_page');
if (empty($items_per_page)) {
$config
->set('usage_controller_items_per_page', ListUsageController::ITEMS_PER_PAGE_DEFAULT)
->save(TRUE);
}
}
Functions
Name | Description |
---|---|
entity_usage_post_update_regenerate_2x | Re-generate entity_usage statistics. |
entity_usage_schema | Implements hook_schema(). |
entity_usage_update_8001 | Include "method" also as primary key for the {entity_usage} table. |
entity_usage_update_8201 | Recreate the entity usage table with the new schema. |
entity_usage_update_8202 | Trigger entity usage statistics in the new schema. |
entity_usage_update_8203 | Include "target_id_string" also as primary key in schema. |
entity_usage_update_8204 | Add source entity index to the entity_usage table. |
entity_usage_update_8205 | Initialize the new "usage_controller_items_per_page" config value to 25. |