/**
* Creates backports issues.
*
* @param Issue $issue Issue.
* @param string $project_key Project key.
* @param string $link_name Link name.
* @param integer $link_direction Link direction.
* @param array $component_ids Component IDs.
*
* @return string
* @throws \RuntimeException When failed to create an issue.
* @throws \InvalidArgumentException When link direction isn't valid.
*/
public function createLinkedIssue(Issue $issue, $project_key, $link_name, $link_direction, array $component_ids)
{
$create_fields = array('description' => 'See ' . $issue->getKey() . '.', 'components' => array());
foreach ($this->_copyCustomFields as $custom_field) {
if (isset($this->_customFieldsMap[$custom_field])) {
$custom_field_id = $this->_customFieldsMap[$custom_field];
$create_fields[$custom_field_id] = $this->getIssueCustomField($issue, $custom_field_id);
}
}
foreach ($component_ids as $component_id) {
$create_fields['components'][] = array('id' => (string) $component_id);
}
$create_issue_result = $this->jiraApi->createIssue($project_key, $issue->get('summary'), $this->getChangelogEntryIssueTypeId(), $create_fields);
$raw_create_issue_result = $create_issue_result->getResult();
if (array_key_exists('errors', $raw_create_issue_result)) {
throw new \RuntimeException(sprintf('Failed to create linked issue for "%s" issue. Errors: ' . PHP_EOL . '%s', $issue->getKey(), print_r($raw_create_issue_result['errors'], true)));
}
if ($link_direction === self::LINK_DIRECTION_INWARD) {
$issue_link_result = $this->jiraApi->api(JiraApi::REQUEST_POST, '/rest/api/2/issueLink', array('type' => array('name' => $link_name), 'inwardIssue' => array('key' => $raw_create_issue_result['key']), 'outwardIssue' => array('key' => $issue->getKey())));
} elseif ($link_direction === self::LINK_DIRECTION_OUTWARD) {
$issue_link_result = $this->jiraApi->api(JiraApi::REQUEST_POST, '/rest/api/2/issueLink', array('type' => array('name' => $link_name), 'inwardIssue' => array('key' => $issue->getKey()), 'outwardIssue' => array('key' => $raw_create_issue_result['key'])));
} else {
throw new \InvalidArgumentException('The "' . $link_direction . '" link direction isn\'t valid.');
}
return $raw_create_issue_result['key'];
}