--- usernode.module.old	2008-06-29 15:21:10.000000000 +0200
+++ usernode.module.new	2009-01-30 17:38:50.000000000 +0100
@@ -525,6 +525,14 @@ function usernode_views_tables() {
         'option' => 'string',
         'help' => t('Displays when the user has logged in the last time.'),
       ),
+      'numberposts' => array(
+        'field' => 'uid',  
+        'name' => t('Usernode: Number of Posts'),
+        'sortable' => true,
+        'handler' => 'usernode_views_handler_field_numberposts',
+        'sort_handler' => 'usernode_views_field_sort_handler_numberposts',
+        'help' => t('Displays how many nodes a user has posted.'),
+      ),      
     ),
     'sorts' => array(
       'name' => array(
@@ -555,6 +563,12 @@ function usernode_views_tables() {
         'name' => t('Usernode: Last Login Time'),
         'help' => t('Sorts by the last login time of a user.'),
       ),
+      'numberposts' => array(
+        'name' => t('Usernode: Number of Posts'),
+        'help' => t('Sorts by the Number of Posts of a user.'),
+        'handler' => 'usernode_views_sort_handler_numberposts',
+      ),
+      
     ),
     'filters' => array(
       'name' => array(
@@ -608,6 +622,16 @@ function usernode_views_tables() {
     ),
   );
 
+  if (module_exists(contact)) {
+    $tables['usernode_users']['fields']['contact'] = array(
+      'field' => 'uid',  
+      'name' => t('Usernode: Contact Link'),
+      'sortable' => true,
+      'handler' => 'usernode_views_handler_field_contact_link',
+      'help' => t('Displays a Link to the contact form of the user.'),
+    );
+  };
+
   $tables['usernode_users_roles'] = array(
     'name' => 'users_roles',
     'provider' => 'internal', // won't show up in external list.
@@ -736,6 +760,100 @@ function usernode_views_handler_field_st
 }
 
 /**
+ * Callback for usernode_views_tables(): render number of posts
+ */
+function usernode_views_handler_field_numberposts($fieldinfo, $fielddata, $value, $data) {
+  if ($value !== NULL) {
+    // Exclude nodetype 'usernode'
+    $exclude_types = " AND type != 'usernode'";
+    // exclude nodeprofile-nodes
+    if (module_exists(nodeprofile)) {
+      $nodeprofile_types = nodeprofile_get_types();
+      if (is_array($nodeprofile_types)) {
+        foreach ($nodeprofile_types as $type => $object) {
+          $exclude_types .= " AND type != '" . $type . "'";
+        }
+      }
+    }
+    $sql = "SELECT COUNT(*) FROM {node} WHERE uid = '%d' AND status = 1" . $exclude_types;
+    $total = db_result(db_query(db_rewrite_sql($sql), $value));
+    return $total;
+  }
+}
+
+
+/**
+ * Callback for usernode_views_tables(): Field numberposts - Sort handler for the field (click on header).
+ */
+function usernode_views_field_sort_handler_numberposts($fielddata, $fieldinfo) {
+  // dummy-code for testing
+  return "node.nid";
+}
+
+/**
+ * Callback for usernode_views_tables(): Field numberposts - Sort handler for sort criteria (in views definition).
+ */
+function usernode_views_sort_handler_numberposts($op, &$query, $sortinfo, $sortdata) {
+  // dummy-code for testing
+  $query->orderby[] = "node.nid $sortdata[sortorder]";
+}
+
+
+
+/**
+ * Callback for usernode_views_tables(): render link to the contact form of the user
+ */
+function usernode_views_handler_field_contact_link($fieldinfo, $fielddata, $value, $data) {
+  if ($value !== NULL) {
+    if (module_exists('contact')) {
+      $target_user = user_load(array('uid' => $value));
+      if (isset($target_user->contact) && $target_user->contact == 1) {
+        $object = array (
+          'text' => 'Contact',
+          'url'  => 'user/'. $value . '/contact'
+          );
+      }
+      else {
+        $object = array (
+          'text' => 'not enabled',
+          'url'  => ''
+          );
+      }
+      return theme('usernode_views_contact_link', $object);
+    }
+    else {
+      return NULL;
+    }
+  }
+}
+
+/**
+ * Theme function for the link to the contact form of the user
+ */
+function theme_usernode_views_contact_link($object) {
+  global $user;
+  if ($user->uid > 0) {
+    if ($object['url'] <> '') {
+      return l(t($object['text']), $object['url']);
+    }
+    else {
+      return t($object['text']);
+    }
+  }
+  else {
+    if ($object['url'] <> '') {
+      if (variable_get('user_register', 1)) {
+        return t('!login or !register to contact.', array('!login' => l(t('Login'), 'user/login', NULL, drupal_get_destination()), '!register' => l(t('register'), 'user/register', NULL, drupal_get_destination())));
+      }
+      else {
+        return t('!login to contact.', array('!login' => l(t('Login'), 'user/login', NULL, drupal_get_destination())));
+      }
+    }
+    else {
+      return t($object['text']);
+    }
+  } 
+}
+
+/**
  * Generate a default view: a simple userlisting.
  */
 function usernode_views_default_views() {
