PHP code example of lesstif / php-jira-rest-client
1. Go to this page and download the library: Download lesstif/php-jira-rest-client library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lesstif / php-jira-rest-client example snippets
use JiraRestApi\Configuration\ArrayConfiguration;
use JiraRestApi\Issue\IssueService;
$iss = new IssueService(new ArrayConfiguration(
[
'jiraHost' => 'https://your-jira.host.com',
// Basic authentication deprecated
/*
'jiraUser' => 'jira-username',
'jiraPassword' => 'jira-password-OR-api-token',
*/
// instead,you can use the token based authentication.
'useTokenBasedAuth' => true,
'personalAccessToken' => 'your-token-here',
// or OAuth 2.0 access token (takes precedence over the personal access token)
// 'oauthAccessToken' => 'your-oauth-access-token',
// custom log config
'jiraLogEnabled' => true,
'jiraLogFile' => "my-jira-rest-client.log",
'jiraLogLevel' => 'INFO',
// to enable session cookie authorization (with basic authorization only)
'cookieAuthEnabled' => true,
'cookieFile' => storage_path('jira-cookie.txt'),
// if you are behind a proxy, add proxy settings
'proxyServer' => 'your-proxy-server',
'proxyPort' => 'proxy-port',
'proxyUser' => 'proxy-username',
'proxyPassword' => 'proxy-password',
]
));
JiraRestApi\Issue\IssueService;
use JiraRestApi\JiraException;
try {
$issueService = new IssueService();
// '<p><b>bold</b> <a href="https://example.com" ...>link</a></p>'
$html = $issueService->renderWikiMarkup('*bold* [link|https://example.com]');
// with an issue key, issue links and attachments are rendered in the context of the issue.
$html = $issueService->renderWikiMarkup('see TEST-1 and !screenshot.png!', 'TEST-1');
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\Issue\IssueField;
use JiraRestApi\JiraException;
try {
$issueField = new IssueField();
$issueField->setProjectKey('TEST')
->setSummary('something\'s wrong')
->setAssigneeNameAsString('lesstif')
->setPriorityNameAsString('Critical')
->setIssueTypeAsString('Bug')
->setDescription('Full description for issue')
->addVersionAsString('1.0.1')
->addVersionAsArray(['1.0.2', '1.0.3'])
->addComponentsAsArray(['Component-1', 'Component-2'])
// set issue security if you need.
->setSecurityId(10001 /* security scheme id */)
->setDueDateAsString('2023-06-19')
// or you can use DateTimeInterface
//->setDueDateAsDateTime(
// (new DateTime('NOW'))->add(DateInterval::createFromDateString('1 month 5 day'))
// )
;
$issueService = new IssueService();
$ret = $issueService->create($issueField);
//If success, Returns a link to the created issue.
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
try {
$issueField = new IssueField();
$issueField->setProjectKey('TEST')
->setSummary('something\'s wrong')
->setAssigneeNameAsString('lesstif')
->setPriorityNameAsString('Critical')
->setIssueTypeAsString('Bug')
->setDescription('Full description for issue')
->addVersion('1.0.1')
->addVersion('1.0.3')
->addCustomField('customfield_10100', 'text area body text') // String type custom field
->addCustomField('customfield_10200', ['value' => 'Linux']) // Select List (single choice)
->addCustomField('customfield_10408', [
['value' => 'opt2'], ['value' => 'opt4']
]) // Select List (multiple choice)
;
$issueService = new IssueService();
$ret = $issueService->create($issueField);
//If success, Returns a link to the created issue.
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\Issue\IssueField;
use JiraRestApi\JiraException;
try {
$issueFieldOne = new IssueField();
$issueFieldOne->setProjectKey('TEST')
->setSummary('something\'s wrong')
->setPriorityNameAsString('Critical')
->setIssueTypeAsString('Bug')
->setDescription('Full description for issue');
$issueFieldTwo = new IssueField();
$issueFieldTwo->setProjectKey('TEST')
->setSummary('something else is wrong')
->setPriorityNameAsString('Critical')
->setIssueTypeAsString('Bug')
->setDescription('Full description for second issue');
$issueService = new IssueService();
$ret = $issueService->createMultiple([$issueFieldOne, $issueFieldTwo]);
//If success, returns an array of the created issues
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\Issue\IssueField;
use JiraRestApi\JiraException;
try {
$issueField = new IssueField();
$issueField->setProjectKey('TEST')
->setSummary('something\'s wrong')
->setAssigneeNameAsString('lesstif')
->setPriorityNameAsString('Critical')
->setDescription('Full description for issue')
->addVersion('1.0.1')
->addVersion('1.0.3')
->setIssueTypeAsString('Sub-task') //issue type must be Sub-task
->setParentKeyOrId('TEST-143') //Issue Key
;
$issueService = new IssueService();
$ret = $issueService->create($issueField);
//If success, Returns a link to the created sub task.
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
try {
$issueField = new IssueField();
$issueField->setProjectKey('TEST')
->setSummary('something\'s wrong')
->setAssigneeNameAsString('lesstif')
->setPriorityNameAsString('Critical')
->setIssueTypeAsString('Bug')
->setDescription('Full description for issue')
->addVersion('1.0.1')
->addVersion('1.0.3')
->addCustomField('customfield_10100', 'text area body text') // String type custom field
->addCustomField('customfield_10200', ['value' => 'Linux']) // Select List (single choice)
->addCustomField('customfield_10408', [
['value' => 'opt2'], ['value' => 'opt4']
]) // Select List (multiple choice)
;
$issueService = new IssueService();
$ret = $issueService->create($issueField);
//If success, Returns a link to the created issue.
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\Issue\IssueField;
use JiraRestApi\JiraException;
$issueKey = 'TEST-879';
try {
$issueField = new IssueField(true);
$issueField->setAssigneeNameAsString('admin')
->setPriorityNameAsString('Blocker')
->setIssueTypeAsString('Task')
->addLabel('test-label-first')
->addLabel('test-label-second')
->addVersion('1.0.1')
->addVersion('1.0.2')
->setDescription('This is a shorthand for a set operation on the summary field')
;
// optionally set some query params
$editParams = [
'notifyUsers' => false,
];
$issueService = new IssueService();
// You can set the $paramArray param to disable notifications in example
$ret = $issueService->update($issueKey, $issueField, $editParams);
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
$this->assertTrue(FALSE, 'update Failed : ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\JiraException;
use JiraRestApi\Issue\Comment;
$issueKey = 'TEST-879';
try {
$commentId = 12345;
$issueService = new IssueService();
$comment = new Comment();
$comment->setBody('Updated comments');
$issueService->updateComment($issueKey, $commentId, $comment);
} catch (JiraRestApi\JiraException $e) {
$this->assertTrue(false, 'Update comment Failed : '.$e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\Issue\Transition;
use JiraRestApi\JiraException;
$issueKey = 'TEST-879';
try {
$transition = new Transition();
$transition->setTransitionName('Resolved');
$transition->setCommentBody('performing the transition via REST API.');
$issueService = new IssueService();
$issueService->transition($issueKey, $transition);
} catch (JiraRestApi\JiraException $e) {
$this->assertTrue(FALSE, 'add Comment Failed : ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\JiraException;
$jql = 'project not in (TEST) and assignee = currentUser() and status in (Resolved, closed)';
try {
$issueService = new IssueService();
$ret = $issueService->search($jql);
var_dump($ret);
} catch (JiraRestApi\JiraException $e) {
$this->assertTrue(false, 'testSearch Failed : '.$e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\JiraException;
use JiraRestApi\Issue\JqlFunction;
// Searches for issues that are linked to an issue. You can restrict the search to links of a particular type.
try {
$linkedIssue = JqlFunction::linkedIssues('TEST-01', 'IN', 'is blocked by');
$issueService = new IssueService();
$ret = $issueService->search($linkedIssue->expression);
var_dump($ret);
} catch (JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
// Searches for epics and subtasks. If the issue is not an epic, the search returns all subtasks for the issue.
try {
$linkedIssue = JqlFunction::linkedissue('TEST-01');
$issueService = new IssueService();
$ret = $issueService->search($linkedIssue->expression);
var_dump($ret);
} catch (JiraException $e) {
print('Error Occured! ' . $e->getMessage());
}
JiraRestApi\Issue\IssueService;
use JiraRestApi\JiraException;
$jql = 'project not in (TEST) and assignee = currentUser() and status in (Resolved, closed)';
try {
$issueService = new IssueService();
$nextPageToken = '';
$maxResult = 3; // the maximum number of issues to return per page (defaults to 50).
do {
$ret = $issueService->search($jql, $nextPageToken, $maxResult, ['summary']);
foreach ($ret->issues as $issue) {
print (sprintf("%s %s \n", $issue->key, $issue->fields->summary));
}
$nextPageToken = $ret->getNextPageToken();
} while (!empty($nextPageToken));
} catch (JiraRestApi\JiraException $e) {
$this->assertTrue(false, 'testSearch Failed : '.$e->getMessage());
}