Index: token_node.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/token/token_node.inc,v
retrieving revision 1.7
diff -u -p -r1.7 token_node.inc
--- token_node.inc	7 Nov 2007 19:16:44 -0000	1.7
+++ token_node.inc	28 Jan 2008 05:56:52 -0000
@@ -1,6 +1,48 @@
 <?php
 // $Id: token_node.inc,v 1.7 2007/11/07 19:16:44 greggles Exp $
 
+// Returns array of date types pointing to their formatted values.
+function _token_get_date_values($date, $date_type = 'created') {
+  // Node changed date.
+  if ($date_type == 'changed') {
+    $date_types_index = array(
+      'mod-yyyy'  => 'Y',
+      'mod-yy'    => 'y',
+      'mod-month' => 'F',
+      'mod-mon'   => 'M',
+      'mod-mm'    => 'm',
+      'mod-m'     => 'n',
+      'mod-ww'    => 'W',
+      'mod-date'  => 'N',
+      'mod-day'   => 'l',
+      'mod-ddd'   => 'D',
+      'mod-dd'    => 'd',
+      'mod-d'     => 'j'
+    );
+  }
+  // Node created date (default).
+  else {
+    $date_types_index = array(
+      'yyyy'  => 'Y',
+      'yy'    => 'y',
+      'month' => 'F',
+      'mon'   => 'M',
+      'mm'    => 'm',
+      'm'     => 'n',
+      'ww'    => 'W',
+      'date'  => 'N',
+      'day'   => 'l',
+      'ddd'   => 'D',
+      'dd'    => 'd',
+      'd'     => 'j'
+    );
+  }
+  return array_combine(
+    array_keys($date_types_index),
+    explode(',', format_date($date, 'custom', implode(',', $date_types_index)))
+  );
+}
+
 /**
  * Implementation of hook_token_values()
  */
@@ -19,32 +61,12 @@ function node_token_values($type, $objec
       $values['author-uid']      = $node->uid;
       $values['author-name']     = check_plain($node->name);
       $values['author-name-raw'] = $node->name;
-
-      $values['yyyy']           = date('Y', $node->created);
-      $values['yy']             = date('y', $node->created);
-      $values['month']          = date('F', $node->created);
-      $values['mon']            = date('M', $node->created);
-      $values['mm']             = date('m', $node->created);
-      $values['m']              = date('n', $node->created);
-      $values['ww']             = date('W', $node->created);
-      $values['date']           = date('N', $node->created);
-      $values['day']            = date('l', $node->created);
-      $values['ddd']            = date('D', $node->created);
-      $values['dd']             = date('d', $node->created);
-      $values['d']              = date('j', $node->created);
-
-      $values['mod-yyyy']       = date('Y', $node->changed);
-      $values['mod-yy']         = date('y', $node->changed);
-      $values['mod-month']      = date('F', $node->changed);
-      $values['mod-mon']        = date('M', $node->changed);
-      $values['mod-mm']         = date('m', $node->changed);
-      $values['mod-m']          = date('n', $node->changed);
-      $values['mod-ww']         = date('W', $node->changed);
-      $values['mod-date']       = date('N', $node->changed);
-      $values['mod-day']        = date('l', $node->changed);
-      $values['mod-ddd']        = date('D', $node->changed);
-      $values['mod-dd']         = date('d', $node->changed);
-      $values['mod-d']          = date('j', $node->changed);
+      if (isset($node->created)) {
+        $values = array_merge($values, _token_get_date_values($node->created, 'created'));
+      }
+      if (isset($node->changed)) {
+        $values = array_merge($values, _token_get_date_values($node->changed, 'changed'));
+      }
 
       // Now get the menu related information.
       global $_menu;
