8002, ); // Migrate users.data after User module prepared the tables. $dependencies['block'][8005] = array( 'user' => 8016, ); // Migrate custom blocks after field storage has been reorganized. $dependencies['block'][8008] = array( 'field' => 8006, ); 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() { \Drupal::moduleHandler()->install(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 = \Drupal::service('uuid'); $execute = FALSE; $block_insert = db_insert('custom_block')->fields(array( 'id', 'uuid', 'info', 'revision_id', 'langcode', 'type', 'changed', )); $revision_insert = db_insert('custom_block_revision')->fields(array( 'id', 'revision_id', 'log', 'info', 'changed', )); 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', 'changed' => REQUEST_TIME, ); $revision = array( 'id' => $block->bid, 'revision_id' => $block->bid, 'info' => $block->info, 'log' => 'Initial value from 7.x to 8.x upgrade', 'changed' => REQUEST_TIME, ); $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 body field. */ function block_update_8008() { $sandbox['#finished'] = 0; if (!isset($sandbox['total'])) { // Initial invocation. // First, create the body field. $body_field = array( 'name' => 'body', 'entity_type' => 'custom_block', 'type' => 'text_with_summary', 'module' => 'text', 'cardinality' => 1, 'schema' => array( 'columns' => array( 'value' => array( 'type' => 'text', 'size' => 'big', 'not null' => FALSE, ), 'summary' => array( 'type' => 'text', 'size' => 'big', 'not null' => FALSE, ), 'format' => array( 'type' => 'varchar', 'length' => 255, 'not null' => FALSE, ), ), 'indexes' => array( 'format' => array('format'), ), 'foreign keys' => array( 'format' => array( 'table' => 'filter_format', 'columns' => array('format' => 'format'), ), ), ), ); _update_8003_field_create_field($body_field); $instance = array( '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_8006_field_write_data_sql('custom_block', 'basic', $block->bid, $block->bid, '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. */