339 lines
9.0 KiB
Plaintext
339 lines
9.0 KiB
Plaintext
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Install, update and uninstall functions for the block module.
|
|
*/
|
|
use Drupal\Component\Uuid\Uuid;
|
|
use Drupal\Core\Language\Language;
|
|
|
|
/**
|
|
* Implements hook_install().
|
|
*/
|
|
function block_install() {
|
|
|
|
// Block should go first so that other modules can alter its output
|
|
// during hook_page_alter(). Almost everything on the page is a block,
|
|
// so before block module runs, there will not be much to alter.
|
|
module_set_weight('block', -5);
|
|
}
|
|
|
|
/**
|
|
* @addtogroup updates-7.x-to-8.x
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* Implements hook_update_dependencies().
|
|
*/
|
|
function block_update_dependencies() {
|
|
// Convert role IDs after User module converted {role}.
|
|
$dependencies['block'][8002] = array(
|
|
'user' => 8002,
|
|
);
|
|
// Migrate users.data after User module prepared the tables.
|
|
$dependencies['block'][8005] = array(
|
|
'user' => 8016,
|
|
);
|
|
return $dependencies;
|
|
}
|
|
|
|
/**
|
|
* Block cache is always enabled in 8.x.
|
|
*
|
|
* @ingroup config_upgrade
|
|
*/
|
|
function block_update_8000() {
|
|
update_variable_del('block_cache');
|
|
}
|
|
|
|
/**
|
|
* Creates table {block_language} for language visibility settings per block.
|
|
*/
|
|
function block_update_8001() {
|
|
$schema = array(
|
|
'description' => 'Sets up display criteria for blocks based on langcode.',
|
|
'fields' => array(
|
|
'module' => array(
|
|
'type' => 'varchar',
|
|
'length' => 64,
|
|
'not null' => TRUE,
|
|
'description' => "The block's origin module, from {block}.module.",
|
|
),
|
|
'delta' => array(
|
|
'type' => 'varchar',
|
|
'length' => 32,
|
|
'not null' => TRUE,
|
|
'description' => "The block's unique delta within module, from {block}.delta.",
|
|
),
|
|
'type' => array(
|
|
'type' => 'varchar',
|
|
'length' => 32,
|
|
'not null' => TRUE,
|
|
'description' => "Language type name. Applied to filter the block by that type.",
|
|
),
|
|
'langcode' => array(
|
|
'type' => 'varchar',
|
|
'length' => 32,
|
|
'not null' => TRUE,
|
|
'description' => "The machine-readable name of this language from {language}.langcode.",
|
|
),
|
|
),
|
|
'primary key' => array('module', 'delta', 'type', 'langcode'),
|
|
);
|
|
db_create_table('block_language', $schema);
|
|
}
|
|
|
|
/**
|
|
* Replace serial role IDs with machine name strings.
|
|
*
|
|
* @see user_update_8002()
|
|
*/
|
|
function block_update_8002() {
|
|
// Change serial rid column into string.
|
|
$column = array(
|
|
'type' => 'varchar',
|
|
'length' => 64,
|
|
'not null' => TRUE,
|
|
'description' => "The user's role ID from {users_roles}.rid.",
|
|
);
|
|
db_change_field('block_role', 'rid', 'rid', $column);
|
|
|
|
// Rename the built-in serial role IDs into the hardcoded machine names.
|
|
db_update('block_role')
|
|
->fields(array('rid' => DRUPAL_ANONYMOUS_RID))
|
|
->condition('rid', 1)
|
|
->execute();
|
|
db_update('block_role')
|
|
->fields(array('rid' => DRUPAL_AUTHENTICATED_RID))
|
|
->condition('rid', 2)
|
|
->execute();
|
|
}
|
|
|
|
/**
|
|
* Increase {block}.title length to 255 characters.
|
|
*/
|
|
function block_update_8003() {
|
|
db_change_field('block', 'title', 'title', array(
|
|
'type' => 'varchar',
|
|
'length' => 255,
|
|
'not null' => TRUE,
|
|
'default' => '',
|
|
'description' => 'Custom title for the block. (Empty string will use block default title, - None - will remove the title, text will cause block to use specified title.)',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Rename default menu names.
|
|
*/
|
|
function block_update_8004() {
|
|
// System menu's new block deltas are prefixed with 'menu-'.
|
|
$map = array(
|
|
'navigation' => 'menu-tools',
|
|
'management' => 'menu-admin',
|
|
'user-menu' => 'menu-account',
|
|
'main-menu' => 'menu-main',
|
|
);
|
|
foreach ($map as $old => $new) {
|
|
db_update('block')
|
|
->condition('module', 'system')
|
|
->condition('delta', $old)
|
|
->fields(array('delta' => $new))
|
|
->execute();
|
|
db_update('block_language')
|
|
->condition('module', 'system')
|
|
->condition('delta', $old)
|
|
->fields(array('delta' => $new))
|
|
->execute();
|
|
db_update('block_role')
|
|
->condition('module', 'system')
|
|
->condition('delta', $old)
|
|
->fields(array('delta' => $new))
|
|
->execute();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Migrate {users}.data into {users_data}.
|
|
*/
|
|
function block_update_8005() {
|
|
$query = db_select('_d7_users_data', 'ud');
|
|
$query->addField('ud', 'uid');
|
|
$query->addExpression("'block'", 'module');
|
|
$query->addExpression("'block'", 'name');
|
|
// Take over the extracted and serialized value in {_d7_users_data} as-is.
|
|
$query->addField('ud', 'value');
|
|
$query->addExpression('1', 'serialized');
|
|
$query->condition('name', 'block');
|
|
|
|
db_insert('users_data')
|
|
->from($query)
|
|
->execute();
|
|
|
|
db_delete('_d7_users_data')
|
|
->condition('name', 'block')
|
|
->execute();
|
|
}
|
|
|
|
/**
|
|
* Enable the Custom Block module.
|
|
*/
|
|
function block_update_8006() {
|
|
module_enable(array('custom_block'));
|
|
}
|
|
|
|
/**
|
|
* Migrate {block_custom} to {custom_block}.
|
|
*
|
|
* Note this table now resides in custom_block_schema() but for 7.x to 8.x
|
|
* upgrades, changes must be made from block module as custom_block module is
|
|
* only enabled during upgrade process.
|
|
*/
|
|
function block_update_8007() {
|
|
// Populate the {custom_block} and {custom_block_revision} table.
|
|
$results = db_select('block_custom', 'bc')->fields('bc')->execute();
|
|
|
|
$uuid = new Uuid();
|
|
$execute = FALSE;
|
|
$block_insert = db_insert('custom_block')->fields(array(
|
|
'id',
|
|
'uuid',
|
|
'info',
|
|
'revision_id',
|
|
'langcode',
|
|
'type'
|
|
));
|
|
$revision_insert = db_insert('custom_block_revision')->fields(array(
|
|
'id',
|
|
'revision_id',
|
|
'log',
|
|
'info'
|
|
));
|
|
foreach ($results as $block) {
|
|
$custom_block = array(
|
|
'id' => $block->bid,
|
|
'uuid' => $uuid->generate(),
|
|
'info' => $block->info,
|
|
'revision_id' => $block->bid,
|
|
'langcode' => Language::LANGCODE_NOT_SPECIFIED,
|
|
'type' => 'basic'
|
|
);
|
|
$revision = array(
|
|
'id' => $block->bid,
|
|
'revision_id' => $block->bid,
|
|
'info' => $block->info,
|
|
'log' => 'Initial value from 7.x to 8.x upgrade'
|
|
);
|
|
$block_insert->values($custom_block);
|
|
$revision_insert->values($revision);
|
|
// We have something to execute.
|
|
$execute = TRUE;
|
|
}
|
|
if ($execute) {
|
|
$block_insert->execute();
|
|
$revision_insert->execute();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Migrate {block_custom}.body and {block_custom}.format to block_body field.
|
|
*/
|
|
function block_update_8008() {
|
|
$sandbox['#finished'] = 0;
|
|
|
|
if (!isset($sandbox['total'])) {
|
|
// Initial invocation.
|
|
|
|
// First, create the body field.
|
|
$body_field = array(
|
|
'id' => 'block_body',
|
|
'type' => 'text_with_summary',
|
|
'entity_types' => array('custom_block'),
|
|
'module' => 'text',
|
|
'cardinality' => 1,
|
|
);
|
|
_update_8003_field_create_field($body_field);
|
|
|
|
$instance = array(
|
|
'id' => 'custom_block.basic.block_body',
|
|
'entity_type' => 'custom_block',
|
|
'bundle' => 'basic',
|
|
'label' => 'Block body',
|
|
'settings' => array('display_summary' => FALSE),
|
|
);
|
|
_update_8003_field_create_instance($body_field, $instance);
|
|
|
|
module_load_install('entity');
|
|
// Assign form settings for the 'default' form mode.
|
|
$form_display = _update_8000_entity_get_form_display('custom_block', 'basic', 'default');
|
|
$form_display->set('content.user_picture', array(
|
|
'type' => 'text_textarea_with_summary',
|
|
))
|
|
->save();
|
|
|
|
// Initialize state for future calls.
|
|
$sandbox['last'] = 0;
|
|
$sandbox['count'] = 0;
|
|
|
|
$query = db_select('block_custom', 'bc');
|
|
$sandbox['total'] = $query->countQuery()->execute()->fetchField();
|
|
|
|
$sandbox['body_field_id'] = $body_field['id'];
|
|
}
|
|
else {
|
|
// Subsequent invocations.
|
|
|
|
$found = FALSE;
|
|
if ($sandbox['total']) {
|
|
// Operate on each block in turn.
|
|
$batch_size = 200;
|
|
$query = db_select('block_custom', 'bc');
|
|
$query
|
|
->fields('bc', array('bid', 'body', 'format'))
|
|
->condition('bc.bid', $sandbox['last'], '>')
|
|
->orderBy('bc.bid', 'ASC')
|
|
->range(0, $batch_size);
|
|
$blocks = $query->execute();
|
|
|
|
// Load the block, set up 'body' and save the field data.
|
|
foreach ($blocks as $block) {
|
|
$found = TRUE;
|
|
|
|
$data = array(
|
|
Language::LANGCODE_NOT_SPECIFIED => array(
|
|
array(
|
|
'format' => $block->format,
|
|
'value' => $block->body
|
|
)
|
|
)
|
|
);
|
|
// This is a core update and no contrib modules are enabled yet, so
|
|
// we can assume default field storage for a faster update.
|
|
_update_8000_field_sql_storage_write('custom_block', 'basic', $block->bid, $block->bid, 'block_body', $data);
|
|
|
|
$sandbox['last'] = $block->bid;
|
|
$sandbox['count'] += 1;
|
|
}
|
|
|
|
$sandbox['#finished'] = min(0.99, $sandbox['count'] / $sandbox['total']);
|
|
}
|
|
|
|
if (!$found) {
|
|
// All blocks are processed.
|
|
|
|
// Remove the now-obsolete body info from block_custom.
|
|
db_drop_field('block_custom', 'body');
|
|
db_drop_field('block_custom', 'format');
|
|
|
|
// We're done.
|
|
$sandbox['#finished'] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @} End of "addtogroup updates-7.x-to-8.x".
|
|
* The next series of updates should start at 9000.
|
|
*/
|