diff --git a/modules/tracker.views.inc b/modules/tracker.views.inc new file mode 100644 index 0000000..463e654 --- /dev/null +++ b/modules/tracker.views.inc @@ -0,0 +1,183 @@ + array( + 'type' => 'INNER', + 'left_field' => 'nid', + 'field' => 'nid', + ), + ); + $data['tracker_node']['nid'] = array( + 'title' => t('Nid'), + 'help' => t('The node ID of the node.'), + 'field' => array( + 'handler' => 'views_handler_field_node', + 'click sortable' => TRUE, + ), + 'argument' => array( + 'handler' => 'views_handler_argument_node_nid', + 'name field' => 'title', + 'numeric' => TRUE, + 'validate type' => 'nid', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_numeric', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + $data['tracker_node']['changed'] = array( + 'title' => t('Updated date'), + 'help' => t('The date the node was last updated.'), + 'field' => array( + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort_date', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_date', + ), + ); + $data['tracker_node']['published'] = array( + 'title' => t('Published'), + 'help' => t('Whether or not the node is published.'), + 'field' => array( + 'handler' => 'views_handler_field_boolean', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'handler' => 'views_handler_filter_tracker_boolean_operator', + 'label' => t('Published'), + 'type' => 'yes-no', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + + $data['tracker_user']['table']['group'] = t('Tracker - User'); + $data['tracker_user']['table']['join'] = array( + 'node' => array( + 'type' => 'INNER', + 'left_field' => 'nid', + 'field' => 'nid', + ), + 'user' => array( + 'type' => 'INNER', + 'left_field' => 'uid', + 'field' => 'uid', + ), + ); + $data['tracker_user']['nid'] = array( + 'title' => t('Nid'), + 'help' => t('The node ID of the node a user created or commented on. You must use an argument or filter on UID or you will get misleading results using this field.'), + 'field' => array( + 'handler' => 'views_handler_field_node', + 'click sortable' => TRUE, + ), + 'argument' => array( + 'handler' => 'views_handler_argument_node_nid', + 'name field' => 'title', + 'numeric' => TRUE, + 'validate type' => 'nid', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_numeric', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + $data['tracker_user']['uid'] = array( + 'title' => t('Uid'), + 'help' => t('The user ID of a user who touched the node (either created or commented on it).'), + 'field' => array( + 'handler' => 'views_handler_field_user', + 'click sortable' => TRUE, + ), + 'argument' => array( + 'handler' => 'views_handler_argument_user_uid', + 'name field' => 'name', + ), + 'filter' => array( + 'title' => t('Name'), + 'handler' => 'views_handler_filter_user_name', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + $data['tracker_user']['changed'] = array( + 'title' => t('Updated date'), + 'help' => t('The date the node was last updated or commented on. You must use an argument or filter on UID or you will get misleading results using this field.'), + 'field' => array( + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort_date', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_date', + ), + ); + $data['tracker_user']['published'] = array( + 'title' => t('Published'), + 'help' => t('Whether or not the node is published. You must use an argument or filter on UID or you will get misleading results using this field.'), + 'field' => array( + 'handler' => 'views_handler_field_boolean', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'handler' => 'views_handler_filter_tracker_boolean_operator', + 'label' => t('Published'), + 'type' => 'yes-no', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + + return $data; +} + +/** + * Implementation of hook_views_data_alter(). + */ +function tracker_views_data_alter(&$data) { + // Provide additional uid_touch handlers which are handled by tracker + $data['node']['uid_touch_tracker'] = array( + 'group' => t('Tracker'), + 'title' => t('User posted or commented'), + 'help' => t('Display nodes only if a user posted the node or commented on the node.'), + 'argument' => array( + 'field' => 'uid', + 'name table' => 'users', + 'name field' => 'name', + 'handler' => 'views_handler_argument_tracker_comment_user_uid', + 'no group by' => TRUE, + ), + 'filter' => array( + 'field' => 'uid', + 'name table' => 'users', + 'name field' => 'name', + 'handler' => 'views_handler_filter_tracker_comment_user_uid' + ), + ); +} diff --git a/modules/tracker/views_handler_argument_tracker_comment_user_uid.inc b/modules/tracker/views_handler_argument_tracker_comment_user_uid.inc new file mode 100644 index 0000000..81d06a0 --- /dev/null +++ b/modules/tracker/views_handler_argument_tracker_comment_user_uid.inc @@ -0,0 +1,26 @@ +query->ensure_table('tracker_user'); + $this->query->add_where(0, "$tracker_user_alias.uid", $this->argument); + } + +} diff --git a/modules/tracker/views_handler_filter_tracker_boolean_operator.inc b/modules/tracker/views_handler_filter_tracker_boolean_operator.inc new file mode 100644 index 0000000..455e824 --- /dev/null +++ b/modules/tracker/views_handler_filter_tracker_boolean_operator.inc @@ -0,0 +1,31 @@ + 0. + */ +class views_handler_filter_tracker_boolean_operator extends views_handler_filter_boolean_operator { + + /** + * Overrides views_handler_filter_boolean_operator::query(). + */ + function query() { + $this->ensure_my_table(); + $where = "$this->table_alias.$this->real_field "; + if (empty($this->value)) { + $where .= '= 0'; + if ($this->accept_null) { + $where = '(' . $where . " OR $this->table_alias.$this->real_field IS NULL)"; + } + } + else { + $where .= '= 1'; + } + $this->query->add_where_expression($this->options['group'], $where); + } + +} diff --git a/modules/tracker/views_handler_filter_tracker_comment_user_uid.inc b/modules/tracker/views_handler_filter_tracker_comment_user_uid.inc new file mode 100644 index 0000000..da6f65b --- /dev/null +++ b/modules/tracker/views_handler_filter_tracker_comment_user_uid.inc @@ -0,0 +1,23 @@ +query->ensure_table('tracker_user'); + $this->query->add_where(0, "$tracker_user_alias.uid", $this->value); + } + +} diff --git a/views.info b/views.info index 5802e22..7521d82 100644 --- a/views.info +++ b/views.info @@ -171,6 +171,9 @@ files[] = modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc files[] = modules/taxonomy/views_handler_relationship_node_term_data.inc files[] = modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc files[] = modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc +files[] = modules/tracker/views_handler_argument_tracker_comment_user_uid.inc +files[] = modules/tracker/views_handler_filter_tracker_comment_user_uid.inc +files[] = modules/tracker/views_handler_filter_tracker_boolean_operator.inc files[] = modules/system/views_handler_filter_system_type.inc files[] = modules/translation/views_handler_argument_node_tnid.inc files[] = modules/translation/views_handler_field_node_link_translate.inc diff --git a/views.module b/views.module index 68953e5..b4a37e4 100644 --- a/views.module +++ b/views.module @@ -2511,6 +2511,10 @@ if (!function_exists('system_views_api')) { function system_views_api() { return views_views_api(); } } +if (!function_exists('tracker_views_api')) { + function tracker_views_api() { return views_views_api(); } +} + if (!function_exists('taxonomy_views_api')) { function taxonomy_views_api() { return views_views_api(); } }