Commit e048966b authored by Marco Villegas's avatar Marco Villegas
Browse files

Move general issue/operation related code to an abstract class.

parent e57b09da
Loading
Loading
Loading
Loading
+82 −0
Changes for versioncontrol_project_issue/versioncontrol_project_issue_git/includes/VersioncontrolEventProcessorGitOperationBase.inc: 82 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php
/**
 * @file
 * Base class for event processor plugins which deals with operation issue tasks.
 */

abstract class VersioncontrolEventProcessorGitOperationBase implements VersioncontrolSynchronizationEventProcessorInterface, VersioncontrolPluginConfigurationInterface {
  /**
   * Associated repository.
   *
   * @var VersioncontrolRepository
   */
  protected $repository;

  /**
   * Pattern to find issue numbers in commit messages.
   */
  protected $messagePattern;

  public function setRepository(VersioncontrolRepository $repository) {
    $this->repository = $repository;
  }

  public function setConfiguration($default_data) {
    $this->messagePattern = !empty($default_data['message_pattern']) ? $default_data['message_pattern'] : '';
  }

  public function buildForm($default_data) {
    $form = array();
    $form['event-processor-issue-mapper-pattern'] = array(
      '#type' => 'textfield',
      '#title' => t('Extract pattern'),
      '#description' => t('A pattern to be used to extract the issue ids from the commit message. i.e. "/#(\d+)\b/"'),
      '#default_value' => !empty($default_data['message_pattern']) ? $default_data['message_pattern'] : '',
    );
    return $form;
  }

  public function getFormData($form_state_values_data) {
    return array(
      'message_pattern' => $form_state_values_data['event-processor-issue-mapper-pattern'],
    );
  }

  public function submitForm(&$form, &$form_state) {
    // Nothing special.
  }

  /**
   * Retrieve the issues from operation message.
   */
  public function getIssuesFromMessage($message) {
    if (preg_match_all($this->messagePattern, $message, $matches)) {
      return $matches[1];
    }
    return array();
  }

  /**
   * Returns nids which can be associated.
   */
  public function checkValidIssues($nids) {
    $valid_nids = array();
    // Make sure we are dealing with project issues.
    $possible_issues = node_load_multiple($nids);
    foreach ($possible_issues as $possible_issue) {
      if (!project_issue_node_is_issue($possible_issue)) {
        continue;
      }
      // Associate only if repository project is the same than issue
      // project.
      if (empty($possible_issue->field_project[LANGUAGE_NONE][0]['target_id'])) {
        continue;
      }
      if ($possible_issue->field_project[LANGUAGE_NONE][0]['target_id'] != $this->repository->project_nid) {
        continue;
      }
      $valid_nids[] = $possible_issue->nid;
    }
    return $valid_nids;
  }
}
+3 −75
Changes for versioncontrol_project_issue/versioncontrol_project_issue_git/plugins/event_processor/VersioncontrolEventProcessorGitIssueMapper.inc: 3 added lines, 75 removed lines.
Original line number Diff line number Diff line
@@ -4,19 +4,10 @@
 * Maps issues with operations on git repositories based on commit messages.
 */

class VersioncontrolEventProcessorGitIssueMapper implements VersioncontrolSynchronizationEventProcessorInterface, VersioncontrolPluginConfigurationInterface {
  /**
   * Associated repository.
   *
   * @var VersioncontrolRepository
   */
  protected $repository;

  /**
   * Pattern to find issue numbers in commit messages.
   */
  protected $messagePattern;
// @todo Is this possible to be added to the ctools plugins metadada?
require_once drupal_get_path('module', 'versioncontrol_project_issue_git') . '/includes/VersioncontrolEventProcessorGitOperationBase.inc';

class VersioncontrolEventProcessorGitIssueMapper extends VersioncontrolEventProcessorGitOperationBase {
  public function process(VersioncontrolEvent $event) {
    if (!$event instanceof VersioncontrolGitEvent) {
      // Not a git event.
@@ -87,67 +78,4 @@ class VersioncontrolEventProcessorGitIssueMapper implements VersioncontrolSynchr
    }
    $insert_query->execute();
  }

  public function setRepository(VersioncontrolRepository $repository) {
    $this->repository = $repository;
  }

  public function setConfiguration($default_data) {
    $this->messagePattern = !empty($default_data['message_pattern']) ? $default_data['message_pattern'] : '';
  }

  public function buildForm($default_data) {
    $form = array();
    $form['event-processor-issue-mapper-pattern'] = array(
      '#type' => 'textfield',
      '#title' => t('Extract pattern'),
      '#description' => t('A pattern to be used to extract the issue ids from the commit message. i.e. "/#(\d+)\b/"'),
      '#default_value' => !empty($default_data['message_pattern']) ? $default_data['message_pattern'] : '',
    );
    return $form;
  }

  public function getFormData($form_state_values_data) {
    return array(
      'message_pattern' => $form_state_values_data['event-processor-issue-mapper-pattern'],
    );
  }

  public function submitForm(&$form, &$form_state) {
    // Nothing special.
  }

  /**
   * Retrieve the issues from operation message.
   */
  public function getIssuesFromMessage($message) {
    if (preg_match_all($this->messagePattern, $message, $matches)) {
      return $matches[1];
    }
    return array();
  }

  /**
   * Returns nids which can be associated.
   */
  public function checkValidIssues($nids) {
    $valid_nids = array();
    // Make sure we are dealing with project issues.
    $possible_issues = node_load_multiple($nids);
    foreach ($possible_issues as $possible_issue) {
      if (!project_issue_node_is_issue($possible_issue)) {
        continue;
      }
      // Associate only if repository project is the same than issue
      // project.
      if (empty($possible_issue->field_project[LANGUAGE_NONE][0]['target_id'])) {
        continue;
      }
      if ($possible_issue->field_project[LANGUAGE_NONE][0]['target_id'] != $this->repository->project_nid) {
        continue;
      }
      $valid_nids[] = $possible_issue->nid;
    }
    return $valid_nids;
  }
}
+1 −0
Changes for versioncontrol_project_issue/versioncontrol_project_issue_git/versioncontrol_project_issue_git.info: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,3 +5,4 @@ dependencies[] = versioncontrol_project_issue
dependencies[] = versioncontrol_git
dependencies[] = project_issue
core = 7.x
files[] = includes/VersioncontrolEventProcessorGitOperationBase.inc