Laravel reports package for implementing reports (eg: Spam,Violence,Child Abuse,illegal Drugs, etc.) on Eloquent models.
Download package into the project using Composer.
$ composer require rezaghz/laravel-reports
Laravel 5.5 (or higher) uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.
For Laravel 5.4 or earlier releases version include the service provider within app/config/app.php
:
'providers' => [
Rezaghz\Laravel\Reports\ReportsServiceProvider::class,
],
If you want to make changes in migrations, publish them to your application first.
$ php artisan vendor:publish --provider="Rezaghz\Laravel\Reports\ReportsServiceProvider" --tag=migrations
Run database migrations.
$ php artisan migrate
Use Rezaghz\Laravel\Reports\Contracts\ReportsInterface
contract in model which will perform report behavior on
reportable model and implement it and use Rezaghz\Laravel\Reports\Traits\Reports
trait.
use Rezaghz\Laravel\Reports\Traits\Reports;
use Rezaghz\Laravel\Reports\Contracts\ReportsInterface;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements ReportsInterface
{
use Reports;
}
Use Rezaghz\Laravel\Reports\Contracts\ReportableInterface
contract in model which will get report behavior and
implement it and use Rezaghz\Laravel\Reports\Traits\Reportable
trait.
use Illuminate\Database\Eloquent\Model;
use Rezaghz\Laravel\Reports\Traits\Reportable;
use Rezaghz\Laravel\Reports\Contracts\ReportableInterface;
class Article extends Model implements ReportableInterface
{
use Reportable;
}
$user->reportTo($article, 'spam');
$article->report('spam'); // current login user
$article->report('spam', $user);
Removing report of user from reportable model.
$user->removeReportFrom($article);
$article->removeReport(); // current login user
$article->removeReport($user);
The toggle report method will add a report to the model if the user has not reported. If a user has already reported, then it will replace the previous report with a new report. For example, if the user has reported 'spam' on the model. Now on toggles report to 'violence' then it will remove the 'spam' and stores the 'violence' report.
If a user has reported spam
then on toggle report with spam
. It will remove the report.
$user->toggleReportOn($article, 'spam');
$article->toggleReport('spam'); // current login user
$article->toggleReport('spam', $user);
$user->isReportedOn($article));
$article->is_reported; // current login user
$article->isReportBy(); // current login user
$article->isReportBy($user);
$article->reportSummary();
$article->report_summary;
// example
$article->report_summary->toArray();
// output
/*
[
"spam" => 5,
"violence" => 2,
"illegal_drugs" => 4,
"child_abuse" => 1
]
*/
$article->reportsBy();
Find all articles reported by user.
Article::whereReportedBy()->get(); // current login user
Article::whereReportedBy($user)->get();
Article::whereReportedBy($user->id)->get();
// It will return the Report object that is reported by given user.
$article->reported($user);
$article->reported(); // current login user
$article->reported; // current login user
$user->reportedOn($article);
On each report added \Rezaghz\Laravel\Reports\Events\OnReport
event is fired.
On each report removed \Rezaghz\Laravel\Reports\Events\OnDeleteReport
event is fired.
Run the tests with:
$ vendor/bin/phpunit