### Eclipse Workspace Patch 1.0
#P feed_node
Index: feed_node.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feed_node/feed_node.install,v
retrieving revision 1.1
diff -u -r1.1 feed_node.install
--- feed_node.install	13 Dec 2006 17:09:03 -0000	1.1
+++ feed_node.install	8 Apr 2007 22:08:11 -0000
@@ -2,32 +2,30 @@
 // $Id: feed_node.install,v 1.1 2006/12/13 17:09:03 dayre Exp $ 
 
 /**
- * Implementation of the hook_install() module.
+ * Implementation of hook_install().
  */
 function feed_node_install() {
   switch ($GLOBALS['db_type']) {
     case 'mysql':
     case 'mysqli':
       db_query("CREATE TABLE feed_node (
-			  nid int(10) unsigned NOT NULL default '0',
-			  fid int(10) NOT NULL default '0',
-			  numItems int(10) NOT NULL default '0',
-			  displayStyle tinyint(1) NOT NULL default '0',
-			  PRIMARY KEY  (nid,fid)
-			) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;");
+        nid int(10) unsigned NOT NULL default '0',
+        fid int(10) NOT NULL default '0',
+        numItems int(10) NOT NULL default '0',
+        displayStyle tinyint(1) NOT NULL default '0',
+        PRIMARY KEY  (nid,fid)
+      ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;");
       break;
   }
  
   if (!db_error()) {
-		drupal_set_message("The feed node module has been installed successfully.");
+    drupal_set_message("The feed node module has been installed successfully.");
   }
   else {
-		drupal_set_message(t("A database error occured installing the feed node DB schema.  Feed node may not work."), "error");
+    drupal_set_message(t("A database error occured installing the feed node DB schema.  Feed node may not work."), "error");
   }
  
   include_once(drupal_get_path('module', 'feed_node') .'/feed_node.module'); 
   _feed_node_aggregator_dependency_check();
 
 }
-
-?>
\ No newline at end of file
Index: aggregation_api.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feed_node/aggregation_api.inc,v
retrieving revision 1.2
diff -u -r1.2 aggregation_api.inc
--- aggregation_api.inc	19 Dec 2006 19:17:25 -0000	1.2
+++ aggregation_api.inc	8 Apr 2007 14:59:43 -0000
@@ -39,7 +39,7 @@
  * @param $title
  * @param $url
  * @return
- * 	 Returns the id for the corresponding aggregator feed in the database or
+ *    Returns the id for the corresponding aggregator feed in the database or
  *   -1 if a conflict exists with an existing feed in the database.
  */
 function aggregation_sync_feed($title, $url) {
@@ -51,8 +51,8 @@
   // if there is no feed with the given url or title, we have an insert
   if (!$urlfeed && !$titlefeed) {
     $newfeed['url']=$url;
- 	  $newfeed['title']=$title;
- 	  return _aggregation_insert_feed($newfeed);
+     $newfeed['title']=$title;
+     return _aggregation_insert_feed($newfeed);
   }
   // if a feed exists with the URL, but none with the given title,
   // we update the title
@@ -67,14 +67,14 @@
     return _aggregation_update_feed($titlefeed);
   }
   
-	// if feeds exists with the given url and title and they are the same,
-	// then there is nothing to update
-	if ($urlfeed['fid'] == $titlefeed['fid']) {
-	  return $urlfeed['fid'];
-	}
+  // if feeds exists with the given url and title and they are the same,
+  // then there is nothing to update
+  if ($urlfeed['fid'] == $titlefeed['fid']) {
+    return $urlfeed['fid'];
+  }
    
-	// else a feed exists with the given URL, and a different feed exists with
-	// the given title, so we have a conflict the user must resolve
+  // else a feed exists with the given URL, and a different feed exists with
+  // the given title, so we have a conflict the user must resolve
   return -1;
 
 }
@@ -107,7 +107,7 @@
  *
  * @param $fid
  */
-function aggregation_remove_feed_items($fid){
+function aggregation_remove_feed_items($fid) {
   aggregator_remove($fid);
 }
 
@@ -141,7 +141,7 @@
  * 
  * @param $title
  * @return
- * 	 A array of aggregator feed information.
+ *    A array of aggregator feed information.
  */
  function aggregation_get_feed_by_title($title) {
    if (!$title) return FALSE;
@@ -159,7 +159,7 @@
  * @param $fid Feed Id 
  * @param $categories An array of categories to assign  
  */
- function aggregation_set_feed_categories($fid,$categories){
+ function aggregation_set_feed_categories($fid, $categories) {
    aggregation_clear_feed_categories($fid);
    if (is_array($categories)) {
      foreach ($categories as $cid) {
@@ -173,7 +173,7 @@
   * 
   * @param $fid Feed Id
   */
- function aggregation_clear_feed_categories($fid){
+ function aggregation_clear_feed_categories($fid) {
    db_query('DELETE FROM {aggregator_category_feed} WHERE fid=%d', $fid);
  }
  
@@ -185,9 +185,9 @@
  * @return 
  *   An array of category IDs
  */
- function aggregation_get_assigned_feed_categories($fid){
+ function aggregation_get_assigned_feed_categories($fid) {
    $result=db_query('SELECT cid FROM {aggregator_category_feed} WHERE fid = %d', $fid);
-   while($category=db_fetch_array($result)) {
+   while ($category=db_fetch_array($result)) {
      $values[]=$category[cid];
    }
    return $values;
@@ -199,16 +199,16 @@
  * 
  * @return A list of options, Id as key, title as value 
  */
- function aggregation_get_all_feed_categories(){
+ function aggregation_get_all_feed_categories() {
    static $options;
    if (!$options) {
      // get aggregator categories
      $result = db_query('SELECT title, cid FROM {aggregator_category} ORDER BY title');
      while ($category = db_fetch_array($result)) {
-      	$options[$category['cid']]=$category['title'];
+        $options[$category['cid']]=$category['title'];
      }
    }
-  	return $options;
+    return $options;
  }
 
 
@@ -227,16 +227,11 @@
  * @return 
  *   A feed id for the inserted feed
  */
- function _aggregation_insert_feed($feed){
+ function _aggregation_insert_feed($feed) {
    $fid = db_next_id('{aggregator_feed}_fid');
    $feed['refresh'] or $feed['refresh']=3600;
    $feed['block_id'] or $feed['block_id']=5;
-   db_query("INSERT INTO {aggregator_feed} (fid, title, url, refresh, block) VALUES (%d, '%s', '%s', %d, %d)",
-   $fid,
-   $feed['title'],
-   $feed['url'],
-   $feed['refresh'],
-   $feed['block_id']);
+   db_query("INSERT INTO {aggregator_feed} (fid, title, url, refresh, block) VALUES (%d, '%s', '%s', %d, %d)", $fid, $feed['title'], $feed['url'], $feed['refresh'], $feed['block_id']);
    
    if (!db_error()) {
      drupal_set_message(t('A new aggregator feed "%title" was created', array('%title' => $feed['title'])));
@@ -254,13 +249,9 @@
  * @return 
  *   A feed id for the updated feed
  */
- function _aggregation_update_feed($feed){
+ function _aggregation_update_feed($feed) {
    $feed['refresh'] or $feed['refresh']=3600;
-   db_query("UPDATE {aggregator_feed} SET title = '%s', url = '%s', refresh = %d WHERE fid = %d",
-   $feed['title'],
-   $feed['url'],
-   $feed['refresh'],
-   $feed['fid']);
+   db_query("UPDATE {aggregator_feed} SET title = '%s', url = '%s', refresh = %d WHERE fid = %d", $feed['title'], $feed['url'], $feed['refresh'], $feed['fid']);
    return $feed['fid'];
  }
 ?>
\ No newline at end of file
Index: feed_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feed_node/feed_node.module,v
retrieving revision 1.3
diff -u -r1.3 feed_node.module
--- feed_node.module	19 Dec 2006 19:57:57 -0000	1.3
+++ feed_node.module	8 Apr 2007 14:59:43 -0000
@@ -13,7 +13,7 @@
  */
 
 // Currently, the feedfield project also uses the same aggregation_api.inc file
-// which we need to check if already included.  feed_node and feedfield are 
+// which we need to check if already included.  feed_node and feedfield are
 // working towards adding more stability and functionality to the api for
 // wider usage with other aggregator related modules.
 if (!function_exists('aggregation_sync_feed')) {
@@ -26,11 +26,11 @@
 function feed_node_help($section) {
   switch ($section) {
     case 'admin/modules#description':
-	    $output = t('The feed node module enables a node to have an aggregator feed associated with it.');
-			break;
-		case "admin/settings/feed_node":
-			$output = '<p>' . t('The feed node module allows you to associate an aggregator feed with a particular node so that aggregator feed items can be displayed within the node body.') . '</p>';
-			break;  	
+      $output = t('The feed node module enables a node to have an aggregator feed associated with it.');
+      break;
+    case "admin/settings/feed_node":
+      $output = '<p>'. t('The feed node module allows you to associate an aggregator feed with a particular node so that aggregator feed items can be displayed within the node body.') .'</p>';
+      break;    
   }
   
   return $output;
@@ -40,13 +40,13 @@
  * Implementation of hook_menu().
  */
 function feed_node_menu($may_cache) {
-	$items = array();
-	
-	$items[] = array('path' => 'admin/settings/feed_node', 'title' => t('feed node'),
+  $items = array();
+  
+  $items[] = array('path' => 'admin/settings/feed_node', 'title' => t('feed node'),
     'callback' => 'feed_node_settings',
     'access' => user_access('administer feed node'));
 
-	return $items;
+  return $items;
 }
 
 /**
@@ -57,9 +57,9 @@
 }
 
 function _feed_node_aggregator_dependency_check() {
-	if (!module_exist("aggregator")) {
-  		drupal_set_message(t("You do not have the aggregator module installed.  Please ensure this is enabled or feed node will not work."), "error");
-  	}
+  if (!module_exist("aggregator")) {
+      drupal_set_message(t("You do not have the aggregator module installed.  Please ensure this is enabled or feed node will not work."), "error");
+    }
 }
 
 /**
@@ -67,43 +67,43 @@
  */
 function feed_node_settings() {
 
-	_feed_node_aggregator_dependency_check();
+  _feed_node_aggregator_dependency_check();
 
-	$form = array();
-	$form['feed_node_allowed_html_tags'] = array(
-		'#type' => 'textfield', 
-		'#title' => t('Allowed HTML tags'), 
-		'#size' => 80, 
-		'#maxlength' => 255,
-		'#default_value' => variable_get("feed_node_allowed_html_tags", '<blockquote> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'),
-		'#description' => t('The list of tags which are allowed in feed items, i.e., which will not be stripped out.')
-	);
-	
-	$form['feed_node_teaser_length'] = array(
-		'#type' => 'textfield', 
-		'#title' => t('Teaser length'), 
-		'#size' => 10, 
-		'#maxlength' => 5,
-		'#default_value' => variable_get('feed_node_teaser_length', 200),
-		'#description' => t('The maximum length for feed items.  Feed items longer than this will be truncated.')
-	);
-	
-	$form['feed_node_delete_flag'] = array(
-		'#type' => 'checkbox', 
-		'#title' => t('Delete aggregator feed on node delete'), 
-		'#default_value' => variable_get('feed_node_delete_flag', 1),
-		'#description' => t('Each feed enabled node is associated with a corresponding aggregator feed.  If this is checked, then when the node is deleted, the corresponding aggregator feed is also deleted.')
-	);
-	
-	// we could just to a standard 4.7 forms API returning of the $form variable,
-	// but the only way to get a admin/settings menu title that says "feed node" instead
-	// of "feed_node" is to specify a custom menu callback hook to this settings method, where
-	// we now have to do some more traditional form stuff... like create a corresponding
-	// submit method
-	$form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-	$form['clear'] = array('#type' => 'submit', '#value' => t('Reset to defaults'));
-	  	
-	return drupal_get_form('feed_node_settings', $form);
+  $form = array();
+  $form['feed_node_allowed_html_tags'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Allowed HTML tags'),
+    '#size' => 80,
+    '#maxlength' => 255,
+    '#default_value' => variable_get("feed_node_allowed_html_tags", '<blockquote> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'),
+    '#description' => t('The list of tags which are allowed in feed items, i.e., which will not be stripped out.'),
+  );
+  
+  $form['feed_node_teaser_length'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Teaser length'),
+    '#size' => 10,
+    '#maxlength' => 5,
+    '#default_value' => variable_get('feed_node_teaser_length', 200),
+    '#description' => t('The maximum length for feed items.  Feed items longer than this will be truncated.'),
+  );
+  
+  $form['feed_node_delete_flag'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Delete aggregator feed on node delete'), 
+    '#default_value' => variable_get('feed_node_delete_flag', 1),
+    '#description' => t('Each feed enabled node is associated with a corresponding aggregator feed.  If this is checked, then when the node is deleted, the corresponding aggregator feed is also deleted.'),
+  );
+  
+  // we could just to a standard 4.7 forms API returning of the $form variable,
+  // but the only way to get a admin/settings menu title that says "feed node" instead
+  // of "feed_node" is to specify a custom menu callback hook to this settings method, where
+  // we now have to do some more traditional form stuff... like create a corresponding
+  // submit method
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+  $form['clear'] = array('#type' => 'submit', '#value' => t('Reset to defaults'));
+  
+  return drupal_get_form('feed_node_settings', $form);
 }
 
 function feed_node_settings_submit($form_id, $values) {
@@ -137,19 +137,16 @@
 function _feed_node_validate($form) {
 
   // if only one of feedtitle or feedurl exist, error
-  // if both exist, then numitems must exist      
-  if (trim($form->feed_node['aggregator_feed']['title']) 
-  && !trim($form->feed_node['aggregator_feed']['url'])) {
-		form_set_error('feed_node][aggregator_feed][url', t('If you specify a feed title, you must also specify a feed URL.'));
-  }
-  if (!trim($form->feed_node['aggregator_feed']['title']) 
-  && trim($form->feed_node['aggregator_feed']['url'])) {
-		form_set_error('feed_node][aggregator_feed][title', t('If you specify a feed URL, you must also specify a feed title.'));
+  // if both exist, then numitems must exist
+  if (trim($form->feed_node['aggregator_feed']['title']) && !trim($form->feed_node['aggregator_feed']['url'])) {
+    form_set_error('feed_node][aggregator_feed][url', t('If you specify a feed title, you must also specify a feed URL.'));
+  }
+  if (!trim($form->feed_node['aggregator_feed']['title']) && trim($form->feed_node['aggregator_feed']['url'])) {
+    form_set_error('feed_node][aggregator_feed][title', t('If you specify a feed URL, you must also specify a feed title.'));
   }
   
-  if (trim($form->feed_node['aggregator_feed']['title']) 
-  && trim($form->feed_node['aggregator_feed']['url']) && !trim($form->feed_node['numItems'])) {
-		form_set_error('feed_node][numItems', t('If you specify a feed, you must also specify how many feed items to list.'));
+  if (trim($form->feed_node['aggregator_feed']['title']) && trim($form->feed_node['aggregator_feed']['url']) && !trim($form->feed_node['numItems'])) {
+    form_set_error('feed_node][numItems', t('If you specify a feed, you must also specify how many feed items to list.'));
   }
   
   // check to see that we don't have a conflict with an existing feed
@@ -169,11 +166,11 @@
  * @param $node
  * @param $op
  */
-function feed_node_nodeapi(&$node, $op) { 
-	
+function feed_node_nodeapi(&$node, $op) {
+  
   switch ($op) {
     case 'validate':
-	  	_feed_node_validate($node);
+      _feed_node_validate($node);
       break;
 
     // load the extended node attributes
@@ -181,71 +178,67 @@
   
       // fetch the feed node
       $feed_node = db_fetch_array(db_query('SELECT * FROM {feed_node} WHERE nid = %d', $node->nid));
-		
-			// if no feed attached to the node, nothing to do... 	
-			if ($feed_node) {	      
-		    // fetch the aggregator feed
-		    $aggregator_feed  = aggregation_get_feed_by_id($feed_node['fid']);
-		    
-			  // fetch the aggregator items for the feed
-			 	$result = db_query('SELECT * FROM {aggregator_item} WHERE fid = %d ORDER BY timestamp DESC, iid DESC LIMIT %d', $feed_node['fid'], $feed_node['numItems']);
-		    while ($data = db_fetch_array($result)) {
-		       $aggregator_items[] = $data;	
-		    }
-			  
-			  // tack on the feed and feed items
-			  $feed_node['aggregator_feed'] 	= $aggregator_feed;
-			  $feed_node['aggregator_items'] 	= $aggregator_items;
-		     
-		    // return the additional node attributes
-		    return array('feed_node' => $feed_node);
-			}
+    
+      // if no feed attached to the node, nothing to do...
+      if ($feed_node) {
+        // fetch the aggregator feed
+        $aggregator_feed  = aggregation_get_feed_by_id($feed_node['fid']);
+        
+        // fetch the aggregator items for the feed
+         $result = db_query('SELECT * FROM {aggregator_item} WHERE fid = %d ORDER BY timestamp DESC, iid DESC LIMIT %d', $feed_node['fid'], $feed_node['numItems']);
+        while ($data = db_fetch_array($result)) {
+           $aggregator_items[] = $data;
+        }
+        
+        // tack on the feed and feed items
+        $feed_node['aggregator_feed']   = $aggregator_feed;
+        $feed_node['aggregator_items']   = $aggregator_items;
+         
+        // return the additional node attributes
+        return array('feed_node' => $feed_node);
+      }
       break;
 
     // insert the extended feed node attributes, only if we a feed title or feed url
     case 'insert':
     case 'update':
       if ($op == "update") {
-      	// do a fresh insert
-	  		db_query('DELETE FROM {feed_node} WHERE nid = %d', $node->nid);
-	  	}
-
-		  // if we have a feed, ensure it is synced with the aggregator feed.  Syncing ensures that
-		  // the feed exists in the aggregator table.  If it doesn't, a new entry is created.  If the
-		  // title or URL matches an existing entry, then the call to aggregation_sync_feed() ensures that
-		  // the aggregator feed item is updated so that the title and URL specified are updated for that
-		  // feed.
-		  if (trim($node->feed_node['aggregator_feed']['title']) && trim($node->feed_node['aggregator_feed']['url'])) {
-				$fid = aggregation_sync_feed($node->feed_node['aggregator_feed']['title'], $node->feed_node['aggregator_feed']['url']);
-				if ($fid != -1) {
-				  db_query('INSERT INTO {feed_node} (nid, fid, numItems, displayStyle) VALUES (%d, %d, %d, %d)', $node->nid, $fid, $node->feed_node['numItems'], $node->feed_node['displayStyle']);
-				}
-				else {
-				  
-				}
-			}
-	  
+        // do a fresh insert
+        db_query('DELETE FROM {feed_node} WHERE nid = %d', $node->nid);
+      }
+
+      // if we have a feed, ensure it is synced with the aggregator feed.  Syncing ensures that
+      // the feed exists in the aggregator table.  If it doesn't, a new entry is created.  If the
+      // title or URL matches an existing entry, then the call to aggregation_sync_feed() ensures that
+      // the aggregator feed item is updated so that the title and URL specified are updated for that
+      // feed.
+      if (trim($node->feed_node['aggregator_feed']['title']) && trim($node->feed_node['aggregator_feed']['url'])) {
+        $fid = aggregation_sync_feed($node->feed_node['aggregator_feed']['title'], $node->feed_node['aggregator_feed']['url']);
+        if ($fid != -1) {
+          db_query('INSERT INTO {feed_node} (nid, fid, numItems, displayStyle) VALUES (%d, %d, %d, %d)', $node->nid, $fid, $node->feed_node['numItems'], $node->feed_node['displayStyle']);
+        }
+      }
       break;
 
     // delete the extended feed node attributes
     case 'delete':
       db_query('DELETE FROM {feed_node} WHERE nid = %d', $node->nid);
     
-      // if this node has an associated feed and the delete flag is set, 
+      // if this node has an associated feed and the delete flag is set,
       // delete the feed and feed items
       if (aggregation_get_feed_by_id($node->feed_node['fid']) && variable_get('feed_node_delete_flag', 1)) {
-    	  aggregation_delete_feed($node->feed_node['fid']);
+        aggregation_delete_feed($node->feed_node['fid']);
       }
       break;
 
     case 'view':
-		  // if we have an attached feed, display it in the body of the node
-		  if ($node->feed_node) {
-			  $node->body = $node->body . theme('feed_node', $node->feed_node);
-		  }
+      // if we have an attached feed, display it in the body of the node
+      if ($node->feed_node) {
+        $node->body = $node->body . theme('feed_node', $node->feed_node);
+      }
       break;
   }
-} 
+}
 
 /**
  * Hook to alter the node edit form so we can allow the user to specify feed information and
@@ -286,61 +279,61 @@
 
     case $type .'_node_form':
       
-	  // If the feed is enabled for this node type, we insert our control
+    // If the feed is enabled for this node type, we insert our control
     // into the form.
     if ($enabled) {
-		
-			// if we have a feed, body isn't mandatory, we override the
-			// default of a mandatory body.
-			$form['body_filter']['body']['#required'] = 0;
-	  
-			$form['feed_node'] = array(
-		    '#type' => 'fieldset',
-		    '#title' => t('Feed information'),
-		    '#collapsible' => TRUE,
-		    '#collapsed' => TRUE,
-		    '#tree' => TRUE,
-		    '#weight' => 1
-		  );
-	         
-			// fetch feed data to populate title and url form elements
-			$feed = aggregation_get_feed_by_id($form['#node']->feed_node['fid']);
-			
-			$form['feed_node']['aggregator_feed']['title'] = array(
-			  '#type' => 'textfield',
-			  '#title' => t('Title of feed'),
-			  '#default_value' => $feed['title'],
-			  '#required' => FALSE,
-			  '#maxlength' => 255,
-			  '#tree' => TRUE,
-			  '#weight' => 0,
-			);
-			
-			$form['feed_node']['aggregator_feed']['url'] = array(
-			  '#type' => 'textfield',
-			  '#title' => t('Feed URL'),
-			  '#default_value' => $feed['url'],
-			  '#required' => FALSE,
-			  '#maxlength' => 255,
-			  '#weight' => 0,
-			);
-	
-			$numItems = $form['#node']->feed_node['numItems'];
-	    $form['feed_node']['numItems'] = array(
-	      '#type' => 'textfield',
-	      '#title' => t('Number of feed items to display'),
-	      '#default_value' => $numItems ? $numItems : 10  ,
-	      '#required' => FALSE,
-	      '#maxlength' => 10,
-	      '#weight' => 1,
-	    );
-	        
-			$form['feed_node']['displayStyle'] = array(
-				'#type' => 'radios',
-				'#title' => t('Display style'),
-				'#default_value' => $form['#node']->feed_node['displayStyle'],
-				'#options' => array(t('Title + Teaser'), t('Title only')),
-			);
+    
+      // if we have a feed, body isn't mandatory, we override the
+      // default of a mandatory body.
+      $form['body_filter']['body']['#required'] = 0;
+    
+      $form['feed_node'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Feed information'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+        '#tree' => TRUE,
+        '#weight' => 1,
+      );
+           
+      // fetch feed data to populate title and url form elements
+      $feed = aggregation_get_feed_by_id($form['#node']->feed_node['fid']);
+      
+      $form['feed_node']['aggregator_feed']['title'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Title of feed'),
+        '#default_value' => $feed['title'],
+        '#required' => FALSE,
+        '#maxlength' => 255,
+        '#tree' => TRUE,
+        '#weight' => 0,
+      );
+      
+      $form['feed_node']['aggregator_feed']['url'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Feed URL'),
+        '#default_value' => $feed['url'],
+        '#required' => FALSE,
+        '#maxlength' => 255,
+        '#weight' => 0,
+      );
+  
+      $numItems = $form['#node']->feed_node['numItems'];
+      $form['feed_node']['numItems'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Number of feed items to display'),
+        '#default_value' => $numItems ? $numItems : 10  ,
+        '#required' => FALSE,
+        '#maxlength' => 10,
+        '#weight' => 1,
+      );
+          
+      $form['feed_node']['displayStyle'] = array(
+        '#type' => 'radios',
+        '#title' => t('Display style'),
+        '#default_value' => $form['#node']->feed_node['displayStyle'],
+        '#options' => array(t('Title + Teaser'), t('Title only')),
+      );
    } // endif
    break;
 
@@ -368,14 +361,14 @@
 function _feed_node_fetch_unique_feed_items($result) {
   
   $item_tracker = array();
-	if (db_num_rows($result)) {
-		while ($item = db_fetch_array($result)) {
-			if ($item_tracker[$item['timestamp']] != md5($item['description'])) {
-				$item_tracker[$item['timestamp']] = md5($item['description']);
-			  $items[] = $item;
-			}
-		}
-	}
+  if (db_num_rows($result)) {
+    while ($item = db_fetch_array($result)) {
+      if ($item_tracker[$item['timestamp']] != md5($item['description'])) {
+        $item_tracker[$item['timestamp']] = md5($item['description']);
+        $items[] = $item;
+      }
+    }
+  }
   return $items;
 }
 
@@ -394,9 +387,9 @@
   $output .= '<h3>'. t($feed['title']) .'</h3>';
   
   if ($feed['link']) {
-	  $output .= '<div class="feed-url"><em>'. t('URL:') .'</em> '. l($feed['link'], $feed['link'], array(), NULL, NULL, TRUE) ."</div>\n";
+    $output .= '<div class="feed-url"><em>'. t('URL:') .'</em> '. l($feed['link'], $feed['link'], array(), NULL, NULL, TRUE) ."</div>\n";
   }
-	
+  
   if ($feed['checked']) {
     $updated = t('%time ago', array('%time' => format_interval(time() - $feed['checked'])));
   }
@@ -408,19 +401,17 @@
     $updated = l($updated, 'admin/aggregator');
   }
 
-  $output .= '<div class="feed-updated"><em>'. t('Updated:') . "</em> $updated</div>";
+  $output .= '<div class="feed-updated"><em>'. t('Updated:') ."</em> $updated</div>";
   
   // output individual feed items
   $aggregator_items = $feed_node['aggregator_items'];
   if ($aggregator_items) {
-	  foreach ($aggregator_items as $aggregator_item) {
-	  	$item_outputs[] = $feed_node['displayStyle'] 	
-	  						? theme('feed_node_item_summary', $aggregator_item) 
-	  						: theme('feed_node_item', $aggregator_item);
-	  }
+    foreach ($aggregator_items as $aggregator_item) {
+      $item_outputs[] = $feed_node['displayStyle'] ? theme('feed_node_item_summary', $aggregator_item) : theme('feed_node_item', $aggregator_item);
+    }
   }
   else {
-  	$item_outputs[] = t("No feed items available.");
+    $item_outputs[] = t("No feed items available.");
   }
     
   // if title only, theme as a list, else concatenate item outputs.
@@ -428,23 +419,19 @@
   
   $output .= '</div>';
 
-  return $output;	
+  return $output;  
 } 
 
 /**
  * Returns a themed summary display for an individual aggregator feed item.
  * 
  * @param $item 
- * 	 The item array from the aggregator module.
+ *    The item array from the aggregator module.
  * @return 
- * 	 A string containing the HTML fragment.
+ *    A string containing the HTML fragment.
  */
 function theme_feed_node_item_summary($item) {
-  $output = '<a href="' . 
-  					check_url($item['link']) .'">' . 
-  					check_plain($item['title']) .
-  					'</a> <span class="age">'. 
-  					t('%age old', array('%age' => format_interval(time() - $item['timestamp']))) .'</span>';
+  $output = '<a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a> <span class="age">'. t('%age old', array('%age' => format_interval(time() - $item['timestamp']))) .'</span>';
   return $output ."\n";
 }
 
@@ -453,9 +440,9 @@
  * Returns a themed detail display for an individual aggregator feed item.
  * 
  * @param $item
- * 	 The item array from the aggregator module.
+ *    The item array from the aggregator module.
  * @return
- * 	 A string containing the HTML fragment.
+ *    A string containing the HTML fragment.
  */
 function theme_feed_node_item($item) {
 
@@ -496,30 +483,28 @@
  * to the specified length.
  * 
  * @param $html
- * 	 The HTML fragment to summarize
+ *    The HTML fragment to summarize
  * @param $length
- * 	 The maximum length the truncated fragment should be.
+ *    The maximum length the truncated fragment should be.
  * @return
- * 	 The truncated HTMl fragment.
+ *    The truncated HTMl fragment.
  */
 function _feed_node_truncate($html, $length = 200) {
 
-	// similar to feedburner summarize feature, strips out links, then truncates to approximate
-	// length.		
-	$html = filter_xss($html, preg_split('/\s+|<|>/', variable_get("feed_node_allowed_html_tags", '<blockquote> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'), -1, PREG_SPLIT_NO_EMPTY));
-	
-	// zip in $length chars, then skip to the next word boundary
-	if (preg_match("/(.{" . $length . "})(.*?)\W/", $html, $m)) {
-		$html = $m[1] . $m[2] . "...";
-	}
-	
-	// if still over the length due to extremely long word, chop it
-	if (strlen($html) > $length) {
-		$html = substr($html, 0, $length) . "...";
-	}
-	
-	return $html; 
+  // similar to feedburner summarize feature, strips out links, then truncates to approximate
+  // length.    
+  $html = filter_xss($html, preg_split('/\s+|<|>/', variable_get("feed_node_allowed_html_tags", '<blockquote> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'), -1, PREG_SPLIT_NO_EMPTY));
+  
+  // zip in $length chars, then skip to the next word boundary
+  if (preg_match("/(.{". $length ."})(.*?)\W/", $html, $m)) {
+    $html = $m[1] . $m[2] ."...";
+  }
+  
+  // if still over the length due to extremely long word, chop it
+  if (strlen($html) > $length) {
+    $html = substr($html, 0, $length) ."...";
+  }
+  
+  return $html; 
 }
 
-
-?>
\ No newline at end of file
