88 lines
2.9 KiB
PHP
88 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Repository\IssueRepository;
|
|
use App\Service\RedmineService;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Attribute\Route;
|
|
|
|
class HomeController extends AbstractController
|
|
{
|
|
private RedmineService $redmineService;
|
|
|
|
public function __construct(RedmineService $redmineService)
|
|
{
|
|
$this->redmineService = $redmineService;
|
|
}
|
|
|
|
#[Route('/', name: 'app_home')]
|
|
public function home(Request $request): Response
|
|
{
|
|
$project = $request->getSession()->get('project');
|
|
if (!$project) {
|
|
return $this->noproject();
|
|
}
|
|
|
|
$redmine = $this->redmineService->getProject($project->getId(), $this->getParameter('redmineApikey'));
|
|
$project->setRedmine($redmine);
|
|
$this->redmineService->majProjectIssues($project, $this->getParameter('redmineApikey'), false);
|
|
|
|
$predmine = $project->getRedmine();
|
|
|
|
foreach ($project->getIssues() as $issue) {
|
|
foreach ($predmine['sprints'] as $key => $sprint) {
|
|
if ($sprint['id'] === $issue->getRedmine()['sprint']['agile_sprint_id']) {
|
|
if (!array_key_exists('story_points', $predmine['sprints'][$key])) {
|
|
$predmine['sprints'][$key]['story_points']['total'] = 0;
|
|
}
|
|
$predmine['sprints'][$key]['story_points']['total'] += $issue->getRedmine()['sprint']['story_points'];
|
|
|
|
if (!array_key_exists($issue->getRedmine()['status']['id'], $predmine['sprints'][$key]['story_points'])) {
|
|
$predmine['sprints'][$key]['story_points'][$issue->getRedmine()['status']['id']] = 0;
|
|
}
|
|
$predmine['sprints'][$key]['story_points'][$issue->getRedmine()['status']['id']] += $issue->getRedmine()['sprint']['story_points'];
|
|
}
|
|
}
|
|
}
|
|
|
|
$project->setRedmine($predmine);
|
|
|
|
return $this->render('home/home.html.twig', [
|
|
'usemenu' => true,
|
|
'usesidebar' => false,
|
|
'project' => $project,
|
|
]);
|
|
}
|
|
|
|
#[Route('/admin', name: 'app_admin')]
|
|
public function admin(): Response
|
|
{
|
|
return $this->render('home/blank.html.twig', [
|
|
'usemenu' => true,
|
|
'usesidebar' => true,
|
|
]);
|
|
}
|
|
|
|
#[Route('/noproject', name: 'app_noproject')]
|
|
public function noproject(): Response
|
|
{
|
|
return $this->render('home/noproject.html.twig', [
|
|
'usemenu' => true,
|
|
'usesidebar' => false,
|
|
]);
|
|
}
|
|
|
|
#[Route('/user/issue/{id}', name: 'issue_view')]
|
|
public function view(int $id, IssueRepository $issueRepository): Response
|
|
{
|
|
$issue = $issueRepository->find($id);
|
|
|
|
return $this->render('issue/view.html.twig', [
|
|
'issue' => $issue,
|
|
]);
|
|
}
|
|
}
|