Newer
Older
/**
* @file
Angie Byron
committed
* Install, update and uninstall functions for the block module.
Dries Buytaert
committed
use Drupal\Component\Uuid\Uuid;
use Drupal\Core\Language\Language;
Dries Buytaert
committed
* Implements hook_install().
*/
function block_install() {
// Block should go first so that other modules can alter its output
Dries Buytaert
committed
// 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);
/**
catch
committed
* @addtogroup updates-7.x-to-8.x
* @{
*/
catch
committed
/**
* 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(
Dries Buytaert
committed
'user' => 8016,
);
catch
committed
return $dependencies;
}
/**
* Block cache is always enabled in 8.x.
Dries Buytaert
committed
*
* @ingroup config_upgrade
*/
function block_update_8000() {
update_variable_del('block_cache');
}
Dries Buytaert
committed
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/**
* 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);
}
catch
committed
/**
* 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' => '',
Angie Byron
committed
'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.)',
)
);
}
Angie Byron
committed
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
* 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();
}
Dries Buytaert
committed
/**
* Enable the Custom Block module.
*/
function block_update_8006() {
update_module_enable(array('custom_block'));
}
Dries Buytaert
committed
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
/**
* 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,
Dries Buytaert
committed
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
'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(
'field_name' => 'block_body',
'type' => 'text_with_summary',
'entity_types' => array('custom_block'),
'module' => 'text',
'cardinality' => 1,
);
_update_7000_field_create_field($body_field);
$instance = array(
'field_name' => 'block_body',
'entity_type' => 'custom_block',
'bundle' => 'basic',
'label' => 'Block body',
'settings' => array('display_summary' => FALSE),
);
_update_7000_field_create_instance($body_field, $instance);
Alex Pott
committed
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();
update_config_manifest_add('entity.form_display', array($form_display->get('id')));
Dries Buytaert
committed
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
// 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(
Dries Buytaert
committed
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
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_7000_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.
*/