Index: xmlsitemap_node/xmlsitemap_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/xmlsitemap/xmlsitemap_node/xmlsitemap_node.module,v
retrieving revision 1.19.2.20
diff -u -p -r1.19.2.20 xmlsitemap_node.module
--- xmlsitemap_node/xmlsitemap_node.module	1 Jan 2009 16:06:27 -0000	1.19.2.20
+++ xmlsitemap_node/xmlsitemap_node.module	29 Jan 2009 16:00:10 -0000
@@ -109,11 +110,44 @@ function xmlsitemap_node_node_type($op, 
 }
 
 /**
+ * Insert a xmlsitemap_node record.
+ */
+function _xmlsitemap_node_insert($node) {
+  db_query("INSERT INTO {xmlsitemap_node} (nid, last_changed, priority_override) VALUES (%d, %d, %s)",
+    array(
+      $node->nid,
+      $node->changed,
+      $node->priority_override
+  );
+  if ($node->status) {
+    xmlsitemap_update_sitemap();
+  }
+}
+
+/**
+ * Update a xmlsitemap_node record.
+ */
+function _xmlsitemap_node_update($node) {
+  db_query("UPDATE {xmlsitemap_node}
+    SET previously_changed = last_changed, last_changed = %d, priority_override = %s
+    WHERE nid = %d",
+    array(
+      $node->changed,
+      $node->priority_override,
+      $node->nid
+    )
+  );
+  if ($node->status || $node->xmlsitemap_node_status) {
+    xmlsitemap_update_sitemap();
+  }
+}
+
+/**
  * Implementation of hook_nodeapi().
  */
 function xmlsitemap_node_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
   switch ($op) {
-    case 'prepare':
+    case 'load':
       $priority = db_result(db_query("SELECT priority_override
         FROM {xmlsitemap_node} WHERE nid = %d",
         $node->nid)
@@ -121,21 +155,14 @@ function xmlsitemap_node_nodeapi(&$node,
       $node->priority_override = $priority !== FALSE ? $priority : -2.0;
       break;
     case 'insert':
-      db_query("INSERT INTO {xmlsitemap_node} (nid, last_changed, priority_override) VALUES (%d, %d, %s)",
-        $node->nid, $node->changed, $node->priority_override
-      );
-      if ($node->status) {
-        xmlsitemap_update_sitemap();
-      }
+      _xmlsitemap_node_insert($node);
       break;
     case 'update':
-      db_query("UPDATE {xmlsitemap_node}
-        SET previously_changed = last_changed, last_changed = %d, priority_override = %s
-        WHERE nid = %d",
-        array($node->changed, $node->priority_override, $node->nid)
-      );
-      if ($node->status || $node->xmlsitemap_node_status) {
-        xmlsitemap_update_sitemap();
+      if (db_result(db_query("SELECT nid FROM {xmlsitemap_node} WHERE nid = %d", $node->nid))) {
+        _xmlsitemap_node_update($node);
+      }
+      else {
+        _xmlsitemap_node_insert($node);
       }
       break;
     case 'delete':
@@ -262,6 +289,22 @@ function xmlsitemap_node_type_submit($fo
   }
 }
 
+/**
+ * Implementation of hook_cron
+ */
+function xmlsitemap_node_cron () {
+  global $db_type;
+  $row_limit = variable_get('xmlsitemap_node_cron_row_limit', 20);
+  $sql = "SELECT nid FROM {node} WHERE nid NOT IN (SELECT nid FROM {xmlsitemap_node}) AND promote = 1 AND status = 1 ORDER BY nid LIMIT %d";
+  $result = db_query($sql, $row_limit);
+  if ($result !== FALSE) {
+    while ($nid = db_fetch_array($result)) {
+      $node = node_load($nid);
+      _xmlsitemap_node_insert($node);
+    }
+  }
+}
+
 /*****************************************************************************
  * Public functions.
  ****************************************************************************/
