/[drupal]/contributions/modules/devel/devel_generate.fields.inc
ViewVC logotype

Contents of /contributions/modules/devel/devel_generate.fields.inc

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


Revision 1.1 - (show annotations) (download) (as text)
Thu Sep 3 16:12:44 2009 UTC (2 months, 3 weeks ago) by weitzman
Branch: MAIN
File MIME type: text/x-php
Add file for generating fields content. The new file has some non ideal code and keeps cck naming. Patches welcome. Also, we will need taxonomy field support once that settles down. For now, don't try to generate forum nodes.
1 <?php
2 // $Id$
3
4 /**
5 * @file
6 * Functions needed for Devel module integration.
7 */
8
9 /**
10 * Enrich the $object that is about to be saved with arbitrary
11 * information in each of its fields.
12 **/
13 function cck_generate_fields(&$object, $bundle) {
14 $field_types = field_info_field_types();
15 $instances = field_info_instances($bundle);
16 foreach ($instances as $instance) {
17 $field_name = $instance['field_name'];
18 $table_name = _field_sql_storage_tablename($field_name);
19 $revision_name = _field_sql_storage_revision_tablename($field_name);
20 $field = field_read_field($field_name);
21
22 $object_field = array();
23 // If module handles own multiples, then only call its hook once.
24 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
25 $max = 0;
26 }
27 else {
28 switch ($field['cardinality']) {
29 case FIELD_CARDINALITY_UNLIMITED:
30 $max = rand(0, 3); //just an arbitrary number for 'unlimited'
31 break;
32 default:
33 $max = $field['cardinality'] - 1;
34 break;
35 }
36 }
37 for ($i = 0; $i <= $max; $i++) {
38 $module = $field_types[$field['type']]['module'];
39 $function = $module .'_cck_generate';
40 if (function_exists($function)) {
41 $result = $function($object, $field, $instance, $bundle); // $items, $teaser, $page
42 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
43 // Fields that handle their own multiples will add their own deltas.
44 $object_field = $result;
45 }
46 else {
47 // When multiples are handled by the content module, add a delta for each result.
48 $object_field[$i] = $result;
49 }
50 }
51 }
52 // TODO Come back later and see if we need
53 // a valid language code or if 'none' is OK.
54 $object->{$field['field_name']}[FIELD_LANGUAGE_NONE] = $object_field;
55 }
56 }
57
58 /**
59 * A simple function to return multiple values for fields that use
60 * custom multiple value widgets but don't need any other special multiple
61 * values handling. This will call the field generation function
62 * a random number of times and compile the results into a node array.
63 */
64 function cck_devel_multiple($function, $object, $field, $instance, $bundle) {
65 $object_field = array();
66 if (function_exists($function)) {
67 switch ($field['cardinality']) {
68 case FIELD_CARDINALITY_UNLIMITED:
69 $max = rand(0, 3); //just an arbitrary number for 'unlimited'
70 break;
71 default:
72 $max = $field['cardinality'] - 1;
73 break;
74 }
75 for ($i = 0; $i <= $max; $i++) {
76 $object_field[$i] = $function($object, $field, $instance, $bundle);
77 }
78 }
79 return $object_field;
80 }
81
82 if (module_exists('text')) {
83 function text_cck_generate($object, $field, $instance, $bundle) {
84 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
85 return cck_devel_multiple('_text_cck_generate', $object, $field, $instance, $bundle);
86 }
87 else {
88 return _text_cck_generate($object, $field, $instance, $bundle);
89 }
90 }
91
92 function _text_cck_generate($object, $field, $instance, $bundle) {
93 $object_field = array();
94 $format = isset($field['text_processing']) ? rand(0, 3) : 0;
95 if ($instance['widget']['type'] != 'text_textfield') {
96 $object_field['value'] = devel_create_content($format);
97 if ($instance['widget']['type'] == 'text_textarea_with_summary' && !empty($instance['display_summary'])) {
98 $object_field['summary'] = devel_create_content($format);
99 }
100 }
101 else {
102 // Generate a value that respects max_length.
103 if (empty($field['max_length'])) {
104 $field['max_length'] = 12;
105 }
106 $object_field['value'] = user_password($field['max_length']);
107 }
108 $object_field['format'] = $format;
109 return $object_field;
110 }
111 }
112
113 if (module_exists('number')) {
114 function number_cck_generate($object, $field, $instance, $bundle) {
115 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
116 return cck_devel_multiple('_number_cck_generate', $object, $field, $instance, $bundle);
117 }
118 else {
119 return _number_cck_generate($object, $field, $instance, $bundle);
120 }
121 }
122
123 function _number_cck_generate($object, $field, $instance, $bundle) {
124 $object_field = array();
125 // Make sure the field settings are all set.
126 foreach (array('min', 'max', 'precision', 'scale') as $key) {
127 if (empty($field[$key])) {
128 $field[$key] = NULL;
129 }
130 }
131 $min = is_numeric($field['min']) ? $field['min'] : 0;
132 switch ($field['type']) {
133 case 'number_integer':
134 $max = is_numeric($field['max']) ? $field['max'] : 10000;
135 $decimal = 0;
136 $scale = 0;
137 break;
138
139 case 'number_decimal':
140 $precision = is_numeric($field['precision']) ? $field['precision'] : 10;
141 $scale = is_numeric($field['scale']) ? $field['scale'] : 2;
142 $max = is_numeric($field['max']) ? $field['max'] : pow(10, ($precision - $scale));
143 $decimal = rand(0, (10 * $scale)) / 100;
144 break;
145
146 case 'number_float':
147 $precision = rand(10, 32);
148 $scale = rand(0, 2);
149 $decimal = rand(0, (10 * $scale)) / 100;
150 $max = is_numeric($field['max']) ? $field['max'] : pow(10, ($precision - $scale));
151 break;
152 }
153 $object_field['value'] = round((rand($min, $max) + $decimal), $scale);
154 return $object_field;
155 }
156 }
157
158 if (module_exists('nodereference')) {
159 function nodereference_cck_generate($object, $field, $instance, $bundle) {
160 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
161 return cck_devel_multiple('_nodereference_cck_generate', $object, $field, $instance, $bundle);
162 }
163 else {
164 return _nodereference_cck_generate($object, $field, $instance, $bundle);
165 }
166 }
167
168 function _nodereference_cck_generate($object, $field, $instance, $bundle) {
169 $object_field = array();
170 $allowed_values = nodereference_allowed_values($field);
171 unset($allowed_values[0]);
172 if (!empty($allowed_values)) {
173 // Just pick one of the specified allowed values.
174 $object_field['nid'] = array_rand($allowed_values);
175 }
176 return $object_field;
177 }
178 }
179
180 if (module_exists('userreference')) {
181 function userreference_cck_generate($object, $field) {
182 if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
183 return cck_devel_multiple('_userreference_cck_generate', $object, $field);
184 }
185 else {
186 return _userreference_cck_generate($object, $field);
187 }
188 }
189
190 function _userreference_cck_generate($object, $field) {
191 $object_field = array();
192 $allowed_values = userreference_allowed_values($field);
193 if (isset($allowed_values['none'])) {
194 unset($allowed_values['none']);
195 }
196 if (!empty($allowed_values)) {
197 // Just pick one of the specified allowed values.
198 $object_field['uid'] = array_rand($allowed_values);
199 }
200 return $object_field;
201 }
202 }

  ViewVC Help
Powered by ViewVC 1.1.2