danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Webform module install/schema hooks.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Implements hook_schema().
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 function webform_schema() {
|
danielebarchiesi@0
|
12 $schema = array();
|
danielebarchiesi@0
|
13
|
danielebarchiesi@0
|
14 $schema['webform'] = array(
|
danielebarchiesi@0
|
15 'description' => 'Table for storing additional properties for webform nodes.',
|
danielebarchiesi@0
|
16 'fields' => array(
|
danielebarchiesi@0
|
17 'nid' => array(
|
danielebarchiesi@0
|
18 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
19 'type' => 'int',
|
danielebarchiesi@0
|
20 'unsigned' => TRUE,
|
danielebarchiesi@0
|
21 'not null' => TRUE,
|
danielebarchiesi@0
|
22 ),
|
danielebarchiesi@0
|
23 'confirmation' => array(
|
danielebarchiesi@0
|
24 'description' => 'The confirmation message or URL displayed to the user after submitting a form.',
|
danielebarchiesi@0
|
25 'type' => 'text',
|
danielebarchiesi@0
|
26 'not null' => TRUE,
|
danielebarchiesi@0
|
27 ),
|
danielebarchiesi@0
|
28 'confirmation_format' => array(
|
danielebarchiesi@0
|
29 'description' => 'The {filter_format}.format of the confirmation message.',
|
danielebarchiesi@0
|
30 'type' => 'varchar',
|
danielebarchiesi@0
|
31 'length' => 255,
|
danielebarchiesi@0
|
32 'not null' => FALSE,
|
danielebarchiesi@0
|
33 ),
|
danielebarchiesi@0
|
34 'redirect_url' => array(
|
danielebarchiesi@0
|
35 'description' => 'The URL a user is redirected to after submitting a form.',
|
danielebarchiesi@0
|
36 'type' => 'varchar',
|
danielebarchiesi@0
|
37 'length' => 255,
|
danielebarchiesi@0
|
38 'default' => '<confirmation>',
|
danielebarchiesi@0
|
39 ),
|
danielebarchiesi@0
|
40 'status' => array(
|
danielebarchiesi@0
|
41 'description' => 'Boolean value of a webform for open (1) or closed (0).',
|
danielebarchiesi@0
|
42 'type' => 'int',
|
danielebarchiesi@0
|
43 'size' => 'tiny',
|
danielebarchiesi@0
|
44 'not null' => TRUE,
|
danielebarchiesi@0
|
45 'default' => 1,
|
danielebarchiesi@0
|
46 ),
|
danielebarchiesi@0
|
47 'block' => array(
|
danielebarchiesi@0
|
48 'description' => 'Boolean value for whether this form be available as a block.',
|
danielebarchiesi@0
|
49 'type' => 'int',
|
danielebarchiesi@0
|
50 'size' => 'tiny',
|
danielebarchiesi@0
|
51 'not null' => TRUE,
|
danielebarchiesi@0
|
52 'default' => 0,
|
danielebarchiesi@0
|
53 ),
|
danielebarchiesi@0
|
54 'teaser' => array(
|
danielebarchiesi@0
|
55 'description' => 'Boolean value for whether the entire form should be displayed on the teaser.',
|
danielebarchiesi@0
|
56 'type' => 'int',
|
danielebarchiesi@0
|
57 'size' => 'tiny',
|
danielebarchiesi@0
|
58 'not null' => TRUE,
|
danielebarchiesi@0
|
59 'default' => 0,
|
danielebarchiesi@0
|
60 ),
|
danielebarchiesi@0
|
61 'allow_draft' => array(
|
danielebarchiesi@0
|
62 'description' => 'Boolean value for whether submissions to this form be saved as a draft.',
|
danielebarchiesi@0
|
63 'type' => 'int',
|
danielebarchiesi@0
|
64 'size' => 'tiny',
|
danielebarchiesi@0
|
65 'not null' => TRUE,
|
danielebarchiesi@0
|
66 'default' => 0,
|
danielebarchiesi@0
|
67 ),
|
danielebarchiesi@0
|
68 'auto_save' => array(
|
danielebarchiesi@0
|
69 'description' => 'Boolean value for whether submissions to this form should be auto-saved between pages.',
|
danielebarchiesi@0
|
70 'type' => 'int',
|
danielebarchiesi@0
|
71 'size' => 'tiny',
|
danielebarchiesi@0
|
72 'not null' => TRUE,
|
danielebarchiesi@0
|
73 'default' => 0,
|
danielebarchiesi@0
|
74 ),
|
danielebarchiesi@0
|
75 'submit_notice' => array(
|
danielebarchiesi@0
|
76 'description' => 'Boolean value for whether to show or hide the previous submissions notification.',
|
danielebarchiesi@0
|
77 'type' => 'int',
|
danielebarchiesi@0
|
78 'size' => 'tiny',
|
danielebarchiesi@0
|
79 'not null' => TRUE,
|
danielebarchiesi@0
|
80 'default' => 1,
|
danielebarchiesi@0
|
81 ),
|
danielebarchiesi@0
|
82 'submit_text' => array(
|
danielebarchiesi@0
|
83 'description' => 'The title of the submit button on the form.',
|
danielebarchiesi@0
|
84 'type' => 'varchar',
|
danielebarchiesi@0
|
85 'length' => 255,
|
danielebarchiesi@0
|
86 ),
|
danielebarchiesi@0
|
87 'submit_limit' => array(
|
danielebarchiesi@0
|
88 'description' => 'The number of submissions a single user is allowed to submit within an interval. -1 is unlimited.',
|
danielebarchiesi@0
|
89 'type' => 'int',
|
danielebarchiesi@0
|
90 'size' => 'tiny',
|
danielebarchiesi@0
|
91 'not null' => TRUE,
|
danielebarchiesi@0
|
92 'default' => -1,
|
danielebarchiesi@0
|
93 ),
|
danielebarchiesi@0
|
94 'submit_interval' => array(
|
danielebarchiesi@0
|
95 'description' => 'The amount of time in seconds that must pass before a user can submit another submission within the set limit.',
|
danielebarchiesi@0
|
96 'type' => 'int',
|
danielebarchiesi@0
|
97 'not null' => TRUE,
|
danielebarchiesi@0
|
98 'default' => -1,
|
danielebarchiesi@0
|
99 ),
|
danielebarchiesi@0
|
100 'total_submit_limit' => array(
|
danielebarchiesi@0
|
101 'description' => 'The total number of submissions allowed within an interval. -1 is unlimited.',
|
danielebarchiesi@0
|
102 'type' => 'int',
|
danielebarchiesi@0
|
103 'not null' => TRUE,
|
danielebarchiesi@0
|
104 'default' => -1,
|
danielebarchiesi@0
|
105 ),
|
danielebarchiesi@0
|
106 'total_submit_interval' => array(
|
danielebarchiesi@0
|
107 'description' => 'The amount of time in seconds that must pass before another submission can be submitted within the set limit.',
|
danielebarchiesi@0
|
108 'type' => 'int',
|
danielebarchiesi@0
|
109 'not null' => TRUE,
|
danielebarchiesi@0
|
110 'default' => -1,
|
danielebarchiesi@0
|
111 ),
|
danielebarchiesi@0
|
112 ),
|
danielebarchiesi@0
|
113 'primary key' => array('nid'),
|
danielebarchiesi@0
|
114 );
|
danielebarchiesi@0
|
115
|
danielebarchiesi@0
|
116 $schema['webform_component'] = array(
|
danielebarchiesi@0
|
117 'description' => 'Stores information about components for webform nodes.',
|
danielebarchiesi@0
|
118 'fields' => array(
|
danielebarchiesi@0
|
119 'nid' => array(
|
danielebarchiesi@0
|
120 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
121 'type' => 'int',
|
danielebarchiesi@0
|
122 'unsigned' => TRUE,
|
danielebarchiesi@0
|
123 'not null' => TRUE,
|
danielebarchiesi@0
|
124 'default' => 0,
|
danielebarchiesi@0
|
125 ),
|
danielebarchiesi@0
|
126 'cid' => array(
|
danielebarchiesi@0
|
127 'description' => 'The identifier for this component within this node, starts at 0 for each node.',
|
danielebarchiesi@0
|
128 'type' => 'int',
|
danielebarchiesi@0
|
129 'size' => 'small',
|
danielebarchiesi@0
|
130 'unsigned' => TRUE,
|
danielebarchiesi@0
|
131 'not null' => TRUE,
|
danielebarchiesi@0
|
132 'default' => 0,
|
danielebarchiesi@0
|
133 ),
|
danielebarchiesi@0
|
134 'pid' => array(
|
danielebarchiesi@0
|
135 'description' => 'If this component has a parent fieldset, the cid of that component.',
|
danielebarchiesi@0
|
136 'type' => 'int',
|
danielebarchiesi@0
|
137 'size' => 'small',
|
danielebarchiesi@0
|
138 'unsigned' => TRUE,
|
danielebarchiesi@0
|
139 'not null' => TRUE,
|
danielebarchiesi@0
|
140 'default' => 0,
|
danielebarchiesi@0
|
141 ),
|
danielebarchiesi@0
|
142 'form_key' => array(
|
danielebarchiesi@0
|
143 'description' => 'When the form is displayed and processed, this key can be used to reference the results.',
|
danielebarchiesi@0
|
144 'type' => 'varchar',
|
danielebarchiesi@0
|
145 'length' => 128,
|
danielebarchiesi@0
|
146 ),
|
danielebarchiesi@0
|
147 'name' => array(
|
danielebarchiesi@0
|
148 'description' => 'The label for this component.',
|
danielebarchiesi@0
|
149 'type' => 'varchar',
|
danielebarchiesi@0
|
150 'length' => 255,
|
danielebarchiesi@0
|
151 ),
|
danielebarchiesi@0
|
152 'type' => array(
|
danielebarchiesi@0
|
153 'description' => 'The field type of this component (textfield, select, hidden, etc.).',
|
danielebarchiesi@0
|
154 'type' => 'varchar',
|
danielebarchiesi@0
|
155 'length' => 16,
|
danielebarchiesi@0
|
156 ),
|
danielebarchiesi@0
|
157 'value' => array(
|
danielebarchiesi@0
|
158 'description' => 'The default value of the component when displayed to the end-user.',
|
danielebarchiesi@0
|
159 'type' => 'text',
|
danielebarchiesi@0
|
160 'not null' => TRUE,
|
danielebarchiesi@0
|
161 ),
|
danielebarchiesi@0
|
162 'extra' => array(
|
danielebarchiesi@0
|
163 'description' => 'Additional information unique to the display or processing of this component.',
|
danielebarchiesi@0
|
164 'type' => 'text',
|
danielebarchiesi@0
|
165 'not null' => TRUE,
|
danielebarchiesi@0
|
166 ),
|
danielebarchiesi@0
|
167 'mandatory' => array(
|
danielebarchiesi@0
|
168 'description' => 'Boolean flag for if this component is required.',
|
danielebarchiesi@0
|
169 'type' => 'int',
|
danielebarchiesi@0
|
170 'size' => 'tiny',
|
danielebarchiesi@0
|
171 'not null' => TRUE,
|
danielebarchiesi@0
|
172 'default' => 0,
|
danielebarchiesi@0
|
173 ),
|
danielebarchiesi@0
|
174 'weight' => array(
|
danielebarchiesi@0
|
175 'description' => 'Determines the position of this component in the form.',
|
danielebarchiesi@0
|
176 'type' => 'int',
|
danielebarchiesi@0
|
177 'size' => 'small',
|
danielebarchiesi@0
|
178 'not null' => TRUE,
|
danielebarchiesi@0
|
179 'default' => 0,
|
danielebarchiesi@0
|
180 ),
|
danielebarchiesi@0
|
181 ),
|
danielebarchiesi@0
|
182 'primary key' => array('nid', 'cid'),
|
danielebarchiesi@0
|
183 );
|
danielebarchiesi@0
|
184
|
danielebarchiesi@0
|
185 $schema['webform_emails'] = array(
|
danielebarchiesi@0
|
186 'description' => 'Holds information regarding e-mails that should be sent upon submitting a webform',
|
danielebarchiesi@0
|
187 'fields' => array(
|
danielebarchiesi@0
|
188 'nid' => array(
|
danielebarchiesi@0
|
189 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
190 'type' => 'int',
|
danielebarchiesi@0
|
191 'unsigned' => TRUE,
|
danielebarchiesi@0
|
192 'not null' => TRUE,
|
danielebarchiesi@0
|
193 'default' => 0,
|
danielebarchiesi@0
|
194 ),
|
danielebarchiesi@0
|
195 'eid' => array(
|
danielebarchiesi@0
|
196 'description' => 'The e-mail identifier for this row\'s settings.',
|
danielebarchiesi@0
|
197 'type' => 'int',
|
danielebarchiesi@0
|
198 'unsigned' => TRUE,
|
danielebarchiesi@0
|
199 'size' => 'small',
|
danielebarchiesi@0
|
200 'not null' => TRUE,
|
danielebarchiesi@0
|
201 'default' => 0,
|
danielebarchiesi@0
|
202 ),
|
danielebarchiesi@0
|
203 'email' => array(
|
danielebarchiesi@0
|
204 'description' => 'The e-mail address that will be sent to upon submission. This may be an e-mail address, the special key "default" or a numeric value. If a numeric value is used, the value of a component will be substituted on submission.',
|
danielebarchiesi@0
|
205 'type' => 'text',
|
danielebarchiesi@0
|
206 'not null' => FALSE,
|
danielebarchiesi@0
|
207 ),
|
danielebarchiesi@0
|
208 'subject' => array(
|
danielebarchiesi@0
|
209 'description' => 'The e-mail subject that will be used. This may be a string, the special key "default" or a numeric value. If a numeric value is used, the value of a component will be substituted on submission.',
|
danielebarchiesi@0
|
210 'type' => 'varchar',
|
danielebarchiesi@0
|
211 'length' => '255',
|
danielebarchiesi@0
|
212 'not null' => FALSE,
|
danielebarchiesi@0
|
213 ),
|
danielebarchiesi@0
|
214 'from_name' => array(
|
danielebarchiesi@0
|
215 'description' => 'The e-mail "from" name that will be used. This may be a string, the special key "default" or a numeric value. If a numeric value is used, the value of a component will be substituted on submission.',
|
danielebarchiesi@0
|
216 'type' => 'varchar',
|
danielebarchiesi@0
|
217 'length' => '255',
|
danielebarchiesi@0
|
218 'not null' => FALSE,
|
danielebarchiesi@0
|
219 ),
|
danielebarchiesi@0
|
220 'from_address' => array(
|
danielebarchiesi@0
|
221 'description' => 'The e-mail "from" e-mail address that will be used. This may be a string, the special key "default" or a numeric value. If a numeric value is used, the value of a component will be substituted on submission.',
|
danielebarchiesi@0
|
222 'type' => 'varchar',
|
danielebarchiesi@0
|
223 'length' => '255',
|
danielebarchiesi@0
|
224 'not null' => FALSE,
|
danielebarchiesi@0
|
225 ),
|
danielebarchiesi@0
|
226 'template' => array(
|
danielebarchiesi@0
|
227 'description' => 'A template that will be used for the sent e-mail. This may be a string or the special key "default", which will use the template provided by the theming layer.',
|
danielebarchiesi@0
|
228 'type' => 'text',
|
danielebarchiesi@0
|
229 'not null' => FALSE,
|
danielebarchiesi@0
|
230 ),
|
danielebarchiesi@0
|
231 'excluded_components' => array(
|
danielebarchiesi@0
|
232 'description' => 'A list of components that will not be included in the %email_values token. A list of CIDs separated by commas.',
|
danielebarchiesi@0
|
233 'type' => 'text',
|
danielebarchiesi@0
|
234 'not null' => TRUE,
|
danielebarchiesi@0
|
235 ),
|
danielebarchiesi@0
|
236 'html' => array(
|
danielebarchiesi@0
|
237 'description' => 'Determines if the e-mail will be sent in an HTML format. Requires Mime Mail module.',
|
danielebarchiesi@0
|
238 'type' => 'int',
|
danielebarchiesi@0
|
239 'unsigned' => TRUE,
|
danielebarchiesi@0
|
240 'size' => 'tiny',
|
danielebarchiesi@0
|
241 'not null' => TRUE,
|
danielebarchiesi@0
|
242 'default' => 0,
|
danielebarchiesi@0
|
243 ),
|
danielebarchiesi@0
|
244 'attachments' => array(
|
danielebarchiesi@0
|
245 'description' => 'Determines if the e-mail will include file attachments. Requires Mime Mail module.',
|
danielebarchiesi@0
|
246 'type' => 'int',
|
danielebarchiesi@0
|
247 'unsigned' => TRUE,
|
danielebarchiesi@0
|
248 'size' => 'tiny',
|
danielebarchiesi@0
|
249 'not null' => TRUE,
|
danielebarchiesi@0
|
250 'default' => 0,
|
danielebarchiesi@0
|
251 ),
|
danielebarchiesi@0
|
252 ),
|
danielebarchiesi@0
|
253 'primary key' => array('nid', 'eid'),
|
danielebarchiesi@0
|
254 );
|
danielebarchiesi@0
|
255
|
danielebarchiesi@0
|
256 $schema['webform_roles'] = array(
|
danielebarchiesi@0
|
257 'description' => 'Holds access information regarding which roles are allowed to submit which webform nodes. Does not prevent access to the webform node entirely, use the {node_access} table for that purpose.',
|
danielebarchiesi@0
|
258 'fields' => array(
|
danielebarchiesi@0
|
259 'nid' => array(
|
danielebarchiesi@0
|
260 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
261 'type' => 'int',
|
danielebarchiesi@0
|
262 'unsigned' => TRUE,
|
danielebarchiesi@0
|
263 'not null' => TRUE,
|
danielebarchiesi@0
|
264 'default' => 0,
|
danielebarchiesi@0
|
265 ),
|
danielebarchiesi@0
|
266 'rid' => array(
|
danielebarchiesi@0
|
267 'description' => 'The role identifier.',
|
danielebarchiesi@0
|
268 'type' => 'int',
|
danielebarchiesi@0
|
269 'unsigned' => TRUE,
|
danielebarchiesi@0
|
270 'not null' => TRUE,
|
danielebarchiesi@0
|
271 'default' => 0,
|
danielebarchiesi@0
|
272 ),
|
danielebarchiesi@0
|
273 ),
|
danielebarchiesi@0
|
274 'primary key' => array('nid', 'rid'),
|
danielebarchiesi@0
|
275 );
|
danielebarchiesi@0
|
276
|
danielebarchiesi@0
|
277 $schema['webform_submissions'] = array(
|
danielebarchiesi@0
|
278 'description' => 'Holds general information about submissions outside of field values.',
|
danielebarchiesi@0
|
279 'fields' => array(
|
danielebarchiesi@0
|
280 'sid' => array(
|
danielebarchiesi@0
|
281 'description' => 'The unique identifier for this submission.',
|
danielebarchiesi@0
|
282 'type' => 'serial',
|
danielebarchiesi@0
|
283 'unsigned' => TRUE,
|
danielebarchiesi@0
|
284 'not null' => TRUE,
|
danielebarchiesi@0
|
285 ),
|
danielebarchiesi@0
|
286 'nid' => array(
|
danielebarchiesi@0
|
287 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
288 'type' => 'int',
|
danielebarchiesi@0
|
289 'unsigned' => TRUE,
|
danielebarchiesi@0
|
290 'not null' => TRUE,
|
danielebarchiesi@0
|
291 'default' => 0,
|
danielebarchiesi@0
|
292 ),
|
danielebarchiesi@0
|
293 'uid' => array(
|
danielebarchiesi@0
|
294 'description' => 'The id of the user that completed this submission.',
|
danielebarchiesi@0
|
295 'type' => 'int',
|
danielebarchiesi@0
|
296 'unsigned' => TRUE,
|
danielebarchiesi@0
|
297 'not null' => TRUE,
|
danielebarchiesi@0
|
298 'default' => 0,
|
danielebarchiesi@0
|
299 ),
|
danielebarchiesi@0
|
300 'is_draft' => array(
|
danielebarchiesi@0
|
301 'description' => 'Is this a draft of the submission?',
|
danielebarchiesi@0
|
302 'type' => 'int',
|
danielebarchiesi@0
|
303 'size' => 'tiny',
|
danielebarchiesi@0
|
304 'not null' => TRUE,
|
danielebarchiesi@0
|
305 'default' => 0,
|
danielebarchiesi@0
|
306 ),
|
danielebarchiesi@0
|
307 'submitted' => array(
|
danielebarchiesi@0
|
308 'description' => 'Timestamp of when the form was submitted.',
|
danielebarchiesi@0
|
309 'type' => 'int',
|
danielebarchiesi@0
|
310 'not null' => TRUE,
|
danielebarchiesi@0
|
311 'default' => 0,
|
danielebarchiesi@0
|
312 ),
|
danielebarchiesi@0
|
313 'remote_addr' => array(
|
danielebarchiesi@0
|
314 'description' => 'The IP address of the user that submitted the form.',
|
danielebarchiesi@0
|
315 'type' => 'varchar',
|
danielebarchiesi@0
|
316 'length' => 128,
|
danielebarchiesi@0
|
317 ),
|
danielebarchiesi@0
|
318 ),
|
danielebarchiesi@0
|
319 'primary key' => array('sid'),
|
danielebarchiesi@0
|
320 'unique keys' => array(
|
danielebarchiesi@0
|
321 'sid_nid' => array('sid', 'nid'),
|
danielebarchiesi@0
|
322 ),
|
danielebarchiesi@0
|
323 'indexes' => array(
|
danielebarchiesi@0
|
324 'nid_uid_sid' => array('nid', 'uid', 'sid'),
|
danielebarchiesi@0
|
325 'nid_sid' => array('nid', 'sid'),
|
danielebarchiesi@0
|
326 ),
|
danielebarchiesi@0
|
327 );
|
danielebarchiesi@0
|
328
|
danielebarchiesi@0
|
329 $schema['webform_submitted_data'] = array(
|
danielebarchiesi@0
|
330 'description' => 'Stores all submitted field data for webform submissions.',
|
danielebarchiesi@0
|
331 'fields' => array(
|
danielebarchiesi@0
|
332 'nid' => array(
|
danielebarchiesi@0
|
333 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
334 'type' => 'int',
|
danielebarchiesi@0
|
335 'unsigned' => TRUE,
|
danielebarchiesi@0
|
336 'not null' => TRUE,
|
danielebarchiesi@0
|
337 'default' => 0,
|
danielebarchiesi@0
|
338 ),
|
danielebarchiesi@0
|
339 'sid' => array(
|
danielebarchiesi@0
|
340 'description' => 'The unique identifier for this submission.',
|
danielebarchiesi@0
|
341 'type' => 'int',
|
danielebarchiesi@0
|
342 'unsigned' => TRUE,
|
danielebarchiesi@0
|
343 'not null' => TRUE,
|
danielebarchiesi@0
|
344 'default' => 0,
|
danielebarchiesi@0
|
345 ),
|
danielebarchiesi@0
|
346 'cid' => array(
|
danielebarchiesi@0
|
347 'description' => 'The identifier for this component within this node, starts at 0 for each node.',
|
danielebarchiesi@0
|
348 'type' => 'int',
|
danielebarchiesi@0
|
349 'size' => 'small',
|
danielebarchiesi@0
|
350 'unsigned' => TRUE,
|
danielebarchiesi@0
|
351 'not null' => TRUE,
|
danielebarchiesi@0
|
352 'default' => 0,
|
danielebarchiesi@0
|
353 ),
|
danielebarchiesi@0
|
354 'no' => array(
|
danielebarchiesi@0
|
355 'description' => 'Usually this value is 0, but if a field has multiple values (such as a time or date), it may require multiple rows in the database.',
|
danielebarchiesi@0
|
356 'type' => 'varchar',
|
danielebarchiesi@0
|
357 'length' => 128,
|
danielebarchiesi@0
|
358 'not null' => TRUE,
|
danielebarchiesi@0
|
359 'default' => '0',
|
danielebarchiesi@0
|
360 ),
|
danielebarchiesi@0
|
361 'data' => array(
|
danielebarchiesi@0
|
362 'description' => 'The submitted value of this field, may be serialized for some components.',
|
danielebarchiesi@0
|
363 'type' => 'text',
|
danielebarchiesi@0
|
364 'size' => 'medium',
|
danielebarchiesi@0
|
365 'not null' => TRUE,
|
danielebarchiesi@0
|
366 ),
|
danielebarchiesi@0
|
367 ),
|
danielebarchiesi@0
|
368 'primary key' => array('nid', 'sid', 'cid', 'no'),
|
danielebarchiesi@0
|
369 'indexes' => array(
|
danielebarchiesi@0
|
370 'nid' => array('nid'),
|
danielebarchiesi@0
|
371 'sid_nid' => array('sid', 'nid'),
|
danielebarchiesi@0
|
372 ),
|
danielebarchiesi@0
|
373 );
|
danielebarchiesi@0
|
374
|
danielebarchiesi@0
|
375 $schema['webform_last_download'] = array(
|
danielebarchiesi@0
|
376 'description' => 'Stores last submission number per user download.',
|
danielebarchiesi@0
|
377 'fields' => array(
|
danielebarchiesi@0
|
378 'nid' => array(
|
danielebarchiesi@0
|
379 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
380 'type' => 'int',
|
danielebarchiesi@0
|
381 'unsigned' => TRUE,
|
danielebarchiesi@0
|
382 'not null' => TRUE,
|
danielebarchiesi@0
|
383 'default' => 0,
|
danielebarchiesi@0
|
384 ),
|
danielebarchiesi@0
|
385 'uid' => array(
|
danielebarchiesi@0
|
386 'description' => 'The user identifier.',
|
danielebarchiesi@0
|
387 'type' => 'int',
|
danielebarchiesi@0
|
388 'unsigned' => TRUE,
|
danielebarchiesi@0
|
389 'not null' => TRUE,
|
danielebarchiesi@0
|
390 'default' => 0,
|
danielebarchiesi@0
|
391 ),
|
danielebarchiesi@0
|
392 'sid' => array(
|
danielebarchiesi@0
|
393 'description' => 'The last downloaded submission number.',
|
danielebarchiesi@0
|
394 'type' => 'int',
|
danielebarchiesi@0
|
395 'unsigned' => TRUE,
|
danielebarchiesi@0
|
396 'not null' => TRUE,
|
danielebarchiesi@0
|
397 'default' => 0,
|
danielebarchiesi@0
|
398 ),
|
danielebarchiesi@0
|
399 'requested' => array(
|
danielebarchiesi@0
|
400 'description' => 'Timestamp of last download request.',
|
danielebarchiesi@0
|
401 'type' => 'int',
|
danielebarchiesi@0
|
402 'unsigned' => TRUE,
|
danielebarchiesi@0
|
403 'not null' => TRUE,
|
danielebarchiesi@0
|
404 'default' => 0,
|
danielebarchiesi@0
|
405 ),
|
danielebarchiesi@0
|
406 ),
|
danielebarchiesi@0
|
407 'primary key' => array('nid', 'uid'),
|
danielebarchiesi@0
|
408 );
|
danielebarchiesi@0
|
409
|
danielebarchiesi@0
|
410 return $schema;
|
danielebarchiesi@0
|
411 }
|
danielebarchiesi@0
|
412
|
danielebarchiesi@0
|
413 /**
|
danielebarchiesi@0
|
414 * Implements hook_install().
|
danielebarchiesi@0
|
415 */
|
danielebarchiesi@0
|
416 function webform_install() {
|
danielebarchiesi@0
|
417 module_load_include('inc', 'node', 'content_types');
|
danielebarchiesi@0
|
418 db_update('system')
|
danielebarchiesi@0
|
419 ->condition('name', 'webform')
|
danielebarchiesi@0
|
420 ->condition('type', 'module')
|
danielebarchiesi@0
|
421 ->fields(array('weight' => -1))
|
danielebarchiesi@0
|
422 ->execute();
|
danielebarchiesi@0
|
423
|
danielebarchiesi@0
|
424 // Optionally create the default webform type.
|
danielebarchiesi@0
|
425 if (variable_get('webform_install_create_content_type', TRUE)) {
|
danielebarchiesi@0
|
426 $webform_type = array(
|
danielebarchiesi@0
|
427 'type' => 'webform',
|
danielebarchiesi@0
|
428 'name' => st('Webform'),
|
danielebarchiesi@0
|
429 'base' => 'node_content',
|
danielebarchiesi@0
|
430 'description' => st('Create a new form or questionnaire accessible to users. Submission results and statistics are recorded and accessible to privileged users.'),
|
danielebarchiesi@0
|
431 'custom' => TRUE,
|
danielebarchiesi@0
|
432 'modified' => TRUE,
|
danielebarchiesi@0
|
433 'locked' => FALSE,
|
danielebarchiesi@0
|
434 );
|
danielebarchiesi@0
|
435 $webform_type = node_type_set_defaults($webform_type);
|
danielebarchiesi@0
|
436 node_type_save($webform_type);
|
danielebarchiesi@0
|
437 node_add_body_field($webform_type);
|
danielebarchiesi@0
|
438 }
|
danielebarchiesi@0
|
439 }
|
danielebarchiesi@0
|
440
|
danielebarchiesi@0
|
441 /**
|
danielebarchiesi@0
|
442 * Implements hook_uninstall().
|
danielebarchiesi@0
|
443 */
|
danielebarchiesi@0
|
444 function webform_uninstall() {
|
danielebarchiesi@0
|
445 // Unset webform variables.
|
danielebarchiesi@0
|
446 variable_del('webform_node_types');
|
danielebarchiesi@0
|
447 variable_del('webform_node_types_primary');
|
danielebarchiesi@0
|
448 variable_del('webform_use_cookies');
|
danielebarchiesi@0
|
449 variable_del('webform_default_from_address');
|
danielebarchiesi@0
|
450 variable_del('webform_default_from_name');
|
danielebarchiesi@0
|
451 variable_del('webform_default_subject');
|
danielebarchiesi@0
|
452 variable_del('webform_default_format');
|
danielebarchiesi@0
|
453 variable_del('webform_format_override');
|
danielebarchiesi@0
|
454 variable_del('webform_csv_delimiter');
|
danielebarchiesi@0
|
455 variable_del('webform_allowed_tags');
|
danielebarchiesi@0
|
456 variable_del('webform_blocks');
|
danielebarchiesi@0
|
457
|
danielebarchiesi@0
|
458 $component_list = array();
|
danielebarchiesi@0
|
459 $path = drupal_get_path('module', 'webform') . '/components';
|
danielebarchiesi@0
|
460 $files = file_scan_directory($path, '/^.*\.inc$/');
|
danielebarchiesi@0
|
461 foreach ($files as $filename => $file) {
|
danielebarchiesi@0
|
462 variable_del('webform_enable_' . $file->name, 1);
|
danielebarchiesi@0
|
463 }
|
danielebarchiesi@0
|
464
|
danielebarchiesi@0
|
465 // Delete uploaded files.
|
danielebarchiesi@0
|
466 $filepath = file_build_uri('webform');
|
danielebarchiesi@0
|
467 file_unmanaged_delete_recursive($filepath);
|
danielebarchiesi@0
|
468 }
|
danielebarchiesi@0
|
469
|
danielebarchiesi@0
|
470 /**
|
danielebarchiesi@0
|
471 * Set the minimum upgrade version.
|
danielebarchiesi@0
|
472 *
|
danielebarchiesi@0
|
473 * Currently you cannot upgrade from 2.x in Drupal 6 to 3.x in Drupal 7. However
|
danielebarchiesi@0
|
474 * there are no database changes between the 3.x versions, so no update is
|
danielebarchiesi@0
|
475 * needed at all to move from 3.x in Drupal 6 to Drupal 7.
|
danielebarchiesi@0
|
476 */
|
danielebarchiesi@0
|
477 function webform_update_last_removed() {
|
danielebarchiesi@0
|
478 return 6313;
|
danielebarchiesi@0
|
479 }
|
danielebarchiesi@0
|
480
|
danielebarchiesi@0
|
481 /**
|
danielebarchiesi@0
|
482 * Allow the confirmation format column to have a NULL value.
|
danielebarchiesi@0
|
483 */
|
danielebarchiesi@0
|
484 function webform_update_7301() {
|
danielebarchiesi@0
|
485 // These changes are modeled after user_update_7010().
|
danielebarchiesi@0
|
486 db_change_field('webform', 'confirmation_format', 'confirmation_format', array(
|
danielebarchiesi@0
|
487 'description' => 'The {filter_format}.format of the confirmation message.',
|
danielebarchiesi@0
|
488 'type' => 'int',
|
danielebarchiesi@0
|
489 'unsigned' => TRUE,
|
danielebarchiesi@0
|
490 'not null' => FALSE,
|
danielebarchiesi@0
|
491 ));
|
danielebarchiesi@0
|
492 db_update('webform')
|
danielebarchiesi@0
|
493 ->fields(array('confirmation_format' => NULL))
|
danielebarchiesi@0
|
494 ->condition('confirmation', '')
|
danielebarchiesi@0
|
495 ->condition('confirmation_format', 0)
|
danielebarchiesi@0
|
496 ->execute();
|
danielebarchiesi@0
|
497 $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
|
danielebarchiesi@0
|
498 $default_format = variable_get('filter_default_format', 1);
|
danielebarchiesi@0
|
499
|
danielebarchiesi@0
|
500 // Since Webform may be updated separately from Drupal core, not all format
|
danielebarchiesi@0
|
501 // names may be numbers when running this update.
|
danielebarchiesi@0
|
502 $numeric_formats = array();
|
danielebarchiesi@0
|
503 foreach ($existing_formats as $format_name) {
|
danielebarchiesi@0
|
504 if (is_numeric($format_name)) {
|
danielebarchiesi@0
|
505 $numeric_formats[] = (int) $format_name;
|
danielebarchiesi@0
|
506 }
|
danielebarchiesi@0
|
507 }
|
danielebarchiesi@0
|
508
|
danielebarchiesi@0
|
509 $query = db_update('webform')
|
danielebarchiesi@0
|
510 ->fields(array('confirmation_format' => $default_format))
|
danielebarchiesi@0
|
511 ->isNotNull('confirmation_format');
|
danielebarchiesi@0
|
512
|
danielebarchiesi@0
|
513 if (!empty($numeric_formats)) {
|
danielebarchiesi@0
|
514 $query->condition('confirmation_format', $numeric_formats, 'NOT IN');
|
danielebarchiesi@0
|
515 }
|
danielebarchiesi@0
|
516
|
danielebarchiesi@0
|
517 $query->execute();
|
danielebarchiesi@0
|
518 }
|
danielebarchiesi@0
|
519
|
danielebarchiesi@0
|
520 /**
|
danielebarchiesi@0
|
521 * Add columns for e-mail HTML and attachment settings.
|
danielebarchiesi@0
|
522 */
|
danielebarchiesi@0
|
523 function webform_update_7302() {
|
danielebarchiesi@0
|
524 if (!db_field_exists('webform_emails', 'html')) {
|
danielebarchiesi@0
|
525 db_add_field('webform_emails', 'html', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'default' => 0, 'not null' => TRUE));
|
danielebarchiesi@0
|
526 db_add_field('webform_emails', 'attachments', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'default' => 0, 'not null' => TRUE));
|
danielebarchiesi@0
|
527 }
|
danielebarchiesi@0
|
528 }
|
danielebarchiesi@0
|
529
|
danielebarchiesi@0
|
530 /**
|
danielebarchiesi@0
|
531 * Set the default for the "submit_notice" column to 1.
|
danielebarchiesi@0
|
532 */
|
danielebarchiesi@0
|
533 function webform_update_7303() {
|
danielebarchiesi@0
|
534 db_change_field('webform', 'submit_notice', 'submit_notice', array('type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 1));
|
danielebarchiesi@0
|
535 }
|
danielebarchiesi@0
|
536
|
danielebarchiesi@0
|
537 /**
|
danielebarchiesi@0
|
538 * Add field for block feature and redirection setting.
|
danielebarchiesi@0
|
539 */
|
danielebarchiesi@0
|
540 function webform_update_7304() {
|
danielebarchiesi@0
|
541 if (!db_field_exists('webform', 'block')) {
|
danielebarchiesi@0
|
542 db_add_field('webform', 'block', array('type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 0));
|
danielebarchiesi@0
|
543 db_change_field('webform', 'redirect_url', 'redirect_url', array('type' => 'varchar', 'length' => 255, 'default' => '<confirmation>'));
|
danielebarchiesi@0
|
544 db_update('webform')
|
danielebarchiesi@0
|
545 ->fields(array('redirect_url' => 'confirmation'))
|
danielebarchiesi@0
|
546 ->condition('redirect_url', '')
|
danielebarchiesi@0
|
547 ->execute();
|
danielebarchiesi@0
|
548 }
|
danielebarchiesi@0
|
549 }
|
danielebarchiesi@0
|
550
|
danielebarchiesi@0
|
551 /**
|
danielebarchiesi@0
|
552 * Set additional_validate and additional_submit columns to allow NULL.
|
danielebarchiesi@0
|
553 */
|
danielebarchiesi@0
|
554 function webform_update_7305() {
|
danielebarchiesi@0
|
555 if (db_field_exists('webform', 'additional_validate')) {
|
danielebarchiesi@0
|
556 db_change_field('webform', 'additional_validate', 'additional_validate', array('type' => 'text', 'not null' => FALSE));
|
danielebarchiesi@0
|
557 db_change_field('webform', 'additional_submit', 'additional_submit', array('type' => 'text', 'not null' => FALSE));
|
danielebarchiesi@0
|
558 }
|
danielebarchiesi@0
|
559 }
|
danielebarchiesi@0
|
560
|
danielebarchiesi@0
|
561 /**
|
danielebarchiesi@0
|
562 * Add column for webform status (open or closed).
|
danielebarchiesi@0
|
563 */
|
danielebarchiesi@0
|
564 function webform_update_7306() {
|
danielebarchiesi@0
|
565 if (!db_field_exists('webform', 'status')) {
|
danielebarchiesi@0
|
566 db_add_field('webform', 'status', array('type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 1));
|
danielebarchiesi@0
|
567 }
|
danielebarchiesi@0
|
568 }
|
danielebarchiesi@0
|
569
|
danielebarchiesi@0
|
570 /**
|
danielebarchiesi@0
|
571 * Update the confirmation_format column for default text format changes.
|
danielebarchiesi@0
|
572 */
|
danielebarchiesi@0
|
573 function webform_update_7307() {
|
danielebarchiesi@0
|
574 // Update removed and moved to webform_update_7301().
|
danielebarchiesi@0
|
575 // See http://drupal.org/node/976102.
|
danielebarchiesi@0
|
576 }
|
danielebarchiesi@0
|
577
|
danielebarchiesi@0
|
578 /**
|
danielebarchiesi@0
|
579 * Update the confirmation_format column to allow it to store strings.
|
danielebarchiesi@0
|
580 */
|
danielebarchiesi@0
|
581 function webform_update_7308() {
|
danielebarchiesi@0
|
582 db_change_field('webform', 'confirmation_format', 'confirmation_format', array(
|
danielebarchiesi@0
|
583 'description' => 'The {filter_format}.format of the confirmation message.',
|
danielebarchiesi@0
|
584 'type' => 'varchar',
|
danielebarchiesi@0
|
585 'length' => 255,
|
danielebarchiesi@0
|
586 'not null' => FALSE,
|
danielebarchiesi@0
|
587 ));
|
danielebarchiesi@0
|
588 }
|
danielebarchiesi@0
|
589
|
danielebarchiesi@0
|
590 /**
|
danielebarchiesi@0
|
591 * Add the ability to auto-save as draft between pages.
|
danielebarchiesi@0
|
592 */
|
danielebarchiesi@0
|
593 function webform_update_7309() {
|
danielebarchiesi@0
|
594 if (!db_field_exists('webform', 'auto_save')) {
|
danielebarchiesi@0
|
595 db_add_field('webform', 'auto_save', array('type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 0));
|
danielebarchiesi@0
|
596 }
|
danielebarchiesi@0
|
597 }
|
danielebarchiesi@0
|
598
|
danielebarchiesi@0
|
599 /**
|
danielebarchiesi@0
|
600 * Remove orphaned and unnecessary rows in the webform table.
|
danielebarchiesi@0
|
601 */
|
danielebarchiesi@0
|
602 function webform_update_7310() {
|
danielebarchiesi@0
|
603 $result = db_query("SELECT nid FROM {webform} WHERE
|
danielebarchiesi@0
|
604 nid NOT IN
|
danielebarchiesi@0
|
605 (SELECT DISTINCT(w1.nid) FROM {webform} w1 INNER JOIN {webform_component} wc ON w1.nid = wc.nid)
|
danielebarchiesi@0
|
606 AND nid NOT IN
|
danielebarchiesi@0
|
607 (SELECT w2.nid FROM {webform} w2 INNER JOIN {node} n ON w2.nid = n.nid WHERE n.type = 'webform')"
|
danielebarchiesi@0
|
608 );
|
danielebarchiesi@0
|
609 $empty_nids = array();
|
danielebarchiesi@0
|
610 foreach ($result as $row) {
|
danielebarchiesi@0
|
611 $empty_nids[] = $row->nid;
|
danielebarchiesi@0
|
612 }
|
danielebarchiesi@0
|
613 if (!empty($empty_nids)) {
|
danielebarchiesi@0
|
614 db_delete('webform')->condition('nid', $empty_nids, 'IN')->execute();
|
danielebarchiesi@0
|
615 }
|
danielebarchiesi@0
|
616 }
|
danielebarchiesi@0
|
617
|
danielebarchiesi@0
|
618 /**
|
danielebarchiesi@0
|
619 * Add an index for nid_uid_sid to webform_submissions.
|
danielebarchiesi@0
|
620 */
|
danielebarchiesi@0
|
621 function webform_update_7311() {
|
danielebarchiesi@0
|
622 if (!db_index_exists('webform_submissions', 'nid_uid_sid')) {
|
danielebarchiesi@0
|
623 db_add_index('webform_submissions', 'nid_uid_sid', array('nid', 'uid', 'sid'));
|
danielebarchiesi@0
|
624 }
|
danielebarchiesi@0
|
625 }
|
danielebarchiesi@0
|
626
|
danielebarchiesi@0
|
627 /**
|
danielebarchiesi@0
|
628 * Remove unused Webform variables.
|
danielebarchiesi@0
|
629 */
|
danielebarchiesi@0
|
630 function webform_update_7312() {
|
danielebarchiesi@0
|
631 variable_del('node_types');
|
danielebarchiesi@0
|
632 variable_del('components');
|
danielebarchiesi@0
|
633 }
|
danielebarchiesi@0
|
634
|
danielebarchiesi@0
|
635 /**
|
danielebarchiesi@0
|
636 * Convert the Date component start and end year options to start and end date.
|
danielebarchiesi@0
|
637 */
|
danielebarchiesi@0
|
638 function webform_update_7313() {
|
danielebarchiesi@0
|
639 $result = db_select('webform_component', 'wc', array('fetch' => PDO::FETCH_ASSOC))
|
danielebarchiesi@0
|
640 ->fields('wc')
|
danielebarchiesi@0
|
641 ->condition('type', 'date')
|
danielebarchiesi@0
|
642 ->execute();
|
danielebarchiesi@0
|
643 foreach ($result as $component) {
|
danielebarchiesi@0
|
644 $component['extra'] = unserialize($component['extra']);
|
danielebarchiesi@0
|
645 if (!isset($component['extra']['start_date']) && !isset($component['end_date'])) {
|
danielebarchiesi@0
|
646 foreach (array('year_start' => 'start_date', 'year_end' => 'end_date') as $key => $replacement) {
|
danielebarchiesi@0
|
647 $value = isset($component['extra'][$key]) ? trim($component['extra'][$key]) : '';
|
danielebarchiesi@0
|
648 // Relative years.
|
danielebarchiesi@0
|
649 if (preg_match('/[-+][ ]*[0-9]+/', $value)) {
|
danielebarchiesi@0
|
650 $component['extra'][$replacement] = ($value == 1) ? ($value . ' year') : ($value . ' years');
|
danielebarchiesi@0
|
651 }
|
danielebarchiesi@0
|
652 // Absolute years.
|
danielebarchiesi@0
|
653 elseif (is_numeric($value)) {
|
danielebarchiesi@0
|
654 $component['extra'][$replacement] = 'Dec 31 ' . $value;
|
danielebarchiesi@0
|
655 }
|
danielebarchiesi@0
|
656 unset($component['extra'][$key]);
|
danielebarchiesi@0
|
657 }
|
danielebarchiesi@0
|
658 $component['extra'] = serialize($component['extra']);
|
danielebarchiesi@0
|
659 drupal_write_record('webform_component', $component, array('nid', 'cid'));
|
danielebarchiesi@0
|
660 }
|
danielebarchiesi@0
|
661 }
|
danielebarchiesi@0
|
662 }
|
danielebarchiesi@0
|
663
|
danielebarchiesi@0
|
664 /**
|
danielebarchiesi@0
|
665 * Add webform_last_download table to store last downloaded sid per user.
|
danielebarchiesi@0
|
666 */
|
danielebarchiesi@0
|
667 function webform_update_7314() {
|
danielebarchiesi@0
|
668 // Safety check to prevent recreating the webform_last_download table.
|
danielebarchiesi@0
|
669 if (db_table_exists('webform_last_download')) {
|
danielebarchiesi@0
|
670 return;
|
danielebarchiesi@0
|
671 }
|
danielebarchiesi@0
|
672
|
danielebarchiesi@0
|
673 $schema['webform_last_download'] = array(
|
danielebarchiesi@0
|
674 'description' => 'Stores last submission number per user download.',
|
danielebarchiesi@0
|
675 'fields' => array(
|
danielebarchiesi@0
|
676 'nid' => array(
|
danielebarchiesi@0
|
677 'description' => 'The node identifier of a webform.',
|
danielebarchiesi@0
|
678 'type' => 'int',
|
danielebarchiesi@0
|
679 'unsigned' => TRUE,
|
danielebarchiesi@0
|
680 'not null' => TRUE,
|
danielebarchiesi@0
|
681 'default' => 0,
|
danielebarchiesi@0
|
682 ),
|
danielebarchiesi@0
|
683 'uid' => array(
|
danielebarchiesi@0
|
684 'description' => 'The user identifier.',
|
danielebarchiesi@0
|
685 'type' => 'int',
|
danielebarchiesi@0
|
686 'unsigned' => TRUE,
|
danielebarchiesi@0
|
687 'not null' => TRUE,
|
danielebarchiesi@0
|
688 'default' => 0,
|
danielebarchiesi@0
|
689 ),
|
danielebarchiesi@0
|
690 'sid' => array(
|
danielebarchiesi@0
|
691 'description' => 'The last downloaded submission number.',
|
danielebarchiesi@0
|
692 'type' => 'int',
|
danielebarchiesi@0
|
693 'unsigned' => TRUE,
|
danielebarchiesi@0
|
694 'not null' => TRUE,
|
danielebarchiesi@0
|
695 'default' => 0,
|
danielebarchiesi@0
|
696 ),
|
danielebarchiesi@0
|
697 ),
|
danielebarchiesi@0
|
698 'primary key' => array('nid', 'uid'),
|
danielebarchiesi@0
|
699 );
|
danielebarchiesi@0
|
700 db_create_table('webform_last_download', $schema['webform_last_download']);
|
danielebarchiesi@0
|
701 }
|
danielebarchiesi@0
|
702
|
danielebarchiesi@0
|
703 /**
|
danielebarchiesi@0
|
704 * Add column for timestamp of last requested CSV download.
|
danielebarchiesi@0
|
705 */
|
danielebarchiesi@0
|
706 function webform_update_7315() {
|
danielebarchiesi@0
|
707 if (!db_field_exists('webform_last_download', 'requested')) {
|
danielebarchiesi@0
|
708 db_add_field('webform_last_download', 'requested', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0,));
|
danielebarchiesi@0
|
709 }
|
danielebarchiesi@0
|
710 }
|
danielebarchiesi@0
|
711
|
danielebarchiesi@0
|
712 /**
|
danielebarchiesi@0
|
713 * Add additional columns for total submission limit.
|
danielebarchiesi@0
|
714 */
|
danielebarchiesi@0
|
715 function webform_update_7316() {
|
danielebarchiesi@0
|
716 if (!db_field_exists('webform', 'total_submit_limit')) {
|
danielebarchiesi@0
|
717 db_add_field('webform', 'total_submit_limit', array('type' => 'int', 'not null' => TRUE, 'default' => -1));
|
danielebarchiesi@0
|
718 }
|
danielebarchiesi@0
|
719
|
danielebarchiesi@0
|
720 if (!db_field_exists('webform', 'total_submit_interval')) {
|
danielebarchiesi@0
|
721 db_add_field('webform', 'total_submit_interval', array('type' => 'int', 'not null' => TRUE, 'default' => -1));
|
danielebarchiesi@0
|
722 }
|
danielebarchiesi@0
|
723 }
|
danielebarchiesi@0
|
724
|
danielebarchiesi@0
|
725 /**
|
danielebarchiesi@0
|
726 * Add an index for 'nid_sid' to webform_submissions.
|
danielebarchiesi@0
|
727 */
|
danielebarchiesi@0
|
728 function webform_update_7317() {
|
danielebarchiesi@0
|
729 // Even though we already have an index 'nid_uid_sid', adding the index for
|
danielebarchiesi@0
|
730 // 'nid_sid' saves us a tablesort on the node/x/webform-results page.
|
danielebarchiesi@0
|
731 if (!db_index_exists('webform_submissions', 'nid_sid')) {
|
danielebarchiesi@0
|
732 db_add_index('webform_submissions', 'nid_sid', array('nid', 'sid'));
|
danielebarchiesi@0
|
733 }
|
danielebarchiesi@0
|
734 }
|
danielebarchiesi@0
|
735
|
danielebarchiesi@0
|
736 /**
|
danielebarchiesi@0
|
737 * Upgrade file components to support the new AJAX-upload element.
|
danielebarchiesi@0
|
738 */
|
danielebarchiesi@0
|
739 function webform_update_7318() {
|
danielebarchiesi@0
|
740 $result = db_select('webform_component', 'wc', array('fetch' => PDO::FETCH_ASSOC))
|
danielebarchiesi@0
|
741 ->fields('wc')
|
danielebarchiesi@0
|
742 ->condition('type', 'file')
|
danielebarchiesi@0
|
743 ->execute();
|
danielebarchiesi@0
|
744 foreach ($result as $component) {
|
danielebarchiesi@0
|
745 $component['extra'] = unserialize($component['extra']);
|
danielebarchiesi@0
|
746 if (!isset($component['extra']['directory'])) {
|
danielebarchiesi@0
|
747 $component['extra']['directory'] = $component['extra']['savelocation'];
|
danielebarchiesi@0
|
748 $component['extra']['scheme'] = file_default_scheme();
|
danielebarchiesi@0
|
749 $component['extra']['filtering']['size'] = $component['extra']['filtering']['size'] . ' KB';
|
danielebarchiesi@0
|
750 unset($component['extra']['savelocation']);
|
danielebarchiesi@0
|
751 $component['extra'] = serialize($component['extra']);
|
danielebarchiesi@0
|
752 drupal_write_record('webform_component', $component, array('nid', 'cid'));
|
danielebarchiesi@0
|
753 }
|
danielebarchiesi@0
|
754 }
|
danielebarchiesi@0
|
755
|
danielebarchiesi@0
|
756 return t('File components updated to support AJAX uploading.');
|
danielebarchiesi@0
|
757 }
|
danielebarchiesi@0
|
758
|
danielebarchiesi@0
|
759 /**
|
danielebarchiesi@0
|
760 * Add file usage entries for all files uploaded through Webform.
|
danielebarchiesi@0
|
761 */
|
danielebarchiesi@0
|
762 function webform_update_7319(&$sandbox) {
|
danielebarchiesi@0
|
763 if (!isset($sandbox['progress'])) {
|
danielebarchiesi@0
|
764 // Initialize batch update information.
|
danielebarchiesi@0
|
765 $sandbox['progress'] = 0;
|
danielebarchiesi@0
|
766 $sandbox['last_fid_processed'] = -1;
|
danielebarchiesi@0
|
767 $sandbox['max'] = db_select('file_managed')
|
danielebarchiesi@0
|
768 ->condition('uri', '%' . db_like('://webform/') . '%', 'LIKE')
|
danielebarchiesi@0
|
769 ->countQuery()
|
danielebarchiesi@0
|
770 ->execute()
|
danielebarchiesi@0
|
771 ->fetchField();
|
danielebarchiesi@0
|
772 }
|
danielebarchiesi@0
|
773
|
danielebarchiesi@0
|
774 // Process all files attached to a given revision during the same batch.
|
danielebarchiesi@0
|
775 $limit = variable_get('webform_update_batch_size', 100);
|
danielebarchiesi@0
|
776 $files = db_select('file_managed', 'f')
|
danielebarchiesi@0
|
777 ->fields('f')
|
danielebarchiesi@0
|
778 ->condition('uri', '%' . db_like('://webform/') . '%', 'LIKE')
|
danielebarchiesi@0
|
779 ->condition('fid', $sandbox['last_fid_processed'], '>')
|
danielebarchiesi@0
|
780 ->orderBy('fid', 'ASC')
|
danielebarchiesi@0
|
781 ->range(0, $limit)
|
danielebarchiesi@0
|
782 ->execute()
|
danielebarchiesi@0
|
783 ->fetchAllAssoc('fid', PDO::FETCH_ASSOC);
|
danielebarchiesi@0
|
784
|
danielebarchiesi@0
|
785 // Determine each submission with which a file is associated.
|
danielebarchiesi@0
|
786 if (!empty($files)) {
|
danielebarchiesi@0
|
787 foreach ($files as $fid => $file) {
|
danielebarchiesi@0
|
788 $file = (object) $file;
|
danielebarchiesi@0
|
789 $sids = db_query('SELECT wsd.sid FROM {webform_component} wc INNER JOIN {webform_submitted_data} wsd ON wc.nid = wsd.nid AND wc.type = :file WHERE data = :fid', array(':file' => 'file', ':fid' => $file->fid))->fetchAllAssoc('sid', PDO::FETCH_ASSOC);
|
danielebarchiesi@0
|
790 foreach ($sids as $sid => $row) {
|
danielebarchiesi@0
|
791 // We use a db_merge() instead of file_usage_add() to prevent problems
|
danielebarchiesi@0
|
792 // in the event this update was run twice. No file provided by Webform
|
danielebarchiesi@0
|
793 // should ever be in use more than once at this point.
|
danielebarchiesi@0
|
794 db_merge('file_usage')
|
danielebarchiesi@0
|
795 ->key(array(
|
danielebarchiesi@0
|
796 'fid' => $file->fid,
|
danielebarchiesi@0
|
797 'type' => 'submission',
|
danielebarchiesi@0
|
798 'module' => 'webform',
|
danielebarchiesi@0
|
799 'id' => $sid,
|
danielebarchiesi@0
|
800 ))
|
danielebarchiesi@0
|
801 ->fields(array(
|
danielebarchiesi@0
|
802 'count' => 1,
|
danielebarchiesi@0
|
803 ))
|
danielebarchiesi@0
|
804 ->execute();
|
danielebarchiesi@0
|
805 }
|
danielebarchiesi@0
|
806
|
danielebarchiesi@0
|
807 // Update our progress information for the batch update.
|
danielebarchiesi@0
|
808 $sandbox['progress']++;
|
danielebarchiesi@0
|
809 $sandbox['last_fid_processed'] = $file->fid;
|
danielebarchiesi@0
|
810 }
|
danielebarchiesi@0
|
811 }
|
danielebarchiesi@0
|
812
|
danielebarchiesi@0
|
813 // If less than limit was processed, the update process is finished.
|
danielebarchiesi@0
|
814 if (count($files) < $limit || $sandbox['progress'] == $sandbox['max']) {
|
danielebarchiesi@0
|
815 $finished = TRUE;
|
danielebarchiesi@0
|
816 }
|
danielebarchiesi@0
|
817
|
danielebarchiesi@0
|
818 // If there's no max value then there's nothing to update and we're finished.
|
danielebarchiesi@0
|
819 if (empty($sandbox['max']) || isset($finished)) {
|
danielebarchiesi@0
|
820 return t('Webform file entries created in the file_usage table.');
|
danielebarchiesi@0
|
821 }
|
danielebarchiesi@0
|
822 else {
|
danielebarchiesi@0
|
823 // Indicate our current progress to the batch update system.
|
danielebarchiesi@0
|
824 $sandbox['#finished'] = $sandbox['progress'] / $sandbox['max'];
|
danielebarchiesi@0
|
825 }
|
danielebarchiesi@0
|
826 }
|
danielebarchiesi@0
|
827
|
danielebarchiesi@0
|
828 /**
|
danielebarchiesi@0
|
829 * Mark files uploaded through Webform that report active usage permanent.
|
danielebarchiesi@0
|
830 */
|
danielebarchiesi@0
|
831 function webform_update_7320() {
|
danielebarchiesi@0
|
832 db_query("UPDATE {file_managed} SET status = 1 WHERE fid IN (SELECT fid FROM {file_usage} WHERE module = :module_name)", array(':module_name' => 'webform'));
|
danielebarchiesi@0
|
833 }
|
danielebarchiesi@0
|
834
|
danielebarchiesi@0
|
835 /**
|
danielebarchiesi@0
|
836 * Remove files left over from deleted submissions. Such files are now deleted
|
danielebarchiesi@0
|
837 * automatically.
|
danielebarchiesi@0
|
838 */
|
danielebarchiesi@0
|
839 function webform_update_7321() {
|
danielebarchiesi@0
|
840 module_load_include('inc', 'webform', 'components/file');
|
danielebarchiesi@0
|
841 $fids = db_query("SELECT fid FROM {file_usage} WHERE module = 'webform' AND type = 'submission' AND NOT id IN(SELECT sid FROM {webform_submissions})")->fetchCol();
|
danielebarchiesi@0
|
842 foreach ($fids as $fid) {
|
danielebarchiesi@0
|
843 _webform_delete_file(NULL, array($fid));
|
danielebarchiesi@0
|
844 }
|
danielebarchiesi@0
|
845 }
|