feat: add dashboard widget with placeholder template

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Christopher Mühl 2026-04-08 12:51:22 +02:00
parent 0116af5d40
commit 263ab8a9d9
No known key found for this signature in database
GPG key ID: 925AC7D69955293F
3 changed files with 83 additions and 0 deletions

View file

@ -0,0 +1,29 @@
<?php
namespace KimaiPlugin\KimaiHeatmapBundle\EventSubscriber;
use App\Event\DashboardEvent;
use App\Widget\WidgetService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
final class DashboardSubscriber implements EventSubscriberInterface
{
public function __construct(private readonly WidgetService $widgetService)
{
}
public static function getSubscribedEvents(): array
{
return [
DashboardEvent::class => ['onDashboard', 100],
];
}
public function onDashboard(DashboardEvent $event): void
{
$widget = $this->widgetService->getWidget('HeatmapWidget');
if ($widget !== null) {
$event->addWidget($widget);
}
}
}

View file

@ -0,0 +1,10 @@
{% embed '@theme/embeds/card.html.twig' with {'margin_bottom': 0} %}
{% block box_title %}
{{ title }}
{% endblock %}
{% block box_body %}
<div id="heatmap-container" data-url="{{ path('heatmap_data') }}" style="min-height: 150px; padding: 1rem;">
<p style="color: var(--bs-secondary);">Heatmap visualization coming in Phase 3</p>
</div>
{% endblock %}
{% endembed %}

44
Widget/HeatmapWidget.php Normal file
View file

@ -0,0 +1,44 @@
<?php
namespace KimaiPlugin\KimaiHeatmapBundle\Widget;
use App\Widget\Type\AbstractWidget;
use App\Widget\WidgetInterface;
final class HeatmapWidget extends AbstractWidget
{
public function getId(): string
{
return 'HeatmapWidget';
}
public function getTitle(): string
{
return 'Activity Heatmap';
}
public function getWidth(): int
{
return WidgetInterface::WIDTH_FULL;
}
public function getHeight(): int
{
return WidgetInterface::HEIGHT_LARGE;
}
public function getPermissions(): array
{
return ['view_own_timesheet'];
}
public function getData(array $options = []): mixed
{
return null;
}
public function getTemplateName(): string
{
return '@KimaiHeatmapBundle/widget/heatmap.html.twig';
}
}