forked from ec-europa/nexteuropa-newsroom-reference
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nexteuropa_newsroom.install.inc
102 lines (88 loc) · 2.88 KB
/
nexteuropa_newsroom.install.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
* @file
* Install helper functions.
*/
/**
* Renames and migrates the data to a new field.
*
* @param string $old_name
* Old field name.
* @param string $new_name
* New field name.
*/
function _nexteuropa_newsroom_rename_field($old_name, $new_name) {
$old_field = field_info_field($old_name);
if ($old_field) {
// Create new field.
$new_field = $old_field;
$new_field['field_name'] = $new_name;
$new_field_info = field_info_field($new_name);
if (empty($new_field_info)) {
field_create_field($new_field);
}
}
if (!empty($old_field['bundles'])) {
foreach ($old_field['bundles'] as $entity_type => $bundles) {
foreach ($bundles as $bundle) {
$old_instance = field_info_instance($entity_type, $old_name, $bundle);
if ($old_instance) {
$new_instance = $old_instance;
$new_instance['field_name'] = $new_name;
$new_instance_info = field_info_instance($entity_type, $new_name, $bundle);
if (empty($new_instance_info)) {
field_create_instance($new_instance);
}
// Migrate old fields' data to the new ones.
$field_data = db_select('field_data_' . $old_name, 'old')
->fields('old')
->condition('entity_type', $entity_type)
->condition('bundle', $bundle)
->execute();
while ($data = $field_data->fetchAssoc()) {
$data_new = [];
foreach ($data as $column => $value) {
$column = str_replace($old_name, $new_name, $column);
$data_new[$column] = $value;
}
db_insert('field_data_' . $new_name)
->fields($data_new)
->execute();
}
db_truncate('field_data_' . $old_name);
// Migrate old fields' revision data to the new ones.
$field_revision = db_select('field_revision_' . $old_name, 'old')
->fields('old')
->condition('entity_type', $entity_type)
->condition('bundle', $bundle)
->execute();
while ($revision = $field_revision->fetchAssoc()) {
$revision_new = [];
foreach ($revision as $column => $value) {
$column = str_replace($old_name, $new_name, $column);
$revision_new[$column] = $value;
}
db_insert('field_revision_' . $new_name)
->fields($revision_new)
->execute();
}
db_truncate('field_revision_' . $old_name);
}
}
}
}
}
/**
* Removes field group.
*
* @param array $groups
* Groups identifiers.
*/
function _nexteuropa_newsroom_remove_group(array $groups = []) {
foreach ($groups as $group_id) {
$query = db_delete('field_group');
$query->condition('identifier', $group_id);
$query->execute();
cache_clear_all('field_groups', 'cache_field');
}
}