Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
Media
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 card
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
 locale
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Panel\Dashboard;
6
7use Celema\Core\Request;
8use Celema\Quma\Database;
9use Cosray\Config;
10use Cosray\Contract\DashboardCard;
11use Cosray\Panel\AssetFacts;
12use Override;
13
14final readonly class Media implements DashboardCard
15{
16    public function __construct(
17        private Database $db,
18        private Config $config,
19        private Request $request,
20    ) {}
21
22    #[Override]
23    public function card(): Card
24    {
25        $row = $this->db->dashboard->media()->one();
26
27        return new Card(
28            label: __('dashboard:media'),
29            value: (int) ($row['total'] ?? 0),
30            note: __('dashboard:storage-used', [
31                'size' => AssetFacts::size((int) ($row['bytes'] ?? 0), $this->locale()),
32            ]),
33            url: $this->config->panel->path . '/media',
34        );
35    }
36
37    private function locale(): string
38    {
39        $locale = $this->request->get('panelLocale', 'en');
40
41        return is_string($locale) ? $locale : 'en';
42    }
43}