public function getIssues(array $parameters = [], $limit = 30)
{
$this->client->getResultPager()->setPerPage(null);
$this->client->getResultPager()->setPage(1);
// since, labels and mentioned are supported, but requires an API change or custom resultPager when limiting
$response = $this->client->apiIssues()->all($this->getUsername(), $this->getRepository(), $this->prepareParameters($this->prepareFilter($parameters)));
$resultArray = json_decode($response->getContent(), true);
$issues = [];
$priorities = [];
$kinds = [];
$versions = [];
$components = [];
if (!empty($parameters['labels']) && false !== strpos($parameters['labels'], ',')) {
$labels = explode(',', $parameters['labels']);
$labels = array_map('trim', $labels);
foreach ($labels as $label) {
switch ($this->detectLabelType($label)) {
case 'priority':
$priorities[] = $label;
break;
case 'kind':
$kinds[] = $label;
break;
case 'version':
$versions[] = $label;
break;
default:
$components[] = $label;
break;
}
}
}
if (!empty($parameters['since'])) {
$parameters['since'] = strtotime($parameters['since']);
}
foreach ($this->client->getResultPager()->fetch($resultArray, 'issues') as $issue) {
if (!empty($parameters['since'])) {
$issueSince = empty($issue['utc_last_updated']) ? $issue['utc_created_on'] : $issue['utc_last_updated'];
$issueSince = strtotime($issueSince);
// Only issues updated at or after this time are returned.
if ($parameters['since'] < $issueSince) {
continue;
}
}
// Note this also match in markdown
// Use a regex to prevent half name matches, @user also matching @username
if (!empty($parameters['mentioned']) && !preg_match(sprintf('{@%s($|\\s)}', preg_quote($parameters['mentioned'])), $issue['content'])) {
continue;
}
if ([] !== $priorities && !in_array($issue['priority'], $priorities, true)) {
continue;
}
if ([] !== $kinds && !in_array($issue['metadata']['kind'], $kinds, true)) {
continue;
}
if ([] !== $versions && !in_array($issue['metadata']['version'], $versions, true)) {
continue;
}
if ([] !== $components && !in_array($issue['metadata']['component'], $components, true)) {
continue;
}
$issues[] = $this->adaptIssueStructure($issue);
}
$this->client->getResultPager()->setPage(null);
return $issues;
}