Commit 1fcefa8e authored by Marco Villegas's avatar Marco Villegas
Browse files

Issue #443000: Shows project issue related operations list.

This is implemented via:

- A new versioncontrol views_set plugin, project_issue_operations_view,
  which refer to a versioncontrol operations block view with a vc_op_id
  contextual filter accepting multiple values.
- A new versioncontrol_project_issue block, vcpi_operations, which based
  on the current node, renders the new view_set.
- A new default view, vcpi_related_operations, for the
  project_issue_operations_view views_set.
parent 97e1af63
Loading
Loading
Loading
Loading
+7 −0
Changes for versioncontrol_project_issue/plugins/views_sets/VersioncontrolProjectIssueViewsSetProjectIssueOperationsView.class.php: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

class VersioncontrolProjectIssueViewsSetProjectIssueOperationsView extends VersioncontrolViewsSetGlobalBase {
  protected $setName = 'project_issue_operations_view';

  protected $baseView = 'vcpi_related_operations';
}
+9 −0
Changes for versioncontrol_project_issue/plugins/views_sets/project_issue_operations_view.inc: 9 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

$plugin = array(
  'title' => t('Project issue operations'),
  'description' => t('Per project issue list of related operations.'),
  'handler' => array(
    'class' => 'VersioncontrolProjectIssueViewsSetProjectIssueOperationsView',
  ),
);
+65 −0
Changes for versioncontrol_project_issue/versioncontrol_project_issue.module: 65 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,22 @@
 * Version Control / Project issue integration.
 */

/**
 * Implements ctools hook_ctools_plugin_directory().
 */
function versioncontrol_project_issue_ctools_plugin_directory($module, $plugin_type) {
  if ($module == 'versioncontrol') {
    return "plugins/$plugin_type";
  }
}

/**
 * Implements hook_views_api().
 */
function versioncontrol_project_issue_views_api() {
  return array('api' => 3);
}

/**
 * Implements hook_node_load().
 */
@@ -80,6 +96,55 @@ function versioncontrol_project_issue_versioncontrol_repository_bypassing_purge(
  versioncontrol_project_issue_delete_issue_operation_maps($repository);
}

/**
 * Implements hook_block_info().
 */
function versioncontrol_project_issue_block_info() {
  $blocks['vcpi_operations'] = array(
    'info' => t('Version Control Project Issue: Related operations'),
    'visibility' => BLOCK_VISIBILITY_LISTED,
    'pages' => 'node/*',
  );
  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function versioncontrol_project_issue_block_view($delta = '') {
  switch ($delta) {
    case 'vcpi_operations':
      $node = menu_get_object('node');
      $block = versioncontrol_project_issue_operations_block($node);
      break;
  }
  return $block;
}

/**
 * Contents for versioncontrol_project_issue_operations block.
 */
function versioncontrol_project_issue_operations_block($node) {
  if (!project_issue_node_type_is_issue($node->type)) {
    // Not a project issue node.
    return array();
  }
  if (empty($node->versioncontrol_project_issue['operations'])) {
    // No related operations yet.
    return array();
  }
  $set = versioncontrol_get_views_set('project_issue_operations_view');
  $view_name = $set->getViewName();
  $view = views_get_view($view_name);
  if (!$view || !$view->access('block')) {
    return array();
  }
  $vc_op_ids = array_keys($node->versioncontrol_project_issue['operations']);
  $block['content'] = $view->preview('block', array(implode(',', $vc_op_ids)));
  $block['subject'] = $view->get_title();
  return $block;
}

/**
 * Deletes all relared issue/operation associations.
 *
+72 −0
Changes for versioncontrol_project_issue/versioncontrol_project_issue.views_default.inc: 72 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php
/**
 * @file
 *   Provide default views for use by the versioncontrol_project_issue module.
 */

/**
 * Implements hook_views_default_views().
 *
 * @todo If one more view is needed split into its own files, see
 * commitlog_views_default_views().
 */
function versioncontrol_project_issue_views_default_views() {
  $views = array();

  // vcpi_related_operations view.
  $view = new view();
  $view->name = 'vcpi_related_operations';
  $view->description = 'A list of one project issue related operations.';
  $view->tag = 'default';
  $view->base_table = 'versioncontrol_operations';
  $view->human_name = 'Project issue related operations';
  $view->core = 7;
  $view->api_version = '3.0';
  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

  /* Display: Master */
  $handler = $view->new_display('default', 'Master', 'default');
  $handler->display->display_options['title'] = 'Related operations';
  $handler->display->display_options['use_more_always'] = FALSE;
  $handler->display->display_options['access']['type'] = 'none';
  $handler->display->display_options['cache']['type'] = 'none';
  $handler->display->display_options['query']['type'] = 'views_query';
  $handler->display->display_options['exposed_form']['type'] = 'basic';
  $handler->display->display_options['pager']['type'] = 'none';
  $handler->display->display_options['style_plugin'] = 'list';
  $handler->display->display_options['row_plugin'] = 'fields';
  /* Field: VersionControl Item Revisions: Revision ID */
  $handler->display->display_options['fields']['revision']['id'] = 'revision';
  $handler->display->display_options['fields']['revision']['table'] = 'versioncontrol_item_revisions';
  $handler->display->display_options['fields']['revision']['field'] = 'revision';
  $handler->display->display_options['fields']['revision']['label'] = '';
  $handler->display->display_options['fields']['revision']['exclude'] = TRUE;
  $handler->display->display_options['fields']['revision']['element_label_colon'] = FALSE;
  /* Field: VersionControl Operations: Message */
  $handler->display->display_options['fields']['message']['id'] = 'message';
  $handler->display->display_options['fields']['message']['table'] = 'versioncontrol_operations';
  $handler->display->display_options['fields']['message']['field'] = 'message';
  $handler->display->display_options['fields']['message']['label'] = '';
  $handler->display->display_options['fields']['message']['alter']['alter_text'] = TRUE;
  $handler->display->display_options['fields']['message']['alter']['text'] = '[revision]: [message]';
  $handler->display->display_options['fields']['message']['alter']['max_length'] = '200';
  $handler->display->display_options['fields']['message']['alter']['trim'] = TRUE;
  $handler->display->display_options['fields']['message']['element_label_colon'] = FALSE;
  /* Contextual filter: VersionControl Operations: Operation ID */
  $handler->display->display_options['arguments']['vc_op_id']['id'] = 'vc_op_id';
  $handler->display->display_options['arguments']['vc_op_id']['table'] = 'versioncontrol_operations';
  $handler->display->display_options['arguments']['vc_op_id']['field'] = 'vc_op_id';
  $handler->display->display_options['arguments']['vc_op_id']['default_action'] = 'not found';
  $handler->display->display_options['arguments']['vc_op_id']['default_argument_type'] = 'fixed';
  $handler->display->display_options['arguments']['vc_op_id']['summary']['number_of_records'] = '0';
  $handler->display->display_options['arguments']['vc_op_id']['summary']['format'] = 'default_summary';
  $handler->display->display_options['arguments']['vc_op_id']['summary_options']['items_per_page'] = '25';
  $handler->display->display_options['arguments']['vc_op_id']['break_phrase'] = TRUE;

  /* Display: Block */
  $handler = $view->new_display('block', 'Block', 'block');

  $views[$view->name] = $view;

  return $views;
}