Index: nodeteaser.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodeteaser/nodeteaser.install,v
retrieving revision 1.1
diff -U3 -r1.1 nodeteaser.install
--- nodeteaser.install	11 Sep 2006 17:47:22 -0000	1.1
+++ nodeteaser.install	4 Dec 2007 21:49:31 -0000
@@ -1,29 +1,71 @@
 <?php
+// $Id$
+
+
+/**
+ * Implementation of hook_install()
+ */
 function nodeteaser_install() {
   switch ($GLOBALS['db_type']) {
     case 'mysql':
     case 'mysqli':
       db_query("CREATE TABLE {nodeteaser} (
-  							nid int(11) NOT NULL default '0',
+  							nid int(10) NOT NULL default '0',
+  							vid int(10) NOT NULL default '0',
   							teaser text NOT NULL,
-  							KEY nid (nid)
+                teaser_format INT(4) NOT NULL DEFAULT 0,
+  							PRIMARY KEY vid (vid)
 								)  /*!40100 DEFAULT CHARACTER SET utf8 */;");
       break;
     case 'pgsql':
       db_query("CREATE TABLE {nodeteaser} (
   							nid int NOT NULL default '0',
+  							vid int NOT NULL default '0',
   							teaser text NOT NULL,
-  							KEY nid (nid)
+                teaser_format SMALLINT NOT NULL DEFAULT 0,
+  							PRIMARY KEY (vid)
 								)  /*!40100 DEFAULT CHARACTER SET utf8 */;");
       break;
   }
 
   // Notify of changes
   drupal_set_message(t('Node teaser module was successfully installed with default options. To customize node teaser, please view the <a href="%settings">node teaser settings page</a>.', array('%settings' => url('admin/settings/nodeteaser'))));
+}
 
+/**
+ * Implementation of hook_uninstall()
+ */
+function nodeteaser_uninstall() {
+  db_query('DROP TABLE {nodeteaser}');
+  variable_del('nodeteaser_empty');
+  variable_del('nodeteaser_readmore');
+  variable_del('nodeteaser_collapsed');
+  variable_del('nodeteaser_access');
+  variable_del('nodeteaser_access_pages');
 }
 
 function nodeteaser_update_1() {
   return _system_update_utf8(array('nodeteaser'));
 }
-?>
\ No newline at end of file
+
+function nodeteaser_update_2() {
+  $ret = array();
+  
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("ALTER TABLE {nodeteaser} ADD vid int(10) NOT NULL DEFAULT '0' AFTER nid");
+      $ret[] = update_sql("ALTER TABLE {nodeteaser} ADD teaser_format int(4) NOT NULL DEFAULT '0' AFTER teaser");
+      $ret[] = update_sql("ALTER TABLE {nodeteaser} DROP INDEX nid, ADD PRIMARY KEY vid (vid)");
+      break;
+    case 'pgsql':
+      db_add_column($ret, 'nodeteaser', 'vid', 'int', array('not null' => TRUE, 'default' => 0));
+      db_add_column($ret, 'nodeteaser', 'teaser_format', 'smallint', array('not null' => TRUE, 'default' => 0));
+      $ret[] = update_sql("ALTER TABLE {nodeteaser} DROP CONSTRAINT {nodeteaser}_nid_key, ADD PRIMARY KEY (vid)");
+      break;
+  }
+  
+  $ret[] = update_sql("UPDATE {nodeteaser}, {node} SET {nodeteaser}.vid = {node}.vid, {nodeteaser}.teaser_format = 1 WHERE {nodeteaser}.nid = {node}.nid");
+  
+  return $ret;
+}
Index: nodeteaser.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodeteaser/nodeteaser.module,v
retrieving revision 1.2.2.1
diff -U3 -r1.2.2.1 nodeteaser.module
--- nodeteaser.module	16 Feb 2007 19:57:30 -0000	1.2.2.1
+++ nodeteaser.module	4 Dec 2007 21:49:31 -0000
@@ -23,7 +23,6 @@
 			'callback' => 'drupal_get_form',
 			'callback arguments' => array('nodeteaser_admin_settings'),
 			'access' => user_access('administer site configuration'),
-			'type' => MENU_NORMAL_ITEM, // optional
 		);
   }
   return $items;
@@ -35,21 +34,69 @@
  */
 function nodeteaser_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
   switch ($op) {
-    case 'delete':
-    	_nodeteaser_delete($node);
+    case 'load':
+  	  $results = db_fetch_object(db_query('SELECT teaser, teaser_format FROM {nodeteaser} WHERE vid = %d', $node->vid));
+      $node->nodeteaser = $results->teaser;
+      $node->nodeteaser_format = $results->teaser_format;
       break;
+      
     case 'insert':
-    	_nodeteaser_insert($node);
+      _nodeteaser_insert($node);
     	break;
+    	
     case 'update':
       _nodeteaser_update($node);
       break;
+      
     case 'alter':
-    	$node->teaser = _nodeteaser_teaser($node);
+    	if ($node->nodeteaser != '') {
+    	  $node->teaser = check_markup($node->nodeteaser, $node->nodeteaser_format);
+    	}
+    	else {
+        switch (variable_get('nodeteaser_empty', 'drupal_default')) {
+          case 'drupal_default':
+            break;
+          case 'nothing':
+            $node->teaser = '&#160;';
+            break;
+          case 'node_title':
+            $node->teaser = $node->title;
+            break;
+          case 'full_post':
+            $node->teaser = $node->body;
+            break;
+        }
+      }
     	break;
+    	
+    case 'delete revision':
+      db_query("DELETE FROM {nodeteaser} WHERE vid = %d", $node->vid);
+      break;
+    	
+    case 'delete':
+      db_query("DELETE FROM {nodeteaser} WHERE nid = %d", $node->nid);
+      break;
   }
 }
 
+function _nodeteaser_insert($node) {
+  db_query("INSERT INTO {nodeteaser} (nid, vid, teaser, teaser_format) VALUES (%d, %d, '%s', %d)", $node->nid, $node->vid, $node->nodeteaser, $node->nodeteaser_format);
+}
+
+function _nodeteaser_update($node) {    	
+  if ($node->revision) {
+    _nodeteaser_insert($node);
+  }
+  else {
+    $results = db_fetch_object(db_query('SELECT vid FROM {nodeteaser} WHERE vid = %d', $node->vid));
+    if (!$results) {
+      _nodeteaser_insert($node);
+    }
+    else {
+      db_query("UPDATE {nodeteaser} SET teaser = '%s', teaser_format = %d WHERE vid = %d", $node->nodeteaser, $node->nodeteaser_format, $node->vid);
+    }
+  }
+}
 
 /**
  * Implementation of hook_form_alter().
@@ -57,110 +104,29 @@
 function nodeteaser_form_alter($form_id, &$form) {
 	if (_nodeteaser_page_match()) { // Make sure that teaser should be displayed on this page
 		if (isset($form['type']) && $form_id == $form['type']['#value'] . '_node_form') {
-			$type = 'node';
-			$id = $form['nid']['#value'];
-		} else if ($form_id == 'taxonomy_form_vocabulary') {
-			$type = 'vocabulary';
-			$id = $form['vid']['#value'];
-			$form['submit']['#weight'] = 5;
-			$form['delete']['#weight'] = 5;
-		} else if ($form_id == 'taxonomy_form_term') {
-			$type = 'term';
-			$id = $form['tid']['#value'];
-			$form['submit']['#weight'] = 5;
-			$form['delete']['#weight'] = 5;
-		}
-	
-		if (isset($type)) {
-			if (isset($id) && is_numeric($id)) {
-				$tags->teaser = _nodeteaser_teaser($id);
-			} else {
-				$tags = array();
-			}
-
-		$form['nt'] = array(
-					'#type' => 'fieldset', 
-					'#title' => t('Teaser or Summary'), 
-					'#collapsible' => TRUE, 
-					'#collapsed' => variable_get('nodeteaser_collapsed', FALSE),
-			);
-
-		$form['nt']['nodeteaser'] = array(
-			'#type' => 'textarea',
-			'#default_value' => $tags->teaser,
-			'#cols' => 65,
-			'#rows' => 12,
-			'#description' => t('Enter a teaser, summary, or description for this node. If you would like the whole body to display, DO NOT enter a teaser!'),
-			);
+      $node = $form['#node'];
+      
+      $form['nt'] = array(
+        '#type' => 'fieldset', 
+        '#title' => t('Teaser'), 
+        '#collapsible' => TRUE, 
+        '#collapsed' => variable_get('nodeteaser_collapsed', FALSE),
+      );
+      $form['nt']['nodeteaser'] = array(
+        '#type' => 'textarea',
+        '#title' => t('Teaser'), 
+        '#default_value' => $node->nodeteaser,
+        '#cols' => 65,
+        '#rows' => 8,
+        '#description' => t('Enter a teaser, summary, or description for this node. If you would like the whole body to display, DO NOT enter a teaser!'),
+        '#weight' => 0,
+      );
+      $form['nt']['nodeteaser_format'] = filter_form($node->nodeteaser_format, 1, array('format'));
 		}
   }
 }
 
 /**
- * Gets the correct teaser
- */
-function _nodeteaser_teaser($node) {
-	if (!is_object($node)) {
-		$id = $node; 
-		$node = (object) $node;
-	}
-	else {
-		$id = $node->nid;
-	}
-	if (isset($node->nodeteaser)) {
-		$nt->teaser = $node->nodeteaser;
-	} else {
-  	$nt = db_fetch_object(db_query('SELECT teaser FROM {nodeteaser} WHERE nid = %d', $id));
-  	if(!$nt) {
-  		$node->nodeteaser = FALSE;
-  	}
-  }
-  
-	if ($nt->teaser != '') {
-		$node->teaser = $nt->teaser;
-		$node->nodeteaser = TRUE;
-	}else {
-		switch (variable_get("nodeteaser_empty", 'drupal_default')) {
-			case 'drupal_default':
-				break;
-			case 'nothing':
-				$node->teaser = '&nbsp;';
-				break;
-			case 'node_title':
-				$node->teaser = $node->title;
-				break;
-			case 'full_post':
-				$node->teaser = $node->body;
-				break;
-		}
-		$node->nodeteaser = FALSE;
-	}
-  return $node->teaser;
-}
-
-/* Delete teaser from table */
-function _nodeteaser_delete($node) {
-  return db_query("DELETE FROM {nodeteaser} WHERE nid = %d", $node->nid);
-}
-/* Insert teaser into table */
-function _nodeteaser_insert($node) {
-  return db_query("INSERT INTO {nodeteaser} (nid, teaser) VALUES (%d, '%s')", $node->nid, $node->nodeteaser);
-}
-
-/**
- * Update teaser for new and existing content
- */
-function _nodeteaser_update($node) {
-
- $nt = db_fetch_object(db_query('SELECT teaser FROM {nodeteaser} WHERE nid = %d', $node->nid));
-
- if ($nt)
-   return db_query("UPDATE {nodeteaser} SET teaser = '%s' WHERE nid = %d", $node->nodeteaser, $node->nid);
- else
-   return _nodeteaser_insert($node);
- }
-
-/**
  * Module configuration settings
  * @return settings HTML or deny access
  */
@@ -194,13 +160,13 @@
   //$access = user_access('use PHP for block visibility');
 
   $options = array(t('Show on every page except the listed pages.'), t('Show on only the listed pages.'));
-  $description = t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are '%blog' for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => theme('placeholder', 'blog'), '%blog-wildcard' =>  theme('placeholder', 'blog/*'), '%front' => theme('placeholder', '<front>')));
+  $description = t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are '!blog' for the blog page and !blog-wildcard for every personal blog. !front is the front page.", array('!blog' => theme('placeholder', 'blog'), '!blog-wildcard' =>  theme('placeholder', 'blog/*'), '!front' => theme('placeholder', '<front>')));
 
   // If user does not have access to PHP code for visibility in Administer > access control > block,
   // radio button option for 'PHP for visibility' and description won't appear
   //if ($access) {
     $options[] = t('Show if the following PHP code returns <code>TRUE</code> (PHP-mode, experts only).');
-    $description .= t(' If the PHP-mode is chosen, enter PHP code between %php. Note that executing incorrect PHP-code can break your Drupal site.', array('%php' => theme('placeholder', '<?php ?>')));
+    $description .= t(' If the PHP-mode is chosen, enter PHP code between !php. Note that executing incorrect PHP-code can break your Drupal site.', array('!php' => theme('placeholder', '<?php ?>')));
   //}
 
   $form['nodeteaser_access'] = array(
@@ -249,4 +215,17 @@
     return $page_match;
 }
 
-?>
+/**
+ * Implementation of hook_diff().
+ */
+function nodeteaser_diff(&$old_node, &$new_node) {
+  $result = array();
+  
+  $result[] = array(
+    'name' => t('Teaser'),
+    'old' => explode("\n", $old_node->nodeteaser),
+    'new' => explode("\n", $new_node->nodeteaser),
+  );
+  
+  return $result;	
+}
