diff --git a/config/autoload/local.php.dist b/config/autoload/local.php.dist index 1d4a61c..8d23cbf 100644 --- a/config/autoload/local.php.dist +++ b/config/autoload/local.php.dist @@ -73,6 +73,7 @@ return [ 'customfield_10850', 'customfield_10904', 'customfield_11692', + 'customfield_10401', ], ], 'url.mhWebPraGoals' => 'https://mhweb.ericsson.se:443/SearchWeb/faces/search/query/resultPage.xhtml?&v=3&queryKey=74023&output=CSV&csvDelimiter=COMMA', diff --git a/public/.htaccess b/public/.htaccess index a9edcbf..a008e99 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -21,4 +21,4 @@ RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] Require all denied - \ No newline at end of file + diff --git a/src/App/Entity/KanbanEntry.php b/src/App/Entity/KanbanEntry.php index 9f156e6..011f78f 100644 --- a/src/App/Entity/KanbanEntry.php +++ b/src/App/Entity/KanbanEntry.php @@ -37,6 +37,12 @@ class KanbanEntry implements \JsonSerializable */ private $assignee; + /** + * JIRA: customfield_10401 + * @var JiraAssignee[] + */ + private $additionalAssignees; + /** * @var string */ @@ -138,6 +144,7 @@ class KanbanEntry implements \JsonSerializable public function __construct() { $this->functionalAreas = new ArrayCollection(); + $this->additionalAssignees = new ArrayCollection(); } /** @@ -248,6 +255,48 @@ class KanbanEntry implements \JsonSerializable return $this; } + /** + * @return JiraAssignee[]|ArrayCollection + */ + public function getAdditionalAssignees(): ?ArrayCollection + { + return $this->additionalAssignees; + } + + /** + * @param JiraAssignee[]|ArrayCollection $additionalAssignees + * @return KanbanEntry + */ + public function setAdditionalAssignees(?ArrayCollection $additionalAssignees): KanbanEntry + { + $this->additionalAssignees = $additionalAssignees; + return $this; + } + + /** + * @param JiraAssignee $assignee + * @return KanbanEntry + */ + public function addAdditionalAssignee(JiraAssignee $assignee): KanbanEntry + { + if(!$this->additionalAssignees->contains($assignee)) { + $this->additionalAssignees->add($assignee); + } + return $this; + } + + /** + * @param JiraAssignee $assignee + * @return KanbanEntry + */ + public function removeAdditionalAssignee(JiraAssignee $assignee): KanbanEntry + { + if($this->additionalAssignees->contains($assignee)) { + $this->additionalAssignees->removeElement($assignee); + } + return $this; + } + /** * @return string */ @@ -590,6 +639,7 @@ class KanbanEntry implements \JsonSerializable 'issueType' => $this->getIssueType(), 'status' => $this->getStatus(), 'assignee' => $this->getAssignee(), + 'additionalAssignees' => $this->getAdditionalAssignees()->getValues(), 'issuePriority' => $this->getIssuePriority(), 'issuePriorityIcon' => $this->getIssuePriorityIcon(), 'labels' => $this->getLabels(), diff --git a/src/App/Service/JiraCollectorService.php b/src/App/Service/JiraCollectorService.php index 3f203e1..aa29111 100644 --- a/src/App/Service/JiraCollectorService.php +++ b/src/App/Service/JiraCollectorService.php @@ -168,9 +168,27 @@ class JiraCollectorService }, $jsonIssue['fields']['worklog']['worklogs']); $kanbanEntry->setDaysBlocked(ceil($secondsBlocked / 28800)); + // additional assignees : customfield_10401 + if (isset($jsonIssue['fields']['customfield_10401'])) { + foreach ($jsonIssue['fields']['customfield_10401'] as $assignee) { + $avatarUrl = $this->avatarService->getJiraAvatarUrl( + $assignee['avatarUrls']['48x48'], + $assignee['key'] + ); + + $jiraAssignee = new JiraAssignee(); + $jiraAssignee->setName($assignee['displayName']) + ->setSignum($assignee['key']) + ->setEmail(strtolower($assignee['emailAddress'])) + ->setAvatar($avatarUrl) + ->setActive($assignee['active']); + $kanbanEntry->addAdditionalAssignee($jiraAssignee); + } + } + // externalId : customfield_10010 if (isset($jsonIssue['fields']['customfield_10010'])) { - $kanbanEntry->setPrio(intval($jsonIssue['fields']['customfield_10010'])); + $kanbanEntry->setExternalId($jsonIssue['fields']['customfield_10010']); } // prio : customfield_10840