danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Install, update, and uninstall functions for the Forum module.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Implements hook_install().
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 function forum_install() {
|
danielebarchiesi@0
|
12 // Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module.
|
danielebarchiesi@0
|
13 db_update('system')
|
danielebarchiesi@0
|
14 ->fields(array('weight' => 1))
|
danielebarchiesi@0
|
15 ->condition('name', 'forum')
|
danielebarchiesi@0
|
16 ->execute();
|
danielebarchiesi@0
|
17 // Forum topics are published by default, but do not have any other default
|
danielebarchiesi@0
|
18 // options set (for example, they are not promoted to the front page).
|
danielebarchiesi@0
|
19 variable_set('node_options_forum', array('status'));
|
danielebarchiesi@0
|
20 }
|
danielebarchiesi@0
|
21
|
danielebarchiesi@0
|
22 /**
|
danielebarchiesi@0
|
23 * Implements hook_enable().
|
danielebarchiesi@0
|
24 */
|
danielebarchiesi@0
|
25 function forum_enable() {
|
danielebarchiesi@0
|
26 // If we enable forum at the same time as taxonomy we need to call
|
danielebarchiesi@0
|
27 // field_associate_fields() as otherwise the field won't be enabled until
|
danielebarchiesi@0
|
28 // hook modules_enabled is called which takes place after hook_enable events.
|
danielebarchiesi@0
|
29 field_associate_fields('taxonomy');
|
danielebarchiesi@0
|
30 // Create the forum vocabulary if it does not exist.
|
danielebarchiesi@0
|
31 $vocabulary = taxonomy_vocabulary_load(variable_get('forum_nav_vocabulary', 0));
|
danielebarchiesi@0
|
32 if (!$vocabulary) {
|
danielebarchiesi@0
|
33 $edit = array(
|
danielebarchiesi@0
|
34 'name' => t('Forums'),
|
danielebarchiesi@0
|
35 'machine_name' => 'forums',
|
danielebarchiesi@0
|
36 'description' => t('Forum navigation vocabulary'),
|
danielebarchiesi@0
|
37 'hierarchy' => 1,
|
danielebarchiesi@0
|
38 'module' => 'forum',
|
danielebarchiesi@0
|
39 'weight' => -10,
|
danielebarchiesi@0
|
40 );
|
danielebarchiesi@0
|
41 $vocabulary = (object) $edit;
|
danielebarchiesi@0
|
42 taxonomy_vocabulary_save($vocabulary);
|
danielebarchiesi@0
|
43 variable_set('forum_nav_vocabulary', $vocabulary->vid);
|
danielebarchiesi@0
|
44 }
|
danielebarchiesi@0
|
45
|
danielebarchiesi@0
|
46 // Create the 'taxonomy_forums' field if it doesn't already exist.
|
danielebarchiesi@0
|
47 if (!field_info_field('taxonomy_forums')) {
|
danielebarchiesi@0
|
48 $field = array(
|
danielebarchiesi@0
|
49 'field_name' => 'taxonomy_forums',
|
danielebarchiesi@0
|
50 'type' => 'taxonomy_term_reference',
|
danielebarchiesi@0
|
51 'settings' => array(
|
danielebarchiesi@0
|
52 'allowed_values' => array(
|
danielebarchiesi@0
|
53 array(
|
danielebarchiesi@0
|
54 'vocabulary' => $vocabulary->machine_name,
|
danielebarchiesi@0
|
55 'parent' => 0,
|
danielebarchiesi@0
|
56 ),
|
danielebarchiesi@0
|
57 ),
|
danielebarchiesi@0
|
58 ),
|
danielebarchiesi@0
|
59 );
|
danielebarchiesi@0
|
60 field_create_field($field);
|
danielebarchiesi@0
|
61
|
danielebarchiesi@0
|
62 // Create a default forum so forum posts can be created.
|
danielebarchiesi@0
|
63 $edit = array(
|
danielebarchiesi@0
|
64 'name' => t('General discussion'),
|
danielebarchiesi@0
|
65 'description' => '',
|
danielebarchiesi@0
|
66 'parent' => array(0),
|
danielebarchiesi@0
|
67 'vid' => $vocabulary->vid,
|
danielebarchiesi@0
|
68 );
|
danielebarchiesi@0
|
69 $term = (object) $edit;
|
danielebarchiesi@0
|
70 taxonomy_term_save($term);
|
danielebarchiesi@0
|
71
|
danielebarchiesi@0
|
72 // Create the instance on the bundle.
|
danielebarchiesi@0
|
73 $instance = array(
|
danielebarchiesi@0
|
74 'field_name' => 'taxonomy_forums',
|
danielebarchiesi@0
|
75 'entity_type' => 'node',
|
danielebarchiesi@0
|
76 'label' => $vocabulary->name,
|
danielebarchiesi@0
|
77 'bundle' => 'forum',
|
danielebarchiesi@0
|
78 'required' => TRUE,
|
danielebarchiesi@0
|
79 'widget' => array(
|
danielebarchiesi@0
|
80 'type' => 'options_select',
|
danielebarchiesi@0
|
81 ),
|
danielebarchiesi@0
|
82 'display' => array(
|
danielebarchiesi@0
|
83 'default' => array(
|
danielebarchiesi@0
|
84 'type' => 'taxonomy_term_reference_link',
|
danielebarchiesi@0
|
85 'weight' => 10,
|
danielebarchiesi@0
|
86 ),
|
danielebarchiesi@0
|
87 'teaser' => array(
|
danielebarchiesi@0
|
88 'type' => 'taxonomy_term_reference_link',
|
danielebarchiesi@0
|
89 'weight' => 10,
|
danielebarchiesi@0
|
90 ),
|
danielebarchiesi@0
|
91 ),
|
danielebarchiesi@0
|
92 );
|
danielebarchiesi@0
|
93 field_create_instance($instance);
|
danielebarchiesi@0
|
94 }
|
danielebarchiesi@0
|
95
|
danielebarchiesi@0
|
96 // Ensure the forum node type is available.
|
danielebarchiesi@0
|
97 node_types_rebuild();
|
danielebarchiesi@0
|
98 $types = node_type_get_types();
|
danielebarchiesi@0
|
99 node_add_body_field($types['forum']);
|
danielebarchiesi@0
|
100 }
|
danielebarchiesi@0
|
101
|
danielebarchiesi@0
|
102 /**
|
danielebarchiesi@0
|
103 * Implements hook_uninstall().
|
danielebarchiesi@0
|
104 */
|
danielebarchiesi@0
|
105 function forum_uninstall() {
|
danielebarchiesi@0
|
106 // Load the dependent Taxonomy module, in case it has been disabled.
|
danielebarchiesi@0
|
107 drupal_load('module', 'taxonomy');
|
danielebarchiesi@0
|
108
|
danielebarchiesi@0
|
109 variable_del('forum_containers');
|
danielebarchiesi@0
|
110 variable_del('forum_hot_topic');
|
danielebarchiesi@0
|
111 variable_del('forum_per_page');
|
danielebarchiesi@0
|
112 variable_del('forum_order');
|
danielebarchiesi@0
|
113 variable_del('forum_block_num_active');
|
danielebarchiesi@0
|
114 variable_del('forum_block_num_new');
|
danielebarchiesi@0
|
115 variable_del('node_options_forum');
|
danielebarchiesi@0
|
116
|
danielebarchiesi@0
|
117 field_delete_field('taxonomy_forums');
|
danielebarchiesi@0
|
118 // Purge field data now to allow taxonomy module to be uninstalled
|
danielebarchiesi@0
|
119 // if this is the only field remaining.
|
danielebarchiesi@0
|
120 field_purge_batch(10);
|
danielebarchiesi@0
|
121 }
|
danielebarchiesi@0
|
122
|
danielebarchiesi@0
|
123 /**
|
danielebarchiesi@0
|
124 * Implements hook_schema().
|
danielebarchiesi@0
|
125 */
|
danielebarchiesi@0
|
126 function forum_schema() {
|
danielebarchiesi@0
|
127 $schema['forum'] = array(
|
danielebarchiesi@0
|
128 'description' => 'Stores the relationship of nodes to forum terms.',
|
danielebarchiesi@0
|
129 'fields' => array(
|
danielebarchiesi@0
|
130 'nid' => array(
|
danielebarchiesi@0
|
131 'type' => 'int',
|
danielebarchiesi@0
|
132 'unsigned' => TRUE,
|
danielebarchiesi@0
|
133 'not null' => TRUE,
|
danielebarchiesi@0
|
134 'default' => 0,
|
danielebarchiesi@0
|
135 'description' => 'The {node}.nid of the node.',
|
danielebarchiesi@0
|
136 ),
|
danielebarchiesi@0
|
137 'vid' => array(
|
danielebarchiesi@0
|
138 'type' => 'int',
|
danielebarchiesi@0
|
139 'unsigned' => TRUE,
|
danielebarchiesi@0
|
140 'not null' => TRUE,
|
danielebarchiesi@0
|
141 'default' => 0,
|
danielebarchiesi@0
|
142 'description' => 'Primary Key: The {node}.vid of the node.',
|
danielebarchiesi@0
|
143 ),
|
danielebarchiesi@0
|
144 'tid' => array(
|
danielebarchiesi@0
|
145 'type' => 'int',
|
danielebarchiesi@0
|
146 'unsigned' => TRUE,
|
danielebarchiesi@0
|
147 'not null' => TRUE,
|
danielebarchiesi@0
|
148 'default' => 0,
|
danielebarchiesi@0
|
149 'description' => 'The {taxonomy_term_data}.tid of the forum term assigned to the node.',
|
danielebarchiesi@0
|
150 ),
|
danielebarchiesi@0
|
151 ),
|
danielebarchiesi@0
|
152 'indexes' => array(
|
danielebarchiesi@0
|
153 'forum_topic' => array('nid', 'tid'),
|
danielebarchiesi@0
|
154 'tid' => array('tid'),
|
danielebarchiesi@0
|
155 ),
|
danielebarchiesi@0
|
156 'primary key' => array('vid'),
|
danielebarchiesi@0
|
157 'foreign keys' => array(
|
danielebarchiesi@0
|
158 'forum_node' => array(
|
danielebarchiesi@0
|
159 'table' => 'node',
|
danielebarchiesi@0
|
160 'columns' => array(
|
danielebarchiesi@0
|
161 'nid' => 'nid',
|
danielebarchiesi@0
|
162 'vid' => 'vid',
|
danielebarchiesi@0
|
163 ),
|
danielebarchiesi@0
|
164 ),
|
danielebarchiesi@0
|
165 ),
|
danielebarchiesi@0
|
166 );
|
danielebarchiesi@0
|
167
|
danielebarchiesi@0
|
168 $schema['forum_index'] = array(
|
danielebarchiesi@0
|
169 'description' => 'Maintains denormalized information about node/term relationships.',
|
danielebarchiesi@0
|
170 'fields' => array(
|
danielebarchiesi@0
|
171 'nid' => array(
|
danielebarchiesi@0
|
172 'description' => 'The {node}.nid this record tracks.',
|
danielebarchiesi@0
|
173 'type' => 'int',
|
danielebarchiesi@0
|
174 'unsigned' => TRUE,
|
danielebarchiesi@0
|
175 'not null' => TRUE,
|
danielebarchiesi@0
|
176 'default' => 0,
|
danielebarchiesi@0
|
177 ),
|
danielebarchiesi@0
|
178 'title' => array(
|
danielebarchiesi@0
|
179 'description' => 'The title of this node, always treated as non-markup plain text.',
|
danielebarchiesi@0
|
180 'type' => 'varchar',
|
danielebarchiesi@0
|
181 'length' => 255,
|
danielebarchiesi@0
|
182 'not null' => TRUE,
|
danielebarchiesi@0
|
183 'default' => '',
|
danielebarchiesi@0
|
184 ),
|
danielebarchiesi@0
|
185 'tid' => array(
|
danielebarchiesi@0
|
186 'description' => 'The term ID.',
|
danielebarchiesi@0
|
187 'type' => 'int',
|
danielebarchiesi@0
|
188 'unsigned' => TRUE,
|
danielebarchiesi@0
|
189 'not null' => TRUE,
|
danielebarchiesi@0
|
190 'default' => 0,
|
danielebarchiesi@0
|
191 ),
|
danielebarchiesi@0
|
192 'sticky' => array(
|
danielebarchiesi@0
|
193 'description' => 'Boolean indicating whether the node is sticky.',
|
danielebarchiesi@0
|
194 'type' => 'int',
|
danielebarchiesi@0
|
195 'not null' => FALSE,
|
danielebarchiesi@0
|
196 'default' => 0,
|
danielebarchiesi@0
|
197 'size' => 'tiny',
|
danielebarchiesi@0
|
198 ),
|
danielebarchiesi@0
|
199 'created' => array(
|
danielebarchiesi@0
|
200 'description' => 'The Unix timestamp when the node was created.',
|
danielebarchiesi@0
|
201 'type' => 'int',
|
danielebarchiesi@0
|
202 'unsigned' => TRUE,
|
danielebarchiesi@0
|
203 'not null' => TRUE,
|
danielebarchiesi@0
|
204 'default'=> 0,
|
danielebarchiesi@0
|
205 ),
|
danielebarchiesi@0
|
206 'last_comment_timestamp' => array(
|
danielebarchiesi@0
|
207 'type' => 'int',
|
danielebarchiesi@0
|
208 'not null' => TRUE,
|
danielebarchiesi@0
|
209 'default' => 0,
|
danielebarchiesi@0
|
210 'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.',
|
danielebarchiesi@0
|
211 ),
|
danielebarchiesi@0
|
212 'comment_count' => array(
|
danielebarchiesi@0
|
213 'type' => 'int',
|
danielebarchiesi@0
|
214 'unsigned' => TRUE,
|
danielebarchiesi@0
|
215 'not null' => TRUE,
|
danielebarchiesi@0
|
216 'default' => 0,
|
danielebarchiesi@0
|
217 'description' => 'The total number of comments on this node.',
|
danielebarchiesi@0
|
218 ),
|
danielebarchiesi@0
|
219 ),
|
danielebarchiesi@0
|
220 'indexes' => array(
|
danielebarchiesi@0
|
221 'forum_topics' => array('nid', 'tid', 'sticky', 'last_comment_timestamp'),
|
danielebarchiesi@0
|
222 'created' => array('created'),
|
danielebarchiesi@0
|
223 'last_comment_timestamp' => array('last_comment_timestamp'),
|
danielebarchiesi@0
|
224 ),
|
danielebarchiesi@0
|
225 'foreign keys' => array(
|
danielebarchiesi@0
|
226 'tracked_node' => array(
|
danielebarchiesi@0
|
227 'table' => 'node',
|
danielebarchiesi@0
|
228 'columns' => array('nid' => 'nid'),
|
danielebarchiesi@0
|
229 ),
|
danielebarchiesi@0
|
230 'term' => array(
|
danielebarchiesi@0
|
231 'table' => 'taxonomy_term_data',
|
danielebarchiesi@0
|
232 'columns' => array(
|
danielebarchiesi@0
|
233 'tid' => 'tid',
|
danielebarchiesi@0
|
234 ),
|
danielebarchiesi@0
|
235 ),
|
danielebarchiesi@0
|
236 ),
|
danielebarchiesi@0
|
237 );
|
danielebarchiesi@0
|
238
|
danielebarchiesi@0
|
239
|
danielebarchiesi@0
|
240 return $schema;
|
danielebarchiesi@0
|
241 }
|
danielebarchiesi@0
|
242
|
danielebarchiesi@0
|
243 /**
|
danielebarchiesi@0
|
244 * Implements hook_update_dependencies().
|
danielebarchiesi@0
|
245 */
|
danielebarchiesi@0
|
246 function forum_update_dependencies() {
|
danielebarchiesi@0
|
247 $dependencies['forum'][7003] = array(
|
danielebarchiesi@0
|
248 // Forum update 7003 uses field API update functions, so must run after
|
danielebarchiesi@0
|
249 // Field API has been enabled.
|
danielebarchiesi@0
|
250 'system' => 7020,
|
danielebarchiesi@0
|
251 // Forum update 7003 relies on updated taxonomy module schema. Ensure it
|
danielebarchiesi@0
|
252 // runs after all taxonomy updates.
|
danielebarchiesi@0
|
253 'taxonomy' => 7010,
|
danielebarchiesi@0
|
254 );
|
danielebarchiesi@0
|
255 return $dependencies;
|
danielebarchiesi@0
|
256 }
|
danielebarchiesi@0
|
257
|
danielebarchiesi@0
|
258 /**
|
danielebarchiesi@0
|
259 * Add new index to forum table.
|
danielebarchiesi@0
|
260 */
|
danielebarchiesi@0
|
261 function forum_update_7000() {
|
danielebarchiesi@0
|
262 db_drop_index('forum', 'nid');
|
danielebarchiesi@0
|
263 db_add_index('forum', 'forum_topic', array('nid', 'tid'));
|
danielebarchiesi@0
|
264 }
|
danielebarchiesi@0
|
265
|
danielebarchiesi@0
|
266 /**
|
danielebarchiesi@0
|
267 * Create new {forum_index} table.
|
danielebarchiesi@0
|
268 */
|
danielebarchiesi@0
|
269 function forum_update_7001() {
|
danielebarchiesi@0
|
270 $forum_index = array(
|
danielebarchiesi@0
|
271 'description' => 'Maintains denormalized information about node/term relationships.',
|
danielebarchiesi@0
|
272 'fields' => array(
|
danielebarchiesi@0
|
273 'nid' => array(
|
danielebarchiesi@0
|
274 'description' => 'The {node}.nid this record tracks.',
|
danielebarchiesi@0
|
275 'type' => 'int',
|
danielebarchiesi@0
|
276 'unsigned' => TRUE,
|
danielebarchiesi@0
|
277 'not null' => TRUE,
|
danielebarchiesi@0
|
278 'default' => 0,
|
danielebarchiesi@0
|
279 ),
|
danielebarchiesi@0
|
280 'title' => array(
|
danielebarchiesi@0
|
281 'description' => 'The title of this node, always treated as non-markup plain text.',
|
danielebarchiesi@0
|
282 'type' => 'varchar',
|
danielebarchiesi@0
|
283 'length' => 255,
|
danielebarchiesi@0
|
284 'not null' => TRUE,
|
danielebarchiesi@0
|
285 'default' => '',
|
danielebarchiesi@0
|
286 ),
|
danielebarchiesi@0
|
287 'tid' => array(
|
danielebarchiesi@0
|
288 'description' => 'The term ID.',
|
danielebarchiesi@0
|
289 'type' => 'int',
|
danielebarchiesi@0
|
290 'unsigned' => TRUE,
|
danielebarchiesi@0
|
291 'not null' => TRUE,
|
danielebarchiesi@0
|
292 'default' => 0,
|
danielebarchiesi@0
|
293 ),
|
danielebarchiesi@0
|
294 'sticky' => array(
|
danielebarchiesi@0
|
295 'description' => 'Boolean indicating whether the node is sticky.',
|
danielebarchiesi@0
|
296 'type' => 'int',
|
danielebarchiesi@0
|
297 'not null' => FALSE,
|
danielebarchiesi@0
|
298 'default' => 0,
|
danielebarchiesi@0
|
299 'size' => 'tiny',
|
danielebarchiesi@0
|
300 ),
|
danielebarchiesi@0
|
301 'created' => array(
|
danielebarchiesi@0
|
302 'description' => 'The Unix timestamp when the node was created.',
|
danielebarchiesi@0
|
303 'type' => 'int',
|
danielebarchiesi@0
|
304 'unsigned' => TRUE,
|
danielebarchiesi@0
|
305 'not null' => TRUE,
|
danielebarchiesi@0
|
306 'default'=> 0,
|
danielebarchiesi@0
|
307 ),
|
danielebarchiesi@0
|
308 'last_comment_timestamp' => array(
|
danielebarchiesi@0
|
309 'type' => 'int',
|
danielebarchiesi@0
|
310 'not null' => TRUE,
|
danielebarchiesi@0
|
311 'default' => 0,
|
danielebarchiesi@0
|
312 'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.',
|
danielebarchiesi@0
|
313 ),
|
danielebarchiesi@0
|
314 'comment_count' => array(
|
danielebarchiesi@0
|
315 'type' => 'int',
|
danielebarchiesi@0
|
316 'unsigned' => TRUE,
|
danielebarchiesi@0
|
317 'not null' => TRUE,
|
danielebarchiesi@0
|
318 'default' => 0,
|
danielebarchiesi@0
|
319 'description' => 'The total number of comments on this node.',
|
danielebarchiesi@0
|
320 ),
|
danielebarchiesi@0
|
321 ),
|
danielebarchiesi@0
|
322 'indexes' => array(
|
danielebarchiesi@0
|
323 'forum_topics' => array('tid', 'sticky', 'last_comment_timestamp'),
|
danielebarchiesi@0
|
324 ),
|
danielebarchiesi@0
|
325 'foreign keys' => array(
|
danielebarchiesi@0
|
326 'tracked_node' => array(
|
danielebarchiesi@0
|
327 'table' => 'node',
|
danielebarchiesi@0
|
328 'columns' => array('nid' => 'nid'),
|
danielebarchiesi@0
|
329 ),
|
danielebarchiesi@0
|
330 'term' => array(
|
danielebarchiesi@0
|
331 'table' => 'taxonomy_term_data',
|
danielebarchiesi@0
|
332 'columns' => array(
|
danielebarchiesi@0
|
333 'tid' => 'tid',
|
danielebarchiesi@0
|
334 ),
|
danielebarchiesi@0
|
335 ),
|
danielebarchiesi@0
|
336 ),
|
danielebarchiesi@0
|
337 );
|
danielebarchiesi@0
|
338 db_create_table('forum_index', $forum_index);
|
danielebarchiesi@0
|
339
|
danielebarchiesi@0
|
340 $select = db_select('node', 'n');
|
danielebarchiesi@0
|
341 $forum_alias = $select->join('forum', 'f', 'n.vid = f.vid');
|
danielebarchiesi@0
|
342 $ncs_alias = $select->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
|
danielebarchiesi@0
|
343 $select
|
danielebarchiesi@0
|
344 ->fields('n', array('nid', 'title', 'sticky', 'created'))
|
danielebarchiesi@0
|
345 ->fields($forum_alias, array('tid'))
|
danielebarchiesi@0
|
346 ->fields($ncs_alias, array('last_comment_timestamp', 'comment_count'));
|
danielebarchiesi@0
|
347
|
danielebarchiesi@0
|
348 db_insert('forum_index')
|
danielebarchiesi@0
|
349 ->fields(array('nid', 'title', 'sticky', 'created', 'tid', 'last_comment_timestamp', 'comment_count'))
|
danielebarchiesi@0
|
350 ->from($select)
|
danielebarchiesi@0
|
351 ->execute();
|
danielebarchiesi@0
|
352 }
|
danielebarchiesi@0
|
353
|
danielebarchiesi@0
|
354 /**
|
danielebarchiesi@0
|
355 * @addtogroup updates-7.x-extra
|
danielebarchiesi@0
|
356 * @{
|
danielebarchiesi@0
|
357 */
|
danielebarchiesi@0
|
358
|
danielebarchiesi@0
|
359 /**
|
danielebarchiesi@0
|
360 * Add new index to forum_index table.
|
danielebarchiesi@0
|
361 */
|
danielebarchiesi@0
|
362 function forum_update_7002() {
|
danielebarchiesi@0
|
363 db_drop_index('forum_index', 'forum_topics');
|
danielebarchiesi@0
|
364 db_add_index('forum_index', 'forum_topics', array('nid', 'tid', 'sticky', 'last_comment_timestamp'));
|
danielebarchiesi@0
|
365 }
|
danielebarchiesi@0
|
366
|
danielebarchiesi@0
|
367 /**
|
danielebarchiesi@0
|
368 * Rename field to 'taxonomy_forums'.
|
danielebarchiesi@0
|
369 */
|
danielebarchiesi@0
|
370 function forum_update_7003() {
|
danielebarchiesi@0
|
371 $messages = array();
|
danielebarchiesi@0
|
372
|
danielebarchiesi@0
|
373 $new_field_name = 'taxonomy_forums';
|
danielebarchiesi@0
|
374
|
danielebarchiesi@0
|
375 // Test to see if the taxonomy_forums field exists.
|
danielebarchiesi@0
|
376 $fields = _update_7000_field_read_fields(array('field_name' => $new_field_name));
|
danielebarchiesi@0
|
377 if ($fields) {
|
danielebarchiesi@0
|
378 // Since the field exists, we're done.
|
danielebarchiesi@0
|
379 return;
|
danielebarchiesi@0
|
380 }
|
danielebarchiesi@0
|
381
|
danielebarchiesi@0
|
382 // Calculate the old field name.
|
danielebarchiesi@0
|
383 $vid = variable_get('forum_nav_vocabulary', 0);
|
danielebarchiesi@0
|
384 $vocabulary_machine_name = db_select('taxonomy_vocabulary', 'tv')
|
danielebarchiesi@0
|
385 ->fields('tv', array('machine_name'))
|
danielebarchiesi@0
|
386 ->condition('vid', $vid)
|
danielebarchiesi@0
|
387 ->execute()
|
danielebarchiesi@0
|
388 ->fetchField();
|
danielebarchiesi@0
|
389 $old_field_name = 'taxonomy_' . $vocabulary_machine_name;
|
danielebarchiesi@0
|
390
|
danielebarchiesi@0
|
391 // Read the old fields.
|
danielebarchiesi@0
|
392 $old_fields = _update_7000_field_read_fields(array('field_name' => $old_field_name));
|
danielebarchiesi@0
|
393 foreach ($old_fields as $old_field) {
|
danielebarchiesi@0
|
394 if ($old_field['storage']['type'] != 'field_sql_storage') {
|
danielebarchiesi@0
|
395 $messages[] = t('Cannot rename field %id (%old_field_name) to %new_field_name because it does not use the field_sql_storage storage type.', array(
|
danielebarchiesi@0
|
396 '%id' => $old_field['id'],
|
danielebarchiesi@0
|
397 '%old_field_name' => $old_field_name,
|
danielebarchiesi@0
|
398 '%new_field_name' => $new_field_name,
|
danielebarchiesi@0
|
399 ));
|
danielebarchiesi@0
|
400 continue;
|
danielebarchiesi@0
|
401 }
|
danielebarchiesi@0
|
402
|
danielebarchiesi@0
|
403 // Update {field_config}.
|
danielebarchiesi@0
|
404 db_update('field_config')
|
danielebarchiesi@0
|
405 ->fields(array('field_name' => $new_field_name))
|
danielebarchiesi@0
|
406 ->condition('id', $old_field['id'])
|
danielebarchiesi@0
|
407 ->execute();
|
danielebarchiesi@0
|
408
|
danielebarchiesi@0
|
409 // Update {field_config_instance}.
|
danielebarchiesi@0
|
410 db_update('field_config_instance')
|
danielebarchiesi@0
|
411 ->fields(array('field_name' => $new_field_name))
|
danielebarchiesi@0
|
412 ->condition('field_id', $old_field['id'])
|
danielebarchiesi@0
|
413 ->execute();
|
danielebarchiesi@0
|
414
|
danielebarchiesi@0
|
415 // The tables that need updating in the form 'old_name' => 'new_name'.
|
danielebarchiesi@0
|
416 $tables = array(
|
danielebarchiesi@0
|
417 'field_data_' . $old_field_name => 'field_data_' . $new_field_name,
|
danielebarchiesi@0
|
418 'field_revision_' . $old_field_name => 'field_revision_' . $new_field_name,
|
danielebarchiesi@0
|
419 );
|
danielebarchiesi@0
|
420 foreach ($tables as $old_table => $new_table) {
|
danielebarchiesi@0
|
421 $old_column_name = $old_field_name . '_tid';
|
danielebarchiesi@0
|
422 $new_column_name = $new_field_name . '_tid';
|
danielebarchiesi@0
|
423
|
danielebarchiesi@0
|
424 // Rename the column.
|
danielebarchiesi@0
|
425 db_drop_index($old_table, $old_column_name);
|
danielebarchiesi@0
|
426 db_change_field($old_table, $old_column_name, $new_column_name, array(
|
danielebarchiesi@0
|
427 'type' => 'int',
|
danielebarchiesi@0
|
428 'unsigned' => TRUE,
|
danielebarchiesi@0
|
429 'not null' => FALSE,
|
danielebarchiesi@0
|
430 ));
|
danielebarchiesi@0
|
431 db_drop_index($old_table, $new_column_name);
|
danielebarchiesi@0
|
432 db_add_index($old_table, $new_column_name, array($new_column_name));
|
danielebarchiesi@0
|
433
|
danielebarchiesi@0
|
434 // Rename the table.
|
danielebarchiesi@0
|
435 db_rename_table($old_table, $new_table);
|
danielebarchiesi@0
|
436 }
|
danielebarchiesi@0
|
437 }
|
danielebarchiesi@0
|
438
|
danielebarchiesi@0
|
439 cache_clear_all('*', 'cache_field', TRUE);
|
danielebarchiesi@0
|
440
|
danielebarchiesi@0
|
441 return $messages;
|
danielebarchiesi@0
|
442 }
|
danielebarchiesi@0
|
443
|
danielebarchiesi@0
|
444 /**
|
danielebarchiesi@0
|
445 * Update {forum_index} so that only published nodes are indexed.
|
danielebarchiesi@0
|
446 */
|
danielebarchiesi@0
|
447 function forum_update_7011() {
|
danielebarchiesi@0
|
448 $select = db_select('node', 'n')
|
danielebarchiesi@0
|
449 ->fields('n', array('nid'))
|
danielebarchiesi@0
|
450 ->condition('status', 0 );
|
danielebarchiesi@0
|
451
|
danielebarchiesi@0
|
452 db_delete('forum_index')
|
danielebarchiesi@0
|
453 ->condition('nid', $select, 'IN')
|
danielebarchiesi@0
|
454 ->execute();
|
danielebarchiesi@0
|
455 }
|
danielebarchiesi@0
|
456
|
danielebarchiesi@0
|
457 /**
|
danielebarchiesi@0
|
458 * Add 'created' and 'last_comment_timestamp' indexes.
|
danielebarchiesi@0
|
459 */
|
danielebarchiesi@0
|
460 function forum_update_7012() {
|
danielebarchiesi@0
|
461 db_add_index('forum_index', 'created', array('created'));
|
danielebarchiesi@0
|
462 db_add_index('forum_index', 'last_comment_timestamp', array('last_comment_timestamp'));
|
danielebarchiesi@0
|
463 }
|
danielebarchiesi@0
|
464
|
danielebarchiesi@0
|
465 /**
|
danielebarchiesi@0
|
466 * @} End of "addtogroup updates-7.x-extra".
|
danielebarchiesi@0
|
467 */
|