Mercurial > hg > rr-repo
comparison modules/poll/poll.install @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ff03f76ab3fe |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * @file | |
5 * Install, update and uninstall functions for the poll module. | |
6 */ | |
7 | |
8 /** | |
9 * Implements hook_schema(). | |
10 */ | |
11 function poll_schema() { | |
12 $schema['poll'] = array( | |
13 'description' => 'Stores poll-specific information for poll nodes.', | |
14 'fields' => array( | |
15 'nid' => array( | |
16 'type' => 'int', | |
17 'unsigned' => TRUE, | |
18 'not null' => TRUE, | |
19 'default' => 0, | |
20 'description' => "The poll's {node}.nid.", | |
21 ), | |
22 'runtime' => array( | |
23 'type' => 'int', | |
24 'not null' => TRUE, | |
25 'default' => 0, | |
26 'description' => 'The number of seconds past {node}.created during which the poll is open.', | |
27 ), | |
28 'active' => array( | |
29 'type' => 'int', | |
30 'unsigned' => TRUE, | |
31 'not null' => TRUE, | |
32 'default' => 0, | |
33 'description' => 'Boolean indicating whether or not the poll is open.', | |
34 ), | |
35 ), | |
36 'primary key' => array('nid'), | |
37 'foreign keys' => array( | |
38 'poll_node' => array( | |
39 'table' => 'node', | |
40 'columns' => array('nid' => 'nid'), | |
41 ), | |
42 ), | |
43 ); | |
44 | |
45 $schema['poll_choice'] = array( | |
46 'description' => 'Stores information about all choices for all {poll}s.', | |
47 'fields' => array( | |
48 'chid' => array( | |
49 'type' => 'serial', | |
50 'unsigned' => TRUE, | |
51 'not null' => TRUE, | |
52 'description' => 'Unique identifier for a poll choice.', | |
53 ), | |
54 'nid' => array( | |
55 'type' => 'int', | |
56 'unsigned' => TRUE, | |
57 'not null' => TRUE, | |
58 'default' => 0, | |
59 'description' => 'The {node}.nid this choice belongs to.', | |
60 ), | |
61 'chtext' => array( | |
62 'type' => 'varchar', | |
63 'length' => 128, | |
64 'not null' => TRUE, | |
65 'default' => '', | |
66 'description' => 'The text for this choice.', | |
67 'translatable' => TRUE, | |
68 ), | |
69 'chvotes' => array( | |
70 'type' => 'int', | |
71 'not null' => TRUE, | |
72 'default' => 0, | |
73 'description' => 'The total number of votes this choice has received by all users.', | |
74 ), | |
75 'weight' => array( | |
76 'type' => 'int', | |
77 'not null' => TRUE, | |
78 'default' => 0, | |
79 'description' => 'The sort order of this choice among all choices for the same node.', | |
80 ), | |
81 ), | |
82 'indexes' => array( | |
83 'nid' => array('nid'), | |
84 ), | |
85 'primary key' => array('chid'), | |
86 'foreign keys' => array( | |
87 'choice_node' => array( | |
88 'table' => 'node', | |
89 'columns' => array('nid' => 'nid'), | |
90 ), | |
91 ), | |
92 ); | |
93 | |
94 $schema['poll_vote'] = array( | |
95 'description' => 'Stores per-{users} votes for each {poll}.', | |
96 'fields' => array( | |
97 'chid' => array( | |
98 'type' => 'int', | |
99 'unsigned' => TRUE, | |
100 'not null' => TRUE, | |
101 'description' => "The {users}'s vote for this poll.", | |
102 ), | |
103 'nid' => array( | |
104 'type' => 'int', | |
105 'unsigned' => TRUE, | |
106 'not null' => TRUE, | |
107 'description' => 'The {poll} node this vote is for.', | |
108 ), | |
109 'uid' => array( | |
110 'type' => 'int', | |
111 'unsigned' => TRUE, | |
112 'not null' => TRUE, | |
113 'default' => 0, | |
114 'description' => 'The {users}.uid this vote is from unless the voter was anonymous.', | |
115 ), | |
116 'hostname' => array( | |
117 'type' => 'varchar', | |
118 'length' => 128, | |
119 'not null' => TRUE, | |
120 'default' => '', | |
121 'description' => 'The IP address this vote is from unless the voter was logged in.', | |
122 ), | |
123 'timestamp' => array( | |
124 'type' => 'int', | |
125 'not null' => TRUE, | |
126 'default' => 0, | |
127 'description' => 'The timestamp of the vote creation.', | |
128 ), | |
129 ), | |
130 'primary key' => array('nid', 'uid', 'hostname'), | |
131 'foreign keys' => array( | |
132 'poll_node' => array( | |
133 'table' => 'node', | |
134 'columns' => array('nid' => 'nid'), | |
135 ), | |
136 'voter' => array( | |
137 'table' => 'users', | |
138 'columns' => array('uid' => 'uid'), | |
139 ), | |
140 ), | |
141 'indexes' => array( | |
142 'chid' => array('chid'), | |
143 'hostname' => array('hostname'), | |
144 'uid' => array('uid'), | |
145 ), | |
146 ); | |
147 | |
148 return $schema; | |
149 } | |
150 | |
151 /** | |
152 * Use the poll_choice primary key to record votes in poll_votes rather than | |
153 * the choice order. Rename chorder to weight. | |
154 * | |
155 * Rename {poll_choices} table to {poll_choice} and {poll_votes} to {poll_vote}. | |
156 */ | |
157 function poll_update_7001() { | |
158 // Add chid column and convert existing votes. | |
159 db_add_field('poll_votes', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0)); | |
160 db_add_index('poll_votes', 'chid', array('chid')); | |
161 db_update('poll_votes') | |
162 ->expression('chid', Database::getConnection()->prefixTables('COALESCE((SELECT chid FROM {poll_choices} c WHERE {poll_votes}.chorder = c.chorder AND {poll_votes}.nid = c.nid), 0)')) | |
163 ->execute(); | |
164 // Delete invalid votes. | |
165 db_delete('poll_votes')->condition('chid', 0)->execute(); | |
166 // Remove old chorder column. | |
167 db_drop_field('poll_votes', 'chorder'); | |
168 | |
169 // Change the chorder column to weight in poll_choices. | |
170 db_change_field('poll_choices', 'chorder', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny')); | |
171 | |
172 db_rename_table('poll_votes', 'poll_vote'); | |
173 db_rename_table('poll_choices', 'poll_choice'); | |
174 } | |
175 | |
176 /** | |
177 * Add timestamp field to {poll_vote}. | |
178 */ | |
179 function poll_update_7002() { | |
180 $field = array( | |
181 'type' => 'int', | |
182 'not null' => TRUE, | |
183 'default' => 0, | |
184 ); | |
185 db_add_field('poll_vote', 'timestamp', $field); | |
186 } | |
187 | |
188 /** | |
189 * Change the weight column to normal int. | |
190 */ | |
191 function poll_update_7003() { | |
192 db_change_field('poll_choice', 'weight', 'weight', array( | |
193 'type' => 'int', | |
194 'not null' => TRUE, | |
195 'default' => 0, | |
196 'description' => 'The sort order of this choice among all choices for the same node.', | |
197 )); | |
198 } | |
199 | |
200 /** | |
201 * @addtogroup updates-7.x-extra | |
202 * @{ | |
203 */ | |
204 | |
205 /** | |
206 * Update the database to match the schema. | |
207 */ | |
208 function poll_update_7004() { | |
209 // Remove field default. | |
210 db_change_field('poll_vote', 'chid', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE)); | |
211 } | |
212 | |
213 /** | |
214 * @} End of "addtogroup updates-7.x-extra". | |
215 */ |