--- event-20060919.module 2006-09-21 03:06:00.000000000 -0700
+++ event.module 2006-09-21 03:06:47.000000000 -0700
@@ -1080,7 +1080,7 @@
$node = $data[$year][$month]['nodes'][$nid->nid];
if (event_taxonomy_filter($node, $terms) && in_array($node->type, $event_types['all'])) {
$node->event_current_date = $day_start;
- $node->event_state = $nid->event_state;
+// $node->event_state = $nid->event_state;
$nodes[] = $node;
}
}
@@ -1317,6 +1317,11 @@
function _event_date($format, $timestamp, $offset = null) {
global $user;
+ if (0==$timestamp) {
+ return;
+ }
+
+
if (isset($offset)) {
$timestamp += $offset;
}
@@ -1421,18 +1426,34 @@
// populate drop down values...
// ...months
$months = array(1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December'));
+
+ if ('end'==$prefix) {
+ $months = array_merge( array( 0 => ''), $months );
+ }
+
// ...hours
if (variable_get('event_ampm', '0')) {
$hour_format = t('g');
- $hours = drupal_map_assoc(range(1, 12));
+ for ($i = 1; $i <= 12; $i++) $hours[$i] = $i;
+ $am_pms = array('am' => t('am'), 'pm' => t('pm'));
+ if ('end'==$prefix) {
+ $am_pms = array_merge( array(''=>''), $am_pms);
+ }
+
$am_pms = array('am' => t('am'), 'pm' => t('pm'));
}
else {
$hour_format = t('H');
- $hours = drupal_map_assoc(range(0, 23));
+ for ($i = 0; $i <= 23; $i++) $hours[$i] = $i;
+ }
+ if ('end'==$prefix) {
+ $hours = array_merge( array('' => ''), $hours );
}
// ...minutes (with leading 0s)
for ($i = 0; $i <= 59; $i++) $minutes[$i] = $i < 10 ? "0$i" : $i;
+ if ('end'==$prefix) {
+ $minutes = array_merge( array('' => ''), $minutes );
+ }
// This is a GMT timestamp, so the _event_date() wrapper to display local times.
$form[$prefix .'_day'] = array(
@@ -1442,40 +1463,40 @@
'#maxlength' => 2,
'#size' => 2,
'#description' => t('day'),
- '#required' => TRUE);
+ '#required' => ('end'==$prefix ? FALSE : TRUE) );
$form[$prefix .'_month'] = array(
'#type' => 'select',
'#default_value' => _event_date('m', $timestamp, $offset),
'#options' => $months,
'#description' => t('month'),
- '#required' => TRUE);
+ '#required' => ('end'==$prefix ? FALSE : TRUE) );
$form[$prefix .'_year'] = array(
'#type' => 'textfield',
'#default_value' => _event_date('Y', $timestamp, $offset),
'#maxlength' => 4,
'#size' => 4,
'#description' => t('year'),
- '#required' => TRUE);
+ '#required' => ('end'==$prefix ? FALSE : TRUE) );
$form[$prefix .'_hour'] = array(
'#prefix' => '
',
'#type' => 'select',
'#default_value' => _event_date($hour_format, $timestamp, $offset),
'#options' => $hours,
- '#required' => TRUE,
+ '#required' => ('end'==$prefix ? FALSE : TRUE),
'#description' => t('hour'));
$form[$prefix .'_minute'] = array(
'#prefix' => ':',
'#type' => 'select',
'#default_value' => _event_date('i', $timestamp, $offset),
'#options' => $minutes,
- '#required' => TRUE,
+ '#required' => ('end'==$prefix ? FALSE : TRUE),
'#description' => t('minutes'));
if (isset($am_pms)) {
$form[$prefix .'_ampm'] = array(
'#type' => 'radios',
'#default_value' => _event_date('a', $timestamp, $offset),
'#options' => $am_pms,
- '#required' => TRUE);
+ '#required' => ('end'==$prefix ? FALSE : TRUE));
}
$form[$prefix .'_close'] = array(
'#type' => 'markup',
@@ -1512,14 +1533,72 @@
// If we have all the parameters, re-calculate $node->event_$date .
if (isset($node->{$prefix . 'year'}) && isset($node->{$prefix . 'month'}) && isset($node->{$prefix . 'day'}) && isset($node->{$prefix . 'hour'}) && isset($node->{$prefix . 'minute'})) {
+
+ // check for expected values
+ $unset = array();
+ settype($node->{$prefix . 'year'}, integer);
+ if (1970> $node->{$prefix . 'year'}) {
+ $unset[]='year';
+ }
+ settype($node->{$prefix . 'month'}, integer);
+ if (1> $node->{$prefix . 'month'} || 12< $node->{$prefix . 'month'}) {
+ $unset[]='month';
+ }
+ settype($node->{$prefix . 'day'}, integer);
+ if (1> $node->{$prefix . 'day'} || 31< $node->{$prefix . 'day'}) {
+ $unset[]='day';
+ }
+ if ('' == (string) $node->{$prefix . 'hour'}) {
+ $node->{$prefix .'hour'} = -1; // 'end' unset value
+ }
+ settype($node->{$prefix . 'hour'}, integer);
+
$hour = $node->{$prefix . 'hour'};
+
+// if 12 hr clock set convert to 24 hr
+
if (variable_get('event_ampm', '0')) {
- if (($node->{$prefix . 'ampm'} == 'pm') && ($hour != 12)) {
- $hour += 12;
+
+ settype($node->{$prefix . 'ampm'}, string);
+ if ($node->{$prefix . 'ampm'} != 'am' && $node->{$prefix . 'ampm'} != 'pm') {
+ $unset[]='am/pm';
+ }
+ else {
+ if (($node->{$prefix . 'ampm'} == 'pm') && ($hour != 12)) {
+ $hour += 12;
+ }
+ elseif (($node->{$prefix . 'ampm'} == 'am') && ($hour == 12)) {
+ $hour -= 12;
+ }
}
- elseif (($node->{$prefix . 'ampm'} == 'am') && ($hour == 12)) {
- $hour -= 12;
}
+ if (0> $hour || 23< $hour) {
+ $unset[]='hour';
+ }
+ if ('' == (string) $node->{$prefix . 'minute'}) {
+ $node->{$prefix .'minute'} = -1; // 'end' unset value
+ }
+ settype($node->{$prefix . 'minute'}, integer);
+ if (0> $node->{$prefix . 'minute'} || 59< $node->{$prefix . 'minute'}) {
+ $unset[]='minute';
+ }
+ // if all unset and 'end' then it is 'optional' and set as the same as 'start'
+ if ( ( (variable_get('event_ampm', '0') && 6==count($unset)) ||
+ (!variable_get('event_ampm', '0') && 5==count($unset)) ) &&
+ ('end' == $date) ) {
+ $node->event_end = $node->event_start; // this requires fn called in order: start, end
+ return;
+ }
+ // otherwise if unset variables form error
+ if (0
timezone, gmmktime($hour, $node->{$prefix . 'minute'}, 0, $node->{$prefix . 'month'}, $node->{$prefix . 'day'}, $node->{$prefix . 'year'}));
@@ -1854,17 +1933,21 @@
'#type' => 'fieldset',
'#title' => t('Start'),
'#description' => t('Start date.'),
- '#weight' => -15
+ '#weight' => -15,
+ '#prefix' => '',
+ '#suffix' => '
'
);
$form['event_start']['date'] = event_form_date($node->event_start ? $node->event_start : _event_user_time(), 'start', $node->start_offset);
$form['event_end'] = array(
'#type' => 'fieldset',
'#title' => t('End'),
- '#description' => t('End date.'),
- '#weight' => -14
+ '#description' => t('End date. (optional)'),
+ '#weight' => -14,
+ '#prefix' => '',
+ '#suffix' => '
'
);
- $form['event_end']['date'] = event_form_date(($node->event_end ? $node->event_end : _event_user_time()), 'end', $node->end_offset);
+ $form['event_end']['date'] = event_form_date($node->event_end==$node->event_start ? 0 : $node->event_end, 'end', $node->end_offset);
}
@@ -1909,11 +1992,16 @@
// and event_end set, 'validate' for the previewing and 'submit' for
// update/insert.
case 'submit':
- event_validate_form_date($node, 'start');
- event_validate_form_date($node, 'end');
- if ($node->event_end < $node->event_start) {
+ // validation now needs to be in the order: start, end
+ event_validate_form_date($node, 'start');
+ event_validate_form_date($node, 'end');
+ if (0==$node->event_end-$node->end_offset) {
$node->event_end = $node->event_start;
}
+ if ($node->event_end < $node->event_start) {
+ form_set_error('', t('End time is earlier than start.'));
+ }
+
switch (variable_get('event_timezone_display', 'event')) {
case 'event' :
$node->start_offset = event_get_offset($node->timezone, $node->event_start);