--- page_title.module	2007-04-27 03:11:27.000000000 +0800
+++ /opt/www/drupal-5.1.int.thatsbj.com/sites/all/modules/page_title/page_title.module	2007-06-07 13:37:20.000000000 +0800
@@ -58,7 +58,9 @@ function page_title_admin_settings() {
   $form['page_title'] = array(
     '#type' => 'fieldset',
     '#title' => t('Page title templates'),
+    '#collapsible' => TRUE,
   );
+
   $form['page_title']['page_title_individual'] = array(
     '#type' => 'textfield',
     '#title' => t('Pattern for individual pages'),
@@ -73,12 +75,53 @@ function page_title_admin_settings() {
     '#maxlength' => 128,
     '#description' => t('Available placeholders: <code>!site_name</code>, <code>!site_slogan</code>.'),
   );
+
+  if (module_exists('token')) {
+    $form['token_page_title'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Page title templates (using Token module)'),
+      '#collapsible' => TRUE,
+      );
+
+    $form['token_page_title']['page_title_node_default_pattern'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Default pattern for all node types'),
+      '#description' => t('If no page title pattern is entered for a node type below, the default pattern entered here will be used'),
+      '#default_value' => variable_get('page_title_node_default_pattern',''),
+    );
+
+    $nodetypes = node_get_types();
+    foreach ($nodetypes as $nodetype => $nodetype_data) {
+      $form['token_page_title']['page_title_'.$nodetype.'_pattern'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Pattern for %nodetypename page titles', array('%nodetypename' => $nodetype_data->name)),
+        '#default_value' => variable_get('page_title_'.$nodetype.'_pattern',''),
+      );
+    }
+    $form['token_page_title']['token_help'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Token replacement patterns'),
+      '#description' => t('This is a full list of patterns available via the Token module'),
+      '#collapsible' => TRUE,
+    );
+    $form['token_page_title']['token_help']['token_patterns'] = array(
+      '#value' => theme('token_help','all'),
+    );
+  }
+
   return system_settings_form($form);
 }
 
 function page_title_form_alter($form_id, &$form) {
   if ($form['#id'] == 'node-form' && user_access('set page title')) {
-    $form['page_title'] = array(
+    $form['page_title_settings'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Page title'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#weight' => 10,
+    );
+    $form['page_title_settings']['page_title'] = array(
       '#type' => 'textfield',
       '#title' => t('Page title'),
       '#default_value' => $form['#node']->page_title,
@@ -98,6 +141,21 @@ function page_title_nodeapi(&$node, $op,
       if (strlen(trim($node->page_title)) > 0) {
         db_query("INSERT INTO {page_title} VALUES (%d, '%s')", $node->nid, $node->page_title);
       }
+      else {
+        if (module_exists('token')) {
+          $default_pattern = variable_get('page_title_node_default_pattern','');
+          $node_pattern = variable_get('page_title_'.$node->type.'_pattern','');
+          if (trim($node_pattern)) {
+            $page_title = token_replace($node_pattern, 'node', $node);
+          }
+          else if (trim($default_pattern)) {
+            $page_title = token_replace($default_pattern, 'node', $node);
+          }
+          if ($page_title) {
+            db_query("INSERT INTO {page_title} VALUES (%d, '%s')", $node->nid, $page_title);
+          }
+        }
+      }
       break;
 
     case 'delete':
@@ -144,6 +202,21 @@ function page_title_node_get_title($nid)
 }
 
 /**
+ * Sets the page title for a node id
+ *
+ * @param the node's id
+ * @param the page title to set.
+ */
+function page_title_node_set_title($nid, $page_title) {
+  if (page_title_node_get_title($nid)) {
+    db_query("UPDATE {page_title} SET page_title = '%s' WHERE nid = %d", $page_title, $nid);
+  }
+  else {
+    db_query("INSERT INTO {page_title} (nid, page_title) VALUES (%d, '%s')", $nid, $page_title);
+  }
+}
+
+/**
  * Does the logic to see what title should be send to the page template. Call this function from
  * the page hook of function _phptemplate_variables in template.php.
  */
