'select', '#title' => $title ? $title : t('Countries'), '#default_value' => $default_value, '#options' => $options, '#multiple' => $multiple, '#size' => $multiple ? min(5, count($options)) : 1, '#description' => $description, ); } /** * returns a form-structure filled with US states, useful in a select. * @param $title, the title of the form. Defaults to "States" (translated). If provided, it will not be translated * @param $default_value, the selected state. * @param $required, whether or not a "none" string should be included in the options. * @param $description, optionally provide a description. Is not translated. * @param $multiple, whether or not to allow multiple choices. * @return form element ready to add to form. */ function states_select_for_form($title = '', $default_value = NULL, $required = FALSE, $description = '', $multiple = false) { if ($required) { $options = _helpers_data_us_states_array(); } else { $options = add_none_to_options(_helpers_data_us_states_array()); } return array( '#type' => 'select', '#title' => $title ? $title : t('States'), '#default_value' => $default_value, '#options' => $options, '#multiple' => $multiple, '#size' => $multiple ? min(5, count($options)) : 1, '#description' => $description, ); } /** * Create a form-structure filled with month names, useful in a select. * @param $title, the title of the form. Defaults to "Month" (translated). If provided, it will not be translated. * @param $default_value, the selected month. Must be the number of the month. * @param $required, whether or not a "none" string should be included in the options. * @param $description, optionally provide a description. Is not translated. * @param $multiple, whether or not to allow multiple choices. * @return form element ready to add to form. */ function month_select_for_form($title = '', $default_value = NULL, $required = FALSE, $description = '', $multiple = false) { if ($required) { $options = _helpers_data_month_names_array(); } else { $options = add_none_to_options(_helpers_data_month_names_array()); } return array( '#type' => 'select', '#title' => $title ? $title : t('Month'), '#default_value' => $default_value, '#options' => $options, '#multiple' => $multiple, '#size' => min(5, count($options)), '#description' => $description, ); } /** * Create a form-structure filled with year numbers, useful in a select. * @param $range, The number of years to show from the specified starting year. * If this value is negative, then only use the number of years before. * If it is positive, then show the number of years before and after. * @param $start, The year to start the list with. * If specified (or defaulted) as "current" then, use the current year. * @param $title, the title of the form. Defaults to "Year" (translated). If provided, it will not be translated. * @param $default_value, the selected year. * @param $required, whether or not a "none" string should be included in the options. * @param $description, optionally provide a description. Is not translated. * @param $multiple, whether or not to allow multiple choices. * @return form element ready to add to form. */ function year_select_for_form($range = 10, $start = 'current', $title = '', $default_value = null, $required = false, $description = '', $multiple = false) { if (is_null($start) || $start == 'current') { $start = date('Y'); } if ($range < 0) { $begin_yr = $start + $range; $end_yr = $start; } else { $begin_yr = $start - $range; $end_yr = $start + $range; } $options = array(); for ($yr = $begin_yr; $yr <= $end_yr; ++$yr) { $options[$yr] = $yr; } if (!$required) { $options = add_none_to_options($options); } return array( '#type' => 'select', '#title' => $title ? $title : t('Year'), '#default_value' => $default_value, '#options' => $options, '#multiple' => $multiple, '#size' => min(5, count($options)), '#description' => $description, ); } /** * Global and general functions * @param $options the options that you want to append "None" to. * @param $none_string optionally provide a string that will be the "none". If you provide this, it will not be translated and not passed trough the theme layer. */ function add_none_to_options($options, $none_string = NULL) { if ($none_string) { return array('' => $none_string) + $options; } else { return array('' => theme('none_option')) + $options; } } /** * Build a time entry form. * @crap Drupal form stuff. * @param $default - the default time stamp for the form. * @param $title - a title for the form section. * @param $description - the description for the time entry. * @param $format - 12/24 hour time. Defaults to 24. * @param $include - string indicating the piece to include: * h - include hours. * m - include minutes. * s - include seconds. * a - include AM/PM (for 12 hour format only). * Note that the fields will be included in the order specified. Default 'hms'. * @param $required - whether or not to make the elements required on the form. * @return form array for the time. Will be shown inline. */ function time_form($default, $title, $description = NULL, $format = 24, $include = 'hms', $required = TRUE) { $form = array(); $valid = array('a', 'h', 'm', 's'); $include = drupal_strtolower($include); $normal = in_array($include, array('hm', 'hma', 'hms', 'hmsa')); // Now split it up. $include = drupal_map_assoc(str_split($include)); // Do some basic error checking. if ($diff = array_diff($include, $valid)) { drupal_set_message(t('Invalid time element requested (@stuff).', array('@stuff' => implode(', ', $diff))), 'error'); return $form; } if (($include['a'] && $format == 24) || ($include['a'] && !$include['h'])) { // Am/pm not valid in this context, drop it. drupal_set_message(t('AM/PM indicator requested but ignored.'), 'warning'); unset ($include['a']); } if (!($format == 24 || $format == 12)) { drupal_set_message(t('Invalid clock format (@stuff); using "24".', array('@stuff' => $format)), 'warning'); $format = 24; } // Break out the pieces of the time for default values. list($hour, $min, $sec, $ampm) = explode(':', date(($format == 12 ? 'h' : 'H') . ':i:s:A', $default)); $r59 = range(0, 59); // Build the form elements. foreach ($include as $piece) { switch ($piece) { case 'h': $form['h'] = array( '#type' => 'select', '#options' => drupal_map_assoc(range(0, $format)), '#default_value' => $hour, '#required' => $required, ); $form['hs'] = array('#type' => 'markup', '#value' => ($normal ? NULL : t('hours'))); break; case 'm': $form['m'] = array( '#type' => 'select', '#options' => $r59, '#default_value' => $min, '#required' => $required, ); $form['ms'] = array('#type' => 'markup', '#value' => ($normal ? NULL : t('minutes'))); break; case 's': $form['s'] = array( '#type' => 'select', '#options' => $r59, '#default_value' => $sec, '#required' => $required, ); $form['ss'] = array('#type' => 'markup', '#value' => ($normal ? NULL : t('seconds'))); break; case 'a': $form['a'] = array( '#type' => 'select', '#options' => array('AM' => 'AM', 'PM' => 'PM'), '#default_value' => $ampm, '#required' => $required, ); break; } } // In order to force inline, we have to know the first and last elements. $first = array_shift($include); if ($include) { $last = array_pop($include); } else { $last = $first; } $last .= $last == 'a' ? NULL : 's'; // Set the title and force in-line. $form[$first]['#title'] = t($title); $form[$first]['#prefix'] = '
'; $form[$last]['#suffix'] = '
'; // Now add the description. $form['desc'] = array( '#type' => 'markup', '#value' => '
'. t($description) .'
', ); return $form; } /** * Helper helpers. Private functions that are used internally */ /** * Returns a list of countries. * TODO make this a proper associative array with the official country code as key. */ function _helpers_data_countries_array() { $countries = array( 'Afghanistan' => t('Afghanistan'), 'Albania' => t('Albania'), 'Algeria' => t('Algeria'), 'American Samoa' => t('American Samoa'), 'Andorra' => t('Andorra'), 'Angola' => t('Angola'), 'Anguilla' => t('Anguilla'), 'Antarctica' => t('Antarctica'), 'Antigua And Barbuda' => t('Antigua And Barbuda'), 'Argentina' => t('Argentina'), 'Armenia' => t('Armenia'), 'Aruba' => t('Aruba'), 'Australia' => t('Australia'), 'Austria' => t('Austria'), 'Azerbaijan' => t('Azerbaijan'), 'Bahamas' => t('Bahamas'), 'Bahrain' => t('Bahrain'), 'Bangladesh' => t('Bangladesh'), 'Barbados' => t('Barbados'), 'Belarus' => t('Belarus'), 'Belgium' => t('Belgium'), 'Belize' => t('Belize'), 'Benin' => t('Benin'), 'Bermuda' => t('Bermuda'), 'Bhutan' => t('Bhutan'), 'Bolivia' => t('Bolivia'), 'Bosnia and Herzegowina' => t('Bosnia and Herzegowina'), 'Botswana' => t('Botswana'), 'Bouvet Island' => t('Bouvet Island'), 'Brazil' => t('Brazil'), 'British Indian Ocean Territory' => t('British Indian Ocean Territory'), 'Brunei Darussalam' => t('Brunei Darussalam'), 'Bulgaria' => t('Bulgaria'), 'Burkina Faso' => t('Burkina Faso'), 'Burma' => t('Burma'), 'Burundi' => t('Burundi'), 'Cambodia' => t('Cambodia'), 'Cameroon' => t('Cameroon'), 'Canada' => t('Canada'), 'Cape Verde' => t('Cape Verde'), 'Cayman Islands' => t('Cayman Islands'), 'Central African Republic' => t('Central African Republic'), 'Chad' => t('Chad'), 'Chile' => t('Chile'), 'China' => t('China'), 'Christmas Island' => t('Christmas Island'), 'Cocos (Keeling) Islands' => t('Cocos (Keeling) Islands'), 'Colombia' => t('Colombia'), 'Comoros' => t('Comoros'), 'Congo' => t('Congo'), 'Congo, the Democratic Republic of the' => t('Congo, the Democratic Republic of the'), 'Cook Islands' => t('Cook Islands'), 'Costa Rica' => t('Costa Rica'), 'Cote d\'Ivoire' => t('Cote d\'Ivoire'), 'Croatia' => t('Croatia'), 'Cuba' => t('Cuba'), 'Cyprus' => t('Cyprus'), 'Czech Republic' => t('Czech Republic'), 'Denmark' => t('Denmark'), 'Djibouti' => t('Djibouti'), 'Dominica' => t('Dominica'), 'Dominican Republic' => t('Dominican Republic'), 'East Timor' => t('East Timor'), 'Ecuador' => t('Ecuador'), 'Egypt' => t('Egypt'), 'El Salvador' => t('El Salvador'), 'England' => t('England'), 'Equatorial Guinea' => t('Equatorial Guinea'), 'Eritrea' => t('Eritrea'), 'Espana' => t('Espana'), 'Estonia' => t('Estonia'), 'Ethiopia' => t('Ethiopia'), 'Falkland Islands' => t('Falkland Islands'), 'Faroe Islands' => t('Faroe Islands'), 'Fiji' => t('Fiji'), 'Finland' => t('Finland'), 'France' => t('France'), 'French Guiana' => t('French Guiana'), 'French Polynesia' => t('French Polynesia'), 'French Southern Territories' => t('French Southern Territories'), 'Gabon' => t('Gabon'), 'Gambia' => t('Gambia'), 'Georgia' => t('Georgia'), 'Germany' => t('Germany'), 'Ghana' => t('Ghana'), 'Gibraltar' => t('Gibraltar'), 'Great Britain' => t('Great Britain'), 'Greece' => t('Greece'), 'Greenland' => t('Greenland'), 'Grenada' => t('Grenada'), 'Guadeloupe' => t('Guadeloupe'), 'Guam' => t('Guam'), 'Guatemala' => t('Guatemala'), 'Guinea' => t('Guinea'), 'Guinea-Bissau' => t('Guinea-Bissau'), 'Guyana' => t('Guyana'), 'Haiti' => t('Haiti'), 'Heard and Mc Donald Islands' => t('Heard and Mc Donald Islands'), 'Honduras' => t('Honduras'), 'Hong Kong' => t('Hong Kong'), 'Hungary' => t('Hungary'), 'Iceland' => t('Iceland'), 'India' => t('India'), 'Indonesia' => t('Indonesia'), 'Ireland' => t('Ireland'), 'Israel' => t('Israel'), 'Italy' => t('Italy'), 'Iran' => t('Iran'), 'Iraq' => t('Iraq'), 'Jamaica' => t('Jamaica'), 'Japan' => t('Japan'), 'Jordan' => t('Jordan'), 'Kazakhstan' => t('Kazakhstan'), 'Kenya' => t('Kenya'), 'Kiribati' => t('Kiribati'), 'Korea, Republic of' => t('Korea, Republic of'), 'Korea (South)' => t('Korea (South)'), 'Kuwait' => t('Kuwait'), 'Kyrgyzstan' => t('Kyrgyzstan'), 'Lao People\'s Democratic Republic' => t('Lao People\'s Democratic Republic'), 'Latvia' => t('Latvia'), 'Lebanon' => t('Lebanon'), 'Lesotho' => t('Lesotho'), 'Liberia' => t('Liberia'), 'Liechtenstein' => t('Liechtenstein'), 'Lithuania' => t('Lithuania'), 'Luxembourg' => t('Luxembourg'), 'Macau' => t('Macau'), 'Macedonia' => t('Macedonia'), 'Madagascar' => t('Madagascar'), 'Malawi' => t('Malawi'), 'Malaysia' => t('Malaysia'), 'Maldives' => t('Maldives'), 'Mali' => t('Mali'), 'Malta' => t('Malta'), 'Marshall Islands' => t('Marshall Islands'), 'Martinique' => t('Martinique'), 'Mauritania' => t('Mauritania'), 'Mauritius' => t('Mauritius'), 'Mayotte' => t('Mayotte'), 'Mexico' => t('Mexico'), 'Micronesia, Federated States of' => t('Micronesia, Federated States of'), 'Moldova, Republic of' => t('Moldova, Republic of'), 'Monaco' => t('Monaco'), 'Mongolia' => t('Mongolia'), 'Montserrat' => t('Montserrat'), 'Morocco' => t('Morocco'), 'Mozambique' => t('Mozambique'), 'Myanmar' => t('Myanmar'), 'Namibia' => t('Namibia'), 'Nauru' => t('Nauru'), 'Nepal' => t('Nepal'), 'Netherlands' => t('Netherlands'), 'Netherlands Antilles' => t('Netherlands Antilles'), 'New Caledonia' => t('New Caledonia'), 'New Zealand' => t('New Zealand'), 'Nicaragua' => t('Nicaragua'), 'Niger' => t('Niger'), 'Nigeria' => t('Nigeria'), 'Niue' => t('Niue'), 'Norfolk Island' => t('Norfolk Island'), 'Northern Ireland' => t('Northern Ireland'), 'Northern Mariana Islands' => t('Northern Mariana Islands'), 'Norway' => t('Norway'), 'Oman' => t('Oman'), 'Pakistan' => t('Pakistan'), 'Palau' => t('Palau'), 'Panama' => t('Panama'), 'Papua New Guinea' => t('Papua New Guinea'), 'Paraguay' => t('Paraguay'), 'Peru' => t('Peru'), 'Philippines' => t('Philippines'), 'Pitcairn' => t('Pitcairn'), 'Poland' => t('Poland'), 'Portugal' => t('Portugal'), 'Puerto Rico' => t('Puerto Rico'), 'Qatar' => t('Qatar'), 'Reunion' => t('Reunion'), 'Romania' => t('Romania'), 'Russia' => t('Russia'), 'Rwanda' => t('Rwanda'), 'Saint Kitts and Nevis' => t('Saint Kitts and Nevis'), 'Saint Lucia' => t('Saint Lucia'), 'Saint Vincent and the Grenadines' => t('Saint Vincent and the Grenadines'), 'Samoa (Independent)' => t('Samoa (Independent)'), 'San Marino' => t('San Marino'), 'Sao Tome and Principe' => t('Sao Tome and Principe'), 'Saudi Arabia' => t('Saudi Arabia'), 'Scotland' => t('Scotland'), 'Senegal' => t('Senegal'), 'Serbia and Montenegro' => t('Serbia and Montenegro'), 'Seychelles' => t('Seychelles'), 'Sierra Leone' => t('Sierra Leone'), 'Singapore' => t('Singapore'), 'Slovakia' => t('Slovakia'), 'Slovenia' => t('Slovenia'), 'Solomon Islands' => t('Solomon Islands'), 'Somalia' => t('Somalia'), 'South Africa' => t('South Africa'), 'South Georgia and the South Sandwich Islands' => t('South Georgia and the South Sandwich Islands'), 'South Korea' => t('South Korea'), 'Spain' => t('Spain'), 'Sri Lanka' => t('Sri Lanka'), 'St. Helena' => t('St. Helena'), 'St. Pierre and Miquelon' => t('St. Pierre and Miquelon'), 'Suriname' => t('Suriname'), 'Svalbard and Jan Mayen Islands' => t('Svalbard and Jan Mayen Islands'), 'Swaziland' => t('Swaziland'), 'Sweden' => t('Sweden'), 'Switzerland' => t('Switzerland'), 'Taiwan' => t('Taiwan'), 'Tajikistan' => t('Tajikistan'), 'Tanzania' => t('Tanzania'), 'Thailand' => t('Thailand'), 'Togo' => t('Togo'), 'Tokelau' => t('Tokelau'), 'Tonga' => t('Tonga'), 'Trinidad' => t('Trinidad'), 'Trinidad and Tobago' => t('Trinidad and Tobago'), 'Tunisia' => t('Tunisia'), 'Turkey' => t('Turkey'), 'Turkmenistan' => t('Turkmenistan'), 'Turks and Caicos Islands' => t('Turks and Caicos Islands'), 'Tuvalu' => t('Tuvalu'), 'Uganda' => t('Uganda'), 'Ukraine' => t('Ukraine'), 'United Arab Emirates' => t('United Arab Emirates'), 'United Kingdom' => t('United Kingdom'), 'United States' => t('United States'), 'United States Minor Outlying Islands' => t('United States Minor Outlying Islands'), 'Uruguay' => t('Uruguay'), 'Uzbekistan' => t('Uzbekistan'), 'Vanuatu' => t('Vanuatu'), 'Vatican City State (Holy See)' => t('Vatican City State (Holy See)'), 'Venezuela' => t('Venezuela'), 'Viet Nam' => t('Viet Nam'), 'Virgin Islands (British)' => t('Virgin Islands (British)'), 'Virgin Islands (U.S.)' => t('Virgin Islands (U.S.)'), 'Wales' => t('Wales'), 'Wallis and Futuna Islands' => t('Wallis and Futuna Islands'), 'Western Sahara' => t('Western Sahara'), 'Yemen' => t('Yemen'), 'Zambia' => t('Zambia'), 'Zimbabwe' => t('Zimbabwe'), ); natsort($countries); return $countries; } function _helpers_data_us_states_array() { $states = array( 'AL' => t('Alabama'), 'AK' => t('Alaska'), 'AZ' => t('Arizona'), 'AR' => t('Arkansas'), 'CA' => t('California'), 'CO' => t('Colorado'), 'CT' => t('Connecticut'), 'DC' => t('D.C.'), 'DE' => t('Delaware'), 'FL' => t('Florida'), 'GA' => t('Georgia'), 'HI' => t('Hawaii'), 'ID' => t('Idaho'), 'IL' => t('Illinois'), 'IN' => t('Indiana'), 'IA' => t('Iowa'), 'KS' => t('Kansas'), 'KY' => t('Kentucky'), 'LA' => t('Louisiana'), 'ME' => t('Maine'), 'MD' => t('Maryland'), 'MA' => t('Massachusetts'), 'MI' => t('Michigan'), 'MN' => t('Minnesota'), 'MS' => t('Mississippi'), 'MO' => t('Missouri'), 'MT' => t('Montana'), 'NE' => t('Nebraska'), 'NV' => t('Nevada'), 'NH' => t('New Hampshire'), 'NJ' => t('New Jersey'), 'NM' => t('New Mexico'), 'NY' => t('New York'), 'NC' => t('North Carolina'), 'ND' => t('North Dakota'), 'OH' => t('Ohio'), 'OK' => t('Oklahoma'), 'OR' => t('Oregon'), 'PA' => t('Pennsylvania'), 'RI' => t('Rhode Island'), 'SC' => t('South Carolina'), 'SD' => t('South Dakota'), 'TN' => t('Tennessee'), 'TX' => t('Texas'), 'UT' => t('Utah'), 'VT' => t('Vermont'), 'VA' => t('Virginia'), 'WA' => t('Washington'), 'WV' => t('West Virginia'), 'WI' => t('Wisconsin'), 'WY' => t('Wyoming'), ); natsort($states); return $states; } function _helpers_data_month_names_array() { $names = array( 1 => t('January'), 2 => t('February'), 3 => t('March'), 4 => t('April'), 5 => t('May'), 6 => t('June'), 7 => t('July'), 8 => t('August'), 9 => t('September'), 10 => t('October'), 11 => t('November'), 12 => t('December'), ); return $names; }