/[drupal]/contributions/modules/multiforms/multiforms_core.module
ViewVC logotype

Contents of /contributions/modules/multiforms/multiforms_core.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.26 - (show annotations) (download) (as text)
Fri May 8 22:43:46 2009 UTC (6 months, 2 weeks ago) by mcantelon
Branch: MAIN
CVS Tags: HEAD
Changes since 1.25: +2 -6 lines
File MIME type: text/x-php
Refactored phone number filter logic. (m)
1 <?php
2 // $Id: multiforms_core.module,v 1.25 2008/12/04 22:47:53 mcantelon Exp $
3
4 define('MULTIFORM_TABLE', 'multiforms');
5 define('MULTIFORM_SECTION_TABLE', 'multiform_sections');
6 define('MULTIFORM_FIELD_TABLE', 'multiform_fields');
7 define('MULTIFORM_FIELD_OPTION_TABLE', 'multiform_field_options');
8 define('MULTIFORM_SUBMISSION_TABLE', 'multiform_submissions');
9 define('MULTIFORM_FIELD_SUBMISSION_TABLE', 'multiform_field_submissions');
10 define('MULTIFORM_DRAW_ENTRY_TABLE', 'multiform_draw_entries');
11 define('MULTIFORM_SNIPPET_TABLE', 'multiform_snippets');
12 define('MULTIFORM_SNIPPET_FIELD_TABLE', 'multiform_snippet_fields');
13 define('MULTIFORM_SNIPPET_FIELD_OPTION_TABLE', 'multiform_snippet_field_options');
14 define('MULTIFORM_ACTION_TABLE', 'multiform_actions');
15
16 define('MULTIFORMS_FLOW_TYPE_NORMAL', 1);
17 define('MULTIFORMS_FLOW_TYPE_LINEAR', 2);
18
19 /**
20 * Implementation of hook_help().
21 */
22 function multiforms_core_help($section = '') {
23
24 $output= '';
25
26 switch($section) {
27
28 case "admin/modules#description":
29 $output = t("Provides core engine needed for multi-page form functionality.");
30 break;
31
32 case "admin/help":
33 $output = t("Provides core engine needed for multi-page form functionality.");
34 break;
35 }
36
37 return($output);
38 }
39
40 function multiforms_core_multiforms_field_handlers() {
41
42 return array(
43 'textfield' => 'multiforms_core_field_handler_textfield',
44 'textarea' => 'multiforms_core_field_handler_textarea',
45 'markup' => 'multiforms_core_field_handler_markup',
46 'fieldset_start' => 'multiforms_core_field_handler_fieldset_start',
47 'fieldset_end' => 'multiforms_core_field_handler_fieldset_end',
48 'date' => 'multiforms_core_field_handler_date',
49 'select' => 'multiforms_core_field_handler_select',
50 'radio_buttons' => 'multiforms_core_field_handler_radio_buttons',
51 'checkboxes' => 'multiforms_core_field_handler_checkboxes',
52 'listbox' => 'multiforms_core_field_handler_listbox'
53 );
54 }
55
56 function multiforms_core_field_handler_textfield($op, $field_value = '', $field = '') {
57
58 return multiforms_core_field_handler_generic($op, $field_value, $field, 'textfield');
59 }
60
61 function multiforms_core_field_handler_textarea($op, $field_value = '', $field = '') {
62
63 return multiforms_core_field_handler_generic($op, $field_value, $field, 'textarea');
64 }
65
66 function multiforms_core_field_handler_generic($op, $field_value = '', $field = '', $type = 'textfield') {
67
68 switch ($op) {
69
70 case 'form':
71 return array(
72 '#title' => t($field->multiform_field_name),
73 '#type' => $type,
74 '#default_value' => $field_value,
75 '#description' => $field->multiform_field_description
76 );
77 break;
78
79 case 'store':
80 return $field_value;
81
82 case 'view':
83 return $field_value;
84 break;
85
86 case 'export':
87 return $field_value;
88 break;
89 }
90 }
91
92 function multiforms_core_field_handler_markup($op, $field_value = '', $field = '') {
93
94 switch ($op) {
95
96 case 'form':
97 return array(
98 '#type' => 'markup',
99 '#value' => $field->multiform_field_description
100 );
101 break;
102
103 case 'store':
104 return FALSE;
105
106 case 'view':
107 return FALSE;
108
109 case 'export':
110 return FALSE;
111 }
112 }
113
114 function multiforms_core_field_handler_fieldset_start($op, $field_value = '', $field = '') {
115
116 switch ($op) {
117
118 case 'form':
119 $markup = '<fieldset>';
120 if ($field->multiform_field_name) {
121 $markup .= '<legend>'. $field->multiform_field_name .'</legend>';
122 }
123 return array(
124 '#type' => 'markup',
125 '#value' => $markup
126 );
127
128 case 'store':
129 return FALSE;
130
131 case 'view':
132 return FALSE;
133
134 case 'export':
135 return FALSE;
136 }
137 }
138
139 function multiforms_core_field_handler_fieldset_end($op, $field_value = '', $field = '') {
140
141 switch ($op) {
142
143 case 'form':
144 return array(
145 '#type' => 'markup',
146 '#value' => '</fieldset>'
147 );
148
149 case 'store':
150 return FALSE;
151
152 case 'view':
153 return FALSE;
154
155 case 'export':
156 return FALSE;
157 }
158 }
159
160 function multiforms_core_field_handler_date($op, $field_value = '', $field = '') {
161
162 switch ($op) {
163
164 case 'form':
165 list($year, $month, $day) = explode('-', $field_value);
166 $return_array = array(
167 '#title' => $field->multiform_field_name,
168 '#type' => 'date',
169 '#description' => $field->multiform_field_description
170 );
171 $return_array['#default_value'] = array(
172 'year' => ($year + 0),
173 'month' => ($month + 0),
174 'day' => ($day + 0)
175 );
176 return $return_array;
177 break;
178
179 case 'store':
180 $date_year = $field_value['year'];
181 $date_month = sprintf("%02s", $field_value['month']);
182 $date_day = sprintf("%02s", $field_value['day']);
183 return $date_year . '-' . $date_month . '-' . $date_day;
184
185 case 'view':
186 return $field_value;
187 break;
188
189 case 'export':
190 return $field_value;
191 break;
192 }
193 }
194
195 function multiforms_core_field_handler_radio_buttons($op, $field_value = '', $field = '') {
196
197 return multiforms_core_field_with_options_handler_generic($op, $field_value, $field, 'radios', FALSE);
198 }
199
200 function multiforms_core_field_handler_select($op, $field_value = '', $field = '') {
201
202 return multiforms_core_field_with_options_handler_generic($op, $field_value, $field, 'select');
203 }
204
205 function multiforms_core_field_handler_listbox($op, $field_value = '', $field = '') {
206
207 $return = multiforms_core_field_with_options_handler_generic($op, $field_value, $field, 'select');
208
209 if ($op == 'form') {
210
211 $return['#multiple'] = 1;
212 $return['#size'] = 10;
213 }
214
215 return $return;
216 }
217
218 function multiforms_core_field_handler_checkboxes($op, $field_value = '', $field = '') {
219
220 return multiforms_core_field_with_options_handler_generic($op, $field_value, $field, 'checkboxes');
221 }
222
223 function multiforms_core_field_with_options_handler_generic($op, $field_value = '', $field = '', $type = '', $multiple = TRUE) {
224
225 // Attempt to discern field ID
226 $field_id = ($field->multiform_field_id) ? $field->multiform_field_id : $field->multiform_field_submission_parent_field_id;
227
228 switch ($op) {
229
230 case 'form':
231 $options = multiforms_core_field_options($field_id);
232
233 if ($multiple) {
234 $field_value = ($field_value) ? explode(',', $field_value) : NULL;
235 }
236 else {
237 $field_value = substr($field_value, 1, strlen($field_value) - 2);
238 }
239
240 return array(
241 '#title' => t($field->multiform_field_name),
242 '#type' => $type,
243 '#default_value' => $field_value,
244 '#description' => $field->multiform_field_description,
245 '#options' => $options
246 );
247 break;
248
249 case 'store':
250 if (is_array($field_value)) {
251 return ','. implode(',', $field_value) .',';
252 } else {
253 return ','. $field_value .',';
254 }
255 break;
256
257 case 'view':
258
259 // Translate stored option IDs to values
260 $display_values = multiforms_core_translate_option_ids_to_values($field_value);
261
262 // Render display output from display option values
263 $display = '';
264 foreach($display_values as $display_value) {
265 $display .= $display_value .'<br />';
266 }
267
268 return $display;
269 break;
270
271 case 'export':
272
273 // Translate stored option IDs to values
274 $display_values = multiforms_core_translate_option_ids_to_values($field_value);
275
276 // Render display output from display option values
277 $display = '';
278 foreach($display_values as $display_value) {
279 $display .= $display_value .'|';
280 }
281
282 return $display;
283 break;
284 }
285 }
286
287 function multiforms_core_translate_option_ids_to_values($field_value) {
288
289 // I need to properly implement this... setting these array values during the section view logic
290 static $multiform_field_option_values;
291
292 // Create array of option IDs
293 $option_ids = explode(',', $field_value);
294
295 // Translate option IDs into values for display
296 $display_values = array();
297
298 foreach($option_ids as $option_id) {
299
300 if (isset($multiform_field_option_values[$option_id])) {
301
302 $display_values[] = $multiform_field_option_values[$option_id];
303 }
304 else {
305
306 $query = "SELECT multiform_field_option_value \r
307 FROM {". MULTIFORM_FIELD_OPTION_TABLE ."} \r
308 WHERE multiform_field_option_id='%d'";
309
310 $result = db_query($query, $option_id);
311
312 if ($result) {
313
314 if ($option_data = db_fetch_object($result)) {
315
316 $display_values[] = $option_data->multiform_field_option_value;
317 $multiform_field_option_values[$option_id] = $option_data->multiform_field_option_value;
318 }
319 }
320 }
321 }
322
323 return $display_values;
324 }
325
326 function multiforms_core_field_options($field_id) {
327
328 $options = array();
329
330 $query = "SELECT * FROM {". MULTIFORM_FIELD_OPTION_TABLE ."} ";
331 $query .= "WHERE multiform_field_option_parent_field_id='%d'";
332
333 $result = db_query($query, $field_id);
334
335 if ($result) {
336
337 while ($option = db_fetch_object($result)) {
338
339 $options[$option->multiform_field_option_id] = $option->multiform_field_option_text;
340 }
341 }
342
343 return $options;
344 }
345
346 function multiforms_core_field_type_has_options($field_type) {
347
348 // Get list of field type handlers
349 $type_handlers = module_invoke_all('multiforms_field_handlers');
350
351 // Get handle for selected field type
352 $handler = $type_handlers[$field_type];
353
354 // Make sure function exists
355 if (function_exists($handler)) {
356
357 // Get a blank form to see if this type supports options
358 $blank_form = $handler('form');
359
360 return isset($blank_form['#options']);
361 }
362 elseif (!array_key_exists($field_type, _multiforms_system_types())) {
363
364 drupal_set_message(t("Field handler doesn't exist!"), 'error');
365 }
366 }
367
368 function _multiforms_get_multiform_id_from_name ($multiform_name) {
369
370 $multiform_id = 0;
371
372 $query = "SELECT multiform_id FROM {" . MULTIFORM_TABLE . "} WHERE multiform_name='%s'";
373
374 $result = db_query($query, $multiform_name);
375
376 if ($result) {
377
378 if ($row = db_fetch_object($result)) {
379
380 $multiform_id = $row->multiform_id;
381 }
382 }
383 return $multiform_id;
384 }
385
386 function _multiforms_get_multiform_id_from_nid ($nid) {
387
388 $multiform_id = 0;
389
390 $query = "SELECT multiform_id FROM {" . MULTIFORM_TABLE . "} WHERE nid='%s'";
391
392 $result = db_query($query, $nid);
393
394 if ($result) {
395
396 if ($row = db_fetch_object($result)) {
397
398 $multiform_id = $row->multiform_id;
399 }
400 }
401 return $multiform_id;
402 }
403
404 function _multiforms_get_multiform_nid_from_id ($multiform_id) {
405
406 $nid = 0;
407
408 $query = "SELECT nid FROM {" . MULTIFORM_TABLE . "} WHERE multiform_id='%d'";
409
410 $result = db_query($query, $multiform_id);
411
412 if ($result) {
413
414 if ($row = db_fetch_object($result)) {
415
416 $nid = $row->nid;
417 }
418 }
419 return $nid;
420 }
421
422 /**
423 * Data access shortcut helper functions
424 */
425
426 function _multiforms_simple_query_render($type, $table, $criteria) {
427
428 $query = '';
429 $columns = '';
430 $values = '';
431
432 switch ($type) {
433
434 case 'select':
435 case 'delete':
436 foreach ($criteria as $column => $value) {
437 $query .= ($query) ? 'AND ' : '';
438 $query .= $column ."='". $value ."' ";
439 }
440 $sql_op = ($type == 'delete') ? 'DELETE ' : 'SELECT * ';
441 $query = $sql_op ."FROM {". $table ."} WHERE ". $query;
442 break;
443
444 case 'insert':
445 $query = "INSERT INTO {". $table ."} ";
446 foreach ($criteria as $column => $validation) {
447 $columns .= ($columns) ? ', ' : '';
448 $columns .= $column;
449
450 $values .= ($values) ? ', ' : '';
451 $values .= "'". $validation ."'";
452 }
453 $query .= '('. $columns .') VALUES ('. $values .')';
454 break;
455
456 case 'update':
457 foreach ($criteria as $column => $validation) {
458 $query .= ($query) ? ', ' : '';
459 $query .= $column ."='". $validation ."'";
460 }
461 $query = "UPDATE {". $table ."} SET ". $query;
462 break;
463
464 default:
465 break;
466 }
467
468 return $query;
469 }
470
471 function _multiforms_get_table_property($table, $primary_key, $key_value, $property) {
472
473 $property_value = '';
474
475 $query = "SELECT %s FROM {" . $table . "} WHERE " . $primary_key . "='%d'";
476
477 $result = db_query($query, $property, $key_value);
478
479 if ($result) {
480
481 if ($row = db_fetch_object($result)) {
482
483 if ($row->$property) {
484
485 $property_value = $row->$property;
486 }
487 }
488 }
489
490 return $property_value;
491 }
492
493 function _multiforms_get_property($multiform_id, $property) {
494
495 return _multiforms_get_table_property(
496 MULTIFORM_TABLE,
497 'multiform_id',
498 $multiform_id,
499 $property
500 );
501 }
502
503 function _multiforms_get_section_property($section_id, $property) {
504
505 return _multiforms_get_table_property(
506 MULTIFORM_SECTION_TABLE,
507 'multiform_section_id',
508 $section_id,
509 $property
510 );
511 }
512
513 function _multiforms_get_submission_property($submission_id, $property) {
514
515 return _multiforms_get_table_property(
516 MULTIFORM_SUBMISSION_TABLE,
517 'multiform_submission_id',
518 $submission_id,
519 $property
520 );
521 }
522
523 function _multiforms_get_total_fields($multiform_id) {
524
525 $total_fields = 0;
526
527 $query = "SELECT COUNT(f.multiform_field_id) AS field_count FROM {" . MULTIFORM_TABLE . "} AS m \r
528 LEFT JOIN {" . MULTIFORM_SECTION_TABLE . "} AS s ON m.multiform_id=s.multiform_section_multiform_id \r
529 LEFT JOIN {" . MULTIFORM_FIELD_TABLE . "} AS f ON s.multiform_section_id=f.multiform_field_section_id \r
530 WHERE m.multiform_id='%d'";
531
532 $result = db_query($query, $multiform_id);
533
534 if ($result) {
535
536 if ($row = db_fetch_object($result)) {
537
538 $total_fields = $row->field_count;
539 }
540 }
541
542 return $total_fields;
543 }
544
545 function _multiforms_get_total_input_fields($multiform_id, $section_id = '') {
546
547 $total_fields = 0;
548
549 $type_handlers = module_invoke_all('multiforms_field_handlers');
550
551 $query = "SELECT f.multiform_field_type FROM {" . MULTIFORM_SECTION_TABLE . "} AS s \r
552 LEFT JOIN {" . MULTIFORM_FIELD_TABLE . "} AS f ON s.multiform_section_id=f.multiform_field_section_id \r
553 WHERE s.multiform_section_multiform_id='%d'";
554
555 if ($section_id) {
556
557 $query .= " AND s.multiform_section_id='%d'";
558 }
559
560 $result = db_query($query, $multiform_id, $section_id);
561
562 if ($result) {
563
564 while ($row = db_fetch_object($result)) {
565
566 $handler = $type_handlers[$row->multiform_field_type];
567
568 if (function_exists($handler)) {
569
570 $store_result = $handler('store', 'test');
571
572 if (!($store_result === FALSE)) {
573
574 $total_fields++;
575 }
576 }
577 }
578 }
579
580 return $total_fields;
581 }
582
583 function _multiforms_admin_get_field_section($field_id) {
584
585 return _multiforms_get_table_property(
586 MULTIFORM_FIELD_TABLE,
587 'multiform_field_id',
588 $field_id,
589 'multiform_field_section_id'
590 );
591 }
592
593 /**
594 * Table preparation helper functions
595 */
596
597 function _multiforms_set_row_attributes($row_array, $attribute_array) {
598
599 $formatted_row_array = array();
600
601 for ($index = 0; $index < sizeof($row_array); $index++) {
602
603 $element_array = array('data' => $row_array[$index]);
604
605 reset($attribute_array);
606
607 while (list($key, $value) = each($attribute_array)) {
608
609 $element_array[$key] = $value;
610 }
611
612 $formatted_row_array[] = $element_array;
613 }
614
615 return $formatted_row_array;
616 }
617
618 function _multiforms_format_row_data($field_label, $field_value) {
619
620 $row = array(
621 '<strong>' . $field_label . ':</strong>&nbsp;',
622 $field_value
623 );
624
625 return $row;
626 }
627
628 /**
629 * Helper function to filter special characters from phone number
630 */
631 function _multiforms_filter_phone_number($phone_number) {
632
633 return preg_replace('/[^0-9]/', '', $phone_number);
634 }
635
636 function _multiforms_system_types() {
637
638 return array(
639 'unique_text' => 'Unique Text',
640 'unique_phone' => 'Unique Phone'
641 );
642 }
643
644 function action_multiforms_core_email($op, $edit = array(), &$node) {
645
646 switch($op) {
647 case 'do':
648 _action_multiforms_core_email($node);
649 break;
650
651 case 'metadata':
652 return array(
653 'description' => t("Email multiform submission to node owner's email address"),
654 'type' => t('Multiform'),
655 'batchable' => true,
656 'configurable' => false,
657 );
658
659 // return an HTML config form for the action
660 case 'form':
661 return '';
662
663 // validate the HTML form
664 case 'validate':
665 return TRUE;
666
667 // process the HTML form to store configuration
668 case 'submit':
669 return '';
670 }
671 }
672
673 function _action_multiforms_core_email(&$node) {
674
675 $rows_array = array();
676
677 $multiform_id = _multiforms_get_multiform_id_from_nid($node->nid);
678
679 if ($multiform_id) {
680
681 // Get owner of multiform
682 $multiform_owner = user_load(array('uid' => $node->uid));
683
684 if ($multiform_owner->mail) {
685
686 // Get dynamic submission values
687 _multiforms_submission_detail_section_rows($rows_array, 0 - $multiform_id, $_SESSION['multiforms_submission_id']);
688
689 // Get values of each section
690 $query = "SELECT multiform_section_id FROM {" . MULTIFORM_SECTION_TABLE . "} \r
691 WHERE multiform_section_multiform_id='%d' ORDER BY multiform_section_sortorder ASC";
692
693 $result = db_query($query, $multiform_id);
694
695 if ($result) {
696
697 while ($row = db_fetch_object($result)) {
698
699 _multiforms_submission_detail_section_rows($rows_array, $row->multiform_section_id, $_SESSION['multiforms_submission_id']);
700 }
701 }
702
703 // Create email body
704 $body = '';
705
706 foreach ($rows_array as $row) {
707
708 // Strip out HTML
709 $row[0]['data'] = strip_tags(str_replace('&nbsp;', '', $row[0]['data']));
710
711 // Add extra spacing to headers
712 if ($row[0]['colspan']) {
713
714 $body .= ($body) ? "\n" : '';
715 $body .= $row[0]['data'] ."\n";
716 }
717 else {
718
719 $body .= ($row[0]['data']) ? $row[0]['data'] .': ' : '';
720 }
721
722 // Add field data
723 $body .= strip_tags(str_replace('<br />', "\n ", $row[1]['data'])) ."\n";
724 }
725
726 // Send email
727 drupal_mail(
728 'action_multiforms_core_email',
729 $multiform_owner->mail,
730 'Multiform Submission: '. strip_tags($node->title),
731 $body,
732 variable_get('site_mail', '')
733 );
734 }
735 }
736 }

  ViewVC Help
Powered by ViewVC 1.1.2