dede70f70f
Les utilisateurs connectés peuvent proposer une modification / un ajout / une correction via un formulaire. La soumission crée automatiquement une issue dans le dépôt Gitea via son API (GiteaIssueService), avec le titre préfixé par le type et l'auteur dans le corps. - config/services.php + .env.example : GITEA_URL/TOKEN/REPO (token secret) - SuggestionController (create/store) + validation - vue suggestions/create + lien dans le header (utilisateurs connectés) - tests: auth requise, création OK, validation, échec API Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
2.2 KiB
PHP
59 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Utilisateur;
|
|
use App\Services\GiteaIssueService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class SuggestionController extends Controller
|
|
{
|
|
// Afficher le formulaire de suggestion
|
|
public function create()
|
|
{
|
|
return view('suggestions.create');
|
|
}
|
|
|
|
// Traiter la suggestion et créer un ticket dans Gitea
|
|
public function store(Request $request, GiteaIssueService $gitea)
|
|
{
|
|
$data = $request->validate([
|
|
'type' => ['required', Rule::in(['Modification', 'Ajout', 'Correction'])],
|
|
'titre' => ['required', 'string', 'min:5', 'max:120'],
|
|
'description' => ['required', 'string', 'min:10', 'max:5000'],
|
|
], [
|
|
'type.required' => 'Veuillez choisir un type de demande.',
|
|
'type.in' => 'Type de demande invalide.',
|
|
'titre.required' => 'Le titre est requis.',
|
|
'titre.min' => 'Le titre doit contenir au moins 5 caractères.',
|
|
'titre.max' => 'Le titre ne peut pas dépasser 120 caractères.',
|
|
'description.required' => 'La description est requise.',
|
|
'description.min' => 'Merci de détailler un peu plus votre suggestion (10 caractères minimum).',
|
|
]);
|
|
|
|
/** @var Utilisateur $user */
|
|
$user = Auth::user();
|
|
$auteur = $user->Pseudo ?? 'Utilisateur';
|
|
|
|
$title = "[{$data['type']}] {$data['titre']}";
|
|
|
|
$body = "**Type de demande :** {$data['type']}\n"
|
|
."**Proposé par :** {$auteur} (via le site (RE)Sources Relationnelles)\n\n"
|
|
."### Description\n"
|
|
.$data['description']."\n\n"
|
|
."---\n"
|
|
.'_Ticket créé automatiquement depuis le formulaire de suggestions du site._';
|
|
|
|
if ($gitea->createIssue($title, $body)) {
|
|
return redirect()->route('suggestions.create')
|
|
->with('success', 'Merci ! Votre suggestion a bien été transmise à l\'équipe.');
|
|
}
|
|
|
|
return back()->withInput()->withErrors([
|
|
'gitea' => "L'envoi de votre suggestion a échoué. Merci de réessayer plus tard.",
|
|
]);
|
|
}
|
|
}
|