Publication initiale de RelaisSMS : documentation et sources nettoyees

This commit is contained in:
2026-10-21 09:29:39 +02:00
commit ac186b03b1
158 changed files with 24818 additions and 0 deletions
@@ -0,0 +1,129 @@
@extends('layouts.app')
@section('content')
<section class="page-wrap wide">
<header class="topbar">
<div class="title">
<h1>Historique SMS</h1>
<p>Recherche, audit et export des campagnes SMS.</p>
</div>
<div class="actions">
<a href="{{ route('sms-campaigns.export', $filters) }}" class="secondary">
Export CSV
</a>
<a href="{{ route('recipients.index') }}" class="primary">
Nouvel envoi
</a>
</div>
</header>
<form method="GET" action="{{ route('sms-campaigns.index') }}" class="panel flush">
<div class="panel-body">
<div class="form-grid filters-grid">
<label class="field">
<span class="field-label">Du</span>
<input type="date" name="from" value="{{ $filters['from'] ?? '' }}" class="input">
</label>
<label class="field">
<span class="field-label">Au</span>
<input type="date" name="to" value="{{ $filters['to'] ?? '' }}" class="input">
</label>
<label class="field">
<span class="field-label">Statut</span>
<select name="status" class="select">
<option value="">Tous</option>
@foreach ($statuses as $status => $label)
<option value="{{ $status }}" @selected(($filters['status'] ?? '') === $status)>{{ $label }}</option>
@endforeach
</select>
</label>
<label class="field">
<span class="field-label">Utilisateur</span>
<select name="user_id" class="select">
<option value="">Tous</option>
@foreach ($users as $user)
<option value="{{ $user->id }}" @selected((string) ($filters['user_id'] ?? '') === (string) $user->id)>{{ $user->name }}</option>
@endforeach
</select>
</label>
<label class="field">
<span class="field-label">Groupe</span>
<select name="group_id" class="select">
<option value="">Tous</option>
@foreach ($groups as $group)
<option value="{{ $group->id }}" @selected((string) ($filters['group_id'] ?? '') === (string) $group->id)>{{ $group->name }}</option>
@endforeach
</select>
</label>
<div class="actions nowrap-actions">
<button type="submit" class="primary">
Filtrer
</button>
<a href="{{ route('sms-campaigns.index') }}" class="secondary">
Reset
</a>
</div>
</div>
</div>
</form>
<div class="panel">
<div class="panel-header">
<h2>Campagnes</h2>
<div class="tabs" aria-label="Statut">
<span class="active">Toutes</span>
<span>Envoyees</span>
<span>Erreurs</span>
</div>
</div>
<div class="table-wrap">
<table class="data-table">
<thead>
<tr>
<th>Date</th>
<th>Programmation</th>
<th>Message</th>
<th>Destinataires</th>
<th>Groupes</th>
<th>Statut</th>
</tr>
</thead>
<tbody>
@forelse ($campaigns as $campaign)
<tr>
<td>
<a href="{{ route('sms-campaigns.show', $campaign) }}" class="link">{{ $campaign->created_at->format('d/m/Y H:i') }}</a>
<div class="muted">{{ $campaign->user?->name ?: 'Utilisateur supprime' }}</div>
</td>
<td>
{{ $campaign->scheduled_at?->timezone(config('relais_sms.default_settings.display_timezone', 'Europe/Paris'))->format('d/m/Y H:i') ?: '-' }}
</td>
<td>{{ $campaign->message }}</td>
<td>{{ $campaign->sent_count }}/{{ $campaign->recipients_count }} envoye(s)</td>
<td class="truncate">{{ implode(', ', $campaign->selected_group_names ?? []) ?: 'Aucun groupe' }}</td>
<td>
<span class="badge {{ in_array($campaign->status, ['failed', 'partial', 'canceled'], true) ? 'error' : (in_array($campaign->status, ['scheduled', 'uncertain'], true) ? 'pending' : '') }}">
{{ $statuses[$campaign->status] ?? $campaign->status }}
</span>
</td>
</tr>
@empty
<tr>
<td colspan="6" class="empty-state">Aucune campagne ne correspond aux filtres.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
{{ $campaigns->links() }}
</section>
@endsection