Index: revision_moderation.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/revision_moderation/revision_moderation.module,v retrieving revision 1.39.2.12 diff -u -p -r1.39.2.12 revision_moderation.module --- revision_moderation.module 17 Dec 2009 06:18:07 -0000 1.39.2.12 +++ revision_moderation.module 28 Dec 2009 08:38:46 -0000 @@ -10,6 +10,16 @@ include_once drupal_get_path('module', 'revision_moderation') .'/revision_moderation_actions.inc'; /** + * Implementation of hook_views_api(). + */ +function revision_moderation_views_api() { + return array( + 'api' => 2, + 'path' => drupal_get_path('module', 'revision_moderation') .'/views', + ); +} + +/** * Implementation of hook_menu(). */ function revision_moderation_menu() { Index: revision_moderation.views.inc =================================================================== RCS file: views/revision_moderation.views.inc diff -N views/revision_moderation.views.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/revision_moderation.views.inc 28 Dec 2009 08:38:46 -0000 @@ -0,0 +1,82 @@ + array( + 'table' => 'node_revisions', + 'left_table' => 'node', + 'field' => 'nid', + 'left_field' => 'nid', + ), + // Enable for node revision view. + 'node_revisions' => array( + 'table' => 'node_revisions', + 'field' => 'vid', + 'left_field' => 'vid', + ), + ); + + $data['revision_moderation']['state'] = array( + 'title' => t('Revision state'), + 'help' => t('State of node revision (pending moderation etc.).'), + 'field' => array( + 'handler' => 'views_handler_field_revision_moderation_state', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'handler' => 'views_handler_filter_revision_moderation_state', + 'allow empty' => FALSE, + ), + ); + + $data['revision_moderation']['in_moderation'] = array( + 'title' => t('Node in moderation'), + 'help' => t('Either an unpublished node or a pending revision.'), + 'field' => array( + 'handler' => 'views_handler_field_revision_moderation_in_moderation', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'handler' => 'views_handler_filter_revision_moderation_in_moderation', + 'allow empty' => FALSE, + ), + ); + + return $data; +} + +/** + * Implementation of hook_views_handlers(). + */ +function revision_moderation_views_handlers() { + return array( + 'info' => array( + 'path' => drupal_get_path('module', 'revision_moderation') .'/views', + ), + 'handlers' => array( + 'views_handler_field_revision_moderation_state' => array( + 'parent' => 'views_handler_field_node', + ), + 'views_handler_filter_revision_moderation_state' => array( + 'parent' => 'views_handler_filter_in_operator', + ), + 'views_handler_field_revision_moderation_in_moderation' => array( + 'parent' => 'views_handler_field_node', + ), + 'views_handler_filter_revision_moderation_in_moderation' => array( + 'parent' => 'views_handler_filter', + ), + ), + ); +} Index: views_handler_field_revision_moderation_in_moderation.inc =================================================================== RCS file: views/views_handler_field_revision_moderation_in_moderation.inc diff -N views/views_handler_field_revision_moderation_in_moderation.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/views_handler_field_revision_moderation_in_moderation.inc 28 Dec 2009 08:38:46 -0000 @@ -0,0 +1,32 @@ +additional_fields['node_vid'] = array('table' => 'node', 'field' => 'vid'); + $this->additional_fields['node_status'] = array('table' => 'node', 'field' => 'status'); + $this->additional_fields['node_revisions_vid'] = array('table' => 'revision_moderation', 'field' => 'vid'); + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $node_vid = $values->{$this->aliases['node_vid']}; + $node_status = $values->{$this->aliases['node_status']}; + $node_revisions_vid = $values->{$this->aliases['node_revisions_vid']}; + if ($node_status == 0) { + $output = t('new content'); + } + elseif ($node_revisions_vid > $node_vid) { + $output = t('pending revision'); + } + return $output; + } +} Index: views_handler_field_revision_moderation_state.inc =================================================================== RCS file: views/views_handler_field_revision_moderation_state.inc diff -N views/views_handler_field_revision_moderation_state.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/views_handler_field_revision_moderation_state.inc 28 Dec 2009 08:38:46 -0000 @@ -0,0 +1,38 @@ +additional_fields['node_vid'] = array('table' => 'node', 'field' => 'vid'); + $this->additional_fields['node_revisions_vid'] = array('table' => 'revision_moderation', 'field' => 'vid'); + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $node_vid = $values->{$this->aliases['node_vid']}; + $node_revisions_vid = $values->{$this->aliases['node_revisions_vid']}; + if (empty($node_vid) || empty($node_revisions_vid)) { + return $output; + } + + if ($node_revisions_vid > $node_vid) { + $output = t('pending revision'); + } + elseif ($node_revisions_vid < $node_vid) { + $output = t('old revision'); + } + else { + $output = t('current revision'); + } + + return $output; + } +} Index: views_handler_filter_revision_moderation_in_moderation.inc =================================================================== RCS file: views/views_handler_filter_revision_moderation_in_moderation.inc diff -N views/views_handler_filter_revision_moderation_in_moderation.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/views_handler_filter_revision_moderation_in_moderation.inc 28 Dec 2009 08:38:46 -0000 @@ -0,0 +1,26 @@ +ensure_my_table(); + $node = $this->query->ensure_table('node'); + + $where_array = array(); + + // Unpublished node. + $where_array[] = "($node.status = 0 AND $node_revisions.vid = $node.vid)"; + + // Pending revision. + $where_array[] = "$node_revisions.vid > $node.vid"; + + $where = "(". implode(" OR ", $where_array) .")"; + $this->query->add_where($this->options['group'], $where); + } +} Index: views_handler_filter_revision_moderation_state.inc =================================================================== RCS file: views/views_handler_filter_revision_moderation_state.inc diff -N views/views_handler_filter_revision_moderation_state.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/views_handler_filter_revision_moderation_state.inc 28 Dec 2009 08:38:47 -0000 @@ -0,0 +1,51 @@ + t('Current revision'), + 'pending' => t('Pending revision'), + 'old' => t('Old revision'), + ); + $this->value_title = t('Revision state'); + $this->value_options = $options; + } + + function query() { + $node_revisions = $this->ensure_my_table(); + $node = $this->query->ensure_table('node'); + + $where_array = array(); + foreach ($this->value as $value) { + switch ($value) { + case 'current': + $where_array[] = "$node_revisions.vid = $node.vid"; + break; + + case 'pending': + $where_array[] = "$node_revisions.vid > $node.vid"; + break; + + case 'old': + $where_array[] = "$node_revisions.vid < $node.vid"; + break; + } + } + + switch ($this->operator) { + case 'in': + $where = "(". implode(" OR ", $where_array) .")"; + break; + + case 'not in': + $where = "!(". implode(" OR ", $where_array) .")"; + break; + } + + $this->query->add_where($this->options['group'], $where); + } +}