Parent Directory
|
Revision Log
|
Revision Graph
#201359 took care of validation problems.
| 1 | <?php |
| 2 | /** |
| 3 | * This is the cck_fullname module for use with CCK. |
| 4 | * |
| 5 | * <p>This file contains information on the cck_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$; |
| 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 | * Implementation of hook_field_info(). |
| 30 | * |
| 31 | * @return |
| 32 | * An array keyed by field type name. Each element of the array is an associative |
| 33 | * array with these keys and values: |
| 34 | * - "label": The human-readable label for the field type. |
| 35 | */ |
| 36 | function cck_fullname_field_info() { |
| 37 | return array( |
| 38 | 'cck_fullname' => array('label' => 'Full Name'), |
| 39 | ); |
| 40 | } // function cck_fullname_field_info() |
| 41 | |
| 42 | /** |
| 43 | * Implementation of hook_field_settings(). |
| 44 | * |
| 45 | * @param $op |
| 46 | * The operation to be performed. |
| 47 | * @param $field |
| 48 | * The field on which the operation is to be performed. |
| 49 | * @return |
| 50 | * This varies depending on the operation. |
| 51 | * - "form": an array of form elements to add to |
| 52 | * the settings page. |
| 53 | * - "validate": no return value. Use form_set_error(). |
| 54 | * - "save": an array of names of form elements to |
| 55 | * be saved in the database. |
| 56 | * - "database columns": an array keyed by column name, with arrays of column |
| 57 | * information as values. |
| 58 | * - "filters": an array whose values are 'filters' |
| 59 | * definitions as expected by views.module (see Views Documentation). |
| 60 | * - "callbacks": an array describing the field's behaviour regarding hook_field |
| 61 | * operations. The array is keyed by hook_field operations ('view', 'validate'...) |
| 62 | * and has the following possible values : |
| 63 | * CONTENT_CALLBACK_NONE : do nothing for this operation |
| 64 | * CONTENT_CALLBACK_CUSTOM : use the behaviour in hook_field(operation) |
| 65 | * CONTENT_CALLBACK_DEFAULT : use content.module's default bahaviour |
| 66 | * Note : currently only the 'view' operation implements this feature. |
| 67 | * All other field operation implemented by the module _will_ be executed |
| 68 | * no matter what. |
| 69 | */ |
| 70 | function cck_fullname_field_settings($op, $field) { |
| 71 | switch ($op) { |
| 72 | case 'form': |
| 73 | $form = array(); |
| 74 | |
| 75 | //borrowed from namefield module |
| 76 | //----------allow content type creator to determine which fields are required----------- |
| 77 | $required_default = array(); |
| 78 | if (is_array($field['required_parts'])) { |
| 79 | foreach ($field['required_parts'] as $part => $required) { |
| 80 | if ($required) { $required_default[] = $part; } |
| 81 | } // foreach possibly-required part |
| 82 | } else { |
| 83 | $required_default = array('legal_first', 'legal_last'); |
| 84 | } // if we can make up our own defaults |
| 85 | |
| 86 | $form['required'] = array( |
| 87 | '#type' => 'fieldset', |
| 88 | '#weight' => 3, |
| 89 | '#collapsible' => TRUE, |
| 90 | '#collapsed' => TRUE, |
| 91 | '#title' => t("Required Parts"), |
| 92 | ); |
| 93 | $form['required']['required_parts'] = array( |
| 94 | '#type' => 'checkboxes', |
| 95 | '#title' => t("Required Parts"), |
| 96 | '#description' => t("Choose which of these components should be required. |
| 97 | Only applies if you chose the field in the above <em>Legal name</em> or <em>Preferred name</em> sections, |
| 98 | either <strong>Required</strong>, or <strong>Optional</strong>. (Ex. 1) If you <strong>Require</strong> |
| 99 | Legal names, then the fields checked here will be a part of that requirement. Unchecked fields will be optional |
| 100 | if you elected to use them above. |
| 101 | (Ex. 2) If Preferred names are <strong>Optional</strong>, then all fields are optional until one is filled in, |
| 102 | then those checked here are required. Unchecked fields would still be optional. This will |
| 103 | prevent the entering of partial/incomplete names."), |
| 104 | '#default_value' => $required_default, |
| 105 | '#options' => array( |
| 106 | 'legal_prefix' => t("Legal Prefix"), |
| 107 | 'legal_first' => t("Legal First"), |
| 108 | 'legal_middle' => t("Legal Middle"), |
| 109 | 'legal_last' => t("Legal Last"), |
| 110 | 'legal_suffix' => t("Legal Suffix"), |
| 111 | 'preferred_prefix' => t("Preferred Prefix"), |
| 112 | 'preferred_first' => t("Preferred First"), |
| 113 | 'preferred_middle' => t("Preferred Middle"), |
| 114 | 'preferred_last' => t("Preferred Last"), |
| 115 | 'preferred_suffix' => t("Preferred Suffix"), |
| 116 | ), |
| 117 | ); |
| 118 | |
| 119 | //----------allow content type creator to determine which legal name fields to use----------- |
| 120 | $legal_default = array(); |
| 121 | if (is_array($field['legalname'])) { |
| 122 | foreach ($field['legalname'] as $part => $legal) { |
| 123 | if ($legal) { $legal_default[] = $part; } |
| 124 | } // foreach possibly-legal part |
| 125 | } else { |
| 126 | $legal_default = array('legal_first', 'legal_middle', 'legal_last'); |
| 127 | } // if we can make up our own default |
| 128 | |
| 129 | $form['legal_name'] = array( |
| 130 | '#type' => 'fieldset', |
| 131 | '#weight' => 2, |
| 132 | '#collapsible' => TRUE, |
| 133 | '#collapsed' => TRUE, |
| 134 | '#title' => t('Legal Name'), |
| 135 | ); |
| 136 | $form['legal_name']['use_legalname'] = array( |
| 137 | '#type' => 'radios', |
| 138 | '#title' => t('Use legal name?'), |
| 139 | '#description' => t("Check how legal names should be used. The legal name is the default name when only one is needed."), |
| 140 | '#required' => TRUE, |
| 141 | '#default_value' => isset($field['use_legalname']) ? $field['use_legalname'] : 'legal_require', |
| 142 | '#options' => array( |
| 143 | 'legal_require' => t("Required"), |
| 144 | 'legal_optional' => t("Optional"), |
| 145 | ), |
| 146 | ); |
| 147 | $form['legal_name']['legalname'] = array( |
| 148 | '#type' => 'checkboxes', |
| 149 | '#title' => t('Legal name'), |
| 150 | '#description' => t("Check which of these fields should be available for legal names."), |
| 151 | '#required' => TRUE, |
| 152 | '#default_value' => $legal_default, |
| 153 | '#options' => array( |
| 154 | 'legal_prefix' => t("Prefix"), |
| 155 | 'legal_first' => t("First"), |
| 156 | 'legal_middle' => t("Middle"), |
| 157 | 'legal_last' => t("Last"), |
| 158 | 'legal_suffix' => t("Suffix"), |
| 159 | ), |
| 160 | ); |
| 161 | //end borrowed section |
| 162 | |
| 163 | //similar to copied section |
| 164 | //----------allow content type creator to determine which preferred name fields to use----------- |
| 165 | $preferred_default = array(); |
| 166 | if (is_array($field['preferredname'])) { |
| 167 | foreach ($field['preferredname'] as $part => $preferred) { |
| 168 | if ($preferred) { $preferred_default[] = $part; } |
| 169 | } // foreach possibly-legal part |
| 170 | } else { |
| 171 | $preferred_default = array('preferred_first', 'preferred_middle', 'preferred_last'); |
| 172 | } // if we can make up our own default |
| 173 | |
| 174 | $form['preferred_name'] = array( |
| 175 | '#type' => 'fieldset', |
| 176 | '#weight' => 2, |
| 177 | '#collapsible' => TRUE, |
| 178 | '#collapsed' => TRUE, |
| 179 | '#title' => t('Preferred Name'), |
| 180 | ); |
| 181 | $form['preferred_name']['use_preferredname'] = array( |
| 182 | '#type' => 'radios', |
| 183 | '#title' => t('Use preferred name?'), |
| 184 | '#description' => t("Check how preferred names should be used."), |
| 185 | '#required' => TRUE, |
| 186 | '#default_value' => isset($field['use_preferredname']) ? $field['use_preferredname'] : 'preferred_optional', |
| 187 | '#options' => array( |
| 188 | 'preferred_require' => t("Required"), |
| 189 | 'preferred_optional' => t("Optional"), |
| 190 | 'preferred_hide' => t("Don't use"), |
| 191 | ), |
| 192 | ); |
| 193 | $form['preferred_name']['preferredname'] = array( |
| 194 | '#type' => 'checkboxes', |
| 195 | '#title' => t('Preferred Name'), |
| 196 | '#description' => t("Check which of these fields should be available for preferred names."), |
| 197 | '#required' => TRUE, |
| 198 | '#default_value' => $preferred_default, |
| 199 | '#options' => array( |
| 200 | 'preferred_prefix' => t("Prefix"), |
| 201 | 'preferred_first' => t("First"), |
| 202 | 'preferred_middle' => t("Middle"), |
| 203 | 'preferred_last' => t("Last"), |
| 204 | 'preferred_suffix' => t("Suffix"), |
| 205 | ), |
| 206 | ); |
| 207 | |
| 208 | $form['note'] = array( |
| 209 | '#type' => 'item', |
| 210 | '#title' => t('Notes'), |
| 211 | '#weight' => -1, |
| 212 | '#description' => t('In the "Help text" field above, cut and paste the following: Notice the stars indicating what is required. |
| 213 | 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. |
| 214 | 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 |
| 215 | 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 |
| 216 | names, names after the first set are always optional, but their fields will follow the same rules as optional names already explained.'), |
| 217 | ); |
| 218 | |
| 219 | $form['middle_initial'] = array(//TODO remove this because with the ability to specify the field length, this is redundant |
| 220 | '#type' => 'checkbox', |
| 221 | '#title' => t('Use middle initial only?'), |
| 222 | '#default_value' => isset($field['middle_initial']) ? $field['middle_initial'] : 1, |
| 223 | '#return_value' => 1, |
| 224 | '#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.'), |
| 225 | ); |
| 226 | |
| 227 | //-------------specify maximum lengths for each field------------------------ |
| 228 | $form['max_lengths_legal'] = array( |
| 229 | '#type' => 'fieldset', |
| 230 | '#weight' => 4, |
| 231 | '#title' => t('Legal name maximum field lengths'), |
| 232 | '#collapsible' => TRUE, |
| 233 | '#collapsed' => TRUE, |
| 234 | ); |
| 235 | $form['max_lengths_legal']['max_length_prefix_legal'] = array( |
| 236 | '#type' => 'textfield', |
| 237 | '#title' => t('Prefix maximum length'), |
| 238 | '#size' => 1, |
| 239 | '#default_value' => isset($field['max_length_prefix_legal']) ? $field['max_length_prefix_legal'] : '', |
| 240 | '#required' => FALSE, |
| 241 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 242 | ); |
| 243 | $form['max_lengths_legal']['max_length_first_legal'] = array( |
| 244 | '#type' => 'textfield', |
| 245 | '#title' => t('First name maximum length'), |
| 246 | '#size' => 6, |
| 247 | '#default_value' => isset($field['max_length_first_legal']) ? $field['max_length_first_legal'] : '', |
| 248 | '#required' => FALSE, |
| 249 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 250 | ); |
| 251 | $form['max_lengths_legal']['max_length_middle_legal'] = array( |
| 252 | '#type' => 'textfield', |
| 253 | '#title' => t('Middle name maximum length'), |
| 254 | '#size' => 6, |
| 255 | '#required' => FALSE, |
| 256 | '#description' => t('The maximum length of the field in characters (unless Middle Initial is used instead). Leave blank for an unlimited size.'), |
| 257 | ); |
| 258 | if ($field['middle_initial'] == 1) { |
| 259 | $form['max_lengths_legal']['max_length_middle_legal']['#default_value'] = 1; |
| 260 | } |
| 261 | else { |
| 262 | $form['max_lengths_legal']['max_length_middle_legal']['#default_value'] = isset($field['max_length_middle_legal']) ? $field['max_length_middle_legal'] : ''; |
| 263 | } |
| 264 | $form['max_lengths_legal']['max_length_last_legal'] = array( |
| 265 | '#type' => 'textfield', |
| 266 | '#title' => t('Last name maximum length'), |
| 267 | '#size' => 6, |
| 268 | '#default_value' => isset($field['max_length_last_legal']) ? $field['max_length_last_legal'] : '', |
| 269 | '#required' => FALSE, |
| 270 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 271 | ); |
| 272 | $form['max_lengths_legal']['max_length_suffix_legal'] = array( |
| 273 | '#type' => 'textfield', |
| 274 | '#title' => t('Suffix maximum length'), |
| 275 | '#size' => 1, |
| 276 | '#default_value' => isset($field['max_length_suffix_legal']) ? $field['max_length_suffix_legal'] : '', |
| 277 | '#required' => FALSE, |
| 278 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 279 | ); |
| 280 | |
| 281 | $form['max_lengths_preferred'] = array( |
| 282 | '#type' => 'fieldset', |
| 283 | '#weight' => 4, |
| 284 | '#title' => t('Preferred name maximum field lengths'), |
| 285 | '#collapsible' => TRUE, |
| 286 | '#collapsed' => TRUE, |
| 287 | ); |
| 288 | $form['max_lengths_preferred']['max_length_prefix_preferred'] = array( |
| 289 | '#type' => 'textfield', |
| 290 | '#title' => t('Prefix maximum length'), |
| 291 | '#size' => 1, |
| 292 | '#default_value' => isset($field['max_length_prefix_preferred']) ? $field['max_length_prefix_preferred'] : '', |
| 293 | '#required' => FALSE, |
| 294 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 295 | ); |
| 296 | $form['max_lengths_preferred']['max_length_first_preferred'] = array( |
| 297 | '#type' => 'textfield', |
| 298 | '#title' => t('First name maximum length'), |
| 299 | '#size' => 6, |
| 300 | '#default_value' => isset($field['max_length_first_preferred']) ? $field['max_length_first_preferred'] : '', |
| 301 | '#required' => FALSE, |
| 302 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 303 | ); |
| 304 | $form['max_lengths_preferred']['max_length_middle_preferred'] = array( |
| 305 | '#type' => 'textfield', |
| 306 | '#title' => t('Middle name maximum length'), |
| 307 | '#size' => 6, |
| 308 | '#required' => FALSE, |
| 309 | '#description' => t('The maximum length of the field in characters (unless Middle Initial is used instead). Leave blank for an unlimited size.'), |
| 310 | ); |
| 311 | if ($field['middle_initial'] == 1) { |
| 312 | $form['max_lengths_preferred']['max_length_middle_preferred']['#default_value'] = 1; |
| 313 | } |
| 314 | else { |
| 315 | $form['max_lengths_preferred']['max_length_middle_preferred']['#default_value'] = isset($field['max_length_middle_preferred']) ? $field['max_length_middle_preferred'] : ''; |
| 316 | } |
| 317 | $form['max_lengths_preferred']['max_length_last_preferred'] = array( |
| 318 | '#type' => 'textfield', |
| 319 | '#title' => t('Last name maximum length'), |
| 320 | '#size' => 6, |
| 321 | '#default_value' => isset($field['max_length_last_preferred']) ? $field['max_length_last_preferred'] : '', |
| 322 | '#required' => FALSE, |
| 323 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 324 | ); |
| 325 | $form['max_lengths_preferred']['max_length_suffix_preferred'] = array( |
| 326 | '#type' => 'textfield', |
| 327 | '#title' => t('Suffix maximum length'), |
| 328 | '#size' => 1, |
| 329 | '#default_value' => isset($field['max_length_suffix_preferred']) ? $field['max_length_suffix_preferred'] : '', |
| 330 | '#required' => FALSE, |
| 331 | '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'), |
| 332 | ); |
| 333 | |
| 334 | return $form; |
| 335 | |
| 336 | case 'save': |
| 337 | return array( |
| 338 | 'required_parts', |
| 339 | 'use_legalname', |
| 340 | 'legalname', |
| 341 | 'use_preferredname', |
| 342 | 'preferredname', |
| 343 | 'middle_initial', |
| 344 | 'max_length_prefix_legal', |
| 345 | 'max_length_first_legal', |
| 346 | 'max_length_middle_legal', |
| 347 | 'max_length_last_legal', |
| 348 | 'max_length_suffix_legal', |
| 349 | 'max_length_prefix_preferred', |
| 350 | 'max_length_first_preferred', |
| 351 | 'max_length_middle_preferred', |
| 352 | 'max_length_last_preferred', |
| 353 | 'max_length_suffix_preferred', |
| 354 | ); |
| 355 | |
| 356 | case 'database columns': |
| 357 | $columns = array( |
| 358 | 'last' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 359 | 'first' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 360 | 'middle' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 361 | 'prefix' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 362 | 'suffix' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 363 | 'last_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 364 | 'first_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 365 | 'middle_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 366 | 'prefix_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 367 | 'suffix_preferred' => array('type' => 'varchar', 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), |
| 368 | ); |
| 369 | //adjust field lengths based on settings for legal names |
| 370 | if ($field['max_lengths_legal']['max_length_prefix_legal'] == 0 || $field['max_lengths_legal']['max_length_prefix_legal'] > 255) { |
| 371 | $columns['prefix']['type'] = 'longtext'; |
| 372 | } |
| 373 | else { |
| 374 | $columns['prefix']['length'] = $field['max_lengths_legal']['max_length_prefix_legal']; |
| 375 | } |
| 376 | if ($field['max_lengths_legal']['max_length_first_legal'] == 0 || $field['max_lengths_legal']['max_length_first_legal'] > 255) { |
| 377 | $columns['first']['type'] = 'longtext'; |
| 378 | } |
| 379 | else { |
| 380 | $columns['first']['length'] = $field['max_lengths_legal']['max_length_first_legal']; |
| 381 | } |
| 382 | if (($field['max_lengths_legal']['max_length_middle_legal'] == 0 || $field['max_lengths_legal']['max_length_middle_legal'] > 255) && ($field['middle_initial'] != 1)) { |
| 383 | $columns['middle']['type'] = 'longtext'; |
| 384 | } |
| 385 | elseif ($field['middle_initial'] == 1) { |
| 386 | $columns['middle']['length'] = 1; |
| 387 | } |
| 388 | else { |
| 389 | $columns['middle']['length'] = $field['max_lengths_legal']['max_length_middle_legal']; |
| 390 | } |
| 391 | if ($field['max_lengths_legal']['max_length_last_legal'] == 0 || $field['max_lengths_legal']['max_length_last_legal'] > 255) { |
| 392 | $columns['last']['type'] = 'longtext'; |
| 393 | } |
| 394 | else { |
| 395 | $columns['last']['length'] = $field['max_lengths_legal']['max_length_last_legal']; |
| 396 | } |
| 397 | if ($field['max_lengths_legal']['max_length_suffix_legal'] == 0 || $field['max_lengths_legal']['max_length_suffix_legal'] > 255) { |
| 398 | $columns['suffix']['type'] = 'longtext'; |
| 399 | } |
| 400 | else { |
| 401 | $columns['suffix']['length'] = $field['max_lengths_legal']['max_length_suffix_legal']; |
| 402 | } |
| 403 | |
| 404 | //adjust field lengths based on settings for preferred names |
| 405 | if ($field['max_lengths_preferred']['max_length_prefix_preferred'] == 0 || $field['max_lengths_preferred']['max_length_prefix_preferred'] > 255) { |
| 406 | $columns['prefix_preferred']['type'] = 'longtext'; |
| 407 | } |
| 408 | else { |
| 409 | $columns['prefix_preferred']['length'] = $field['max_lengths_preferred']['max_length_prefix_preferred']; |
| 410 | } |
| 411 | if ($field['max_lengths_preferred']['max_length_first_preferred'] == 0 || $field['max_lengths_preferred']['max_length_first_preferred'] > 255) { |
| 412 | $columns['first_preferred']['type'] = 'longtext'; |
| 413 | } |
| 414 | else { |
| 415 | $columns['first_preferred']['length'] = $field['max_lengths_preferred']['max_length_first_preferred']; |
| 416 | } |
| 417 | if (($field['max_lengths_preferred']['max_length_middle_preferred'] == 0 || $field['max_lengths_preferred']['max_length_middle_preferred'] > 255) && ($field['middle_initial'] != 1)) { |
| 418 | $columns['middle_preferred']['type'] = 'longtext'; |
| 419 | } |
| 420 | elseif ($field['middle_initial'] == 1) { |
| 421 | $columns['middle_preferred']['length'] = 1; |
| 422 | } |
| 423 | else { |
| 424 | $columns['middle_preferred']['length'] = $field['max_lengths_preferred']['max_length_middle_preferred']; |
| 425 | } |
| 426 | if ($field['max_lengths_preferred']['max_length_last_preferred'] == 0 || $field['max_lengths_preferred']['max_length_last_preferred'] > 255) { |
| 427 | $columns['last_preferred']['type'] = 'longtext'; |
| 428 | } |
| 429 | else { |
| 430 | $columns['last_preferred']['length'] = $field['max_lengths_preferred']['max_length_last_preferred']; |
| 431 | } |
| 432 | if ($field['max_lengths_preferred']['max_length_suffix_preferred'] == 0 || $field['max_lengths_preferred']['max_length_suffix_preferred'] > 255) { |
| 433 | $columns['suffix_preferred']['type'] = 'longtext'; |
| 434 | } |
| 435 | else { |
| 436 | $columns['suffix_preferred']['length'] = $field['max_lengths_preferred']['max_length_suffix_preferred']; |
| 437 | } |
| 438 | return $columns; |
| 439 | |
| 440 | case 'filters': |
| 441 | return array( |
| 442 | 'default' => array( |
| 443 | 'operator' => 'views_handler_operator_like', |
| 444 | 'handler' => 'views_handler_filter_like', |
| 445 | ), |
| 446 | ); |
| 447 | |
| 448 | case 'callbacks'://pairs up with cck_fullname_field::view |
| 449 | return array( |
| 450 | 'view' => CONTENT_CALLBACK_CUSTOM, |
| 451 | ); |
| 452 | } |
| 453 | } // function cck_fullname_field_settings() |
| 454 | |
| 455 | /** |
| 456 | * Implementation of hook_field(). |
| 457 | * |
| 458 | * Validate the user's input. At present, only English alphabetic characters |
| 459 | * are valid. Would like to add support for other languages. |
| 460 | * Or present the data for viewing. |
| 461 | * @param $op |
| 462 | * What kind of action is being performed. |
| 463 | * @param &$node |
| 464 | * The node the action is being performed on. |
| 465 | * @param $field |
| 466 | * The field the action is being performed on. |
| 467 | * @param &$node_field |
| 468 | * The contents of the field in this node. Changes to this variable will |
| 469 | * be saved back to the node object. |
| 470 | * @return |
| 471 | * This varies depending on the operation. |
| 472 | * - The "load" operation should return an object containing extra values |
| 473 | * to be merged into the node object. |
| 474 | * - The "view" operation should return a string containing an HTML |
| 475 | * representation of the field data. |
| 476 | * - The "insert", "update", "delete", "validate", and "submit" operations |
| 477 | * have no return value. |
| 478 | */ |
| 479 | function cck_fullname_field($op, &$node, $field, &$items, $teaser, $page) { |
| 480 | switch ($op) { |
| 481 | case 'submit': |
| 482 | $info = content_database_info($field['field_name']); |
| 483 | break; |
| 484 | case 'validate': |
| 485 | //validate field lengths |
| 486 | //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 |
| 487 | if ($field['max_lengths_legal']['max_length_prefix_legal'] > 0) { |
| 488 | foreach ($items as $delta => $data) { |
| 489 | $error_field_prefix = $field['field_name']. '][' .$delta. '][prefix'; |
| 490 | if (strlen($data['prefix']) > $field['max_lengths_legal']['max_length_prefix_legal']) { |
| 491 | 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']))); |
| 492 | } |
| 493 | } |
| 494 | } |
| 495 | if ($field['max_lengths_legal']['max_length_first_legal'] > 0) { |
| 496 | foreach ($items as $delta => $data) { |
| 497 | $error_field_first = $field['field_name']. '][' .$delta. '][first'; |
| 498 | if (strlen($data['first']) > $field['max_lengths_legal']['max_length_first_legal']) { |
| 499 | 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']))); |
| 500 | } |
| 501 | } |
| 502 | } |
| 503 | if ($field['max_lengths_legal']['max_length_middle_legal'] > 0) { |
| 504 | foreach ($items as $delta => $data) { |
| 505 | $error_field_middle = $field['field_name']. '][' .$delta. '][middle'; |
| 506 | if (strlen($data['middle']) > $field['max_lengths_legal']['max_length_middle_legal']) { |
| 507 | 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']))); |
| 508 | } |
| 509 | } |
| 510 | } |
| 511 | if ($field['max_lengths_legal']['max_length_last_legal'] > 0) { |
| 512 | foreach ($items as $delta => $data) { |
| 513 | $error_field_last = $field['field_name']. '][' .$delta. '][last'; |
| 514 | if (strlen($data['last']) > $field['max_lengths_legal']['max_length_last_legal']) { |
| 515 | 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']))); |
| 516 | } |
| 517 | } |
| 518 | } |
| 519 | if ($field['max_lengths_legal']['max_length_suffix_legal'] > 0) { |
| 520 | foreach ($items as $delta => $data) { |
| 521 | $error_field_suffix = $field['field_name']. '][' .$delta. '][suffix'; |
| 522 | if (strlen($data['suffix']) > $field['max_lengths_legal']['max_length_suffix_legal']) { |
| 523 | 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']))); |
| 524 | } |
| 525 | } |
| 526 | } |
| 527 | |
| 528 | //validate the preferred name field lengths |
| 529 | if ($field['max_lengths_preferred']['max_length_prefix_preferred'] > 0) { |
| 530 | foreach ($items as $delta => $data) { |
| 531 | $error_field_prefix_preferred = $field['field_name']. '][' .$delta. '][prefix_preferred'; |
| 532 | if (strlen($data['prefix_preferred']) > $field['max_lengths_preferred']['max_length_prefix_preferred']) { |
| 533 | 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']))); |
| 534 | } |
| 535 | } |
| 536 | } |
| 537 | if ($field['max_lengths_preferred']['max_length_first_preferred'] > 0) { |
| 538 | foreach ($items as $delta => $data) { |
| 539 | $error_field_first_preferred = $field['field_name']. '][' .$delta. '][first_preferred'; |
| 540 | if (strlen($data['first_preferred']) > $field['max_lengths_preferred']['max_length_first_preferred']) { |
| 541 | 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']))); |
| 542 | } |
| 543 | } |
| 544 | } |
| 545 | if ($field['max_lengths_preferred']['max_length_middle_preferred'] > 0) { |
| 546 | foreach ($items as $delta => $data) { |
| 547 | $error_field_middle_preferred = $field['field_name']. '][' .$delta. '][middle_preferred'; |
| 548 | if (strlen($data['middle_preferred']) > $field['max_lengths_preferred']['max_length_middle_preferred']) { |
| 549 | 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']))); |
| 550 | } |
| 551 | } |
| 552 | } |
| 553 | if ($field['max_lengths_preferred']['max_length_last_preferred'] > 0) { |
| 554 | foreach ($items as $delta => $data) { |
| 555 | $error_field_last_preferred = $field['field_name']. '][' .$delta. '][last_preferred'; |
| 556 | if (strlen($data['last_preferred']) > $field['max_lengths_preferred']['max_length_last_preferred']) { |
| 557 | 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']))); |
| 558 | } |
| 559 | } |
| 560 | } |
| 561 | if ($field['max_lengths_preferred']['max_length_suffix_preferred'] > 0) { |
| 562 | foreach ($items as $delta => $data) { |
| 563 | $error_field_suffix_preferred = $field['field_name']. '][' .$delta. '][suffix_preferred'; |
| 564 | if (strlen($data['suffix_preferred']) > $field['max_lengths_preferred']['max_length_suffix_preferred']) { |
| 565 | 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']))); |
| 566 | } |
| 567 | } |
| 568 | } |
| 569 | |
| 570 | //validate required-ness of fields |
| 571 | foreach ($items as $delta => $data) { |
| 572 | if (is_numeric($delta)) { |
| 573 | //deal with legal name fields |
| 574 | if (($field['use_legalname'] == 'legal_require') || ($field['use_legalname'] == 'legal_optional')) { |
| 575 | $legal_empty = (empty($data['prefix']) && empty($data['first']) && empty($data['middle']) && empty($data['last']) && empty($data['suffix'])); |
| 576 | if (!$legal_empty) { |
| 577 | if (empty($data['prefix']) && $field['required_parts']['legal_prefix'] === 'legal_prefix' && !empty($field['legalname']['legal_prefix'])) { |
| 578 | $error_field_prefix = $field['field_name']. '][' .$delta. '][prefix'; |
| 579 | form_set_error($error_field_prefix, t('Prefix field is required.')); |
| 580 | } |
| 581 | if (empty($data['first']) && $field['required_parts']['legal_first'] === 'legal_first' && !empty($field['legalname']['legal_first'])) { |
| 582 | $error_field_first = $field['field_name']. '][' .$delta. '][first'; |
| 583 | form_set_error($error_field_first, t('First name field is required.')); |
| 584 | } |
| 585 | if (empty($data['middle']) && $field['required_parts']['legal_middle'] === 'legal_middle' && !empty($field['legalname']['legal_middle'])) { |
| 586 | $error_field_middle = $field['field_name']. '][' .$delta. '][middle'; |
| 587 | form_set_error($error_field_middle, t('Middle name field is required.')); |
| 588 | } |
| 589 | if (empty($data['last']) && $field['required_parts']['legal_last'] === 'legal_last' && !empty($field['legalname']['legal_last'])) { |
| 590 | $error_field_last = $field['field_name']. '][' .$delta. '][last'; |
| 591 | form_set_error($error_field_last, t('Last name field is required.')); |
| 592 | } |
| 593 | if (empty($data['suffix']) && $field['required_parts']['legal_suffix'] === 'legal_suffix' && !empty($field['legalname']['legal_suffix'])) { |
| 594 | $error_field_suffix = $field['field_name']. '][' .$delta. '][suffix'; |
| 595 | form_set_error($error_field_suffix, t('Suffix field is required.')); |
| 596 | } |
| 597 | } |
| 598 | elseif ($field['use_legalname'] == 'legal_require') { |
| 599 | form_set_error($field['field_name']. '][' .$delta. ']', t('Legal name field is required.')); |
| 600 | } |
| 601 | } |
| 602 | |
| 603 | //deal with preferred name fields |
| 604 | if (($field['use_preferredname'] == 'preferred_require') || ($field['use_preferredname'] == 'preferred_optional')) { |
| 605 | $preferred_empty = (empty($data['prefix_preferred']) && empty($data['first_preferred']) && empty($data['middle_preferred']) && empty($data['last_preferred']) && empty($data['suffix_preferred'])); |
| 606 | if (!$preferred_empty) { |
| 607 | if (empty($data['prefix_preferred']) && $field['required_parts']['preferred_prefix'] === 'preferred_prefix' && !empty($field['preferredname']['preferred_prefix'])) { |
| 608 | $error_field_prefix_preferred = $field['field_name']. '][' .$delta. '][prefix_preferred'; |
| 609 | form_set_error($error_field_prefix_preferred, t('Prefix field is required.')); |
| 610 | } |
| 611 | if (empty($data['first_preferred']) && $field['required_parts']['preferred_first'] === 'preferred_first' && !empty($field['preferredname']['preferred_first'])) { |
| 612 | $error_field_first_preferred = $field['field_name']. '][' .$delta. '][first_preferred'; |
| 613 | form_set_error($error_field_first_preferred, t('First name field is required.')); |
| 614 | } |
| 615 | if (empty($data['middle_preferred']) && $field['required_parts']['preferred_middle'] === 'preferred_middle' && !empty($field['preferredname']['preferred_middle'])) { |
| 616 | $error_field_middle_preferred = $field['field_name']. '][' .$delta. '][middle_preferred'; |
| 617 | form_set_error($error_field_middle_preferred, t('Middle name field is required.')); |
| 618 | } |
| 619 | if (empty($data['last_preferred']) && $field['required_parts']['preferred_last'] === 'preferred_last' && !empty($field['preferredname']['preferred_last'])) { |
| 620 | $error_field_last_preferred = $field['field_name']. '][' .$delta. '][last_preferred'; |
| 621 | form_set_error($error_field_last_preferred, t('Last name field is required.')); |
| 622 | } |
| 623 | if (empty($data['suffix_preferred']) && $field['required_parts']['preferred_suffix'] === 'preferred_suffix' && !empty($field['preferredname']['preferred_suffix'])) { |
| 624 | $error_field_suffix_preferred = $field['field_name']. '][' .$delta. '][suffix_preferred'; |
| 625 | form_set_error($error_field_suffix_preferred, t('Suffix field is required.')); |
| 626 | } |
| 627 | } |
| 628 | elseif ($field['use_preferredname'] == 'preferred_require') { |
| 629 | form_set_error($field['field_name']. '][' .$delta. ']', t('Preferred name field is required.')); |
| 630 | } |
| 631 | } |
| 632 | } |
| 633 | } |
| 634 | break; |
| 635 | |
| 636 | case 'view': |
| 637 | $context = $teaser ? 'teaser' : 'full'; |
| 638 | $formatter = isset($field['display_settings'][$context]['format']) ? $field['display_settings'][$context]['format'] : 'default'; |
| 639 | foreach ($items as $delta => $item) { |
| 640 | $items[$delta]['view'] = content_format($field, $item, $formatter, $node); |
| 641 | } |
| 642 | return theme('field', $node, $field, $items, $teaser, $page); |
| 643 | } |
| 644 | } // function cck_fullname_field() |
| 645 | |
| 646 | /** |
| 647 | * Implementation of hook_field_formatter_info(). |
| 648 | */ |
| 649 | function cck_fullname_field_formatter_info() { |
| 650 | return array( |
| 651 | 'default' => array( |
| 652 | 'label' => t('Default, prefix first middle last suffix'), |
| 653 | 'field types' => array('cck_fullname'), |
| 654 | ), |
| 655 | 'last_name_only' => array( |
| 656 | 'label' => t('Last name only'), |
| 657 | 'field types' => array('cck_fullname'), |
| 658 | ), |
| 659 | 'first_name_only' => array( |
| 660 | 'label' => t('First name only'), |
| 661 | 'field types' => array('cck_fullname'), |
| 662 | ), |
| 663 | 'last_name_first' => array( |
| 664 | 'label' => t('Last, first middle'), |
| 665 | 'field types' => array('cck_fullname'), |
| 666 | ), |
| 667 | ); |
| 668 | } // function cck_fullname_field_formatter_info() |
| 669 | |
| 670 | /** |
| 671 | * Implemetation of hook_field_formatter(). |
| 672 | * |
| 673 | * Here we format the data for display and make sure it is plain text. It should be as |
| 674 | * elsewhere it was validated as alphabetic characters only. |
| 675 | * We also check the length of each name and if it's only one character, place a period |
| 676 | * after it. Primarily this is for people who go by two initials, or who use an initial |
| 677 | * for their first name, but not middle. |
| 678 | * The $node argument is necessary so that filter access can be checked on |
| 679 | * node preview. |
| 680 | * @param $field |
| 681 | * The field the action is being performed on. |
| 682 | * @param $item |
| 683 | * An array, keyed by column, of the data stored for this item in this field. |
| 684 | * @param $formatter |
| 685 | * The name of the formatter being used to display the field. In our case, we name |
| 686 | * it directly, rather than send it through content_format() and therefore we don't |
| 687 | * use hook_field_formatter_info either. |
| 688 | * @param $node |
| 689 | * The node object, for context. Will be NULL in some cases. |
| 690 | * Warning : when displaying field retrieved by Views, $node will not |
| 691 | * be a "full-fledged" node object, but an object containg the data returned |
| 692 | * by the Views query (at least nid, vid, changed) |
| 693 | * @return |
| 694 | * An HTML string containing the formatted item. |
| 695 | */ |
| 696 | function cck_fullname_field_formatter($field, $item, $formatter, $node) { |
| 697 | $output = ''; |
| 698 | if (!key_exists('prefix', $item)) { |
| 699 | return ''; |
| 700 | } |
| 701 | switch ($formatter) { |
| 702 | case 'default': |
| 703 | //check and clean the values for output |
| 704 | if (!empty($item['prefix'])) { |
| 705 | $cck_legalname['prefix'] = strip_tags($item['prefix']); |
| 706 | } |
| 707 | if (!empty($item['first'])) { |
| 708 | $cck_legalname['first'] = strip_tags($item['first']); |
| 709 | } |
| 710 | if (!empty($item['middle'])) { |
| 711 | $cck_legalname['middle'] = strip_tags($item['middle']); |
| 712 | } |
| 713 | if (!empty($item['last'])) { |
| 714 | $cck_legalname['last'] = strip_tags($item['last']); |
| 715 | } |
| 716 | if (!empty($item['suffix'])) { |
| 717 | $cck_legalname['suffix'] = strip_tags($item['suffix']); |
| 718 | } |
| 719 | if (!empty($cck_legalname)) { |
| 720 | $output .= t('Legal name: '). theme('cck_fullname', $cck_legalname, $field); |
| 721 | } |
| 722 | if (!empty($item['prefix_preferred'])) { |
| 723 | $cck_preferredname['prefix'] = strip_tags($item['prefix_preferred']); |
| 724 | } |
| 725 | if (!empty($item['first_preferred'])) { |
| 726 | $cck_preferredname['first'] = strip_tags($item['first_preferred']); |
| 727 | } |
| 728 | if (!empty($item['middle_preferred'])) { |
| 729 | $cck_preferredname['middle'] = strip_tags($item['middle_preferred']); |
| 730 | } |
| 731 | if (!empty($item['last_preferred'])) { |
| 732 | $cck_preferredname['last'] = strip_tags($item['last_preferred']); |
| 733 | } |
| 734 | if (!empty($item['suffix_preferred'])) { |
| 735 | $cck_preferredname['suffix'] = strip_tags($item['suffix_preferred']); |
| 736 | } |
| 737 | if (!empty($cck_preferredname)) {//if there is a preferred name, print it instead of the legal name (overwrite $output) |
| 738 | $output = t('Preferred name: '). theme('cck_fullname', $cck_preferredname, $field); |
| 739 | } |
| 740 | return $output; |
| 741 | case 'last_name_only'://output legal last name |
| 742 | //check and clean the values for output |
| 743 | if (isset($item['last'])) { |
| 744 | $cck_fullname['last'] = strip_tags($item['last']); |
| 745 | } |
| 746 | $output .= theme('cck_fullname', $cck_fullname, $field); |
| 747 | return $output; |
| 748 | case 'first_name_only'://output preferred first name |
| 749 | //check and clean the values for output |
| 750 | if (isset($item['first_preferred'])) { |
| 751 | $cck_fullname['first_preferred'] = strip_tags($item['first_preferred']); |
| 752 | } |
| 753 | $output .= theme('cck_fullname', $cck_fullname, $field); |
| 754 | return $output; |
| 755 | case 'last_name_first': |
| 756 | //check and clean the values for output |
| 757 | if (!empty($item['prefix'])) { |
| 758 | $cck_legalname['prefix'] = strip_tags($item['prefix']); |
| 759 | } |
| 760 | if (!empty($item['first'])) { |
| 761 | $cck_legalname['first'] = strip_tags($item['first']); |
| 762 | } |
| 763 | if (!empty($item['middle'])) { |
| 764 | $cck_legalname['middle'] = strip_tags($item['middle']); |
| 765 | } |
| 766 | if (!empty($item['last'])) { |
| 767 | $cck_legalname['last'] = strip_tags($item['last']); |
| 768 | } |
| 769 | if (!empty($item['suffix'])) { |
| 770 | $cck_legalname['suffix'] = strip_tags($item['suffix']); |
| 771 | } |
| 772 | if (!empty($cck_legalname)) { |
| 773 | $output .= t('Legal name: '). theme('cck_fullname', $cck_legalname, $field, TRUE); |
| 774 | } |
| 775 | if (!empty($item['prefix_preferred'])) { |
| 776 | $cck_preferredname['prefix'] = strip_tags($item['prefix_preferred']); |
| 777 | } |
| 778 | if (!empty($item['first_preferred'])) { |
| 779 | $cck_preferredname['first'] = strip_tags($item['first_preferred']); |
| 780 | } |
| 781 | if (!empty($item['middle_preferred'])) { |
| 782 | $cck_preferredname['middle'] = strip_tags($item['middle_preferred']); |
| 783 | } |
| 784 | if (!empty($item['last_preferred'])) { |
| 785 | $cck_preferredname['last'] = strip_tags($item['last_preferred']); |
| 786 | } |
| 787 | if (!empty($item['suffix_preferred'])) { |
| 788 | $cck_preferredname['suffix'] = strip_tags($item['suffix_preferred']); |
| 789 | } |
| 790 | if (!empty($cck_preferredname)) {//if there is a preferred name, print it instead of the legal name (overwrite $output) |
| 791 | $output = t('Preferred name: '). theme('cck_fullname', $cck_preferredname, $field, TRUE); |
| 792 | } |
| 793 | return $output; |
| 794 | } |
| 795 | } // function cck_fullname_field_formatter() |
| 796 | |
| 797 | /** |
| 798 | * Theme for address display as called from cck_fullname_field_formatter(). |
| 799 | * |
| 800 | * @param array $cck_fullname |
| 801 | * @param array $field |
| 802 | * @param boolean $last_first TRUE if displayed last name first |
| 803 | * @return string $output |
| 804 | */ |
| 805 | function theme_cck_fullname($cck_fullname, $field, $last_first = FALSE) { |
| 806 | $output = ''; |
| 807 | //create the output |
| 808 | if ($last_first) { |
| 809 | if (isset($cck_fullname['last'])) { |
| 810 | $output .= $cck_fullname['last']; |
| 811 | if (strlen($cck_fullname['last']) == 1) $output .= '., '; |
| 812 | else $output .= ', '; |
| 813 | } |
| 814 | if (isset($cck_fullname['prefix'])) { |
| 815 | $output .= $cck_fullname['prefix']; |
| 816 | if (strlen($cck_fullname['prefix']) < 4) $output .= '. '; |
| 817 | else $output .= ' '; |
| 818 | } |
| 819 | if (isset($cck_fullname['first'])) { |
| 820 | $output .= $cck_fullname['first']; |
| 821 | if (strlen($cck_fullname['first']) == 1) $output .= '. '; |
| 822 | else $output .= ' '; |
| 823 | } |
| 824 | if (isset($cck_fullname['middle'])) { |
| 825 | $output .= $cck_fullname['middle']; |
| 826 | if ($field['middle_initial'] == 1) $output .= '. '; |
| 827 | else $output .= ', '; |
| 828 | } |
| 829 | if (isset($cck_fullname['suffix'])) { |
| 830 | $output .= $cck_fullname['suffix']; |
| 831 | if (strlen($cck_fullname['suffix']) < 4) $output .= '.'; |
| 832 | } |
| 833 | $output .= '<br />'; |
| 834 | } |
| 835 | else { |
| 836 | if (isset($cck_fullname['prefix'])) { |
| 837 | $output .= $cck_fullname['prefix']; |
| 838 | if (strlen($cck_fullname['prefix']) < 4) $output .= '. '; |
| 839 | else $output .= ' '; |
| 840 | } |
| 841 | if (isset($cck_fullname['first'])) { |
| 842 | $output .= $cck_fullname['first']; |
| 843 | if (strlen($cck_fullname['first']) == 1) $output .= '. '; |
| 844 | else $output .= ' '; |
| 845 | } |
| 846 | if (isset($cck_fullname['middle'])) { |
| 847 | $output .= $cck_fullname['middle']; |
| 848 | if ($field['middle_initial'] == 1) $output .= '. '; |
| 849 | else $output .= ' '; |
| 850 | } |
| 851 | if (isset($cck_fullname['last'])) { |
| 852 | $output .= $cck_fullname['last']; |
| 853 | if (strlen($cck_fullname['last']) == 1) $output .= '. '; |
| 854 | else $output .= ' '; |
| 855 | } |
| 856 | if (isset($cck_fullname['suffix'])) { |
| 857 | $output .= $cck_fullname['suffix']; |
| 858 | if (strlen($cck_fullname['suffix']) < 4) $output .= '.'; |
| 859 | } |
| 860 | $output .= '<br />'; |
| 861 | } |
| 862 | return $output; |
| 863 | } // function theme_cck_fullname() |
| 864 | |
| 865 | /** |
| 866 | * Implementation of hook_widget_info(). |
| 867 | * |
| 868 | * @return |
| 869 | * An array keyed by widget name. Each element of the array is an associative |
| 870 | * array with these keys and values: |
| 871 | * - "label": The human-readable label for the widget. |
| 872 | * - "field types": An array of field type names that can be edited using |
| 873 | * this widget. |
| 874 | */ |
| 875 | function cck_fullname_widget_info() { |
| 876 | return array( |
| 877 | 'cck_fullname' => array( |
| 878 | 'label' => 'Full Name', |
| 879 | 'field types' => array('cck_fullname'), |
| 880 | ), |
| 881 | ); |
| 882 | } // function cck_fullname_widget_info() |
| 883 | |
| 884 | /** |
| 885 | * Implementation of hook_widget_settings(). |
| 886 | * |
| 887 | * @param $op |
| 888 | * The operation to be performed. |
| 889 | * @param $widget |
| 890 | * The widget on which the operation is to be performed. |
| 891 | * @return |
| 892 | * This varies depending on the operation. |
| 893 | * - "form": an array of form elements to add to the settings page. |
| 894 | * - "validate": no return value. Use form_set_error(). |
| 895 | * - "save": an array of names of form elements to be saved in the database. |
| 896 | * - "callbacks": an array describing the widget's behaviour regarding hook_widget |
| 897 | * operations. The array is keyed by hook_widget operations ('form', 'validate'...) |
| 898 | * and has the following possible values : |
| 899 | * CONTENT_CALLBACK_NONE : do nothing for this operation |
| 900 | * CONTENT_CALLBACK_CUSTOM : use the behaviour in hook_widget(operation) |
| 901 | * CONTENT_CALLBACK_DEFAULT : use content.module's default bahaviour |
| 902 | * Note : currently only the 'default value' operation implements this feature. |
| 903 | * All other widget operation implemented by the module _will_ be executed |
| 904 | * no matter what. |
| 905 | */ |
| 906 | function cck_fullname_widget_settings($op, $widget) { |
| 907 | switch ($op) { |
| 908 | case 'callbacks': |
| 909 | return array( |
| 910 | 'default value' => CONTENT_CALLBACK_CUSTOM, |
| 911 | ); |
| 912 | } |
| 913 | } // function cck_fullname_widget_settings() |
| 914 | |
| 915 | /** |
| 916 | * Implementation of hook_widget(). |
| 917 | * |
| 918 | * Presently, we don't allow multiple values as people should only have one name. |
| 919 | * Also, we intercept the default value fields and unset() them as I couldn't think |
| 920 | * of a use case for pre-setting a person's name. We also use a little bit of CSS |
| 921 | * to render the form fields approximately the 'size' they've been specified in 'ems' |
| 922 | * as the 'size' was not being rendered in 'ems' but as some fraction thereof; this |
| 923 | * because a name with mostly wide letters wasn't all fitting in the display. |
| 924 | * @param $op |
| 925 | * What kind of action is being performed. |
| 926 | * @param &$node |
| 927 | * The node the action is being performed on. |
| 928 | * @param $field |
| 929 | * The field the action is being performed on. |
| 930 | * @param &$node_field |
| 931 | * The contents of the field in this node. Changes to this variable will |
| 932 | * be saved back to the node object. |
| 933 | * @return |
| 934 | * This varies depending on the operation. |
| 935 | * - The "form" operation should return an array of form elements to display. |
| 936 | * - Other operations have no return value. |
| 937 | */ |
| 938 | function cck_fullname_widget($op, &$node, $field, &$items) { |
| 939 | switch ($op) { |
| 940 | case 'form': |
| 941 | $form = array(); |
| 942 | $form[$field['field_name']] = array('#tree' => TRUE); |
| 943 | $form[$field['field_name']]['#theme'] = 'cck_fullname_display'; |
| 944 | |
| 945 | $form[$field['field_name']]['use_legalname'] = array( |
| 946 | '#type' => 'value', |
| 947 | '#value' => $field['use_legalname'], |
| 948 | ); |
| 949 | $form[$field['field_name']]['use_preferredname'] = array( |
| 950 | '#type' => 'value', |
| 951 | '#value' => $field['use_preferredname'], |
| 952 | ); |
| 953 | $form[$field['field_name']]['required_parts'] = array( |
| 954 | '#type' => 'value', |
| 955 | '#value' => $field['required_parts'], |
| 956 | ); |
| 957 | $form[$field['field_name']]['legalname'] = array( |
| 958 | '#type' => 'value', |
| 959 | '#value' => $field['legalname'], |
| 960 | ); |
| 961 | $form[$field['field_name']]['preferredname'] = array( |
| 962 | '#type' => 'value', |
| 963 | '#value' => $field['preferredname'], |
| 964 | ); |
| 965 | |
| 966 | $form[$field['field_name']]['#type'] = 'fieldset'; |
| 967 | $form[$field['field_name']]['#attributes'] = array('class' => 'cck-fullname-fieldset'); |
| 968 | $form[$field['field_name']]['#title'] = ucfirst(t($field['widget']['label'])); |
| 969 | $form[$field['field_name']]['#description'] = $field['widget']['description']; |
| 970 | $form[$field['field_name']]['#weight'] = $field['widget']['weight']; |
| 971 | if ($field['multiple']) { |
| 972 | $delta = 0; |
| 973 | foreach ($items as $data) { |
| 974 | if (isset($field['legalname']['legal_prefix'])) { |
| 975 | $form[$field['field_name']][$delta]['prefix'] = array( |
| 976 | '#type' => 'textfield', |
| 977 | '#default_value' => isset($data['prefix']) |