1. Go to this page and download the library: Download andydefer/laravel-reports library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
return [
/*
|--------------------------------------------------------------------------
| Enum Casts
|--------------------------------------------------------------------------
|
| Define enum casts for specific tables and columns.
| Each entry maps a table name and column to an enum class.
|
| The enum class must implement EnumerableInterface.
|
*/
'enum_casts' => [
'reports' => [
'type' => App\Enums\ReportType::class,
'status' => App\Enums\ReportStatus::class,
],
],
];
namespace App\Enums;
use AndyDefer\Repository\Contracts\EnumerableInterface;
enum ReportType: string implements EnumerableInterface // ⚠️ Interface obligatoire
{
case SPAM = 'spam';
case ABUSE = 'abuse';
case OTHER = 'other';
/**
* Obligatoire - Retourne la valeur brute de l'énumération
*/
public function getValue(): string
{
return $this->value;
}
/**
* Optionnel - Méthode utilitaire pour l'affichage
*/
public function getLabel(): string
{
return match ($this) {
self::SPAM => 'Spam',
self::ABUSE => 'Abus',
self::OTHER => 'Autre',
};
}
}
namespace App\Enums;
use AndyDefer\Repository\Contracts\EnumerableInterface;
enum ReportStatus: string implements EnumerableInterface // ⚠️ Interface obligatoire
{
case PENDING = 'pending';
case RESOLVED = 'resolved';
case REJECTED = 'rejected';
/**
* Obligatoire - Retourne la valeur brute de l'énumération
*/
public function getValue(): string
{
return $this->value;
}
/**
* Optionnel - Méthode utilitaire pour l'affichage
*/
public function getLabel(): string
{
return match ($this) {
self::PENDING => 'En attente',
self::RESOLVED => 'Résolu',
self::REJECTED => 'Rejeté',
};
}
}
// config/repository.php
'enum_casts' => [
'reports' => [
'type' => App\Enums\ReportType::class, // Votre enum de type
'status' => App\Enums\ReportStatus::class, // Votre enum de statut
],
],
use AndyDefer\LaravelReports\Services\ReportService;
use App\Enums\ReportType;
use App\Enums\ReportStatus;
use AndyDefer\DomainStructures\Utils\StrictDataObject;
class PostController extends Controller
{
public function report(ReportService $reportService, Post $post)
{
$user = auth()->user();
// Signalement simple
$report = $reportService->report(
$user, // Utilisateur qui signale
$post, // Contenu signalé
ReportType::SPAM, // Votre enum de type
ReportStatus::PENDING, // Votre enum de statut
'Contenu promotionnel non sollicité'
);
// Signalement avec métadonnées
$metadata = StrictDataObject::from([
'ip' => request()->ip(),
'user_agent' => request()->userAgent(),
'page_url' => request()->url(),
]);
$report = $reportService->report(
$user,
$post,
ReportType::ABUSE,
ReportStatus::PENDING,
'Commentaires insultants',
$metadata
);
return response()->json($report);
}
}
// Vérifier si l'utilisateur a déjà signalé
$hasReported = $reportService->hasReported($user, $post);
if ($hasReported) {
// L'utilisateur a déjà signalé ce contenu
}
// Récupérer tous les signalements pour un contenu
$reports = $reportService->getReportsFor($post);
// Récupérer uniquement les signalements en attente
$pendingReports = $reportService->getReportsFor($post, true);
// Récupérer les signalements d'un utilisateur
$userReports = $reportService->getReportsBy($user);
// Récupérer tous les signalements en attente
$pending = $reportService->getPendingReports();
// Récupérer les signalements par statut
$resolved = $reportService->getReportsByStatus(ReportStatus::RESOLVED);
// Récupérer les signalements par type
$spamReports = $reportService->getReportsByType(ReportType::SPAM);
// Mettre à jour le statut
$report = $reportService->updateStatus($reportId, ReportStatus::RESOLVED);
// Mettre à jour le type
$report = $reportService->updateType($reportId, ReportType::OTHER);
// Trouver un signalement par ID
$report = $reportService->find($reportId);
// Supprimer un signalement (soft delete)
$reportService->delete($reportId);
// Compter tous les signalements pour un contenu
$total = $reportService->countReports($post);
// Compter uniquement les signalements en attente
$pendingCount = $reportService->countReports($post, true);
// Compter par statut
$resolvedCount = $reportService->countByStatus(ReportStatus::RESOLVED);
// Compter par type
$spamCount = $reportService->countByType(ReportType::SPAM);
use AndyDefer\PhpVo\ValueObjects\DateTimeVO;
$date = DateTimeVO::from('2024-01-01 00:00:00');
// Récupérer les signalements mis à jour après une date
$recentReports = $reportService->getReportsUpdatedAfter($date);