--- classroom\classroom.module	Wed Oct 13 14:15:10 2010
+++ classroom\classroom.module	Mon Nov 15 13:15:17 2010
 
 /**
@@ -574,4 +573,76 @@
       default:
       return $values;
   }
+}
+
+function classroom_token_values($type, &$object = NULL, $options = array()) { 
+  if ('node' == $type) {
+    return 
+      classroom_course_token_values('all', $object, $options) + 
+      classroom_assignment_token_values('all', $object, $options) + 
+      classroom_response_token_values('all', $object, $options);
+  }
+  if (_classroom_is_type($type, 'course')) {
+    return classroom_course_token_values('all', $object, $options);
+  }
+  if (_classroom_is_type($type, 'assignment')) {
+    return classroom_assignment_token_values('all', $object, $options);
+  }
+  if (_classroom_is_type($type, 'response')) {
+    return classroom_response_token_values('all', $object, $options);
+  }
+}
+
+function classroom_token_list($type = 'all') {
+  if ('node' == $type) {
+    return 
+      classroom_course_token_list() + 
+      classroom_assignment_token_list() + 
+      classroom_response_token_list();
+  }
+  if (_classroom_is_type($type, 'course')) {
+    return classroom_course_token_list();
+  }
+  if (_classroom_is_type($type, 'assignment')) {
+    return classroom_assignment_token_list();
+  }
+  if (_classroom_is_type($type, 'response')) {
+    return classroom_response_token_list();
+  }
+}
+
+
+function _classroom_token_values_dates($fieldname, $objectvalue) {
+  $tokens = array();
+  $type = "custom";
+  $tokens[$fieldname.'-yy'] = format_date($objectvalue, $type, 'y');
+  $tokens[$fieldname.'-yyyy'] = format_date($objectvalue, $type, 'Y');
+  $tokens[$fieldname.'-month'] = format_date($objectvalue, $type, 'F');
+  $tokens[$fieldname.'-mon'] = format_date($objectvalue, $type, 'M');
+  $tokens[$fieldname.'-mm'] = format_date($objectvalue, $type, 'm');
+  $tokens[$fieldname.'-m'] = format_date($objectvalue, $type, 'n');
+  $tokens[$fieldname.'-day'] = format_date($objectvalue, $type, 'l');
+  $tokens[$fieldname.'-ddd'] = format_date($objectvalue, $type, 'D');
+  $tokens[$fieldname.'-dd'] = format_date($objectvalue, $type, 'd');
+  $tokens[$fieldname.'-d'] = format_date($objectvalue, $type, 'j');
+  $tokens[$fieldname.'-date'] = format_date($objectvalue, $type, 'Y-m-d\TH:i:s'); // PHP 5 or later only
+  $tokens[$fieldname.'-value'] = $objectvalue;
+  return $tokens;
+}
+
+function _classroom_token_list_dates($fieldname, $value) {
+  $tokens = array();
+  $tokens[$fieldname.'-yy'] = t(sprintf("%s date year, two digits", $value));
+  $tokens[$fieldname.'-yyyy'] = t(sprintf("%s date year, four digits", $value));
+  $tokens[$fieldname.'-month'] = t(sprintf("%s date month, full word", $value));
+  $tokens[$fieldname.'-mon'] = t(sprintf("%s date month, abbreviated", $value));
+  $tokens[$fieldname.'-mm'] = t(sprintf("%s date month, two digits (zero padded)", $value));
+  $tokens[$fieldname.'-m'] = t(sprintf("%s date month, number, no zero padding", $value));
+  $tokens[$fieldname.'-day'] = t(sprintf("%s date day, full word", $value));
+  $tokens[$fieldname.'-ddd'] = t(sprintf("%s date day, abbreviated", $value));
+  $tokens[$fieldname.'-dd'] = t(sprintf("%s date day, two digits (zero padded)", $value));
+  $tokens[$fieldname.'-d'] = t(sprintf("%s date day, number, no zero padding", $value));
+  $tokens[$fieldname.'-date'] = t(sprintf("%s ISO date (YYYY-MM-DD)", $value));
+  $tokens[$fieldname.'-value'] = t(sprintf("%s raw value", $value));
+  return $tokens;
 }
--- classroom\classroom.courses.inc	Mon Oct 11 09:51:01 2010
+++ classroom\classroom.courses.inc	Mon Nov 15 13:23:43 2010
@@ -212,14 +212,14 @@
   $fields['classroom_course']['start_date'] = array(
     '#type' => 'date',
     '#title' => t('Class Starts'),
-    '#default_value' => $node->classroom_course['start_date'],
+    '#default_value' => _classroom_timestamp_to_form_date($node->classroom_course['start_date']),
     '#tree' => true,
   );
 
   $fields['classroom_course']['end_date'] = array(
     '#type' => 'date',
     '#title' => t('Class Ends'),
-    '#default_value' => $node->classroom_course['end_date'],
+    '#default_value' => _classroom_timestamp_to_form_date($node->classroom_course['end_date']),
     '#tree' => true,
   );
 
@@ -234,14 +234,14 @@
   $fields['classroom_course']['registration_start_date'] = array(
     '#type' => 'date',
     '#title' => t('Registration Begins'),
-    '#default_value' => $node->classroom_course['registration_start_date'],
+    '#default_value' => _classroom_timestamp_to_form_date($node->classroom_course['registration_start_date']),
     '#tree' => true,
   );
 
   $fields['classroom_course']['registration_end_date'] = array(
     '#type' => 'date',
     '#title' => t('Registration Ends'),
-    '#default_value' => $node->classroom_course['registration_end_date'],
+    '#default_value' => _classroom_timestamp_to_form_date($node->classroom_course['registration_end_date']),
     '#tree' => true,
   );
   
@@ -391,10 +391,10 @@
   $data = db_fetch_array(db_query('SELECT start_t, end_t, registration_start, registration_end, use_grade_percentages, access_by_rid FROM {classroom_course} WHERE nid = %d', $node->nid));
 
   // Load dates into 'start_date' and 'end_date'.
-  $data['start_date'] = _classroom_timestamp_to_form_date($data['start_t']);
-  $data['end_date'] = _classroom_timestamp_to_form_date($data['end_t']);
-  $data['registration_start_date'] = _classroom_timestamp_to_form_date($data['registration_start']);
-  $data['registration_end_date'] = _classroom_timestamp_to_form_date($data['registration_end']);
+  $data['start_date'] = ($data['start_t']);
+  $data['end_date'] = ($data['end_t']);
+  $data['registration_start_date'] = ($data['registration_start']);
+  $data['registration_end_date'] = ($data['registration_end']);
 
   $data = array_merge($data, module_invoke_all('classroom_load_course', $node));
   return array('classroom_course' => $data);
@@ -632,4 +632,33 @@
     case 'classroom_course.registration_end':
       return $values;
   }
+}
+
+function classroom_course_token_values($type, $object = NULL, $options = array()) {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'course')) {
+    $tokens['continuous_ed'] = $object->classroom_course['unlimitedend'] ? t('Continuous') : t('No');
+    $tokens['open_enrollment'] = $object->classroom_course['open_end_inscription'] ? t('Open Enrollment') : t('No');
+    $tokens['use_grade_pct'] = $object->classroom_course['use_grade_percentages'] ? t('Use grade percentages') : t('No');
+    $tokens += _classroom_token_values_dates('course_start_date', $object->classroom_course['start_t']);
+    $tokens += _classroom_token_values_dates('course_end_date', $object->classroom_course['end_t']);
+    $tokens += _classroom_token_values_dates('registration_start_date', $object->classroom_course['registration_start']);
+    $tokens += _classroom_token_values_dates('registration_end_date', $object->classroom_course['registration_end']);
+  }
+  return $tokens;
+}
+
+
+function classroom_course_token_list($type = 'all') {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'course')) {
+    $tokens['Classroom: Course']['use_grade_pct'] = t("Whether or not the course uses grade percentages. (Values are: Use grade percentages|NO)");
+    $tokens['Classroom: Course']['open_enrollment'] = t("Whether or not the course has open enrollment. (Values are: Open Enrollment|NO)");
+    $tokens['Classroom: Course']['continuous_ed'] = t("Whether or not the course has no end date. (Values are: Continuous|NO)");
+    $tokens['Classroom: Course'] += _classroom_token_list_dates("course_start_date", "Course start");
+    $tokens['Classroom: Course'] += _classroom_token_list_dates("course_end_date", "Course end");
+    $tokens['Classroom: Course'] += _classroom_token_list_dates("registration_start_date", "Course registration start");
+    $tokens['Classroom: Course'] += _classroom_token_list_dates("registration_end_date", "Course registration end");
+  }
+  return $tokens;
 }
--- classroom\classroom.assignments.inc	Mon Oct 11 08:41:46 2010
+++ classroom\classroom.assignments.inc	Mon Nov 15 13:23:10 2010
@@ -667,3 +667,29 @@
       return $values;
   }
 }
+
+function classroom_assignment_token_values($type, $object = NULL, $options = array()) {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'assignment')) {
+    $tokens['grade_percentage'] = $object->classroom_assignment['grade_percentage'];
+    $tokens['max_grade'] = $object->classroom_assignment['max_grade'];
+    $tokens['topic_tid'] = $object->classroom_assignment['topic_tid'];
+    $tokens['course_nid'] = $object->classroom_assignment['course_nid'];
+    $tokens += _classroom_token_values_dates('due_date', $object->classroom_assignment['end_date']['end_t']);
+  }
+  return $tokens;
+}
+
+
+function classroom_assignment_token_list($type = 'all') {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'assignment')) {
+    $tokens['Classroom: Assignment']['grade_percentage'] = t("The grade percentage of this assignment.");
+    $tokens['Classroom: Assignment']['max_grade'] = t("The maximum grade possible for this assignment.");
+    $tokens['Classroom: Assignment']['topic_tid'] = t("The topic TID this assignment belongs to.");
+    $tokens['Classroom: Assignment']['course_nid'] = t("The course NID this assignment belongs to.");
+    $tokens['Classroom: Assignment'] += _classroom_token_list_dates("due_date", "Due Date");
+  }
+  return $tokens;
+}
+
--- classroom\classroom.responses.inc	Fri Jul 02 19:32:27 2010
+++ classroom\classroom.responses.inc	Mon Nov 15 13:22:58 2010
@@ -378,3 +378,23 @@
   }
   return array('classroom' => $link);
 }
+
+function classroom_response_token_values($type, $object = NULL, $options = array()) {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'response')) {
+    $tokens['grade'] = $object->classroom_response['grade'];
+    $tokens['assignment_nid'] = $object->classroom_response['assignment_nid'];
+    $tokens['course_nid'] = $object->classroom_response['course_nid'];
+  }
+  return $tokens;
+}
+
+function classroom_response_token_list($type = 'all') {
+  $tokens = array();
+  if ( 'all' == $type || _classroom_is_type($type, 'assignment')) {
+    $tokens['Classroom: Response']['grade'] = t("The grade received by the student.");
+    $tokens['Classroom: Response']['assignment_nid'] = t("The Assignment ID related to this response.");
+    $tokens['Classroom: Response']['course_nid'] = t("The Course ID related to this assignment response.");
+  }
+  return $tokens;
+}
