avatarService = $avatarService; $this->httpClient = $client; $this->config = $config; } /** * @return KanbanBoard */ public function getKanbanBoard(): KanbanBoard { $user = $this->config->get('jira.user'); $password = $this->config->get('jira.password'); /** @var Config $kanbanBoardUriParams */ $kanbanBoardUriParams = $this->config->get('url.jiraKanbanBoard'); $kanbanBoardUri = sprintf( $kanbanBoardUriParams['baseUrl'], $kanbanBoardUriParams['filterId'], implode(",", $kanbanBoardUriParams['fields']->toArray()) ); $response = $this->httpClient ->setAuth($user, $password) ->setUri($kanbanBoardUri) ->send(); if(!$response->isSuccess()) { throw new \UnexpectedValueException("Bad JIRA result", $response->getStatusCode()); } $parsedJsonData = Decoder::decode($response->getBody(), Json::TYPE_ARRAY); return $this->hydrateKanbanBoard($parsedJsonData); } /** * @param $parsedJsonData * @return KanbanBoard * @todo check if avatar has to be locally cached */ private function hydrateKanbanBoard($parsedJsonData): KanbanBoard { $kanbanBoard = new KanbanBoard(); foreach($parsedJsonData['issues'] as $jsonIssue) { $kanbanEntry = new KanbanEntry(); $kanbanEntry->setId(intval($jsonIssue['id'])) ->setKey($jsonIssue['key']) ->setSummary($jsonIssue['fields']['summary']) ->setExternalLink($jsonIssue['fields']['customfield_10850']) ->setMhwebStatus($jsonIssue['fields']['customfield_10844']) ->setAnswerCode($jsonIssue['fields']['customfield_11692']) ; // externalId : customfield_10010 if(isset($jsonIssue['fields']['customfield_10010'])) { $kanbanEntry->setPrio(intval($jsonIssue['fields']['customfield_10010'])); } // prio : customfield_10840 if(isset($jsonIssue['fields']['customfield_11226'])) { $kanbanEntry->setPrio($jsonIssue['fields']['customfield_11226']); } // functional area : customfield_11225 if(isset($jsonIssue['fields']['customfield_11225'])) { foreach ($jsonIssue['fields']['customfield_11225'] as $functionalArea) { $kanbanEntry->addFunctionalArea($functionalArea['value']); } } // project : customfield_10840 if(isset($jsonIssue['fields']['customfield_10840'])) { $kanbanEntry->setProject($jsonIssue['fields']['customfield_10840']['value']); } // mhweb hot : customfield_10847 if(isset($jsonIssue['fields']['customfield_10847'])) { $boolVal = $jsonIssue['fields']['customfield_10847'][0]['value'] == 'yes'; $kanbanEntry->setMhwebHot($boolVal); } // mhweb external : customfield_10849 if(isset($jsonIssue['fields']['customfield_10849'])) { $boolVal = $jsonIssue['fields']['customfield_10849'][0]['value'] == 'yes'; $kanbanEntry->setMhwebExternal($boolVal); } // team : customfield_10904 if(isset($jsonIssue['fields']['customfield_10904'])) { $kanbanEntry->setTeam($jsonIssue['fields']['customfield_10904']['value']); } // jira status $jiraStatus = new JiraStatus(); $jiraStatus->setName($jsonIssue['fields']['status']['name']) ->setColor($jsonIssue['fields']['status']['statusCategory']['colorName']); $kanbanEntry->setStatus($jiraStatus); // assignee if($jsonIssue['fields']['assignee']) { $avatarUrl = $this->avatarService->getJiraAvatarUrl( $jsonIssue['fields']['assignee']['avatarUrls']['48x48'], $jsonIssue['fields']['assignee']['key'] ); $jiraAssignee = new JiraAssignee(); $jiraAssignee->setName($jsonIssue['fields']['assignee']['displayName']) ->setSignum($jsonIssue['fields']['assignee']['key']) ->setEmail(strtolower($jsonIssue['fields']['assignee']['emailAddress'])) ->setAvatar($avatarUrl) ->setActive($jsonIssue['fields']['assignee']['active']); $kanbanEntry->setAssignee($jiraAssignee); unset($jiraAssignee); } // issue type if($jsonIssue['fields']['issuetype']) { $jiraIssueType = new JiraIssueType(); $jiraIssueType->setName($jsonIssue['fields']['issuetype']['name']) ->setDescription($jsonIssue['fields']['issuetype']['description']) ->setIcon($jsonIssue['fields']['issuetype']['iconUrl']); $kanbanEntry->setIssueType($jiraIssueType); unset($jiraIssueType); } switch($jiraStatus->getName()) { case "Backlog": $kanbanBoard->addInbox($kanbanEntry); break; case "In Progress": $kanbanBoard->addInProgress($kanbanEntry); break; case "Verification": $kanbanBoard->addVerification($kanbanEntry); break; case "Done": $kanbanBoard->addDone($kanbanEntry); break; } unset($kanbanEntry); } return $kanbanBoard; } }