86 lines
4.0 KiB
PHP
86 lines
4.0 KiB
PHP
@extends('layouts.app')
|
|
@section('title', 'Tableau de bord — Signatures')
|
|
@section('content')
|
|
@php
|
|
$isAdmin = auth()->user()->hasRole('admin');
|
|
$syncOk = $tenant->last_sync_status === 'ok';
|
|
@endphp
|
|
<header class="page-head">
|
|
<div>
|
|
<h1>Tableau de bord</h1>
|
|
<p class="lead">{{ $tenant->name }}</p>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="card sync">
|
|
<span @class(['sync-dot', 'warn' => ! $syncOk]) aria-hidden="true"></span>
|
|
<div>
|
|
<p><strong>Annuaire synchronisé
|
|
{{ $tenant->last_sync_at ? 'le '.$tenant->last_sync_at->timezone('Europe/Paris')->format('d/m/Y à H:i') : ': jamais' }}</strong>
|
|
@if ($tenant->last_sync_at && ! $syncOk) <span class="badge warn">{{ $tenant->last_sync_status ?? 'état inconnu' }}</span> @endif
|
|
</p>
|
|
<p class="muted">Automatique toutes les 15 minutes (incrémentale) et chaque nuit (complète).</p>
|
|
</div>
|
|
<span class="spacer"></span>
|
|
@if ($isAdmin)
|
|
<form method="post" action="{{ route('admin.sync') }}" class="row" data-busy="Synchronisation en cours…">
|
|
@csrf
|
|
<label class="switch">
|
|
<input type="checkbox" name="full" value="1"><span class="switch-track"></span>Synchronisation complète
|
|
</label>
|
|
<button class="btn" type="submit"><x-icon name="refresh-cw" /><span data-label>Synchroniser maintenant</span></button>
|
|
</form>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="tiles">
|
|
<a class="tile" href="{{ route('admin.agents.index') }}">
|
|
<span class="tile-icon"><x-icon name="contact" :size="20" /></span>
|
|
<span><span class="tile-value">{{ $users }}</span><span class="tile-label">agents synchronisés</span></span>
|
|
</a>
|
|
<a class="tile" href="{{ route('admin.templates.index') }}">
|
|
<span class="tile-icon"><x-icon name="file-code" :size="20" /></span>
|
|
<span><span class="tile-value">{{ $templates }}</span><span class="tile-label">templates</span></span>
|
|
</a>
|
|
@if ($isAdmin)
|
|
<a class="tile" href="{{ route('admin.assignments.index') }}">
|
|
<span class="tile-icon"><x-icon name="users" :size="20" /></span>
|
|
<span><span class="tile-value">{{ $assignments }}</span><span class="tile-label">affectations</span></span>
|
|
</a>
|
|
@else
|
|
<div class="tile">
|
|
<span class="tile-icon"><x-icon name="users" :size="20" /></span>
|
|
<span><span class="tile-value">{{ $assignments }}</span><span class="tile-label">affectations</span></span>
|
|
</div>
|
|
@endif
|
|
<a class="tile" href="{{ route('admin.campaigns.index') }}">
|
|
<span class="tile-icon"><x-icon name="megaphone" :size="20" /></span>
|
|
<span><span class="tile-value">{{ $campaigns }}</span><span class="tile-label">campagnes en cours</span></span>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="card card--flush">
|
|
<div class="card-head">
|
|
<h2>Groupes AD synchronisés</h2>
|
|
<span class="badge plain">{{ $groups->count() }}</span>
|
|
</div>
|
|
<div class="table-wrap">
|
|
<table class="list">
|
|
<thead><tr><th>Groupe</th><th class="right">Membres (imbriqués inclus)</th></tr></thead>
|
|
<tbody>
|
|
@forelse ($groups as $g)
|
|
<tr><td>{{ $g->display_name }}</td><td class="right num">{{ $g->members_count }}</td></tr>
|
|
@empty
|
|
<tr><td colspan="2">
|
|
<div class="empty">
|
|
<x-icon name="users" :size="32" />
|
|
<p><strong>Aucun groupe synchronisé</strong>Cochez « complète » puis lancez une synchronisation pour importer les groupes signature_* de l'annuaire.</p>
|
|
</div>
|
|
</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
@endsection
|