--- 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() {