--- usernode.module	2008-06-10 11:39:54.000000000 +0000
+++ usernode.module	2008-11-17 17:45:16.000000000 +0000
@@ -12,7 +12,9 @@
  * You may change this to your custom nodetype, if you do so you may also remove
  * the next 6 functions, however reimplementing hook_delete would be suggested.
  */
-define('USERNODE_CONTENT_TYPE', "usernode");
+if (!defined('USERNODE_CONTENT_TYPE')) {
+  define('USERNODE_CONTENT_TYPE', 'usernode');
+}
 
 /**
  * Usernode custom nodetype
@@ -26,6 +28,8 @@
       'locked' => TRUE,
       'has_body' => FALSE,
       'has_title' => FALSE,
+      'title_label' => '', // D6 creates a PHP notice without this explicit setting
+      'body_label' => ''
     )
   );
 }
@@ -71,8 +75,7 @@
   }
 
   if ($op == 'update') {
-    if ((user_access('edit own usernode') && is_usernode($node))
-      || user_access('edit usernodes') ) {
+  	if ((user_access('edit own usernode') && is_usernode($node)) || user_access('edit usernodes')) {      	
       return TRUE;
     }
   }
@@ -151,85 +154,114 @@
 }
 
 /**
- * Implementation of hook_menu().
+ * Implementation of hook_init().
+ *
+ * Displays an error message for users attempting to delete a usernode.
  */
-function usernode_menu($may_cache) {
-  global $user;
-
-  if ($may_cache) {
-    // prevent manual adding of usernodes
-    $items[] = array('path' => 'node/add/'. USERNODE_CONTENT_TYPE,
-        'callback' => 'usernode_prevent_manual_adding',
-        'access' => user_access('administer nodes'),
-        'type' => MENU_CALLBACK);
-
-    $items[] = array('path' => 'usernode',
-        'callback' => 'usernode_view_own_usernode',
-        'title' => t('My usernode'),
-        'access' => $user->uid && user_access('access content'),
-        'type' => MENU_SUGGESTED_ITEM);
-    return $items;
-  }
-
-  if (!$may_cache && arg(0) == 'node' && is_numeric(arg(1))) {
+function usernode_init() {
+ if (arg(0) == 'node' && is_numeric(arg(1))) {
     $node = node_load(arg(1));
     if ($node->nid && $node->type == USERNODE_CONTENT_TYPE && arg(2) == 'delete') {
       // somebody tries to delete a usernode!
-      drupal_set_message(t("It's not possible to delete a usernode!"), 'error');
+      drupal_set_message(t('It\'s not possible to delete a usernode!'), 'error');
       drupal_goto('');
     }
   }
 }
 
 /**
+ * Implementation of hook_menu().
+ *
+ * @return array
+ */
+function usernode_menu() {
+  global $user;
+
+  // prevent manual adding of usernodes
+  $items['node/add/'. USERNODE_CONTENT_TYPE] = array(
+    'page callback' => 'usernode_prevent_manual_adding',
+    'access callback' => 'user_access',
+    'access arguments' => array('administer nodes'),
+    'type' => MENU_CALLBACK
+  );
+
+  $items['usernode'] = array(
+    'title' => 'My usernode',
+    'page callback' => 'usernode_view_own_usernode',
+    'access callback' => 'usernode_menu_access',
+    'type' => MENU_SUGGESTED_ITEM
+  );
+  return $items;
+}
+
+/**
+ * Access permission check for the "usernode" path in hook_menu()
+ *
+ * @return bool
+ */
+function usernode_menu_access() {
+  global $user;
+  return !empty($user->uid) && user_access('access content');
+}
+
+/**
  * Delete the associated node(s). Called by hook_user().
  */
 function usernode_delete_node(&$user) {
   $node = usernode_get_node($user);
 
-  db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
-  db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
-  db_query('DELETE FROM {usernode} WHERE nid = %d', $node->nid);
-
-  // Don't call hook_delete as we prevent deletion there
-  node_invoke_nodeapi($node, 'delete');
+  if (!empty($node)) {
+    db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
+    db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
+    db_query('DELETE FROM {usernode} WHERE nid = %d', $node->nid);
+
+    // Don't call hook_delete as we prevent deletion there
+    node_invoke_nodeapi($node, 'delete');
+
+    // Remove this node from the search index if needed.
+    if (function_exists('search_wipe')) {
+      search_wipe($node->nid, 'node');
+    }
+  }
 
   // Clear the cache so an anonymous poster can see the node being deleted.
   cache_clear_all();
-
-  // Remove this node from the search index if needed.
-  if (function_exists('search_wipe')) {
-    search_wipe($node->nid, 'node');
-  }
 }
 
 /**
  * Create an associated node. Called by hook_user().
  */
 function usernode_create_node($user) {
+
   $node = array(
     'type' => USERNODE_CONTENT_TYPE,
-    'title' => check_plain($user->name),
-    'name' => $user->name,
-    'uid' => $user->uid,
-    'user' => $user,
+  	'title' => check_plain($user->name),
   );
-  usernode_save_node($node);
+  
+  $form_state = array(
+    'values' => array(
+      'title' => check_plain($user->name),
+      'body' => '',
+      'name' => $user->name,
+      'op' => t('Save')
+    )
+  );
+  
+  usernode_save_node($form_state, $node);
 }
 
-/*
+/**
  * Saves a usernode by using drupal_execute.
  * This allows modules like auto_nodetitle to work and makes sure all hooks are invoked properly
  */
-function usernode_save_node($node) {
-  $values = array();
+function usernode_save_node($form_state, $node) {
 
   // workaround to disable drupal message "Your usernode has been created"
   $messages = drupal_get_messages();
-
-  // create the usernode
-  drupal_execute(USERNODE_CONTENT_TYPE .'_node_form', $values, $node);
-
+ 
+  module_load_include('inc', 'node', 'node.pages');
+  drupal_execute(USERNODE_CONTENT_TYPE .'_node_form', $form_state, (object)$node);
+ 
   // write back the old messages
   $_SESSION['messages'] = $messages;
 }
@@ -255,8 +287,7 @@
  * Insert a node/user relationship into the {usernode} table.
  */
 function usernode_insert($node) {
-  db_query("INSERT INTO {usernode} (nid,uid) VALUES(%d,%d)",
-    $node->nid, $node->uid);
+  db_query('INSERT INTO {usernode} (nid, uid) VALUES (%d, %d)', $node->nid, $node->uid);
 }
 
 /**
@@ -267,7 +298,17 @@
     //make sure the node is associated with the updated $user and save it again,
     //so the usernode is updated
     $node->user = $user;
-    usernode_save_node($node);
+  $node = array(
+    'nid' => $node->nid,
+    'type' => USERNODE_CONTENT_TYPE
+  );
+  $form_state = array(
+    'values' => array(
+      'title' => check_plain($user->name),
+      'name' => $user->name
+    )
+  );
+  usernode_save_node($form_state, $node);
   }
   else {
     usernode_create_node($user);
@@ -279,7 +320,7 @@
  * Load the user object of the corresponding user into $node->user.
  */
 function usernode_load($node) {
-  $sql = "SELECT uid FROM {usernode} WHERE nid = %d";
+  $sql = 'SELECT uid FROM {usernode} WHERE nid = %d';
   $uid = db_result(db_query($sql, $node->nid));
 
   if ($uid) {
@@ -312,9 +353,9 @@
   static $history = array();
 
   if (!is_object($user)) {
-    if (!$history[$user]) {
-      $history[$user] = db_result(db_query("SELECT nid FROM {usernode} WHERE uid = %d", $user));
-    }
+  if (empty($history[$user])) {
+      $history[$user] = db_result(db_query('SELECT nid FROM {usernode} WHERE uid = %d', $user));
+     }
     return $history[$user];
   }
 
@@ -350,6 +391,7 @@
  * Implementation of hook_enable().
  */
 function usernode_enable() {
+	
   //when the module is activated, we check the usernodes
   usernode_check_all();
   // set the flag to re-check usernodes on cron - so we verfiy usernode creating actually worked
@@ -363,19 +405,17 @@
  * Check all users for an existing usernode, and create one if necessary.
  */
 function usernode_check_all($limit = 100) {
+
+
   // find usernodes that have been deleted while the module was deactivated
-  $result = db_query("SELECT un.* FROM {usernode} un ".
-                     "LEFT JOIN {node} n ON un.nid = n.nid ".
-                     "WHERE n.nid IS NULL");
+  $result = db_query('SELECT un.* FROM {usernode} un LEFT JOIN {node} n ON un.nid = n.nid WHERE n.nid IS NULL');
 
   while ($row = db_fetch_object($result)) {
-    db_query("DELETE FROM {usernode} WHERE nid = %d", $row->nid);
+    db_query('DELETE FROM {usernode} WHERE nid = %d', $row->nid);
   }
 
   // create usernodes for all existing users without a usernode
-  $result = db_query_range("SELECT u.* FROM {users} u ".
-                           "LEFT JOIN {usernode} un ON u.uid = un.uid ".
-                           "WHERE un.nid IS NULL AND u.uid != 0", 0, $limit);
+  $result = db_query_range('SELECT u.* FROM {users} u LEFT JOIN {usernode} un ON u.uid = un.uid WHERE un.nid IS NULL AND u.uid != 0', 0, $limit);
   $processed = 0;
   while ($user = db_fetch_object($result)) {
     usernode_create_node($user);
@@ -675,7 +715,7 @@
 
       $query->add_field('name', 'usernode_role');
       $query->add_field('rid', 'usernode_role');
-      $fieldinfo['field'] = "usernode_role.name";
+      $fieldinfo['field'] = 'usernode_role.name';
       return $fieldinfo;
       break;
 
@@ -690,14 +730,14 @@
       $joininfo['type'] = 'inner';
       $joininfo['extra'] = array('rid' => $rid);
 
-      $query->add_table("usernode_users_roles", true, 1, $joininfo);
+      $query->add_table('usernode_users_roles', true, 1, $joininfo);
       break;
 
     case 'link':
       return l($query->name, "$arg/" . intval($query->rid));
 
     case 'title':
-      $role = db_fetch_object(db_query("SELECT name FROM {role} WHERE rid = '%d'", $query));
+       $role = db_fetch_object(db_query("SELECT name FROM {role} WHERE rid = %d", $query));
       return $role->name;
   }
 }
