Skip to content

Commit ad00fe6

Browse files
committed
✨ Ajout des widgets de numbers
1 parent 5503c8c commit ad00fe6

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed

app/Widgets/RecentNumbers.php

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
3+
namespace App\Widgets;
4+
5+
use App\Models\Article;
6+
use App\Models\User;
7+
use Arrilot\Widgets\AbstractWidget;
8+
use CyrildeWit\EloquentViewable\Support\Period;
9+
10+
class RecentNumbers extends AbstractWidget
11+
{
12+
/**
13+
* The configuration array.
14+
*
15+
* @var array
16+
*/
17+
protected $config = [];
18+
19+
/**
20+
* The number of seconds before each reload.
21+
*
22+
* @var int|float
23+
*/
24+
public $reloadTimeout = 5400;
25+
26+
/**
27+
* The number of minutes before cache expires.
28+
* False means no caching at all.
29+
*
30+
* @var int|float|bool
31+
*/
32+
// public $cacheTime = 90;
33+
34+
/**
35+
* Treat this method as a controller action.
36+
* Return view() or other content to display.
37+
*/
38+
public function run()
39+
{
40+
$lastMonth = now()->subMonth();
41+
$countUsers = User::count();
42+
$lastMonthRegistered = User::query()->whereBetween('created_at', [
43+
$lastMonth->startOfMonth()->format('Y-m-d'),
44+
$lastMonth->endOfMonth()->format('Y-m-d')
45+
])->count();
46+
$currentMonthRegistered = User::query()->where('created_at', '>=', now()->startOfMonth())->count();
47+
$difference = $currentMonthRegistered - $lastMonthRegistered;
48+
49+
$countArticles = Article::count();
50+
$lastMonthArticles = Article::query()->whereBetween('created_at', [
51+
$lastMonth->startOfMonth()->format('Y-m-d'),
52+
$lastMonth->endOfMonth()->format('Y-m-d')
53+
])->count();
54+
$currentMonthArticles = Article::query()->where('created_at', '>=', now()->startOfMonth())->count();
55+
$differenceArticle = $currentMonthArticles - $lastMonthArticles;
56+
57+
$totalViews = views(Article::class)->count();
58+
$lastMonthViews = views(Article::class)->period(Period::pastMonths(1))->count();
59+
$currentViews = views(Article::class)->period(Period::create(now()->startOfMonth()))->count();
60+
$differenceViews = $currentViews - $lastMonthViews;
61+
62+
return view('widgets.recent_numbers', [
63+
'config' => $this->config,
64+
'users' => [
65+
'count' => $countUsers,
66+
'increase' => $difference > 0,
67+
'decreased' => $difference < 0,
68+
'current' => max($difference, 0),
69+
],
70+
'articles' => [
71+
'count' => $countArticles,
72+
'increase' => $differenceArticle > 0,
73+
'decreased' => $differenceArticle < 0,
74+
'current' => max($differenceArticle, 0),
75+
],
76+
'views' => [
77+
'count' => $totalViews,
78+
'increase' => $difference > 0,
79+
'decreased' => $difference < 0,
80+
'current' => $differenceViews,
81+
],
82+
]);
83+
}
84+
}

resources/views/components/decreased.blade.php

Whitespace-only changes.

resources/views/components/increased.blade.php

Whitespace-only changes.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<div>
2+
<dl class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3">
3+
<div class="relative bg-white py-5 px-4 sm:py-6 sm:px-6 shadow rounded-lg overflow-hidden">
4+
<dt>
5+
<div class="flex items-center">
6+
<x-heroicon-o-users class="h-5 w-5 text-green-600" />
7+
<p class="ml-3 text-sm font-medium text-skin-base truncate">{{ __('Utilisateurs') }}</p>
8+
</div>
9+
</dt>
10+
<dd class="mt-2 flex items-baseline">
11+
<p class="text-2xl font-semibold text-skin-inverted">{{ $users['count'] }}</p>
12+
@if($users['increase'])
13+
<x-increased class="ml-2" :value="$users['current']" />
14+
@else
15+
<x-decreased class="ml-2" :value="$users['current']" />
16+
@endif
17+
<span class="ml-2 text-sm leading-4 text-skin-base">vs mois dernier</span>
18+
</dd>
19+
</div>
20+
21+
<div class="relative bg-white py-5 px-4 sm:py-6 sm:px-6 shadow rounded-lg overflow-hidden">
22+
<dt>
23+
<div class="flex items-center">
24+
<x-heroicon-o-newspaper class="h-5 w-5 text-green-600" />
25+
<p class="ml-3 text-sm font-medium text-skin-base truncate">{{ __('Articles') }}</p>
26+
</div>
27+
</dt>
28+
<dd class="mt-2 flex items-baseline">
29+
<p class="text-2xl font-semibold text-skin-inverted">{{ $articles['count'] }}</p>
30+
@if($articles['increase'])
31+
<x-increased class="ml-2" :value="$articles['current']" />
32+
@else
33+
<x-decreased class="ml-2" :value="$articles['current']" />
34+
@endif
35+
<span class="ml-2 text-sm leading-4 text-skin-base">vs mois dernier</span>
36+
</dd>
37+
</div>
38+
39+
<div class="relative bg-white py-5 px-4 sm:py-6 sm:px-6 shadow rounded-lg overflow-hidden">
40+
<dt>
41+
<div class="flex items-center">
42+
<x-heroicon-o-eye class="h-5 w-5 text-green-600" />
43+
<p class="ml-3 text-sm font-medium text-skin-base truncate">{{ __('Vues sur les articles') }}</p>
44+
</div>
45+
</dt>
46+
<dd class="mt-2 flex items-baseline">
47+
<p class="text-2xl font-semibold text-skin-inverted">{{ $views['count'] }}</p>
48+
@if($views['increase'])
49+
<x-increased class="ml-2" :value="$views['current']" />
50+
@else
51+
<x-decreased class="ml-2" :value="$views['current']" />
52+
@endif
53+
<span class="ml-2 text-sm leading-4 text-skin-base">vs mois dernier</span>
54+
</dd>
55+
</div>
56+
</dl>
57+
</div>

0 commit comments

Comments
 (0)