diff --git a/Resources/views/widget/heatmap.html.twig b/Resources/views/widget/heatmap.html.twig
index 65c11a9..1a5ea2c 100644
--- a/Resources/views/widget/heatmap.html.twig
+++ b/Resources/views/widget/heatmap.html.twig
@@ -6,6 +6,8 @@
diff --git a/Service/HeatmapService.php b/Service/HeatmapService.php
index d70f707..fc5ba48 100644
--- a/Service/HeatmapService.php
+++ b/Service/HeatmapService.php
@@ -47,4 +47,23 @@ class HeatmapService
];
}, $results);
}
+
+ /**
+ * @return array
+ */
+ public function getUserProjects(User $user): array
+ {
+ $qb = $this->repository->createQueryBuilder('t');
+ $qb->select('DISTINCT IDENTITY(t.project) as projectId, p.name')
+ ->join('t.project', 'p')
+ ->andWhere($qb->expr()->eq('t.user', ':user'))
+ ->andWhere($qb->expr()->isNotNull('t.end'))
+ ->setParameter('user', $user)
+ ->orderBy('p.name', 'ASC');
+
+ return array_map(fn(array $row) => [
+ 'id' => (int) $row['projectId'],
+ 'name' => $row['name'],
+ ], $qb->getQuery()->getResult());
+ }
}
diff --git a/Widget/HeatmapWidget.php b/Widget/HeatmapWidget.php
index a38e7f1..c9bcd6c 100644
--- a/Widget/HeatmapWidget.php
+++ b/Widget/HeatmapWidget.php
@@ -4,9 +4,14 @@ namespace KimaiPlugin\KimaiHeatmapBundle\Widget;
use App\Widget\Type\AbstractWidget;
use App\Widget\WidgetInterface;
+use KimaiPlugin\KimaiHeatmapBundle\Service\HeatmapService;
-final class HeatmapWidget extends AbstractWidget
+class HeatmapWidget extends AbstractWidget
{
+ public function __construct(private readonly HeatmapService $service)
+ {
+ }
+
public function getId(): string
{
return 'HeatmapWidget';
@@ -34,7 +39,11 @@ final class HeatmapWidget extends AbstractWidget
public function getData(array $options = []): mixed
{
- return null;
+ $user = $this->getUser();
+
+ return [
+ 'projects' => $this->service->getUserProjects($user),
+ ];
}
public function getTemplateName(): string