Mercurial > hg > isophonics-drupal-site
comparison core/modules/forum/forum.install @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * @file | |
5 * Install, update, and uninstall functions for the Forum module. | |
6 */ | |
7 | |
8 use Drupal\field\Entity\FieldStorageConfig; | |
9 use Drupal\taxonomy\Entity\Term; | |
10 | |
11 /** | |
12 * Implements hook_install(). | |
13 */ | |
14 function forum_install() { | |
15 // Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module. | |
16 module_set_weight('forum', 1); | |
17 // Do not allow to delete the forum's node type machine name. | |
18 $locked = \Drupal::state()->get('node.type.locked'); | |
19 $locked['forum'] = 'forum'; | |
20 \Drupal::state()->set('node.type.locked', $locked); | |
21 | |
22 if (!\Drupal::service('config.installer')->isSyncing()) { | |
23 // Create a default forum so forum posts can be created. | |
24 $term = Term::create([ | |
25 'name' => t('General discussion'), | |
26 'description' => '', | |
27 'parent' => [0], | |
28 'vid' => 'forums', | |
29 'forum_container' => 0, | |
30 ]); | |
31 $term->save(); | |
32 } | |
33 } | |
34 | |
35 /** | |
36 * Implements hook_uninstall(). | |
37 */ | |
38 function forum_uninstall() { | |
39 if ($field_storage = FieldStorageConfig::loadByName('node', 'taxonomy_forums')) { | |
40 $field_storage->delete(); | |
41 } | |
42 | |
43 if ($field_storage = FieldStorageConfig::loadByName('node', 'comment_forum')) { | |
44 $field_storage->delete(); | |
45 } | |
46 | |
47 if ($field_storage = FieldStorageConfig::loadByName('taxonomy_term', 'forum_container')) { | |
48 $field_storage->delete(); | |
49 } | |
50 | |
51 // Purge field data now to allow taxonomy and options module to be uninstalled | |
52 // if this is the only field remaining. | |
53 field_purge_batch(10); | |
54 // Allow to delete a forum's node type. | |
55 $locked = \Drupal::state()->get('node.type.locked'); | |
56 unset($locked['forum']); | |
57 \Drupal::state()->set('node.type.locked', $locked); | |
58 } | |
59 | |
60 /** | |
61 * Implements hook_schema(). | |
62 */ | |
63 function forum_schema() { | |
64 $schema['forum'] = [ | |
65 'description' => 'Stores the relationship of nodes to forum terms.', | |
66 'fields' => [ | |
67 'nid' => [ | |
68 'type' => 'int', | |
69 'unsigned' => TRUE, | |
70 'not null' => TRUE, | |
71 'default' => 0, | |
72 'description' => 'The {node}.nid of the node.', | |
73 ], | |
74 'vid' => [ | |
75 'type' => 'int', | |
76 'unsigned' => TRUE, | |
77 'not null' => TRUE, | |
78 'default' => 0, | |
79 'description' => 'Primary Key: The {node}.vid of the node.', | |
80 ], | |
81 'tid' => [ | |
82 'type' => 'int', | |
83 'unsigned' => TRUE, | |
84 'not null' => TRUE, | |
85 'default' => 0, | |
86 'description' => 'The {taxonomy_term_data}.tid of the forum term assigned to the node.', | |
87 ], | |
88 ], | |
89 'indexes' => [ | |
90 'forum_topic' => ['nid', 'tid'], | |
91 'tid' => ['tid'], | |
92 ], | |
93 'primary key' => ['vid'], | |
94 'foreign keys' => [ | |
95 'forum_node' => [ | |
96 'table' => 'node', | |
97 'columns' => [ | |
98 'nid' => 'nid', | |
99 'vid' => 'vid', | |
100 ], | |
101 ], | |
102 ], | |
103 ]; | |
104 | |
105 $schema['forum_index'] = [ | |
106 'description' => 'Maintains denormalized information about node/term relationships.', | |
107 'fields' => [ | |
108 'nid' => [ | |
109 'description' => 'The {node}.nid this record tracks.', | |
110 'type' => 'int', | |
111 'unsigned' => TRUE, | |
112 'not null' => TRUE, | |
113 'default' => 0, | |
114 ], | |
115 'title' => [ | |
116 'description' => 'The node title.', | |
117 'type' => 'varchar', | |
118 'length' => 255, | |
119 'not null' => TRUE, | |
120 'default' => '', | |
121 ], | |
122 'tid' => [ | |
123 'description' => 'The term ID.', | |
124 'type' => 'int', | |
125 'unsigned' => TRUE, | |
126 'not null' => TRUE, | |
127 'default' => 0, | |
128 ], | |
129 'sticky' => [ | |
130 'description' => 'Boolean indicating whether the node is sticky.', | |
131 'type' => 'int', | |
132 'not null' => FALSE, | |
133 'default' => 0, | |
134 'size' => 'tiny', | |
135 ], | |
136 'created' => [ | |
137 'description' => 'The Unix timestamp when the node was created.', | |
138 'type' => 'int', | |
139 'unsigned' => TRUE, | |
140 'not null' => TRUE, | |
141 'default' => 0, | |
142 ], | |
143 'last_comment_timestamp' => [ | |
144 'type' => 'int', | |
145 'not null' => TRUE, | |
146 'default' => 0, | |
147 'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.', | |
148 ], | |
149 'comment_count' => [ | |
150 'type' => 'int', | |
151 'unsigned' => TRUE, | |
152 'not null' => TRUE, | |
153 'default' => 0, | |
154 'description' => 'The total number of comments on this node.', | |
155 ], | |
156 ], | |
157 'indexes' => [ | |
158 'forum_topics' => ['nid', 'tid', 'sticky', 'last_comment_timestamp'], | |
159 'created' => ['created'], | |
160 'last_comment_timestamp' => ['last_comment_timestamp'], | |
161 ], | |
162 'foreign keys' => [ | |
163 'tracked_node' => [ | |
164 'table' => 'node', | |
165 'columns' => ['nid' => 'nid'], | |
166 ], | |
167 'term' => [ | |
168 'table' => 'taxonomy_term_data', | |
169 'columns' => [ | |
170 'tid' => 'tid', | |
171 ], | |
172 ], | |
173 ], | |
174 ]; | |
175 | |
176 return $schema; | |
177 } |