Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Widget
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
4 / 4
5
100.00% covered (success)
100.00%
1 / 1
 handler
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 render
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 label
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 booted
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Models;
4
5use App\Service\CacheService;
6use App\Services\Builder\WidgetService;
7use App\Widgets\WidgetContract;
8use Illuminate\Database\Eloquent\Factories\HasFactory;
9use Illuminate\Database\Eloquent\Model;
10
11class Widget extends Model
12{
13    use HasFactory;
14
15    protected $fillable = ['area', 'type', 'settings', 'sort_order', 'enabled'];
16
17    protected $casts = [
18        'settings' => 'array',
19        'enabled' => 'boolean',
20        'sort_order' => 'integer',
21    ];
22
23    /** The type handler for this widget, or null if the type was removed. */
24    public function handler(): ?WidgetContract
25    {
26        return app(WidgetService::class)->make($this->type);
27    }
28
29    public function render(): string
30    {
31        $handler = $this->handler();
32
33        return $handler ? $handler->render($this->settings ?? []) : '';
34    }
35
36    public function label(): string
37    {
38        return $this->handler()?->label() ?? ucfirst(str_replace('_', ' ', $this->type));
39    }
40
41    protected static function booted(): void
42    {
43        static::saved(fn () => CacheService::forgetWidgets());
44        static::deleted(fn () => CacheService::forgetWidgets());
45    }
46}