NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Posts for Laravel

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 threshold

Schvá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 → ModeratorRequiredException

Nahlá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 kryptomien

Odoslaní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.