Project

General

Profile

Download (93.1 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/**
3
 * This is the expertsdb_fullname module for use with CCK.
4
 *
5
 * <p>This file contains information on the expertsdb_fullname module. The module adds to
6
 * the field types available for inclusion in a content type definition. This field
7
 * is made up of five standard html form text fields - prefix, first name, middle,
8
 * last, and suffix - times two; one set for legal names and one for preferred.
9
 * See the README for more details.</p>
10
 * TODO it looks like the stars for the required fields might not work on small screens so
11
 * instead, maybe use outlines - yellow for required on required fields, blue for required
12
 * on optional field?
13
 *
14
 * @version $Id: cck_fullname.module,v 1.1.2.8 2007/12/17 20:30:55 rconstantine Exp $;
15
 * @package CCK_Fullname
16
 * @category NeighborForge
17
 * @author Ryan Constantine
18
 * @filesource
19
 * @license http://www.gnu.org/licenses/gpl.txt GNU_GENERAL_PUBLIC_LICENSE
20
 * @link none yet
21
 */
22

    
23

    
24
//-----------------------------------------CCK hooks--------------------------------------------------
25
//-----------------------------------------CCK hooks--------------------------------------------------
26
//-----------------------------------------CCK hooks--------------------------------------------------
27

    
28
/*
29
 * Definition of privacy levels
30
 */
31
define('PRIVACY_CONTACT_PRIVATE', 'ContactPrivate');
32
define('PRIVACY_PRIVATE', 'Private');
33
define('PRIVACY_PUBLIC', 'Public');
34

    
35
/**
36
 * Implementation of hook_field_info().
37
 *
38
 * @return
39
 *   An array keyed by field type name. Each element of the array is an associative
40
 *   array with these keys and values:
41
 *   - "label": The human-readable label for the field type.
42
 */
43
function expertsdb_fullname_field_info() {
44
  return array(
45
    'expertsdb_fullname' => array('label' => 'Expertsdb Full Name'),
46
  );
47
} // function expertsdb_fullname_field_info()
48

    
49
/**
50
 * Implementation of hook_field_settings().
51
 *
52
 * @param $op
53
 *   The operation to be performed.
54
 * @param $field
55
 *   The field on which the operation is to be performed.
56
 * @return
57
 *   This varies depending on the operation.
58
 *   - "form": an array of form elements to add to
59
 *     the settings page.
60
 *   - "validate": no return value. Use form_set_error().
61
 *   - "save": an array of names of form elements to
62
 *     be saved in the database.
63
 *   - "database columns": an array keyed by column name, with arrays of column
64
 *     information as values.
65
 *   - "filters": an array whose values are 'filters'
66
 *     definitions as expected by views.module (see Views Documentation).
67
 *   - "callbacks": an array describing the field's behaviour regarding hook_field
68
 *     operations. The array is keyed by hook_field operations ('view', 'validate'...)
69
 *     and has the following possible values :
70
 *       CONTENT_CALLBACK_NONE     : do nothing for this operation
71
 *       CONTENT_CALLBACK_CUSTOM   : use the behaviour in hook_field(operation)
72
 *       CONTENT_CALLBACK_DEFAULT  : use content.module's default bahaviour
73
 *     Note : currently only the 'view' operation implements this feature.
74
 *     All other field operation implemented by the module _will_ be executed
75
 *     no matter what.
76
 */
77
function expertsdb_fullname_field_settings($op, $field) {
78
  switch ($op) {
79

    
80
    case 'form':
81
    	// pull in the stylesheet
82
			drupal_add_css(drupal_get_path('module', 'expertsdb_fullname') .'/expertsdb_fullname.css');
83
      $form = array();
84

    
85
      //borrowed from namefield module
86
      //----------allow content type creator to determine which fields are required-----------
87
      $required_default = array();
88
      if (is_array($field['required_parts'])) {
89
        foreach ($field['required_parts'] as $part => $required) {
90
          if ($required) { $required_default[] = $part; }
91
        } // foreach possibly-required part
92
      } else {
93
        $required_default = array('legal_first', 'legal_last');
94
      } // if we can make up our own defaults
95

    
96
      $form['required'] = array(
97
        '#type' => 'fieldset',
98
        '#weight' => 3,
99
        '#collapsible' => TRUE,
100
        '#collapsed' => TRUE,
101
        '#title' => t("Required Parts"),
102
      );
103
      $form['required']['required_parts'] = array(
104
        '#type' => 'checkboxes',
105
        '#title' => t("Required Parts"),
106
        '#description' => t("Choose which of these components should be required.
107
        Only applies if you chose the field in the above <em>Legal name</em> or <em>Preferred name</em> sections,
108
        either <strong>Required</strong>, or <strong>Optional</strong>. (Ex. 1) If you <strong>Require</strong>
109
        Legal names, then the fields checked here will be a part of that requirement. Unchecked fields will be optional
110
        if you elected to use them above.
111
        (Ex. 2) If Preferred names are <strong>Optional</strong>, then all fields are optional until one is filled in,
112
        then those checked here are required. Unchecked fields would still be optional. This will
113
        prevent the entering of partial/incomplete names."),
114
        '#default_value' => $required_default,
115
        '#options' => array(
116
          'legal_prefix' => t("Legal Prefix"),
117
          'legal_first'  => t("Legal First"),
118
          'legal_middle' => t("Legal Middle"),
119
          'legal_last'   => t("Legal Last"),
120
          'legal_suffix' => t("Legal Suffix"),
121
          'preferred_prefix' => t("Preferred Prefix"),
122
          'preferred_first'  => t("Preferred First"),
123
          'preferred_middle' => t("Preferred Middle"),
124
          'preferred_last'   => t("Preferred Last"),
125
          'preferred_suffix' => t("Preferred Suffix"),
126
        ),
127
      );
128

    
129
      //----------allow content type creator to determine which legal name fields to use-----------
130
      $legal_default = array();
131
      if (is_array($field['legalname'])) {
132
        foreach ($field['legalname'] as $part => $legal) {
133
          if ($legal) { $legal_default[] = $part; }
134
        } // foreach possibly-legal part
135
      } else {
136
        $legal_default = array('legal_first', 'legal_middle', 'legal_last');
137
      } // if we can make up our own default
138

    
139
      $form['legal_name'] = array(
140
        '#type' => 'fieldset',
141
        '#weight' => 2,
142
        '#collapsible' => TRUE,
143
        '#collapsed' => TRUE,
144
        '#title' => t('Legal Name'),
145
      );
146
      $form['legal_name']['use_legalname'] = array(
147
        '#type' => 'radios',
148
        '#title' => t('Use legal name?'),
149
        '#description' => t("Check how legal names should be used. The legal name is the default name when only one is needed."),
150
        '#required' => TRUE,
151
        '#default_value' => isset($field['use_legalname']) ? $field['use_legalname'] : 'legal_require',
152
        '#options' => array(
153
          'legal_require' => t("Required"),
154
          'legal_optional'  => t("Optional"),
155
        ),
156
      );
157
      $form['legal_name']['legalname'] = array(
158
        '#type' => 'checkboxes',
159
        '#title' => t('Legal name'),
160
        '#description' => t("Check which of these fields should be available for legal names."),
161
        '#required' => TRUE,
162
        '#default_value' => $legal_default,
163
        '#options' => array(
164
          'legal_prefix' => t("Prefix"),
165
          'legal_first'  => t("First"),
166
          'legal_middle' => t("Middle"),
167
          'legal_last'   => t("Last"),
168
          'legal_suffix' => t("Suffix"),
169
        ),
170
      );
171
      //end borrowed section
172

    
173
      //similar to copied section
174
      //----------allow content type creator to determine which preferred name fields to use-----------
175
      $preferred_default = array();
176
      if (is_array($field['preferredname'])) {
177
        foreach ($field['preferredname'] as $part => $preferred) {
178
          if ($preferred) { $preferred_default[] = $part; }
179
        } // foreach possibly-legal part
180
      } else {
181
        $preferred_default = array('preferred_first', 'preferred_middle', 'preferred_last');
182
      } // if we can make up our own default
183

    
184
      $form['preferred_name'] = array(
185
        '#type' => 'fieldset',
186
        '#weight' => 2,
187
        '#collapsible' => TRUE,
188
        '#collapsed' => TRUE,
189
        '#title' => t('Preferred Name'),
190
      );
191
      $form['preferred_name']['use_preferredname'] = array(
192
        '#type' => 'radios',
193
        '#title' => t('Use preferred name?'),
194
        '#description' => t("Check how preferred names should be used."),
195
        '#required' => TRUE,
196
        '#default_value' => isset($field['use_preferredname']) ? $field['use_preferredname'] : 'preferred_optional',
197
        '#options' => array(
198
          'preferred_require' => t("Required"),
199
          'preferred_optional'  => t("Optional"),
200
          'preferred_hide'  => t("Don't use"),
201
        ),
202
      );
203
      $form['preferred_name']['preferredname'] = array(
204
        '#type' => 'checkboxes',
205
        '#title' => t('Preferred Name'),
206
        '#description' => t("Check which of these fields should be available for preferred names."),
207
        '#required' => TRUE,
208
        '#default_value' => $preferred_default,
209
        '#options' => array(
210
          'preferred_prefix' => t("Prefix"),
211
          'preferred_first'  => t("First"),
212
          'preferred_middle' => t("Middle"),
213
          'preferred_last'   => t("Last"),
214
          'preferred_suffix' => t("Suffix"),
215
        ),
216
      );
217

    
218
      $form['note'] = array(
219
        '#type' => 'item',
220
        '#title' => t('Notes'),
221
        '#weight' => -1,
222
        '#description' => t('In the "Help text" field above, cut and paste the following: Notice the stars indicating what is required.
223
        If either "Legal name" or "Preferred name" have stars next to them, that means you must fill out at least the fields which have a highlighted border.
224
        If either "Legal name" or "Preferred name" do not have stars, then you only fill out the fields which have a highlighted border if you fill out ANY of the
225
        fields. If you leave all highlighted fields blank for an unstarred name, then you don\'t have to fill out ANY of them. For multiple sets of
226
        names, names after the first set are always optional, but their fields will follow the same rules as optional names already explained.'),
227
      );
228

    
229
      $form['middle_initial'] = array(//TODO remove this because with the ability to specify the field length, this is redundant
230
        '#type' => 'checkbox',
231
        '#title' => t('Use middle initial only?'),
232
        '#default_value' => isset($field['middle_initial']) ? $field['middle_initial'] : 1,
233
        '#return_value' => 1,
234
        '#description' => t('Do you want to store only middle initials? This is not simply a display option and should be set only once. Changing it has unpredictable results.'),
235
      );
236

    
237
      //-------------specify maximum lengths for each field------------------------
238
      $form['max_lengths_legal'] = array(
239
        '#type' => 'fieldset',
240
        '#weight' => 4,
241
        '#title' => t('Legal name maximum field lengths'),
242
        '#collapsible' => TRUE,
243
        '#collapsed' => TRUE,
244
      );
245
      $form['max_lengths_legal']['max_length_prefix_legal'] = array(
246
        '#type' => 'textfield',
247
        '#title' => t('Prefix maximum length'),
248
        '#size' => 1,
249
        '#default_value' => isset($field['max_length_prefix_legal']) ? $field['max_length_prefix_legal'] : '',
250
        '#required' => FALSE,
251
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
252
      );
253
      $form['max_lengths_legal']['max_length_first_legal'] = array(
254
        '#type' => 'textfield',
255
        '#title' => t('First name maximum length'),
256
        '#size' => 6,
257
        '#default_value' => isset($field['max_length_first_legal']) ? $field['max_length_first_legal'] : '',
258
        '#required' => FALSE,
259
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
260
      );
261
      $form['max_lengths_legal']['max_length_middle_legal'] = array(
262
        '#type' => 'textfield',
263
        '#title' => t('Middle name maximum length'),
264
        '#size' => 6,
265
        '#required' => FALSE,
266
        '#description' => t('The maximum length of the field in characters (unless Middle Initial is used instead). Leave blank for an unlimited size.'),
267
      );
268
      if ($field['middle_initial'] == 1) {
269
        $form['max_lengths_legal']['max_length_middle_legal']['#default_value'] = 1;
270
      }
271
      else {
272
        $form['max_lengths_legal']['max_length_middle_legal']['#default_value'] = isset($field['max_length_middle_legal']) ? $field['max_length_middle_legal'] : '';
273
      }
274
      $form['max_lengths_legal']['max_length_last_legal'] = array(
275
        '#type' => 'textfield',
276
        '#title' => t('Last name maximum length'),
277
        '#size' => 6,
278
        '#default_value' => isset($field['max_length_last_legal']) ? $field['max_length_last_legal'] : '',
279
        '#required' => FALSE,
280
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
281
      );
282
      $form['max_lengths_legal']['max_length_suffix_legal'] = array(
283
        '#type' => 'textfield',
284
        '#title' => t('Suffix maximum length'),
285
        '#size' => 1,
286
        '#default_value' => isset($field['max_length_suffix_legal']) ? $field['max_length_suffix_legal'] : '',
287
        '#required' => FALSE,
288
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
289
      );
290

    
291
      $form['max_lengths_preferred'] = array(
292
        '#type' => 'fieldset',
293
        '#weight' => 4,
294
        '#title' => t('Preferred name maximum field lengths'),
295
        '#collapsible' => TRUE,
296
        '#collapsed' => TRUE,
297
      );
298
      $form['max_lengths_preferred']['max_length_prefix_preferred'] = array(
299
        '#type' => 'textfield',
300
        '#title' => t('Prefix maximum length'),
301
        '#size' => 1,
302
        '#default_value' => isset($field['max_length_prefix_preferred']) ? $field['max_length_prefix_preferred'] : '',
303
        '#required' => FALSE,
304
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
305
      );
306
      $form['max_lengths_preferred']['max_length_first_preferred'] = array(
307
        '#type' => 'textfield',
308
        '#title' => t('First name maximum length'),
309
        '#size' => 6,
310
        '#default_value' => isset($field['max_length_first_preferred']) ? $field['max_length_first_preferred'] : '',
311
        '#required' => FALSE,
312
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
313
      );
314
      $form['max_lengths_preferred']['max_length_middle_preferred'] = array(
315
        '#type' => 'textfield',
316
        '#title' => t('Middle name maximum length'),
317
        '#size' => 6,
318
        '#required' => FALSE,
319
        '#description' => t('The maximum length of the field in characters (unless Middle Initial is used instead). Leave blank for an unlimited size.'),
320
      );
321
      if ($field['middle_initial'] == 1) {
322
        $form['max_lengths_preferred']['max_length_middle_preferred']['#default_value'] = 1;
323
      }
324
      else {
325
        $form['max_lengths_preferred']['max_length_middle_preferred']['#default_value'] = isset($field['max_length_middle_preferred']) ? $field['max_length_middle_preferred'] : '';
326
      }
327
      $form['max_lengths_preferred']['max_length_last_preferred'] = array(
328
        '#type' => 'textfield',
329
        '#title' => t('Last name maximum length'),
330
        '#size' => 6,
331
        '#default_value' => isset($field['max_length_last_preferred']) ? $field['max_length_last_preferred'] : '',
332
        '#required' => FALSE,
333
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
334
      );
335
      $form['max_lengths_preferred']['max_length_suffix_preferred'] = array(
336
        '#type' => 'textfield',
337
        '#title' => t('Suffix maximum length'),
338
        '#size' => 1,
339
        '#default_value' => isset($field['max_length_suffix_preferred']) ? $field['max_length_suffix_preferred'] : '',
340
        '#required' => FALSE,
341
        '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
342
      );
343

    
344
      // disable multiple
345
			$form['multiple'] = array('#type' => 'hidden','#value' => '0');
346
			return $form;
347

    
348
      return $form;
349

    
350
    case 'save':
351
      return array(
352
        'required_parts',
353
        'use_legalname',
354
        'legalname',
355
        'use_preferredname',
356
        'preferredname',
357
        'middle_initial',
358
        'max_length_prefix_legal',
359
        'max_length_first_legal',
360
        'max_length_middle_legal',
361
        'max_length_last_legal',
362
        'max_length_suffix_legal',
363
        'max_length_prefix_preferred',
364
        'max_length_first_preferred',
365
        'max_length_middle_preferred',
366
        'max_length_last_preferred',
367
        'max_length_suffix_preferred',
368
      );
369

    
370
    case 'database columns':
371
      $columns = array(
372
        'last' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
373
        'first' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
374
        'middle' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
375
        'prefix' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
376
        'suffix' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
377
        'last_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
378
        'first_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
379
        'middle_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
380
        'prefix_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
381
        'suffix_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE),
382
      );
383
      //adjust field lengths based on settings for legal names
384
      if ($field['max_lengths_legal']['max_length_prefix_legal'] == 0 || $field['max_lengths_legal']['max_length_prefix_legal'] > 255) {
385
        $columns['prefix']['type'] = 'longtext';
386
      }
387
      else {
388
        $columns['prefix']['length'] = $field['max_lengths_legal']['max_length_prefix_legal'];
389
      }
390
      if ($field['max_lengths_legal']['max_length_first_legal'] == 0 || $field['max_lengths_legal']['max_length_first_legal'] > 255) {
391
        $columns['first']['type'] = 'longtext';
392
      }
393
      else {
394
        $columns['first']['length'] = $field['max_lengths_legal']['max_length_first_legal'];
395
      }
396
      if (($field['max_lengths_legal']['max_length_middle_legal'] == 0 || $field['max_lengths_legal']['max_length_middle_legal'] > 255) && ($field['middle_initial'] != 1)) {
397
        $columns['middle']['type'] = 'longtext';
398
      }
399
      elseif ($field['middle_initial'] == 1) {
400
        $columns['middle']['length'] = 1;
401
      }
402
      else {
403
        $columns['middle']['length'] = $field['max_lengths_legal']['max_length_middle_legal'];
404
      }
405
      if ($field['max_lengths_legal']['max_length_last_legal'] == 0 || $field['max_lengths_legal']['max_length_last_legal'] > 255) {
406
        $columns['last']['type'] = 'longtext';
407
      }
408
      else {
409
        $columns['last']['length'] = $field['max_lengths_legal']['max_length_last_legal'];
410
      }
411
      if ($field['max_lengths_legal']['max_length_suffix_legal'] == 0 || $field['max_lengths_legal']['max_length_suffix_legal'] > 255) {
412
        $columns['suffix']['type'] = 'longtext';
413
      }
414
      else {
415
        $columns['suffix']['length'] = $field['max_lengths_legal']['max_length_suffix_legal'];
416
      }
417

    
418
      //adjust field lengths based on settings for preferred names
419
      if ($field['max_lengths_preferred']['max_length_prefix_preferred'] == 0 || $field['max_lengths_preferred']['max_length_prefix_preferred'] > 255) {
420
        $columns['prefix_preferred']['type'] = 'longtext';
421
      }
422
      else {
423
        $columns['prefix_preferred']['length'] = $field['max_lengths_preferred']['max_length_prefix_preferred'];
424
      }
425
      if ($field['max_lengths_preferred']['max_length_first_preferred'] == 0 || $field['max_lengths_preferred']['max_length_first_preferred'] > 255) {
426
        $columns['first_preferred']['type'] = 'longtext';
427
      }
428
      else {
429
        $columns['first_preferred']['length'] = $field['max_lengths_preferred']['max_length_first_preferred'];
430
      }
431
      if (($field['max_lengths_preferred']['max_length_middle_preferred'] == 0 || $field['max_lengths_preferred']['max_length_middle_preferred'] > 255) && ($field['middle_initial'] != 1)) {
432
        $columns['middle_preferred']['type'] = 'longtext';
433
      }
434
      elseif ($field['middle_initial'] == 1) {
435
        $columns['middle_preferred']['length'] = 1;
436
      }
437
      else {
438
        $columns['middle_preferred']['length'] = $field['max_lengths_preferred']['max_length_middle_preferred'];
439
      }
440
      if ($field['max_lengths_preferred']['max_length_last_preferred'] == 0 || $field['max_lengths_preferred']['max_length_last_preferred'] > 255) {
441
        $columns['last_preferred']['type'] = 'longtext';
442
      }
443
      else {
444
        $columns['last_preferred']['length'] = $field['max_lengths_preferred']['max_length_last_preferred'];
445
      }
446
      if ($field['max_lengths_preferred']['max_length_suffix_preferred'] == 0 || $field['max_lengths_preferred']['max_length_suffix_preferred'] > 255) {
447
        $columns['suffix_preferred']['type'] = 'longtext';
448
      }
449
      else {
450
        $columns['suffix_preferred']['length'] = $field['max_lengths_preferred']['max_length_suffix_preferred'];
451
      }
452
      return $columns;
453

    
454
   case 'filters':
455
     return array(
456
        'default' => array(
457
          'operator' => 'views_handler_operator_like',
458
          'handler' => 'views_handler_filter_like',
459
        ),
460
      );
461

    
462
    case 'callbacks'://pairs up with expertsdb_fullname_field::view
463
      return array(
464
        'view' => CONTENT_CALLBACK_CUSTOM,
465
      );
466
  }
467
} // function expertsdb_fullname_field_settings()
468

    
469
/**
470
 * Implementation of hook_field().
471
 *
472
 * Validate the user's input. At present, only English alphabetic characters
473
 * are valid. Would like to add support for other languages.
474
 * Or present the data for viewing.
475
 * @param $op
476
 *   What kind of action is being performed.
477
 * @param &$node
478
 *   The node the action is being performed on.
479
 * @param $field
480
 *   The field the action is being performed on.
481
 * @param &$node_field
482
 *   The contents of the field in this node. Changes to this variable will
483
 *   be saved back to the node object.
484
 * @return
485
 *   This varies depending on the operation.
486
 *   - The "load" operation should return an object containing extra values
487
 *     to be merged into the node object.
488
 *   - The "view" operation should return a string containing an HTML
489
 *     representation of the field data.
490
 *   - The "insert", "update", "delete", "validate", and "submit" operations
491
 *     have no return value.
492
 */
493
function expertsdb_fullname_field($op, &$node, $field, &$items, $teaser, $page) {
494
  switch ($op) {
495
    case 'submit':
496
      $info = content_database_info($field['field_name']);
497
      break;
498
    case 'validate':
499
      //validate field lengths
500
      //validate the legal name field lengths; TODO restructure these into one big foreach instead of several small ones - use a case statement on $data, then test field lengths in each case
501
      if ($field['max_lengths_legal']['max_length_prefix_legal'] > 0) {
502
        foreach ($items as $delta => $data) {
503
          $error_field_prefix = $field['field_name']. '][' .$delta. '][prefix';
504
          if (strlen($data['prefix']) > $field['max_lengths_legal']['max_length_prefix_legal']) {
505
            form_set_error($error_field_prefix, t('%label\'s Prefix Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_legal']['max_length_prefix_legal'])));
506
          }
507
        }
508
      }
509
      if ($field['max_lengths_legal']['max_length_first_legal'] > 0) {
510
        foreach ($items as $delta => $data) {
511
          $error_field_first = $field['field_name']. '][' .$delta. '][first';
512
          if (strlen($data['first']) > $field['max_lengths_legal']['max_length_first_legal']) {
513
            form_set_error($error_field_first, t('%label\'s First Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_legal']['max_length_first_legal'])));
514
          }
515
        }
516
      }
517
      if ($field['max_lengths_legal']['max_length_middle_legal'] > 0) {
518
        foreach ($items as $delta => $data) {
519
          $error_field_middle = $field['field_name']. '][' .$delta. '][middle';
520
          if (strlen($data['middle']) > $field['max_lengths_legal']['max_length_middle_legal']) {
521
            form_set_error($error_field_middle, t('%label\'s Middle Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_legal']['max_length_middle_legal'])));
522
          }
523
        }
524
      }
525
      if ($field['max_lengths_legal']['max_length_last_legal'] > 0) {
526
        foreach ($items as $delta => $data) {
527
          $error_field_last = $field['field_name']. '][' .$delta. '][last';
528
          if (strlen($data['last']) > $field['max_lengths_legal']['max_length_last_legal']) {
529
            form_set_error($error_field_last, t('%label\'s Last Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_legal']['max_length_last_legal'])));
530
          }
531
        }
532
      }
533
      if ($field['max_lengths_legal']['max_length_suffix_legal'] > 0) {
534
        foreach ($items as $delta => $data) {
535
          $error_field_suffix = $field['field_name']. '][' .$delta. '][suffix';
536
          if (strlen($data['suffix']) > $field['max_lengths_legal']['max_length_suffix_legal']) {
537
            form_set_error($error_field_suffix, t('%label\'s Suffix Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_legal']['max_length_suffix_legal'])));
538
          }
539
        }
540
      }
541

    
542
      //validate the preferred name field lengths
543
      if ($field['max_lengths_preferred']['max_length_prefix_preferred'] > 0) {
544
        foreach ($items as $delta => $data) {
545
          $error_field_prefix_preferred = $field['field_name']. '][' .$delta. '][prefix_preferred';
546
          if (strlen($data['prefix_preferred']) > $field['max_lengths_preferred']['max_length_prefix_preferred']) {
547
            form_set_error($error_field_prefix_preferred, t('%label\'s Prefix Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_preferred']['max_length_prefix_preferred'])));
548
          }
549
        }
550
      }
551
      if ($field['max_lengths_preferred']['max_length_first_preferred'] > 0) {
552
        foreach ($items as $delta => $data) {
553
          $error_field_first_preferred = $field['field_name']. '][' .$delta. '][first_preferred';
554
          if (strlen($data['first_preferred']) > $field['max_lengths_preferred']['max_length_first_preferred']) {
555
            form_set_error($error_field_first_preferred, t('%label\'s First Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_preferred']['max_length_first_preferred'])));
556
          }
557
        }
558
      }
559
      if ($field['max_lengths_preferred']['max_length_middle_preferred'] > 0) {
560
        foreach ($items as $delta => $data) {
561
          $error_field_middle_preferred = $field['field_name']. '][' .$delta. '][middle_preferred';
562
          if (strlen($data['middle_preferred']) > $field['max_lengths_preferred']['max_length_middle_preferred']) {
563
            form_set_error($error_field_middle_preferred, t('%label\'s Middle Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_preferred']['max_length_middle_preferred'])));
564
          }
565
        }
566
      }
567
      if ($field['max_lengths_preferred']['max_length_last_preferred'] > 0) {
568
        foreach ($items as $delta => $data) {
569
          $error_field_last_preferred = $field['field_name']. '][' .$delta. '][last_preferred';
570
          if (strlen($data['last_preferred']) > $field['max_lengths_preferred']['max_length_last_preferred']) {
571
            form_set_error($error_field_last_preferred, t('%label\'s Last Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_preferred']['max_length_last_preferred'])));
572
          }
573
        }
574
      }
575
      if ($field['max_lengths_preferred']['max_length_suffix_preferred'] > 0) {
576
        foreach ($items as $delta => $data) {
577
          $error_field_suffix_preferred = $field['field_name']. '][' .$delta. '][suffix_preferred';
578
          if (strlen($data['suffix_preferred']) > $field['max_lengths_preferred']['max_length_suffix_preferred']) {
579
            form_set_error($error_field_suffix_preferred, t('%label\'s Suffix Name field is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_lengths_preferred']['max_length_suffix_preferred'])));
580
          }
581
        }
582
      }
583

    
584
      //validate required-ness of fields
585
      foreach ($items as $delta => $data) {
586
        if (is_numeric($delta)) {
587
          //deal with legal name fields
588
          if (($field['use_legalname'] == 'legal_require') || ($field['use_legalname'] == 'legal_optional')) {
589
            $legal_empty = (empty($data['prefix']) && empty($data['first']) && empty($data['middle']) && empty($data['last']) && empty($data['suffix']));
590
            if (!$legal_empty) {
591
              if (empty($data['prefix']) && $field['required_parts']['legal_prefix'] === 'legal_prefix' && !empty($field['legalname']['legal_prefix'])) {
592
                $error_field_prefix = $field['field_name']. '][' .$delta. '][prefix';
593
                form_set_error($error_field_prefix, t('Prefix field is required.'));
594
              }
595
              if (empty($data['first']) && $field['required_parts']['legal_first'] === 'legal_first' && !empty($field['legalname']['legal_first'])) {
596
                $error_field_first = $field['field_name']. '][' .$delta. '][first';
597
                form_set_error($error_field_first, t('First name field is required.'));
598
              }
599
              if (empty($data['middle']) && $field['required_parts']['legal_middle'] === 'legal_middle' && !empty($field['legalname']['legal_middle'])) {
600
                $error_field_middle = $field['field_name']. '][' .$delta. '][middle';
601
                form_set_error($error_field_middle, t('Middle name field is required.'));
602
              }
603
              if (empty($data['last']) && $field['required_parts']['legal_last'] === 'legal_last' && !empty($field['legalname']['legal_last'])) {
604
                $error_field_last = $field['field_name']. '][' .$delta. '][last';
605
                form_set_error($error_field_last, t('Last name field is required.'));
606
              }
607
              if (empty($data['suffix']) && $field['required_parts']['legal_suffix'] === 'legal_suffix' && !empty($field['legalname']['legal_suffix'])) {
608
                $error_field_suffix = $field['field_name']. '][' .$delta. '][suffix';
609
                form_set_error($error_field_suffix, t('Suffix field is required.'));
610
              }
611
            }
612
            elseif ($field['use_legalname'] == 'legal_require') {
613
              form_set_error($field['field_name']. '][' .$delta. ']', t('Legal name field is required.'));
614
            }
615
          }
616

    
617
          //deal with preferred name fields
618
          if (($field['use_preferredname'] == 'preferred_require') || ($field['use_preferredname'] == 'preferred_optional')) {
619
            $preferred_empty = (empty($data['prefix_preferred']) && empty($data['first_preferred']) && empty($data['middle_preferred']) && empty($data['last_preferred']) && empty($data['suffix_preferred']));
620
            if (!$preferred_empty) {
621
              if (empty($data['prefix_preferred']) && $field['required_parts']['preferred_prefix'] === 'preferred_prefix' && !empty($field['preferredname']['preferred_prefix'])) {
622
                $error_field_prefix_preferred = $field['field_name']. '][' .$delta. '][prefix_preferred';
623
                form_set_error($error_field_prefix_preferred, t('Prefix field is required.'));
624
              }
625
              if (empty($data['first_preferred']) && $field['required_parts']['preferred_first'] === 'preferred_first' && !empty($field['preferredname']['preferred_first'])) {
626
                $error_field_first_preferred = $field['field_name']. '][' .$delta. '][first_preferred';
627
                form_set_error($error_field_first_preferred, t('First name field is required.'));
628
              }
629
              if (empty($data['middle_preferred']) && $field['required_parts']['preferred_middle'] === 'preferred_middle' && !empty($field['preferredname']['preferred_middle'])) {
630
                $error_field_middle_preferred = $field['field_name']. '][' .$delta. '][middle_preferred';
631
                form_set_error($error_field_middle_preferred, t('Middle name field is required.'));
632
              }
633
              if (empty($data['last_preferred']) && $field['required_parts']['preferred_last'] === 'preferred_last' && !empty($field['preferredname']['preferred_last'])) {
634
                $error_field_last_preferred = $field['field_name']. '][' .$delta. '][last_preferred';
635
                form_set_error($error_field_last_preferred, t('Last name field is required.'));
636
              }
637
              if (empty($data['suffix_preferred']) && $field['required_parts']['preferred_suffix'] === 'preferred_suffix' && !empty($field['preferredname']['preferred_suffix'])) {
638
                $error_field_suffix_preferred = $field['field_name']. '][' .$delta. '][suffix_preferred';
639
                form_set_error($error_field_suffix_preferred, t('Suffix field is required.'));
640
              }
641
            }
642
            elseif ($field['use_preferredname'] == 'preferred_require') {
643
              form_set_error($field['field_name']. '][' .$delta. ']', t('Preferred name field is required.'));
644
            }
645
          }
646
        }
647
      }
648
      break;
649

    
650
    case 'view':
651
      $context = $teaser ? 'teaser' : 'full';
652
      $formatter = isset($field['display_settings'][$context]['format']) ? $field['display_settings'][$context]['format'] : 'default';
653
      foreach ($items as $delta => $item) {
654
        $items[$delta]['view'] = content_format($field, $item, $formatter, $node);
655
      }
656
      if(!empty($items)){
657
      	return theme('field', $node, $field, $items, $teaser, $page);
658
      }
659
      return;
660
  }
661
} // function expertsdb_fullname_field()
662

    
663
/**
664
 * Implementation of hook_field_formatter_info().
665
 */
666
function expertsdb_fullname_field_formatter_info() {
667
  return array(
668
    'default' => array(
669
      'label' => t('Default, prefix first middle last suffix'),
670
      'field types' => array('expertsdb_fullname'),
671
    ),
672
    'last_name_only' => array(
673
      'label' => t('Last name only'),
674
      'field types' => array('expertsdb_fullname'),
675
    ),
676
    'first_name_only' => array(
677
      'label' => t('First name only'),
678
      'field types' => array('expertsdb_fullname'),
679
    ),
680
    'last_name_first' => array(
681
      'label' => t('Last, first middle'),
682
      'field types' => array('expertsdb_fullname'),
683
    ),
684
  );
685
} // function expertsdb_fullname_field_formatter_info()
686

    
687
/**
688
 * Implemetation of hook_field_formatter().
689
 *
690
 * Here we format the data for display and make sure it is plain text. It should be as
691
 * elsewhere it was validated as alphabetic characters only.
692
 * We also check the length of each name and if it's only one character, place a period
693
 * after it. Primarily this is for people who go by two initials, or who use an initial
694
 * for their first name, but not middle.
695
 * The $node argument is necessary so that filter access can be checked on
696
 * node preview.
697
 * @param $field
698
 *   The field the action is being performed on.
699
 * @param $item
700
 *   An array, keyed by column, of the data stored for this item in this field.
701
 * @param $formatter
702
 *   The name of the formatter being used to display the field. In our case, we name
703
 *   it directly, rather than send it through content_format() and therefore we don't
704
 *   use hook_field_formatter_info either.
705
 * @param $node
706
 *   The node object, for context. Will be NULL in some cases.
707
 *   Warning : when displaying field retrieved by Views, $node will not
708
 *   be a "full-fledged" node object, but an object containg the data returned
709
 *   by the Views query (at least nid, vid, changed)
710
 * @return
711
 *   An HTML string containing the formatted item.
712
 */
713
function expertsdb_fullname_field_formatter($field, $item, $formatter, $node) {
714
  $output = '';
715
  if (!key_exists('prefix', $item)) {
716
    return '';
717
  }
718
  switch ($formatter) {
719
    case 'default':
720
      //check and clean the values for output
721
      if (!empty($item['prefix'])) {
722
        $cck_legalname['prefix'] = strip_tags($item['prefix']);
723
      }
724
      if (!empty($item['first'])) {
725
        $cck_legalname['first'] = strip_tags($item['first']);
726
      }
727
      if (!empty($item['middle'])) {
728
        $cck_legalname['middle'] = strip_tags($item['middle']);
729
      }
730
      if (!empty($item['last'])) {
731
        $cck_legalname['last'] = strip_tags($item['last']);
732
      }
733
      if (!empty($item['suffix'])) {
734
        $cck_legalname['suffix'] = strip_tags($item['suffix']);
735
      }
736
      if (!empty($cck_legalname)) {
737
        $output .= theme('expertsdb_fullname', $cck_legalname, $field);
738
      }
739
      if (!empty($item['prefix_preferred'])) {
740
        $cck_preferredname['prefix'] = strip_tags($item['prefix_preferred']);
741
      }
742
      if (!empty($item['first_preferred'])) {
743
        $cck_preferredname['first'] = strip_tags($item['first_preferred']);
744
      }
745
      if (!empty($item['middle_preferred'])) {
746
        $cck_preferredname['middle'] = strip_tags($item['middle_preferred']);
747
      }
748
      if (!empty($item['last_preferred'])) {
749
        $cck_preferredname['last'] = strip_tags($item['last_preferred']);
750
      }
751
      if (!empty($item['suffix_preferred'])) {
752
        $cck_preferredname['suffix'] = strip_tags($item['suffix_preferred']);
753
      }
754
      if (!empty($cck_preferredname)) {//if there is a preferred name, print it instead of the legal name (overwrite $output)
755
        $output = t('Preferred name: '). theme('expertsdb_fullname', $cck_preferredname, $field);
756
      }
757
      return $output;
758
    case 'last_name_only'://output legal last name
759
      //check and clean the values for output
760
        if (isset($item['last'])) {
761
          $expertsdb_fullname['last'] = strip_tags($item['last']);
762
        }
763
        $output .= theme('expertsdb_fullname', $expertsdb_fullname, $field);
764
      return $output;
765
    case 'first_name_only'://output preferred first name
766
      //check and clean the values for output
767
        if (isset($item['first_preferred'])) {
768
          $expertsdb_fullname['first_preferred'] = strip_tags($item['first_preferred']);
769
        }
770
        $output .= theme('expertsdb_fullname', $expertsdb_fullname, $field);
771
      return $output;
772
    case 'last_name_first':
773
      //check and clean the values for output
774
      if (!empty($item['prefix'])) {
775
        $cck_legalname['prefix'] = strip_tags($item['prefix']);
776
      }
777
      if (!empty($item['first'])) {
778
        $cck_legalname['first'] = strip_tags($item['first']);
779
      }
780
      if (!empty($item['middle'])) {
781
        $cck_legalname['middle'] = strip_tags($item['middle']);
782
      }
783
      if (!empty($item['last'])) {
784
        $cck_legalname['last'] = strip_tags($item['last']);
785
      }
786
      if (!empty($item['suffix'])) {
787
        $cck_legalname['suffix'] = strip_tags($item['suffix']);
788
      }
789
      if (!empty($cck_legalname)) {
790
        $output .= theme('expertsdb_fullname', $cck_legalname, $field, TRUE);
791
      }
792
      if (!empty($item['prefix_preferred'])) {
793
        $cck_preferredname['prefix'] = strip_tags($item['prefix_preferred']);
794
      }
795
      if (!empty($item['first_preferred'])) {
796
        $cck_preferredname['first'] = strip_tags($item['first_preferred']);
797
      }
798
      if (!empty($item['middle_preferred'])) {
799
        $cck_preferredname['middle'] = strip_tags($item['middle_preferred']);
800
      }
801
      if (!empty($item['last_preferred'])) {
802
        $cck_preferredname['last'] = strip_tags($item['last_preferred']);
803
      }
804
      if (!empty($item['suffix_preferred'])) {
805
        $cck_preferredname['suffix'] = strip_tags($item['suffix_preferred']);
806
      }
807
      if (!empty($cck_preferredname)) {//if there is a preferred name, print it instead of the legal name (overwrite $output)
808
        $output = t('Preferred name: '). theme('expertsdb_fullname', $cck_preferredname, $field, TRUE);
809
      }
810
      return $output;
811
  }
812
} // function expertsdb_fullname_field_formatter()
813

    
814
/**
815
 * Theme for address display as called from expertsdb_fullname_field_formatter().
816
 *
817
 * @param array $expertsdb_fullname
818
 * @param array $field
819
 * @param boolean $last_first TRUE if displayed last name first
820
 * @return string $output
821
 */
822
function theme_expertsdb_fullname($expertsdb_fullname, $field, $last_first = FALSE) {
823
  $output = '';
824
  //create the output
825
  if ($last_first) {
826
    if (isset($expertsdb_fullname['last'])) {
827
      $output .= $expertsdb_fullname['last'];
828
      if (strlen($expertsdb_fullname['last']) == 1) $output .= '., ';
829
      else $output .= ', ';
830
    }
831
    if (isset($expertsdb_fullname['prefix'])) {
832
      $output .= $expertsdb_fullname['prefix'];
833
      if (strlen($expertsdb_fullname['prefix']) < 4) $output .= '. ';
834
      else $output .= ' ';
835
    }
836
    if (isset($expertsdb_fullname['first'])) {
837
      $output .= $expertsdb_fullname['first'];
838
      if (strlen($expertsdb_fullname['first']) == 1) $output .= '. ';
839
      else $output .= ' ';
840
    }
841
    if (isset($expertsdb_fullname['middle'])) {
842
      $output .= $expertsdb_fullname['middle'];
843
      if ($field['middle_initial'] == 1) $output .= '. ';
844
      else $output .= ', ';
845
    }
846
    if (isset($expertsdb_fullname['suffix'])) {
847
      $output .= $expertsdb_fullname['suffix'];
848
      if (strlen($expertsdb_fullname['suffix']) < 4) $output .= '.';
849
    }
850
    $output .= '<br />';
851
  }
852
  else {
853
    if (isset($expertsdb_fullname['prefix'])) {
854
      $output .= $expertsdb_fullname['prefix'];
855
      if (strlen($expertsdb_fullname['prefix']) < 4) $output .= '. ';
856
      else $output .= ' ';
857
    }
858
    if (isset($expertsdb_fullname['first'])) {
859
      $output .= $expertsdb_fullname['first'];
860
      if (strlen($expertsdb_fullname['first']) == 1) $output .= '. ';
861
      else $output .= ' ';
862
    }
863
    if (isset($expertsdb_fullname['middle'])) {
864
      $output .= $expertsdb_fullname['middle'];
865
      if ($field['middle_initial'] == 1) $output .= '. ';
866
      else $output .= ' ';
867
    }
868
    if (isset($expertsdb_fullname['last'])) {
869
      $output .= $expertsdb_fullname['last'];
870
      if (strlen($expertsdb_fullname['last']) == 1) $output .= '. ';
871
      else $output .= ' ';
872
    }
873
    if (isset($expertsdb_fullname['suffix'])) {
874
      $output .= $expertsdb_fullname['suffix'];
875
      if (strlen($expertsdb_fullname['suffix']) < 4) $output .= '.';
876
    }
877
    $output .= '<br />';
878
  }
879
  return $output;
880
} // function theme_expertsdb_fullname()
881

    
882
/**
883
 * Implementation of hook_widget_info().
884
 *
885
 * @return
886
 *   An array keyed by widget name. Each element of the array is an associative
887
 *   array with these keys and values:
888
 *   - "label": The human-readable label for the widget.
889
 *   - "field types": An array of field type names that can be edited using
890
 *     this widget.
891
 */
892
function expertsdb_fullname_widget_info() {
893
  return array(
894
    'expertsdb_fullname' => array(
895
      'label' => 'Full Name',
896
      'field types' => array('expertsdb_fullname'),
897
    ),
898
  );
899
} // function expertsdb_fullname_widget_info()
900

    
901
/**
902
 * Implementation of hook_widget_settings().
903
 *
904
 * @param $op
905
 *   The operation to be performed.
906
 * @param $widget
907
 *   The widget on which the operation is to be performed.
908
 * @return
909
 *   This varies depending on the operation.
910
 *   - "form": an array of form elements to add to the settings page.
911
 *   - "validate": no return value. Use form_set_error().
912
 *   - "save": an array of names of form elements to be saved in the database.
913
 *   - "callbacks": an array describing the widget's behaviour regarding hook_widget
914
 *     operations. The array is keyed by hook_widget operations ('form', 'validate'...)
915
 *     and has the following possible values :
916
 *       CONTENT_CALLBACK_NONE     : do nothing for this operation
917
 *       CONTENT_CALLBACK_CUSTOM   : use the behaviour in hook_widget(operation)
918
 *       CONTENT_CALLBACK_DEFAULT  : use content.module's default bahaviour
919
 *     Note : currently only the 'default value' operation implements this feature.
920
 *     All other widget operation implemented by the module _will_ be executed
921
 *     no matter what.
922
 */
923
function expertsdb_fullname_widget_settings($op, $widget) {
924
  switch ($op) {
925
    case 'callbacks':
926
      return array(
927
        'default value' => CONTENT_CALLBACK_CUSTOM,
928
      );
929
  }
930
} // function expertsdb_fullname_widget_settings()
931

    
932
/**
933
 * Implementation of hook_widget().
934
 *
935
 * Presently, we don't allow multiple values as people should only have one name.
936
 * Also, we intercept the default value fields and unset() them as I couldn't think
937
 * of a use case for pre-setting a person's name. We also use a little bit of CSS
938
 * to render the form fields approximately the 'size' they've been specified in 'ems'
939
 * as the 'size' was not being rendered in 'ems' but as some fraction thereof; this
940
 * because a name with mostly wide letters wasn't all fitting in the display.
941
 * @param $op
942
 *   What kind of action is being performed.
943
 * @param &$node
944
 *   The node the action is being performed on.
945
 * @param $field
946
 *   The field the action is being performed on.
947
 * @param &$node_field
948
 *   The contents of the field in this node. Changes to this variable will
949
 *   be saved back to the node object.
950
 * @return
951
 *   This varies depending on the operation.
952
 *   - The "form" operation should return an array of form elements to display.
953
 *   - Other operations have no return value.
954
 */
955
function expertsdb_fullname_widget($op, &$node, $field, &$items) {
956
  switch ($op) {
957
    case 'form':
958
      $form = array();
959
      $form[$field['field_name']] = array('#tree' => TRUE);
960
      $form[$field['field_name']]['#theme'] = 'expertsdb_fullname_display';
961

    
962
      $form[$field['field_name']]['use_legalname'] = array(
963
        '#type' => 'value',
964
        '#value' => $field['use_legalname'],
965
      );
966
      $form[$field['field_name']]['use_preferredname'] = array(
967
        '#type' => 'value',
968
        '#value' => $field['use_preferredname'],
969
      );
970
      $form[$field['field_name']]['required_parts'] = array(
971
        '#type' => 'value',
972
        '#value' => $field['required_parts'],
973
      );
974
      $form[$field['field_name']]['legalname'] = array(
975
        '#type' => 'value',
976
        '#value' => $field['legalname'],
977
      );
978
      $form[$field['field_name']]['preferredname'] = array(
979
        '#type' => 'value',
980
        '#value' => $field['preferredname'],
981
      );
982

    
983
      $form[$field['field_name']]['#type'] = 'fieldset';
984
      $form[$field['field_name']]['#attributes'] = array('class' => 'expertsdb-fullname-fieldset');
985
      $form[$field['field_name']]['#title'] = ucfirst(t($field['widget']['label']));
986
      $form[$field['field_name']]['#description'] = t($field['widget']['description']);
987
      $form[$field['field_name']]['#weight'] = $field['widget']['weight'];
988
      if ($field['multiple']) {
989
        $delta = 0;
990
        foreach ($items as $data) {
991
          if (isset($field['legalname']['legal_prefix'])) {
992
            $form[$field['field_name']][$delta]['prefix'] = array(
993
              '#type' => 'textfield',
994
              '#default_value' => isset($data['prefix']) ? $data['prefix'] : '',
995
              '#size' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
996
              '#maxlength' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
997
              '#prefix' => '<div class="expertsdb-fullname-prefix">',
998
              '#suffix' => '</div>',
999
            );
1000
            if ($field['required_parts']['legal_prefix'] === 'legal_prefix') {
1001
              $form[$field['field_name']][$delta]['prefix']['#attributes'] = array('class' => 'required-field');
1002
            }
1003
            else {
1004
              $form[$field['field_name']][$delta]['prefix']['#attributes'] = $field['max_length_prefix_legal'] ? array('style' => 'width:' .$field["max_length_prefix_legal"]*0.85. 'em') : array();
1005
            }
1006
          }
1007

    
1008
          if (isset($field['legalname']['legal_first'])) {
1009
            $form[$field['field_name']][$delta]['first'] = array(
1010
              '#type' => 'textfield',
1011
              '#default_value' => isset($data['first']) ? $data['first'] : '',
1012
              '#size' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1013
              '#maxlength' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1014
              '#prefix' => '<div class="expertsdb-fullname-first">',
1015
              '#suffix' => '</div>',
1016
            );
1017
            if ($field['required_parts']['legal_first'] === 'legal_first') {
1018
              $form[$field['field_name']][$delta]['first']['#attributes'] = array('class' => 'required-field');
1019
            }
1020
            else {
1021
              $form[$field['field_name']][$delta]['first']['#attributes'] = $field['max_length_first_legal'] ? array('style' => 'width:' .$field["max_length_first_legal"]*0.85. 'em') : array();
1022
            }
1023
          }
1024

    
1025
          if (isset($field['legalname']['legal_middle'])) {
1026
            $form[$field['field_name']][$delta]['middle'] = array(
1027
              '#type' => 'textfield',
1028
              '#default_value' => isset($data['middle']) ? $data['middle'] : '',
1029
              '#size' => $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL,
1030
              '#maxlength' => $field['max_lengths']['max_length_middle_legal'] ? $field['max_lengths']['max_length_middle_legal'] : NULL,
1031
              '#prefix' => '<div class="expertsdb-fullname-middle">',
1032
              '#suffix' => '</div>',
1033
            );
1034
            if ($field['required_parts']['legal_middle'] === 'legal_middle') {
1035
              $form[$field['field_name']][$delta]['middle']['#attributes'] = array('class' => 'required-field');
1036
            }
1037
            else {
1038
              if ($field['middle_initial'] == 1) {
1039
                $form[$field['field_name']][$delta]['middle']['#maxlength'] = 1;
1040
                $form[$field['field_name']][$delta]['middle']['#attributes'] = array('style' => 'width:1em');
1041
              }
1042
              else {
1043
                $form[$field['field_name']][$delta]['middle']['#maxlength'] = $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL;
1044
                $form[$field['field_name']][$delta]['middle']['#attributes'] = $field['max_length_middle_legal'] ? array('style' => 'width:' .$field["max_length_middle_legal"]*0.85. 'em') : array();
1045
              }
1046
            }
1047
          }
1048

    
1049
          if (isset($field['legalname']['legal_last'])) {
1050
            $form[$field['field_name']][$delta]['last'] = array(
1051
              '#type' => 'textfield',
1052
              '#default_value' => isset($data['last']) ? $data['last'] : '',
1053
              '#size' => $field['max_lengths']['max_length_last_legal'] ? $field['max_lengths']['max_length_last_legal'] : NULL,
1054
              '#maxlength' => $field['max_lengths']['max_length_last_legal'] ? $field['max_lengths']['max_length_last_legal'] : NULL,
1055
              '#prefix' => '<div class="expertsdb-fullname-last">',
1056
              '#suffix' => '</div>',
1057
            );
1058
            if ($field['required_parts']['legal_last'] === 'legal_last') {
1059
              $form[$field['field_name']][$delta]['last']['#attributes'] = array('class' => 'required-field');
1060
            }
1061
            else {
1062
              $form[$field['field_name']][$delta]['last']['#attributes'] = $field['max_length_last_legal'] ? array('style' => 'width:' .$field["max_length_last_legal"]*0.85. 'em') : array();
1063
            }
1064
          }
1065

    
1066
          if (isset($field['legalname']['legal_suffix'])) {
1067
            $form[$field['field_name']][$delta]['suffix'] = array(
1068
              '#type' => 'textfield',
1069
              '#default_value' => isset($data['suffix']) ? $data['suffix'] : '',
1070
              '#size' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1071
              '#maxlength' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1072
              '#prefix' => '<div class="expertsdb-fullname-suffix">',
1073
              '#suffix' => '</div>',
1074
            );
1075
            if ($field['required_parts']['legal_suffix'] === 'legal_suffix') {
1076
              $form[$field['field_name']][$delta]['suffix']['#attributes'] = array('class' => 'required-field');
1077
            }
1078
            else {
1079
              $form[$field['field_name']][$delta]['suffix']['#attributes'] = $field['max_length_suffix_legal'] ? array('style' => 'width:' .$field["max_length_suffix_legal"]*0.85. 'em') : array();
1080
            }
1081
          }
1082

    
1083
        if (isset($field['preferredname']['preferred_prefix'])) {
1084
            $form[$field['field_name']][$delta]['prefix_preferred'] = array(
1085
              '#type' => 'textfield',
1086
              '#default_value' => isset($data['prefix_preferred']) ? $data['prefix_preferred'] : '',
1087
              '#size' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1088
              '#maxlength' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1089
              '#prefix' => '<div class="expertsdb-fullname-prefix">',
1090
              '#suffix' => '</div>',
1091
            );
1092
            if ($field['required_parts']['preferred_prefix'] === 'preferred_prefix') {
1093
              $form[$field['field_name']][$delta]['prefix_preferred']['#attributes'] = array('class' => 'required-field');
1094
            }
1095
            else {
1096
              $form[$field['field_name']][$delta]['prefix_preferred']['#attributes'] = $field['max_length_prefix_preferred'] ? array('style' => 'width:' .$field["max_length_prefix_preferred"]*0.85. 'em') : array();
1097
            }
1098
          }
1099

    
1100
          if (isset($field['preferredname']['preferred_first'])) {
1101
            $form[$field['field_name']][$delta]['first_preferred'] = array(
1102
              '#type' => 'textfield',
1103
              '#default_value' => isset($data['first_preferred']) ? $data['first_preferred'] : '',
1104
              '#size' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1105
              '#maxlength' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1106
              '#prefix' => '<div class="expertsdb-fullname-first">',
1107
              '#suffix' => '</div>',
1108
            );
1109
            if ($field['required_parts']['preferred_first'] === 'preferred_first') {
1110
              $form[$field['field_name']][$delta]['first_preferred']['#attributes'] = array('class' => 'required-field');
1111
            }
1112
            else {
1113
              $form[$field['field_name']][$delta]['first_preferred']['#attributes'] = $field['max_length_first_preferred'] ? array('style' => 'width:' .$field["max_length_first_preferred"]*0.85. 'em') : array();
1114
            }
1115
          }
1116

    
1117
          if (isset($field['preferredname']['preferred_middle'])) {
1118
            $form[$field['field_name']][$delta]['middle_preferred'] = array(
1119
              '#type' => 'textfield',
1120
              '#default_value' => isset($data['middle_preferred']) ? $data['middle_preferred'] : '',
1121
              '#size' => $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL,
1122
              '#maxlength' => $field['max_lengths']['max_length_middle_preferred'] ? $field['max_lengths']['max_length_middle_preferred'] : NULL,
1123
              '#prefix' => '<div class="expertsdb-fullname-middle">',
1124
              '#suffix' => '</div>',
1125
            );
1126
            if ($field['required_parts']['preferred_middle'] === 'preferred_middle') {
1127
              $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = array('class' => 'required-field');
1128
            }
1129
            else {
1130
              if ($field['middle_initial'] == 1) {
1131
                $form[$field['field_name']][$delta]['middle_preferred']['#maxlength'] = 1;
1132
                $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = array('style' => 'width:1em');
1133
              }
1134
              else {
1135
                $form[$field['field_name']][$delta]['middle_preferred']['#maxlength'] = $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL;
1136
                $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = $field['max_length_middle_preferred'] ? array('style' => 'width:' .$field["max_length_middle_preferred"]*0.85. 'em') : array();
1137
              }
1138
            }
1139
          }
1140

    
1141
          if (isset($field['preferredname']['preferred_last'])) {
1142
            $form[$field['field_name']][$delta]['last_preferred'] = array(
1143
              '#type' => 'textfield',
1144
              '#default_value' => isset($data['last_preferred']) ? $data['last_preferred'] : '',
1145
              '#size' => $field['max_lengths']['max_length_last_preferred'] ? $field['max_lengths']['max_length_last_preferred'] : NULL,
1146
              '#maxlength' => $field['max_lengths']['max_length_last_preferred'] ? $field['max_lengths']['max_length_last_preferred'] : NULL,
1147
              '#prefix' => '<div class="expertsdb-fullname-last">',
1148
              '#suffix' => '</div>',
1149
            );
1150
            if ($field['required_parts']['preferred_last'] === 'preferred_last') {
1151
              $form[$field['field_name']][$delta]['last_preferred']['#attributes'] = array('class' => 'required-field');
1152
            }
1153
            else {
1154
              $form[$field['field_name']][$delta]['last_preferred']['#attributes'] = $field['max_length_last_preferred'] ? array('style' => 'width:' .$field["max_length_last_preferred"]*0.85. 'em') : array();
1155
            }
1156
          }
1157

    
1158
          if (isset($field['preferredname']['preferred_suffix'])) {
1159
            $form[$field['field_name']][$delta]['suffix_preferred'] = array(
1160
              '#type' => 'textfield',
1161
              '#default_value' => isset($data['suffix_preferred']) ? $data['suffix_preferred'] : '',
1162
              '#size' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1163
              '#maxlength' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1164
              '#prefix' => '<div class="expertsdb-fullname-suffix">',
1165
              '#suffix' => '</div>',
1166
            );
1167
            if ($field['required_parts']['preferred_suffix'] === 'preferred_suffix') {
1168
              $form[$field['field_name']][$delta]['suffix_preferred']['#attributes'] = array('class' => 'required-field');
1169
            }
1170
            else {
1171
              $form[$field['field_name']][$delta]['suffix_preferred']['#attributes'] = $field['max_length_suffix_preferred'] ? array('style' => 'width:' .$field["max_length_suffix_preferred"]*0.85. 'em') : array();
1172
            }
1173
          }
1174

    
1175
          $delta++;
1176
        }
1177
        foreach (range($delta, $delta + 2) as $delta) {
1178
          if (isset($field['legalname']['legal_prefix'])) {
1179
            $form[$field['field_name']][$delta]['prefix'] = array(
1180
              '#type' => 'textfield',
1181
              '#default_value' => '',
1182
              '#size' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
1183
              '#maxlength' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
1184
              '#prefix' => '<div class="expertsdb-fullname-prefix2">',
1185
              '#suffix' => '</div>',
1186
            );
1187
            if ($field['required_parts']['legal_prefix'] === 'legal_prefix') {
1188
              $form[$field['field_name']][$delta]['prefix']['#attributes'] = array('class' => 'required-field');
1189
            }
1190
            else {
1191
              $form[$field['field_name']][$delta]['prefix']['#attributes'] = $field['max_length_prefix_legal'] ? array('style' => 'width:' .$field["max_length_prefix_legal"]*0.85. 'em') : array();
1192
            }
1193
          }
1194

    
1195
          if (isset($field['legalname']['legal_first'])) {
1196
            $form[$field['field_name']][$delta]['first'] = array(
1197
              '#type' => 'textfield',
1198
              '#default_value' => '',
1199
              '#size' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1200
              '#maxlength' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1201
              '#prefix' => '<div class="expertsdb-fullname-first2">',
1202
              '#suffix' => '</div>',
1203
            );
1204
            if ($field['required_parts']['legal_first'] === 'legal_first') {
1205
              $form[$field['field_name']][$delta]['first']['#attributes'] = array('class' => 'required-field');
1206
            }
1207
            else {
1208
              $form[$field['field_name']][$delta]['first']['#attributes'] = $field['max_length_first_legal'] ? array('style' => 'width:' .$field["max_length_first_legal"]*0.85. 'em') : array();
1209
            }
1210
          }
1211

    
1212
          if (isset($field['legalname']['legal_middle'])) {
1213
            $form[$field['field_name']][$delta]['middle'] = array(
1214
              '#type' => 'textfield',
1215
              '#default_value' => '',
1216
              '#size' => $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL,
1217
              '#maxlength' => $field['max_lengths']['max_length_middle_legal'] ? $field['max_lengths']['max_length_middle_legal'] : NULL,
1218
              '#prefix' => '<div class="expertsdb-fullname-middle2">',
1219
              '#suffix' => '</div>',
1220
            );
1221
            if ($field['required_parts']['legal_middle'] === 'legal_middle') {
1222
              $form[$field['field_name']][$delta]['middle']['#attributes'] = array('class' => 'required-field');
1223
            }
1224
            else {
1225
              if ($field['middle_initial'] == 1) {
1226
                $form[$field['field_name']][$delta]['middle']['#maxlength'] = 1;
1227
                $form[$field['field_name']][$delta]['middle']['#attributes'] = array('style' => 'width:1em');
1228
              }
1229
              else {
1230
                $form[$field['field_name']][$delta]['middle']['#maxlength'] = $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL;
1231
                $form[$field['field_name']][$delta]['middle']['#attributes'] = $field['max_length_middle_legal'] ? array('style' => 'width:' .$field["max_length_middle_legal"]*0.85. 'em') : array();
1232
              }
1233
            }
1234
          }
1235

    
1236
          if (isset($field['legalname']['legal_last'])) {
1237
            $form[$field['field_name']][$delta]['last'] = array(
1238
              '#type' => 'textfield',
1239
              '#default_value' => '',
1240
              '#size' => $field['max_lengths']['max_length_last_legal'] ? $field['max_lengths']['max_length_last_legal'] : NULL,
1241
              '#maxlength' => $field['max_lengths']['max_length_last_legal'] ? $field['max_lengths']['max_length_last_legal'] : NULL,
1242
              '#prefix' => '<div class="expertsdb-fullname-last2">',
1243
              '#suffix' => '</div>',
1244
            );
1245
            if ($field['required_parts']['legal_last'] === 'legal_last') {
1246
              $form[$field['field_name']][$delta]['last']['#attributes'] = array('class' => 'required-field');
1247
            }
1248
            else {
1249
              $form[$field['field_name']][$delta]['last']['#attributes'] = $field['max_length_last_legal'] ? array('style' => 'width:' .$field["max_length_last_legal"]*0.85. 'em') : array();
1250
            }
1251
          }
1252

    
1253
          if (isset($field['legalname']['legal_suffix'])) {
1254
            $form[$field['field_name']][$delta]['suffix'] = array(
1255
              '#type' => 'textfield',
1256
              '#default_value' => '',
1257
              '#size' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1258
              '#maxlength' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1259
              '#prefix' => '<div class="expertsdb-fullname-suffix2">',
1260
              '#suffix' => '</div>',
1261
            );
1262
            if ($field['required_parts']['legal_suffix'] === 'legal_suffix') {
1263
              $form[$field['field_name']][$delta]['suffix']['#attributes'] = array('class' => 'required-field');
1264
            }
1265
            else {
1266
              $form[$field['field_name']][$delta]['suffix']['#attributes'] = $field['max_length_suffix_legal'] ? array('style' => 'width:' .$field["max_length_suffix_legal"]*0.85. 'em') : array();
1267
            }
1268
          }
1269

    
1270
          if (isset($field['preferredname']['preferred_prefix'])) {
1271
            $form[$field['field_name']][$delta]['prefix_preferred'] = array(
1272
              '#type' => 'textfield',
1273
              '#default_value' => '',
1274
              '#size' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1275
              '#maxlength' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1276
              '#prefix' => '<div class="expertsdb-fullname-prefix2">',
1277
              '#suffix' => '</div>',
1278
            );
1279
            if ($field['required_parts']['preferred_prefix'] === 'preferred_prefix') {
1280
              $form[$field['field_name']][$delta]['prefix_preferred']['#attributes'] = array('class' => 'required-field');
1281
            }
1282
            else {
1283
              $form[$field['field_name']][$delta]['prefix_preferred']['#attributes'] = $field['max_length_prefix_preferred'] ? array('style' => 'width:' .$field["max_length_prefix_preferred"]*0.85. 'em') : array();
1284
            }
1285
          }
1286

    
1287
          if (isset($field['preferredname']['preferred_first'])) {
1288
            $form[$field['field_name']][$delta]['first_preferred'] = array(
1289
              '#type' => 'textfield',
1290
              '#default_value' => '',
1291
              '#size' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1292
              '#maxlength' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1293
              '#prefix' => '<div class="expertsdb-fullname-first2">',
1294
              '#suffix' => '</div>',
1295
            );
1296
            if ($field['required_parts']['preferred_first'] === 'preferred_first') {
1297
              $form[$field['field_name']][$delta]['first_preferred']['#attributes'] = array('class' => 'required-field');
1298
            }
1299
            else {
1300
              $form[$field['field_name']][$delta]['first_preferred']['#attributes'] = $field['max_length_first_preferred'] ? array('style' => 'width:' .$field["max_length_first_preferred"]*0.85. 'em') : array();
1301
            }
1302
          }
1303

    
1304
          if (isset($field['preferredname']['preferred_middle'])) {
1305
            $form[$field['field_name']][$delta]['middle_preferred'] = array(
1306
              '#type' => 'textfield',
1307
              '#default_value' => '',
1308
              '#size' => $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL,
1309
              '#maxlength' => $field['max_lengths']['max_length_middle_preferred'] ? $field['max_lengths']['max_length_middle_preferred'] : NULL,
1310
              '#prefix' => '<div class="expertsdb-fullname-middle2">',
1311
              '#suffix' => '</div>',
1312
            );
1313
            if ($field['required_parts']['preferred_middle'] === 'preferred_middle') {
1314
              $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = array('class' => 'required-field');
1315
            }
1316
            else {
1317
              if ($field['middle_initial'] == 1) {
1318
                $form[$field['field_name']][$delta]['middle_preferred']['#maxlength'] = 1;
1319
                $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = array('style' => 'width:1em');
1320
              }
1321
              else {
1322
                $form[$field['field_name']][$delta]['middle_preferred']['#maxlength'] = $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL;
1323
                $form[$field['field_name']][$delta]['middle_preferred']['#attributes'] = $field['max_length_middle_preferred'] ? array('style' => 'width:' .$field["max_length_middle_preferred"]*0.85. 'em') : array();
1324
              }
1325
            }
1326
          }
1327

    
1328
          if (isset($field['preferredname']['preferred_last'])) {
1329
            $form[$field['field_name']][$delta]['last_preferred'] = array(
1330
              '#type' => 'textfield',
1331
              '#default_value' => '',
1332
              '#size' => $field['max_lengths']['max_length_last_preferred'] ? $field['max_lengths']['max_length_last_preferred'] : NULL,
1333
              '#maxlength' => $field['max_lengths']['max_length_last_preferred'] ? $field['max_lengths']['max_length_last_preferred'] : NULL,
1334
              '#prefix' => '<div class="expertsdb-fullname-last2">',
1335
              '#suffix' => '</div>',
1336
            );
1337
            if ($field['required_parts']['preferred_last'] === 'preferred_last') {
1338
              $form[$field['field_name']][$delta]['last_preferred']['#attributes'] = array('class' => 'required-field');
1339
            }
1340
            else {
1341
              $form[$field['field_name']][$delta]['last_preferred']['#attributes'] = $field['max_length_last_preferred'] ? array('style' => 'width:' .$field["max_length_last_preferred"]*0.85. 'em') : array();
1342
            }
1343
          }
1344

    
1345
          if (isset($field['preferredname']['preferred_suffix'])) {
1346
            $form[$field['field_name']][$delta]['suffix_preferred'] = array(
1347
              '#type' => 'textfield',
1348
              '#default_value' => '',
1349
              '#size' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1350
              '#maxlength' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1351
              '#prefix' => '<div class="expertsdb-fullname-suffix2">',
1352
              '#suffix' => '</div>',
1353
            );
1354
            if ($field['required_parts']['preferred_suffix'] === 'preferred_suffix') {
1355
              $form[$field['field_name']][$delta]['suffix_preferred']['#attributes'] = array('class' => 'required-field');
1356
            }
1357
            else {
1358
              $form[$field['field_name']][$delta]['suffix_preferred']['#attributes'] = $field['max_length_suffix_preferred'] ? array('style' => 'width:' .$field["max_length_suffix_preferred"]*0.85. 'em') : array();
1359
            }
1360
          }
1361
        }
1362
      }
1363
      else {
1364
        //present form for legal name with no multiples
1365
        if (isset($field['legalname']['legal_prefix'])) {
1366
          $form[$field['field_name']][0]['prefix'] = array(
1367
            '#type' => 'textfield',
1368
            '#default_value' => isset($items[0]['prefix']) ? $items[0]['prefix'] : '',
1369
            '#size' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
1370
            '#maxlength' => $field['max_length_prefix_legal'] ? $field['max_length_prefix_legal'] : NULL,
1371
            '#prefix' => '<div class="expertsdb-fullname-prefix">',
1372
            '#suffix' => '</div>',
1373
          );
1374
          if($field['required_parts']['legal_prefix'] === 'legal_prefix') {
1375
            $form[$field['field_name']][0]['prefix']['#attributes'] = array('class' => 'required-field');
1376
          }
1377
          else {
1378
            $form[$field['field_name']][0]['prefix']['#attributes'] = $field['max_length_prefix_legal'] ? array('style' => 'width:' .$field["max_length_prefix_legal"]*0.85. 'em') : array();
1379
          }
1380
        }
1381

    
1382
        if (isset($field['legalname']['legal_first'])) {
1383
          $form[$field['field_name']][0]['first'] = array(
1384
            '#type' => 'textfield',
1385
            '#default_value' => isset($items[0]['first']) ? $items[0]['first'] : '',
1386
            '#size' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1387
            '#maxlength' => $field['max_length_first_legal'] ? $field['max_length_first_legal'] : NULL,
1388
            '#prefix' => '<div class="expertsdb-fullname-first">',
1389
            '#suffix' => '</div>',
1390
          );
1391
          if($field['required_parts']['legal_first'] === 'legal_first') {
1392
            $form[$field['field_name']][0]['first']['#attributes'] = array('class' => 'required-field');
1393
          }
1394
          else {
1395
            $form[$field['field_name']][0]['first']['#attributes'] = $field['max_length_first_legal'] ? array('style' => 'width:' .$field["max_length_first_legal"]*0.85. 'em') : array();
1396
          }
1397
        }
1398

    
1399
        if (isset($field['legalname']['legal_middle'])) {
1400
          $form[$field['field_name']][0]['middle'] = array(
1401
            '#type' => 'textfield',
1402
            '#default_value' => isset($items[0]['middle']) ? $items[0]['middle'] : '',
1403
            '#size' => $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL,
1404
            '#prefix' => '<div class="expertsdb-fullname-middle">',
1405
            '#suffix' => '</div>',
1406
          );
1407
          if($field['required_parts']['legal_middle'] === 'legal_middle') {
1408
            $form[$field['field_name']][0]['middle']['#attributes'] = array('class' => 'required-field');
1409
          }
1410
          else {
1411
            if ($field['middle_initial'] == 1) {
1412
              $form[$field['field_name']][0]['middle']['#maxlength'] = 1;
1413
              $form[$field['field_name']][0]['middle']['#attributes'] = array('style' => 'width:1em');
1414
            }
1415
            else {
1416
              $form[$field['field_name']][0]['middle']['#maxlength'] = $field['max_length_middle_legal'] ? $field['max_length_middle_legal'] : NULL;
1417
              $form[$field['field_name']][0]['middle']['#attributes'] = $field['max_length_middle_legal'] ? array('style' => 'width:' .$field["max_length_middle_legal"]*0.85. 'em') : array();
1418
            }
1419
          }
1420
        }
1421

    
1422
        if (isset($field['legalname']['legal_last'])) {
1423
          $form[$field['field_name']][0]['last'] = array(
1424
            '#type' => 'textfield',
1425
            '#default_value' => isset($items[0]['last']) ? $items[0]['last'] : '',
1426
            '#size' => $field['max_length_last_legal'] ? $field['max_length_last_legal'] : NULL,
1427
            '#maxlength' => $field['max_length_last_legal'] ? $field['max_length_last_legal'] : NULL,
1428
            '#prefix' => '<div class="expertsdb-fullname-last">',
1429
            '#suffix' => '</div>',
1430
          );
1431
          if($field['required_parts']['legal_last'] === 'legal_last') {
1432
            $form[$field['field_name']][0]['last']['#attributes'] = array('class' => 'required-field');
1433
          }
1434
          else {
1435
            $form[$field['field_name']][0]['last']['#attributes'] = $field['max_length_last_legal'] ? array('style' => 'width:' .$field["max_length_last_legal"]*0.85. 'em') : array();
1436
          }
1437
        }
1438

    
1439
        if (isset($field['legalname']['legal_suffix'])) {
1440
          $form[$field['field_name']][0]['suffix'] = array(
1441
            '#type' => 'textfield',
1442
            '#default_value' => isset($items[0]['suffix']) ? $items[0]['suffix'] : '',
1443
            '#size' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1444
            '#maxlength' => $field['max_length_suffix_legal'] ? $field['max_length_suffix_legal'] : NULL,
1445
            '#prefix' => '<div class="expertsdb-fullname-suffix">',
1446
            '#suffix' => '</div>',
1447
          );
1448
          if($field['required_parts']['legal_suffix'] === 'legal_suffix') {
1449
            $form[$field['field_name']][0]['suffix']['#attributes'] = array('class' => 'required-field');
1450
          }
1451
          else {
1452
            $form[$field['field_name']][0]['suffix']['#attributes'] = $field['max_length_suffix_legal'] ? array('style' => 'width:' .$field["max_length_suffix_legal"]*0.85. 'em') : array();
1453
          }
1454
        }
1455

    
1456
        //present form for preferred name with no multiples
1457
        if (isset($field['preferredname']['preferred_prefix'])) {
1458
          $form[$field['field_name']][0]['prefix_preferred'] = array(
1459
            '#type' => 'textfield',
1460
            '#default_value' => isset($items[0]['prefix_preferred']) ? $items[0]['prefix_preferred'] : '',
1461
            '#size' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1462
            '#maxlength' => $field['max_length_prefix_preferred'] ? $field['max_length_prefix_preferred'] : NULL,
1463
            '#prefix' => '<div class="expertsdb-fullname-prefix">',
1464
            '#suffix' => '</div>',
1465
          );
1466
          if($field['required_parts']['preferred_prefix'] === 'preferred_prefix') {
1467
            $form[$field['field_name']][0]['prefix_preferred']['#attributes'] = array('class' => 'required-field');
1468
          }
1469
          else {
1470
            $form[$field['field_name']][0]['prefix_preferred']['#attributes'] = $field['max_length_prefix_preferred'] ? array('style' => 'width:' .$field["max_length_prefix_preferred"]*0.85. 'em') : array();
1471
          }
1472
        }
1473

    
1474
        if (isset($field['preferredname']['preferred_first'])) {
1475
          $form[$field['field_name']][0]['first_preferred'] = array(
1476
            '#type' => 'textfield',
1477
            '#default_value' => isset($items[0]['first_preferred']) ? $items[0]['first_preferred'] : '',
1478
            '#size' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1479
            '#maxlength' => $field['max_length_first_preferred'] ? $field['max_length_first_preferred'] : NULL,
1480
            '#prefix' => '<div class="expertsdb-fullname-first">',
1481
            '#suffix' => '</div>',
1482
          );
1483
          if($field['required_parts']['preferred_first'] === 'preferred_first') {
1484
            $form[$field['field_name']][0]['first_preferred']['#attributes'] = array('class' => 'required-field');
1485
          }
1486
          else {
1487
            $form[$field['field_name']][0]['first_preferred']['#attributes'] = $field['max_length_first_preferred'] ? array('style' => 'width:' .$field["max_length_first_preferred"]*0.85. 'em') : array();
1488
          }
1489

    
1490
        }
1491

    
1492
        if (isset($field['preferredname']['preferred_middle'])) {
1493
          $form[$field['field_name']][0]['middle_preferred'] = array(
1494
            '#type' => 'textfield',
1495
            '#default_value' => isset($items[0]['middle_preferred']) ? $items[0]['middle_preferred'] : '',
1496
            '#size' => $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL,
1497
            '#prefix' => '<div class="expertsdb-fullname-middle">',
1498
            '#suffix' => '</div>',
1499
          );
1500
          if($field['required_parts']['preferred_middle'] === 'preferred_middle') {
1501
            $form[$field['field_name']][0]['middle_preferred']['#attributes'] = array('class' => 'required-field');
1502
          }
1503
          else {
1504
            if ($field['middle_initial'] == 1) {
1505
              $form[$field['field_name']][0]['middle_preferred']['#maxlength'] = 1;
1506
              $form[$field['field_name']][0]['middle_preferred']['#attributes'] = array('style' => 'width:1em');
1507
            }
1508
            else {
1509
              $form[$field['field_name']][0]['middle_preferred']['#maxlength'] = $field['max_length_middle_preferred'] ? $field['max_length_middle_preferred'] : NULL;
1510
              $form[$field['field_name']][0]['middle_preferred']['#attributes'] = $field['max_length_middle_preferred'] ? array('style' => 'width:' .$field["max_length_middle_preferred"]*0.85. 'em') : array();
1511
            }
1512
          }
1513
        }
1514

    
1515
        if (isset($field['preferredname']['preferred_last'])) {
1516
          $form[$field['field_name']][0]['last_preferred'] = array(
1517
            '#type' => 'textfield',
1518
            '#default_value' => isset($items[0]['last_preferred']) ? $items[0]['last_preferred'] : '',
1519
            '#size' => $field['max_length_last_preferred'] ? $field['max_length_last_preferred'] : NULL,
1520
            '#maxlength' => $field['max_length_last_preferred'] ? $field['max_length_last_preferred'] : NULL,
1521
            '#prefix' => '<div class="expertsdb-fullname-last">',
1522
            '#suffix' => '</div>',
1523
          );
1524
          if($field['required_parts']['preferred_last'] === 'preferred_last') {
1525
            $form[$field['field_name']][0]['last_preferred']['#attributes'] = array('class' => 'required-field');
1526
          }
1527
          else {
1528
            $form[$field['field_name']][0]['last_preferred']['#attributes'] = $field['max_length_last_preferred'] ? array('style' => 'width:' .$field["max_length_last_preferred"]*0.85. 'em') : array();
1529
          }
1530
        }
1531

    
1532
        if (isset($field['preferredname']['preferred_suffix'])) {
1533
          $form[$field['field_name']][0]['suffix_preferred'] = array(
1534
            '#type' => 'textfield',
1535
            '#default_value' => isset($items[0]['suffix_preferred']) ? $items[0]['suffix_preferred'] : '',
1536
            '#size' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1537
            '#maxlength' => $field['max_length_suffix_preferred'] ? $field['max_length_suffix_preferred'] : NULL,
1538
            '#prefix' => '<div class="expertsdb-fullname-suffix">',
1539
            '#suffix' => '</div>',
1540
          );
1541
          if($field['required_parts']['preferred_suffix'] === 'preferred_suffix') {
1542
            $form[$field['field_name']][0]['suffix_preferred']['#attributes'] = array('class' => 'required-field');
1543
          }
1544
          else {
1545
            $form[$field['field_name']][0]['suffix_preferred']['#attributes'] = $field['max_length_suffix_preferred'] ? array('style' => 'width:' .$field["max_length_suffix_preferred"]*0.85. 'em') : array();
1546
          }
1547
        }
1548
      }
1549
      return $form;
1550

    
1551
    /*case 'default value':
1552
      unset ($field['widget']['default_value_php']);
1553
      unset ($field['widget']['default_value']);
1554
      break;*/
1555

    
1556
    case 'process form values':
1557
      // Don't save empty fields except the first value
1558
      foreach ($items as $delta => $item) {
1559
        if (!is_numeric($delta)) {
1560
          unset($items[$delta]);//if we don't do this, for some reason, the first $delta of good values turns into a set of 'l's (the letter l)
1561
        }
1562
        //in the validation stage, we'll enforce required fields for $delta > 0, but let's just remove any totally empty $deltas now
1563
        elseif (($item['prefix'] == '') && ($item['first'] == '') && ($item['middle'] == '') && ($item['last'] == '') && ($item['suffix'] == '') &&
1564
         ($item['prefix_preferred'] == '') && ($item['first_preferred'] == '') && ($item['middle_preferred'] == '') && ($item['last_preferred'] == '') && ($item['suffix_preferred'] == '') && $delta > 0) {
1565
          unset($items[$delta]);
1566
        }
1567
      }
1568
      break;
1569
  }
1570
} //function expertsdb_fullname_widget()
1571

    
1572
/**
1573
 * Display the input fields to the user.
1574
 *
1575
 * @param array $form
1576
 * 	The data to be rendered.
1577
 * @return string An HTML string ready for display.
1578
 */
1579
function theme_expertsdb_fullname_display($form) {
1580
  drupal_add_css(drupal_get_path('module', 'expertsdb_fullname') .'/expertsdb_fullname.css', 'module', 'all', FALSE);
1581
  $output = '';
1582
  $rows = array();
1583
  $header = array();
1584

    
1585
  $header[] = t('');
1586
  if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix' || $form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
1587
    $header[] = t('Prefix');
1588
  }
1589
  if ($form['legalname']['#value']['legal_first'] === 'legal_first' || $form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
1590
    $header[] = t('First');
1591
  }
1592
  if ($form['legalname']['#value']['legal_middle'] === 'legal_middle' || $form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
1593
    $header[] = t('Middle');
1594
  }
1595
  if ($form['legalname']['#value']['legal_last'] === 'legal_last' || $form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
1596
    $header[] = t('Last');
1597
  }
1598
  if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix' || $form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
1599
    $header[] = t('Suffix');
1600
  }
1601

    
1602
  foreach (element_children($form) as $delta) {
1603
    if (is_numeric($delta)) {
1604
      if ($form['use_legalname']['#value'] == 'legal_require') {
1605
        $rows[$delta]['name'] = '<div class="fullname-type required">'. t('Legal name') .'<span class="form-required" title="This field is required.">*</span></div>';
1606
      }
1607
      else {
1608
        $rows[$delta]['name'] = '<div class="fullname-type">'. t('Legal name') .'</div>';
1609
      }
1610
      unset($form['use_legalname']);
1611

    
1612
      if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix') {
1613
        $rows[$delta]['prefix'] = drupal_render($form[$delta]['prefix']);
1614
      }
1615
      else {
1616
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
1617
          $rows[$delta]['prefix'] = '';
1618
        }
1619
        $form[$delta]['prefix']['#access'] = FALSE;
1620
      }
1621
      if ($form['legalname']['#value']['legal_first'] === 'legal_first') {
1622
        $rows[$delta]['first'] = drupal_render($form[$delta]['first']);
1623
      }
1624
      else {
1625
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
1626
          $rows[$delta]['first'] = '';
1627
        }
1628
        $form[$delta]['first']['#access'] = FALSE;
1629
      }
1630
      if ($form['legalname']['#value']['legal_middle'] === 'legal_middle') {
1631
        $rows[$delta]['middle'] = drupal_render($form[$delta]['middle']);
1632
      }
1633
      else {
1634
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
1635
          $rows[$delta]['middle'] = '';
1636
        }
1637
        $form[$delta]['middle']['#access'] = FALSE;
1638
      }
1639
      if ($form['legalname']['#value']['legal_last'] === 'legal_last') {
1640
        $rows[$delta]['last'] = drupal_render($form[$delta]['last']);
1641
      }
1642
      else {
1643
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
1644
          $rows[$delta]['last'] = '';
1645
        }
1646
        $form[$delta]['last']['#access'] = FALSE;
1647
      }
1648
      if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix') {
1649
        $rows[$delta]['suffix'] = drupal_render($form[$delta]['suffix']);
1650
      }
1651
      else {
1652
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
1653
          $rows[$delta]['suffix'] = '';
1654
        }
1655
        $form[$delta]['suffix']['#access'] = FALSE;
1656
      }
1657

    
1658
      //if preferred name is active, show the input fields
1659
      if ($form['use_preferredname']['#value'] != 'preferred_hide') {
1660
        //if form has fields from preferred name, set a title based on required-ness
1661
        if ($form[$delta]['prefix_preferred'] || $form[$delta]['first_preferred'] || $form[$delta]['middle_preferred'] || $form[$delta]['last_preferred'] || $form[$delta]['suffix_preferred']) {
1662
          if ($form['use_preferredname']['#value'] == 'preferred_require') {
1663
            $rows[$delta .'b']['name_preferred'] = '<div class="fullname-type required">'. t('Preferred name') .'<span class="form-required" title="This field is required.">*</span></div>';
1664
          }
1665
          else {
1666
            $rows[$delta .'b']['name_preferred'] = '<div class="fullname-type">'. t('Preferred name') .'</div>';
1667
          }
1668
          unset($form['use_preferredname']);
1669
        }
1670

    
1671
        if ($form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
1672
          $rows[$delta .'b']['prefix_preferred'] = drupal_render($form[$delta]['prefix_preferred']);
1673
        }
1674
        else {
1675
          if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix') {
1676
            $rows[$delta .'b']['prefix_preferred'] = '';
1677
          }
1678
          $form[$delta]['prefix_preferred']['#access'] = FALSE;
1679
        }
1680
        if ($form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
1681
          $rows[$delta .'b']['first_preferred'] = drupal_render($form[$delta]['first_preferred']);
1682
        }
1683
        else {
1684
          if ($form['legalname']['#value']['legal_first'] === 'legal_first') {
1685
            $rows[$delta .'b']['first_preferred'] = '';
1686
          }
1687
          $form[$delta]['first_preferred']['#access'] = FALSE;
1688
        }
1689
        if ($form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
1690
          $rows[$delta .'b']['middle_preferred'] = drupal_render($form[$delta]['middle_preferred']);
1691
        }
1692
        else {
1693
          if ($form['legalname']['#value']['legal_middle'] === 'legal_middle') {
1694
          $rows[$delta .'b']['middle_preferred'] =  '';
1695
          }
1696
          $form[$delta]['middle_preferred']['#access'] = FALSE;
1697
        }
1698
        if ($form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
1699
          $rows[$delta .'b']['last_preferred'] = drupal_render($form[$delta]['last_preferred']);
1700
        }
1701
        else {
1702
          if ($form['legalname']['#value']['legal_last'] === 'legal_last') {
1703
          $rows[$delta .'b']['last_preferred'] = '';
1704
          }
1705
          $form[$delta]['last_preferred']['#access'] = FALSE;
1706
        }
1707
        if ($form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
1708
          $rows[$delta .'b']['suffix_preferred'] = drupal_render($form[$delta]['suffix_preferred']);
1709
        }
1710
        else {
1711
          if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix') {
1712
          $rows[$delta .'b']['suffix_preferred'] = '';
1713
          }
1714
          $form[$delta]['suffix_preferred']['#access'] = FALSE;
1715
        }
1716
      }
1717
      else {
1718
        $form[$delta]['prefix_preferred']['#access'] = FALSE;
1719
        $form[$delta]['first_preferred']['#access'] = FALSE;
1720
        $form[$delta]['middle_preferred']['#access'] = FALSE;
1721
        $form[$delta]['last_preferred']['#access'] = FALSE;
1722
        $form[$delta]['suffix_preferred']['#access'] = FALSE;
1723
      }
1724
    }
1725
  }
1726
  unset($form['use_legalname']);
1727
  unset($form['use_preferredname']);
1728
  unset($form['required_parts']);
1729
  unset($form['legalname']);
1730
  unset($form['preferredname']);
1731
  $output .= theme('table', $header, $rows);
1732
  $output .= drupal_render($form);
1733
  return $output;
1734
} //function theme_expertsdb_fullname_display
1735

    
1736
//-----------------------------------------Integration with other modules-----------------------------
1737
//-----------------------------------------Integration with other modules-----------------------------
1738
//-----------------------------------------Integration with other modules-----------------------------
1739

    
1740
/**
1741
 * Implementation of hook_diff()
1742
 */
1743
function expertsdb_fullname_diff(&$old_node, &$new_node) {
1744
  $result = array();
1745
  $cck_info = content_types($new_node->type);
1746
  if ($cck_info) {
1747
    foreach ($cck_info['fields'] as $field) {
1748
      if ($field['type'] == 'expertsdb_fullname') {
1749
        $old_values = array();
1750
        $new_values = array();
1751
        if (isset($old_node->$field['field_name'])) {
1752
          $old_values = expertsdb_fullname_diff_values($old_node, $field);
1753
        }
1754
        if (isset($new_node->$field['field_name'])) {
1755
          $new_values = expertsdb_fullname_diff_values($new_node, $field);
1756
        }
1757
        foreach ($new_values as $key => $value) {
1758
          if (!isset($old_values[$key]) && ($new_values[$key] == '')) {
1759
            unset($new_values[$key]);
1760
          }
1761
        }
1762
        $result[] = array(
1763
          'name' => $field['widget']['label'],
1764
          'old' => $old_values,
1765
          'new' => $new_values,
1766
          'format' => array(
1767
            'show_header' => true,
1768
            ),
1769
          );
1770
      }
1771
    }
1772
  }
1773
  return $result;
1774
}
1775

    
1776
/**
1777
 * A helper function for the diff hook
1778
 *
1779
 * @param object $node
1780
 * @param array $field
1781
 * @return array
1782
 */
1783
function expertsdb_fullname_diff_values(&$node, &$field) {
1784
  foreach ($node->$field['field_name'] as $item => $value) {
1785
    if (!is_numeric($item)) {
1786
      continue;
1787
    }
1788
    else {
1789
      $result[] = $value['prefix'];
1790
      $result[] = $value['first'];
1791
      $result[] = $value['middle'];
1792
      $result[] = $value['last'];
1793
      $result[] = $value['suffix'];
1794
      $result[] = $value['prefix_preferred'];
1795
      $result[] = $value['first_preferred'];
1796
      $result[] = $value['middle_preferred'];
1797
      $result[] = $value['last_preferred'];
1798
      $result[] = $value['suffix_preferred'];
1799
    }
1800
  }
1801
  return $result;
1802
}
1803

    
1804
/**
1805
 * Implementation of hook_token_values
1806
 *
1807
 * @param string $type $type contains the current context -- 'node', 'user', 'global', etc.
1808
 * @param mixed $object contains the specific node, user, etc. that should be used as the basis for the replacements.
1809
 * @return array $tokens
1810
 */
1811
function expertsdb_fullname_token_values($type, $object = NULL) {
1812
  if ($type == 'field') {
1813
    $tokens = array();
1814
    $something = $object[0];
1815
    $tokens['fullname'] = $something['view'];
1816
    $tokens['prefix'] = check_plain($something['prefix']);
1817
    $tokens['first'] = check_plain($something['first']);
1818
    $tokens['middle'] = check_plain($something['middle']);
1819
    $tokens['last'] = check_plain($something['last']);
1820
    $tokens['suffix'] = check_plain($something['suffix']);
1821
    $tokens['prefix_preferred'] = check_plain($something['prefix_preferred']);
1822
    $tokens['first_preferred'] = check_plain($something['first_preferred']);
1823
    $tokens['middle_preferred'] = check_plain($something['middle_preferred']);
1824
    $tokens['last_preferred'] = check_plain($something['last_preferred']);
1825
    $tokens['suffix_preferred'] = check_plain($something['suffix_preferred']);
1826
    return $tokens;
1827
  }
1828
} // function expertsdb_fullname_token_values()
1829

    
1830
/**
1831
 * Implementation of hook_token_list
1832
 *
1833
 * @param string $type indicates the context that token help is being generated for.
1834
 * @return array $tokens
1835
 */
1836
function expertsdb_fullname_token_list($type = 'all') {
1837
  if ($type == 'field' || $type == 'all') {
1838
    $tokens = array();
1839
    $tokens['expertsdb_fullname']['fullname'] = t("The user's full name");
1840
    $tokens['expertsdb_fullname']['prefix'] = t("The user's legal prefix");
1841
    $tokens['expertsdb_fullname']['first'] = t("The user's legal first name");
1842
    $tokens['expertsdb_fullname']['middle'] = t("The user's legal middle name or initial");
1843
    $tokens['expertsdb_fullname']['last'] = t("The user's legal last name");
1844
    $tokens['expertsdb_fullname']['suffix'] = t("The user's legal suffix");
1845
    $tokens['expertsdb_fullname']['prefix_preferred'] = t("The user's preferred prefix");
1846
    $tokens['expertsdb_fullname']['first_preferred'] = t("The user's preferred first name");
1847
    $tokens['expertsdb_fullname']['middle_preferred'] = t("The user's preferred middle name or initial");
1848
    $tokens['expertsdb_fullname']['last_preferred'] = t("The user's preferred last name");
1849
    $tokens['expertsdb_fullname']['suffix_preferred'] = t("The user's preferred suffix");
1850
    return $tokens;
1851
  }
1852
} // function expertsdb_fullname_token_list()
(28-28/47)