View source
<?php
function _webform_edit_time($currfield) {
$edit_fields = array();
$edit_fields['value'] = array(
'#type' => 'textfield',
'#title' => t("Default value"),
'#default_value' => $currfield['default'],
'#description' => t('The default value of the field.') . '<br />' . t('Accepts a time in any <a href="http://www.gnu.org/software/tar/manual/html_node/tar_109.html">GNU Date Input Format</a>. Strings such as now, +2 hours, and 10:30pm are all valid.'),
'#size' => 60,
'#maxlength' => 127,
'#weight' => 0,
'#validate' => array(
'webform_validate_time_string' => array(),
),
);
$edit_fields['extra']['timezone'] = array(
'#type' => 'radios',
'#title' => t("Timezone"),
'#default_value' => empty($currfield['extra']['timezone']) ? "site" : $currfield['extra']['timezone'],
'#description' => t('Adjust the time according to a specific timezone. Website timezone is defined in the <a href="%settings">Site Settings</a> and is the default.', array(
'%settings' => url('admin/settings'),
)),
'#options' => array(
'site' => 'Website Timezone',
'user' => 'User Timezone',
'gmt' => 'GMT',
),
'#weight' => 0,
);
$edit_fields['extra']['check_daylight_savings'] = array(
'#type' => 'checkbox',
'#title' => t("Observe Daylight Savings"),
'#default_value' => $currfield['extra']['check_daylight_savings'],
'#checked_value' => 1,
'#description' => t('Automatically adjust the time during daylight savings.'),
'#weight' => 1,
);
$edit_fields['extra']['hourformat'] = array(
'#type' => 'radios',
'#title' => t("Time Format"),
'#default_value' => isset($currfield['extra']['hourformat']) ? $currfield['extra']['hourformat'] : '12-hour',
'#description' => t('Format the display of the time in 12 or 24 hours.'),
'#options' => array(
'12-hour' => '12-hour (am/pm)',
'24-hour' => '24-hour',
),
'#weight' => 2,
);
return $edit_fields;
}
function _webform_render_time($component) {
if (strlen($component['value']) > 0) {
$timestamp = strtotime($component['value']);
if ($component['extra']['timezone'] == "user") {
global $user;
$timestamp += (int) $user->timezone;
}
elseif ($component['extra']['timezone'] == "gmt") {
$timestamp += 0;
}
else {
$timestamp += (int) variable_get('date_default_timezone', 0);
}
if ($component['extra']['check_daylight_savings'] && date("I")) {
$timestamp += 3600;
}
}
if ($component['extra']['hourformat'] == '12-hour') {
$first_hour = 1;
$last_hour = 12;
$hour_format = 'g';
}
else {
$first_hour = 0;
$last_hour = 23;
$hour_format = 'G';
}
if (strlen($component['value']) > 0) {
$hour = gmdate($hour_format, $timestamp);
$minute = gmdate('i', $timestamp);
$am_pm = gmdate('a', $timestamp);
}
$hours[""] = t("hour");
$minutes[""] = t("minute");
for ($i = $first_hour; $i <= $last_hour; $i++) {
$hours[$i] = $i;
}
for ($i = 0; $i <= 59; $i++) {
$minutes[$i < 10 ? "0{$i}" : $i] = $i < 10 ? "0{$i}" : $i;
}
$am_pms = array(
'am' => t('am'),
'pm' => t('pm'),
);
$form_item = array(
'#title' => $component['name'],
'#required' => $component['mandatory'],
'#weight' => $component['weight'],
'#description' => _webform_filtervalues($component['extra']['description']),
'#prefix' => '<div class="webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
'#suffix' => '</div>',
'#theme' => 'webform_time',
);
$form_item['hour'] = array(
'#prefix' => '',
'#type' => 'select',
'#default_value' => $hour,
'#options' => $hours,
'#validate' => array(
'webform_validate_time' => array(
'hour',
$component['name'],
$component['mandatory'],
),
),
);
$form_item['minute'] = array(
'#prefix' => ':',
'#type' => 'select',
'#default_value' => $minute,
'#options' => $minutes,
'#validate' => array(
'webform_validate_time' => array(
'minute',
$component['name'],
$component['mandatory'],
),
),
);
if ($component['extra']['hourformat'] == '12-hour') {
$form_item['ampm'] = array(
'#type' => 'radios',
'#default_value' => $am_pm,
'#options' => $am_pms,
);
}
return $form_item;
}
function webform_validate_time($field, $field_name, $component_name, $mandatory) {
if (!is_numeric($field['#value']) && $mandatory) {
form_set_error($field_name, $component_name . " " . $field_name . " " . t(" field is required"));
return false;
}
}
function _webform_submission_display_time($data, $component, $enabled = false) {
$form_item = _webform_render_time($component);
$form_item['minute']['#default_value'] = $data['value']['1'];
$form_item['minute']['#disabled'] = !$enabled;
$form_item['hour']['#disabled'] = !$enabled;
$form_item['ampm']['#disabled'] = !$enabled;
$timestamp = strtotime($data['value']['0'] . ":" . $data['value']['1'] . $data['value']['2']);
if ($component['extra']['hourformat'] == "24-hour") {
$form_item['hour']['#default_value'] = date("H", $timestamp);
}
else {
$form_item['hour']['#default_value'] = date("g", $timestamp);
$form_item['ampm']['#default_value'] = $data['value']['2'];
}
return $form_item;
}
function theme_webform_mail_time($data, $component) {
$output = $component['name'] . ":";
if ($data['hour'] && $data['minute']) {
if ($component['extra']['hourformat'] == "24-hour") {
$output .= " " . $data['hour'] . ":" . $data['minute'];
}
else {
$output .= " " . $data['hour'] . ":" . $data['minute'] . " " . $data['ampm'];
}
}
return $output;
}
function _webform_help_time($section) {
switch ($section) {
case 'admin/settings/webform#time_description':
$output = t("Presents the user with hour and minute fields. Optional am/pm fields.");
break;
}
return $output;
}
function _webform_analysis_rows_time($component) {
$query = 'SELECT no,data ' . ' FROM {webform_submitted_data} ' . ' WHERE nid = %d ' . ' AND cid = %d ' . ' ORDER BY sid,no ASC ';
$result = db_query($query, $component['nid'], $component['cid']);
$timestamps = array();
$submissions = 1;
while ($row = db_fetch_array($result)) {
if ($row['no'] == '0') {
$submissions++;
$hour = $row['data'];
if ($row = db_fetch_array($result)) {
if ($row['no'] == '1') {
$minute = $row['data'];
if ($row = db_fetch_array($result)) {
if ($row['no'] == '2') {
$ampm = $row['data'];
if (strlen($hour) > 0 && strlen($minute) > 0) {
$timestamps[] = strtotime($hour . ":" . $minute . ' ' . $ampm);
}
}
else {
$timestamps[] = strtotime($hour . ":" . $minute);
}
}
}
}
}
}
$nonblanks = count($timestamps);
$rows[0] = array(
t('Left Blank'),
$submissions - $nonblanks,
);
$rows[1] = array(
t('User entered value'),
$nonblanks,
);
return $rows;
}
function _webform_table_data_time($data, $component) {
if (strlen($data['value']['0']) > 0 && strlen($data['value']['1']) > 0) {
$timestamp = strtotime($data['value']['0'] . ":" . $data['value']['1'] . $data['value']['2']);
if ($component['extra']['hourformat'] == '24-hour') {
return check_plain(date("H:i", $timestamp));
}
else {
return check_plain(date("g:i a", $timestamp));
}
}
else {
return "";
}
}
function _webform_csv_headers_time($component) {
$header = array();
$header[0] = '';
$header[1] = '';
$header[2] = $component['name'];
return $header;
}
function _webform_csv_data_time($data, $component) {
if (strlen($data['value']['0']) > 0 && strlen($data['value']['1']) > 0) {
$timestamp = strtotime($data['value']['0'] . ":" . $data['value']['1'] . $data['value']['2']);
if ($component['extra']['hourformat'] == '24-hour') {
return date("H:i", $timestamp);
}
else {
return date("g:i a", $timestamp);
}
}
else {
return "";
}
}
function theme_webform_time($element) {
$element['#type'] = 'element';
$element['#children'] = '<div class="container-inline">' . drupal_render($element['hour']) . drupal_render($element['minute']) . drupal_render($element['ampm']) . '</div>';
return theme('form_element', $element, $element['#children']);
}