/[drupal]/contributions/modules/formfilter/formfilter.module
ViewVC logotype

Contents of /contributions/modules/formfilter/formfilter.module

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


Revision 1.9 - (show annotations) (download) (as text)
Mon Dec 15 18:54:44 2008 UTC (11 months, 1 week ago) by nedjo
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +4 -4 lines
File MIME type: text/x-php
Fix a couple of spelling errors.
1 <?php
2 // $Id: formfilter.module,v 1.8 2008/11/03 05:01:25 davidlesieur Exp $
3
4 /**
5 * Array of form element types for which filtering is supported.
6 */
7 function formfilter_supported_types() {
8 return array('button', 'fieldset', 'select', 'textfield', 'checkbox', 'checkboxes', 'radio', 'radios', 'textarea', 'item', 'file', 'weight', 'markup');
9 }
10
11 /**
12 * Filter a form so the requested elements are invisible (passed as values).
13 *
14 * @param $form
15 * A reference to the form to be altered.
16 * @param $filters
17 * An array of elements to make invisible in the form, each element in turn being
18 * an array of form keys corresponding to the path of the element in the form
19 * structure. For example, to hide the element $form['comment_filter']['format']
20 * from $form, you could call this function as follows:
21 * formfilter_filter_form($form, array(array('comment_filter', 'format')));
22 * @param $inverse
23 * If TRUE, all elements except the ones given in $filters will become
24 * invisible. This defaults to FALSE.
25 */
26 function formfilter_filter_form(&$form, $filters, $inverse = FALSE) {
27 // Iterate through filters.
28 $filtered = array();
29 foreach ($filters as $filter) {
30 _formfilter_filter_form($form, $filter, $inverse);
31 $filtered[] = $filter[0];
32 }
33 if ($inverse) {
34 foreach (element_children($form) as $key) {
35 if (!in_array($key, $filtered)) {
36 _formfilter_filter_element($form[$key]);
37 }
38 }
39 }
40 }
41
42 /**
43 * Apply filtering to a form.
44 */
45 function _formfilter_filter_form(&$form, $filter, $inverse) {
46 // Iterate through form elements.
47 foreach (element_children($form) as $key) {
48 // Determine if there are further levels of nesting.
49 if ($filter[0] == $key) {
50 // If not, send the element for filtering.
51 if (count($filter) == 1) {
52 if ($inverse) {
53 continue;
54 }
55 else {
56 _formfilter_filter_element($form[$key]);
57 }
58 }
59 // If so, go one level deeper in the nested array.
60 else {
61 if ($inverse) {
62 _formfilter_filter_element($form[$key], FALSE);
63 }
64 array_shift($filter);
65 _formfilter_filter_form($form[$key], $filter, $inverse);
66 }
67 break;
68 }
69 elseif ($inverse) {
70 _formfilter_filter_element($form[$key]);
71 }
72 }
73 }
74
75 /**
76 * Filter a form element.
77 */
78 function _formfilter_filter_element(&$element, $recurse = TRUE) {
79 // Don't filter unsupported types. If no type is set, however, we do filter.
80 if ($element['#type'] && !in_array($element['#type'], formfilter_supported_types())) {
81 return;
82 }
83
84 // Read in values. Bail if filtering conditions not met.
85 switch ($element['#type']) {
86 case 'fieldset':
87 case 'button':
88 case 'item':
89 case 'file':
90 case 'markup':
91 break;
92 case 'select':
93 case 'checkboxes':
94 case 'radios':
95 $value = isset($element['#default_value']) ? $element['#default_value'] : key($element['#options']);
96 break;
97 case 'weight':
98 $value = isset($element['#default_value']) ? $element['#default_value'] : 0;
99 break;
100 case 'checkbox':
101 case 'radio':
102 // TBD: Why doesn't passing values work for checkbox elements?
103 //$value = isset($element['#default_value']) ? $element['#default_value'] : $element['#return_value'];
104 //break;
105 // For now, pass them as hidden elements.
106 $element['#type'] = 'hidden';
107 $element['#value'] = isset($element['#default_value']) ? $element['#default_value'] : $element['#return_value'];
108 return;
109 case 'textfield':
110 case 'textarea':
111 $value = isset($element['#default_value']) ? $element['#default_value'] : NULL;
112 if (!$value && $element['#required']) {
113 return;
114 }
115 break;
116 }
117 // Unset unneeded keys. We don't simply redefine the arrays as they may have
118 // nested form elements (element_children).
119 foreach (element_properties($element) as $key) {
120 switch ($key) {
121 case '#tree':
122 continue;
123 default:
124 unset($element[$key]);
125 }
126 }
127 // Set final form of array.
128 if ($value) {
129 $element += array(
130 '#type' => 'value',
131 '#value' => $value,
132 );
133 }
134 // Convert child elements.
135 if ($recurse) {
136 foreach (element_children($element) as $key) {
137 _formfilter_filter_element($element[$key]);
138 }
139 }
140 }

  ViewVC Help
Powered by ViewVC 1.1.2