cvs diff: Diffing includes
Index: includes/date.5x-1.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/Attic/date.5x-1.inc,v
retrieving revision 1.3.2.3
diff -u -p -r1.3.2.3 date.5x-1.inc
--- includes/date.5x-1.inc	19 Nov 2008 18:56:13 -0000	1.3.2.3
+++ includes/date.5x-1.inc	21 Nov 2008 08:07:16 -0000
@@ -1,6 +1,7 @@
 <?php
 // $Id: date.5x-1.inc,v 1.3.2.3 2008/11/19 18:56:13 dww Exp $
 
+
 /**
  * @file
  * Code required to support version 5.x-1.* of the CCK date field module.
@@ -11,28 +12,19 @@
  * @return Array of SQL clauses for cron reminder email query builder.
  */
 function _signup_date_reminder_sql($content_type) {
-  $field = signup_date_field($content_type);
+  require_once drupal_get_path('module', 'date') .'/date.inc';
   global $db_type;
-  switch ($db_type) {
-    case 'mysql':
-    case 'mysqli':
-      $where = array(
-        "NOW() + INTERVAL s.reminder_days_before DAY > ". date_sql('DATE', $field['database']['columns']['value']['column'], 'iso'),
-        "NOW() <= ". date_sql('DATE', $field['database']['columns']['value']['column'], 'iso'),
-      );
-      break;
+  $day = $db_type == 'pgsql' ? 'days' : 'DAY';
 
-    case 'pgsql':
-      $where = array(
-        "NOW() + INTERVAL s.reminder_days_before days > ". date_sql('DATE', $field['database']['columns']['value']['column'], 'iso'),
-        "NOW() <= ". date_sql('DATE', $field['database']['columns']['value']['column'], 'iso'),
-      );
-      break;
-  }
+  $field = signup_date_field($content_type);
+  $date_type = $field['type'] == 'datestamp' ? 'int' : 'iso';
+  $start_time = date_sql('DATE', $field['database']['columns']['value']['column'], $date_type);
+
+  $where = "NOW() + INTERVAL s.reminder_days_before ". $day ." > ". $start_time;
   return array(
     'fields' => array($field['database']['columns']['value']['column']),
     'joins' => array('LEFT JOIN {'. $field['database']['table'] .'}  ON {'. $field['database']['table'] .'}.vid = n.vid'),
-    'where' => $where,
+    'where' => array($where),
   );
 }
 
@@ -41,13 +33,31 @@ function _signup_date_reminder_sql($cont
  * @return Array of SQL clauses for cron auto-close query builder.
  */
 function _signup_date_autoclose_sql($content_type) {
+  require_once drupal_get_path('module', 'date') .'/date.inc';
+  global $db_type;
+
+  $close_early = variable_get('signup_close_early', 1);
+  switch ($db_type) {
+    case 'mysql':
+    case 'mysqli':
+      $interval = "INTERVAL '". $close_early ."' HOUR";
+      break;
+
+    case 'pgsql':
+      $interval = "INTERVAL '". $close_early ." hours'";
+      break;
+
+  }
+
   $field = signup_date_field($content_type);
+  $date_type = $field['type'] == 'datestamp' ? 'int' : 'iso';
+  $start_time = date_sql('DATE', $field['database']['columns']['value']['column'], $date_type);
+
+  $where = "NOW() + ". $interval ." > ". $start_time;
   return array(
     'fields' => array($field['database']['columns']['value']['column']),
-    'joins' => array(
-      'LEFT JOIN {'. $field['database']['table'] .'} ON {'. $field['database']['table'] .'}.vid = n.vid',
-    ),
-    'where' => array(date_sql('DATE', $field['database']['columns']['value']['column'], 'iso') ." < '". date('Y-m-d H:i:s', time() + variable_get('signup_close_early', 1) * 3600) ."'"),
+    'joins' => array('LEFT JOIN {'. $field['database']['table'] .'} ON {'. $field['database']['table'] .'}.vid = n.vid'),
+    'where' => array($where),
   );
 }
 
@@ -56,17 +66,28 @@ function _signup_date_autoclose_sql($con
  * has already passed the "Close x hours before" setting.
  */
 function _signup_date_node_completed($node) {
+  require_once drupal_get_path('module', 'date') .'/date.inc';
   $field = signup_date_field($node->type);
   if ($field && $field != 'none' && isset($node->{$field['field_name']})) {
-    $closing_time = time() + (variable_get('signup_close_early', 1) * 3600);
-    if (date_iso2unix($node->{$field['field_name']}[0]['value']) < $closing_time) {
+    switch ($field['type']) {
+      case 'date':
+        $start_time = date_iso2unix($node->{$field['field_name']}[0]['value']);
+        break;
+
+      case 'datestamp':
+        $start_time = $node->{$field['field_name']}[0]['value'];
+        break;
+
+    }
+    $close_time = $start_time - (variable_get('signup_close_early', 1) * 3600);
+    if (time() > $close_time) {
       return TRUE;
     }
   }
   return FALSE;
 }
 
-function _signup_date_format_date($node, $include_to_date = FALSE) {
+function _signup_date_format_date($node) {
   $field = signup_date_field($node->type);
   if (!$field || $field == 'none') {
     return '';
@@ -80,20 +101,24 @@ function _signup_date_format_date($node,
   else {
     $date_value = $node->{$field['database']['columns']['value']['column']};
   }
-  $date = date_show_date(date_make_date($date_value), $field['output_format_date'], 'db');
+  $date_obj = date_make_date($date_value, 'GMT', 'db', $field['type']);
+  switch ($field['tz_handling']) {
+    case 'site':
+      $timezone_name = date_get_site_timezone();
+      break;
 
-  if ($include_to_date) {
-    if (isset($node->{$field['field_name']})) {
-      $date_value = $node->{$field['field_name']}[0]['value2'];
-    }
-    else {
-      $date_value = $node->{$field['database']['columns']['value2']['column']};
-    }
-    if ($date_value) {
-      $date .= t(' to ') . date_show_date(date_make_date($date_value), $field['output_format_date'], 'db');
-    }
-  }
+    case 'date':
+      $timezone_name = $field['field_timezone'];
+      break;
 
-  return $date;
+  }
+  if (!empty($timezone_name)) {
+    $offset = date_offset(date_gmgetdate($date_obj->db->timestamp), $timezone_name);
+  }
+  else {
+    $offset = 0;
+    $timezone_name = NULL;
+  }
+  return date_format_date($field['output_format_date'], date_fuzzy_stamp($date_obj->db) + $offset, 0, $timezone_name);
 }
 
Index: includes/date.5x-2.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/Attic/date.5x-2.inc,v
retrieving revision 1.3.2.2
diff -u -p -r1.3.2.2 date.5x-2.inc
--- includes/date.5x-2.inc	19 Nov 2008 18:56:13 -0000	1.3.2.2
+++ includes/date.5x-2.inc	21 Nov 2008 08:07:16 -0000
@@ -12,26 +12,23 @@
  * @return Array of SQL clauses for cron reminder email query builder.
  */
 function _signup_date_reminder_sql($content_type) {
-  $field = signup_date_field($content_type);
-  global $db_type;
   require_once drupal_get_path('module', 'date_api') .'/date_api_sql.inc';
+  global $db_type;
+  $day = $db_type == 'pgsql' ? 'days' : 'DAY';
+
+  $field = signup_date_field($content_type);
   $handler = new date_sql_handler();
-  switch ($db_type) {
-    case 'mysql':
-    case 'mysqli':
-      $where = array(
-        "NOW() + INTERVAL s.reminder_days_before DAY > ". $handler->sql_extract('DATE', $field['database']['columns']['value']['column']),
-        "NOW() <= ". $handler->sql_extract('DATE', $field['database']['columns']['value']['column']),
-      );
-      break;
-
-    case 'pgsql':
-      $where = array(
-        "NOW() + INTERVAL s.reminder_days_before days > ". $handler->sql_extract('DATE', $field['database']['columns']['value']['column']),
-        "NOW() <= ". $handler->sql_extract('DATE', $field['database']['columns']['value']['column']),
-      );
-      break;
-  }
+  $handler->construct($field['type']);
+  $start_time = $handler->sql_field($field['database']['columns']['value']['column']);
+  // Work-around evil code in date_api_sql that tries to workaround a views
+  // bug but breaks other callers. :(
+  $start_time = strtr($start_time, array('***SQLD***' => '%%d', '***SQLS***' => '%%s'));
+
+  $where = array(
+    "NOW() + INTERVAL s.reminder_days_before ". $day ." > ". $start_time,
+    "NOW() <= ". $start_time,
+  );
+
   return array(
     'fields' => array($field['database']['columns']['value']['column']),
     'joins' => array('LEFT JOIN {'. $field['database']['table'] .'} ON {'. $field['database']['table'] .'}.vid = n.vid'),
@@ -44,15 +41,22 @@ function _signup_date_reminder_sql($cont
  * @return Array of SQL clauses for cron auto-close query builder.
  */
 function _signup_date_autoclose_sql($content_type) {
-  $field = signup_date_field($content_type);
   require_once drupal_get_path('module', 'date_api') .'/date_api_sql.inc';
+
+  $field = signup_date_field($content_type);
   $handler = new date_sql_handler();
+  $handler->construct($field['type']);
+  $close_early = variable_get('signup_close_early', 1) * 3600;
+
+  $where = $handler->sql_where_date('DATE', $field['database']['columns']['value']['column'], '<=', 'NOW', $close_early);
+  // Work-around evil code in date_api_sql that tries to workaround a views
+  // bug but breaks other callers. :(
+  $where = strtr($where, array('***SQLD***' => '%%d', '***SQLS***' => '%%s'));
+
   return array(
     'fields' => array($field['database']['columns']['value']['column']),
-    'joins' => array(
-      'LEFT JOIN {'. $field['database']['table'] .'} ON {'. $field['database']['table'] .'}.vid = n.vid',
-    ),
-    'where' => array($handler->sql_extract('DATE', $field['database']['columns']['value']['column']) ." < '". date('Y-m-d\TH:i:s', time() + variable_get('signup_close_early', 1) * 3600) ."'"),
+    'joins' => array('LEFT JOIN {'. $field['database']['table'] .'} ON {'. $field['database']['table'] .'}.vid = n.vid'),
+    'where' => array($where),
   );
 }
 
@@ -63,15 +67,25 @@ function _signup_date_autoclose_sql($con
 function _signup_date_node_completed($node) {
   $field = signup_date_field($node->type);
   if ($field && $field != 'none' && isset($node->{$field['field_name']})) {
-    $closing_time = time() + (variable_get('signup_close_early', 1) * 3600);
-    if (strtotime($node->{$field['field_name']}[0]['value']) < $closing_time) {
+    $date_value = $node->{$field['field_name']}[0]['value'];
+    if ($field['tz_handling'] == 'date') {
+      $tz = $node->{$field['field_name']}[0]['timezone'];
+    }
+    else {
+      $tz = date_default_timezone_name();
+    }
+    $db_tz = date_get_timezone_db($field['tz_handling'], $tz);
+    $date = date_make_date($date_value, $db_tz, $field['type']);
+    $start_time = date_format($date, 'U');
+    $close_time = $start_time - (variable_get('signup_close_early', 1) * 3600);
+    if (time() > $close_time) {
       return TRUE;
     }
   }
   return FALSE;
 }
 
-function _signup_date_format_date($node, $include_to_date = FALSE) {
+function _signup_date_format_date($node) {
   $field = signup_date_field($node->type);
   if (!$field || $field == 'none') {
     return '';
