'node_comments', 'provider' => 'internal', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid' ), 'right' => array( 'field' => 'cid' ) ), 'fields' => array( 'nid' => array( 'name' => t('Comment: Parent node'), 'help' => t('Display the node the comment was posted in response to'), ), 'name' => array( 'name' => t('Comment: User name'), 'help' => t('Display the name of the user who posted the comment'), ), 'mail' => array( 'name' => t('Comment: Email address'), 'help' => t('Display the email address of the user who posted the comment'), ), 'homepage' => array( 'name' => t('Comment: Homepage'), 'help' => t('Display the home page of the user who posted the comment'), ), ), 'filters' => array( 'nid' => array( 'name' => t('Comment: Parent node'), 'operator' => views_handler_operator_eqneq(), 'help' => t('This allows you to filter based on the parent node.'), ), ), ); $tables['node_comment_statistics'] = array( 'name' => 'node_comment_statistics', 'provider' => 'internal', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid' ), 'right' => array( 'field' => 'nid' ), ), 'fields' => array( 'last_comment_timestamp' => array( 'name' => t('Comment: Last Comment Time'), 'sortable' => true, 'handler' => views_handler_field_dates(), 'option' => 'string', 'help' => t('This will display the last comment time.'), ), 'last_comment_name' => array( 'name' => t('Comment: Last Comment Author'), 'query_handler' => 'views_query_handler_field_last_comment_name', 'handler' => 'views_handler_field_last_comment_name', 'sortable' => true, 'uid' => 'last_comment_uid', 'addlfields' => array('last_comment_name', 'last_comment_uid'), 'help' => t('This will display the name of the last user to comment on the post.'), ), 'comment_count' => array( 'name' => t('Comment: Count'), 'sortable' => true, 'handler' => array( 'views_handler_field_int' => t('Normal'), 'views_handler_comments_with_new' => t('With New Count') ), 'help' => t('This will display the comment count.'), ), ), 'filters' => array( 'comment_count' => array( 'name' => t('Comment: Comment Count'), 'operator' => 'views_handler_operator_gtlt', 'option' => 'integer', 'help' => t('This filter allows you to filter by the amount of comments.'), ), 'last_comment_timestamp' => array( 'name' => t('Comment: Last Comment Time'), 'operator' => 'views_handler_operator_gtlt', 'value' => views_handler_filter_date_value_form(), 'handler' => 'views_handler_filter_timestamp', 'option' => 'string', 'help' => t('This filter allows nodes to be filtered by the last comment timestamp. Enter dates in the format: CCYY-MM-DD HH:MM:SS. Enter \'now\' to use the current time. You may enter a delta (in seconds) to the option that will be added to the time; this is most useful when combined with now. If you have the jscalendar module from jstools installed, you can use a popup date picker here.'), ), ), 'sorts' => array( 'last_comment_timestamp' => array( 'name' => t('Comment: Last Comment Date'), 'handler' => 'views_handler_sort_date', 'option' => views_handler_sort_date_options(), 'help' => t('This will allow you to sort by the date of the most recent comment on a node.') ), 'comment_count' => array( 'name' => t('Comment: Comment Count'), 'help' => t('This filter allows you to sort by the number of comments.'), ), ), ); return $tables; } function nodecomment_views_arguments() { $arguments = array( 'nid' => array( 'name' => t("Comment: Parent node ID"), 'handler' => "views_handler_arg_comment_target_nid", ), ); return $arguments; } function nodecomment_views_default_views() { $view = new stdClass(); $view->name = 'node_comments'; $view->description = 'node comments'; $view->access = array (); $view->view_args_php = ''; $view->sort = array ( array ( 'tablename' => 'node', 'field' => 'created', 'sortorder' => 'ASC', 'options' => 'normal', ), ); $view->argument = array ( array ( 'type' => 'nid', 'argdefault' => '1', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'node', 'field' => 'moderate', 'operator' => '=', 'options' => '', 'value' => '0', ), ); $view->exposed_filter = array(); $view->requires = array('node'); $view->page_type = 'teaser'; $views[$view->name] = $view; return $views; } function views_handler_arg_comment_target_nid($op, &$query, $argtype, $arg = '') { switch ($op) { case 'summary' : // Not supported at present break; case 'sort': // Not supported at present break; case 'filter' : $query->ensure_table("node_comments"); $query->add_where("node_comments.nid = %d", $arg); break; case 'link' : // Not supported at present break; case 'title' : if ($query) { $n = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = %d", $query)); return $n->title; } } } // This code is copied shamelessly from views module's views_comment.inc. // Since comment.module isn't enabled, we lose this functionality. But we // do, indeed, want it for building forum views and so on. function views_query_handler_field_last_comment_name($field, $fieldinfo, &$query) { $num = $query->add_table('users', false, 1, array( 'left' => array( 'table' => $field['tablename'], 'field' => 'last_comment_uid' ), 'right' => array( 'field' => 'uid' ), )); $query->add_field('name', $query->get_table_name('users', $num), $field['tablename'] . '_name'); } function views_handler_field_last_comment_name($fieldinfo, $fielddata, $value, $data) { $obj->name = $value; $uidfield = $fielddata['tablename'] . "_" . $fieldinfo['uid']; $obj->uid = $data->$uidfield; if ($obj->uid != 0) { $fieldname = $fielddata['tablename'] . '_name'; $obj->name = $data->$fieldname; } return theme('username', $obj); } /* * Format a field as a link to a comment. */ function views_handler_field_commentlink($fieldinfo, $fielddata, $value, $data) { if ($fielddata['options'] == 'nolink') { return check_plain($value); } return l($value, "node/$data->nid", NULL, NULL, "comment-$data->comments_cid"); } /* * Format a field as a number of comments, plus the number of unread comments. */ function views_handler_comments_with_new($fieldinfo, $fielddata, $value, $data) { $comments = intval($value); if ($comments && $new = nodecomment_num_new($data->nid)) { $comments .= '
'; $comments .= l(t('@num new', array('@num' => $new)), "node/$data->nid", NULL, comment_page_new_query($data->nid), 'new'); } return $comments; } /* * Format a field as a link to a 'mark', stating whether or not the comment has * updated since it was last viewed by the user. */ function views_handler_field_commentlink_with_mark($fieldinfo, $fielddata, $value, $data) { if ($fielddata['options'] == 'nolink') { $link = check_plain($value); } else { $link = l($value, "node/$data->nid", NULL, NULL, "comment-$data->comments_cid"); } return $link .' '. theme('mark', node_mark($data->nid, $data->comments_timestamp)); }