From da0741356115c0d34f43ee18954113377dfb01f2 Mon Sep 17 00:00:00 2001
From: Valerie Griffin <valeriegryphon@gmail.com>
Date: Fri, 4 Nov 2011 00:25:03 -0700
Subject: [PATCH] fix-path-alias: insert all nodes with any alias corrected,
 complete delete proc

---
 date_repeat_nodegen.module |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/date_repeat_nodegen.module b/date_repeat_nodegen.module
index 6422bae..99b453c 100755
--- a/date_repeat_nodegen.module
+++ b/date_repeat_nodegen.module
@@ -113,11 +113,15 @@ function date_repeat_nodegen_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
       unset($node->date_repeat_nodegen); // prevents infinite recursion when we save below...
       $field_name = $repeat_info['field_name'];
       
+	  // use submit and save to get a "clean" save of the first node, with any alias
+      $node = node_submit($node);
       $seqid = _date_repeat_nodegen_new_sequence($node, $repeat_info['rrule']);
+	  node_save($node);		// make sure any path alias gets the first date
       _date_repeat_nodegen_add_node_to_sequence($seqid, $node); // we've already saved the first node within this sequence, so add it to the sequence
       
       foreach ($repeat_info['dates'] as $date) {
         unset($node->nid);
+		unset($node->path);	// don't use prev node's alias
         unset($date['rrule']);
         $node->$field_name = array($date);
         $node = node_submit($node);
@@ -126,6 +130,11 @@ function date_repeat_nodegen_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
       }
     }
   }
+  
+  if ($op == 'delete') {
+	  // delete "our" reference to this node
+	  _date_repeat_nodegen_remove_node_from_sequence($node);
+  }
 }
 
 function _date_repeat_nodegen_new_sequence($node, $rrule) {
@@ -135,4 +144,18 @@ function _date_repeat_nodegen_new_sequence($node, $rrule) {
 
 function _date_repeat_nodegen_add_node_to_sequence($seqid, $node) {
   db_query("INSERT INTO {date_repeat_nodegen_sequence_member} (seqid, nid) VALUES (%d, %d)", $seqid, $node->nid);
-}
\ No newline at end of file
+}
+
+function _date_repeat_nodegen_remove_node_from_sequence($node) {
+	// get sequence ID in case we're through with it
+	$seqid = db_result(db_query("SELECT seqid FROM date_repeat_nodegen_sequence_member WHERE nid = '%d'", $node->nid));
+    if (! $seqid) { return ; }  // ignore if it's not there
+	
+	// delete node reference
+	db_query("DELETE FROM date_repeat_nodegen_sequence_member WHERE nid = '%d'", $node->nid);
+	
+	// if that was the last reference, delete the sequence
+	if (db_result(db_query("SELECT COUNT(*) FROM date_repeat_nodegen_sequence_member WHERE seqid = '%d'", $seqid)) == 0) {
+		db_query("DELETE FROM date_repeat_nodegen_sequence WHERE seqid = '%d'", $seqid);
+	}
+}
-- 
1.7.6.msysgit.0

