Nahlásenia a moderácia
Priložený model Post implementuje Reportable cez concern HasPostReports, postavený na reports-for-laravel. Nahlasujúceho vždy odovzdávate explicitne:
use RoundlyConsulting\Reports\Enums\Reason;
use RoundlyConsulting\Reports\Facades\Reports;
Reports::report($post)
->by($user)
->for(Reason::Spam)
->because('Obvious spam.')
->create();
// Anonymous / guest report:
Reports::report($post)->asGuest(hash('sha256', $request->ip()))->for('spam')->create();Ochranu pred duplicitami, zoznam povolených dôvodov a ich názvy zabezpečuje reports: duplicitné nahlásenie vyhodí DuplicateReportException, neznámy dôvod UnknownReportReasonException.
Fronta na kontrolu
Frontu príspevkov na kontrolu zostavíte priamo z dotazu na Post:
use RoundlyConsulting\Reports\Enums\Status;
$post->hasBeenReported(); // bool
$post->isReportedBy($user); // bool
$post->reportsCount(Status::Pending); // int
$post->reports; // every report on the post
$post->pendingReports; // pending reports only
Post::query()->withReportCounts()->get(); // eager reports_count
Post::query()->mostReported()->paginate(); // by total report count
Post::query()->reportedMoreThan(5)->get(); // over a thresholdSchválenie viacerými moderátormi
reports rieši nahlásenia cez approvals-for-laravel, takže nahlásenie môže pred uzavretím vyžadovať súhlas viacerých moderátorov. Moderátori sú uložené Eloquent modely — zvyčajne váš User s traitom GivesApprovals z approvals, ktorý pridá reláciu givenApprovals():
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Interfaces\GivesApprovalsInterface;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
class User extends Model implements GivesApprovalsInterface
{
use GivesApprovals;
}use RoundlyConsulting\Approvals\Enums\ApprovalRule;
Reports::moderate($report)->requiring([$alice, $bob])->rule(ApprovalRule::Quorum)->quorum(2)->open();
Reports::resolve($report, by: $alice); // 1 of 2 — stays open
Reports::resolve($report, by: $bob, note: 'Spam'); // quorum reached → Resolved → post archived
Reports::resolve($report, by: $mallory); // not named → ModeratorRequiredExceptionNahlásenie môžu uzavrieť len moderátori, ktorých žiadosť menuje, alebo ich zástupcovia: ktokoľvek iný — aj resolve() bez aktéra — dostane ModeratorRequiredException z reports, nič sa nezaznamená a príspevok zostane, ako je.
Automatické stiahnutie
Keď je nahlásenie potvrdené (ReportResolved) alebo príspevok prekročí globálny reports.threshold (ReportThresholdReached), príspevok sa stiahne cez vlastný publikačný cyklus — $post->archive() alebo $post->unpublish(), takže ho Posts::fake() zaznamená — a znova spustí PostArchived alebo PostDrafted. Týka sa to publikovaného aj naplánovaného príspevku: naplánovaný sa z plánu vyradí, takže publishDue() moderovaný obsah nikdy nezverejní. Koncepty a archivované príspevky zostanú bez zmeny, takže opakovanie nič nepokazí, a predmety nahlásení, ktoré nie sú nakonfigurovaným modelom príspevku, sa ignorujú:
'moderation' => [
'on_resolved' => 'archive', // 'archive' | 'draft' | null (disable the upheld-report path); anything else throws
'auto_unpublish' => true, // auto-archive on ReportThresholdReached
],reports.threshold je v reports-for-laravel predvolene null, takže prahová vetva sa spustí až po jeho nastavení. Ak chcete viditeľnosť riadiť sami, nastavte on_resolved na null a auto_unpublish na false.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.