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