---
title: "Moderácia viacerými moderátormi — Reports for Laravel | Roundly"
description: "Vyžadujte súhlas viacerých moderátorov — jednomyseľne, kvórom, ktorýmkoľvek alebo vážene — skôr, než sa hlásenie vybaví."
url: https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel/moderacia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Reports for Laravel](https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel.md)

# Moderácia viacerými moderátormi

Predvolene jedno volanie Reports::resolve() alebo reject() hlásenie vybaví. Ak má najprv súhlasiť viac moderátorov, otvorte žiadosť o moderáciu: hlásenie sa stane subjektom approvals-for-laravel a o splnení podmienky rozhodne pravidlo enginu. Najprv publikujte migrácie approvals (pozrite Inštalácia).

## Moderátori

Moderátori sú uložené Eloquent modely — zvyčajne váš User s traitom GivesApprovals z balíka approvals, ktorý pridá reláciu givenApprovals(). Bez problémov sa kombinuje s GivesReports:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Interfaces\GivesApprovalsInterface;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
use RoundlyConsulting\Reports\Contracts\Reporter;
use RoundlyConsulting\Reports\Traits\GivesReports;

class User extends Model implements GivesApprovalsInterface, Reporter
{
    use GivesApprovals;
    use GivesReports;
}
```

## Otvorenie žiadosti

Otvorte žiadosť o moderáciu a rozhodnutia posielajte cez tie isté resolve() a reject():

```php
use RoundlyConsulting\Approvals\Enums\ApprovalRule;
use RoundlyConsulting\Reports\Facades\Reports;

// Require 2 of the named moderators to agree.
Reports::moderate($report)
    ->requiring([$alice, $bob, $carol])
    ->rule(ApprovalRule::Quorum)
    ->quorum(2)
    ->open();

Reports::resolve($report, by: $alice);             // 1 of 2 — report stays open
Reports::resolve($report, by: $bob, note: 'Spam'); // quorum reached → Resolved
```

- requiring(\[...\]) — moderátori, ktorých súhlas je potrebný. Otvorenie bez nich vyhodí MissingModeratorsException.
- rule(ApprovalRule) — Unanimous, Quorum, Any alebo Weighted; predvolene moderation.default\_rule.
- quorum(int) — počet súhlasov pre Quorum alebo prah váhy pre Weighted; predvolene moderation.default\_quorum.
- open() — otvorí žiadosť a vráti príslušný ApprovalRequest.

Zoznam moderátorov sa uloží k žiadosti, preto open() odmietne žiadosť, ktorú by nikdy nebolo možné uzavrieť — nič sa neotvorí: pri prázdnom zozname MissingModeratorsException, pri moderátorovi, ktorý ešte nie je uložený, alebo pri kvóre vyššom než počet moderátorov (quorum(4) z troch) InvalidApprovalRequestException z enginu approvals.

Moderovať možno len otvorené hlásenie — Pending alebo InReview —, ktoré ešte nemá čakajúcu žiadosť o moderáciu. Pri vybavenom hlásení (Resolved, Rejected alebo Closed) alebo hlásení, ktoré už je pod moderáciou, open() vyhodí ModerationNotAllowedException a nič neotvorí. Obe podmienky sa overujú pod zámkom riadka hlásenia voči jeho uloženému stavu, takže z dvoch súbežných otvorení neprejdú obe. Ak chcete vybavené hlásenie moderovať znova, najprv ho vráťte do Pending cez Reports::changeStatus($report, Status::Pending).

## Ako sa hlásenie vybaví

Keď je podmienka pravidla splnená, listener SyncReportStatusFromApproval hlásenie automaticky aktualizuje: schválená žiadosť ho vyrieši, zamietnutá zamietne a zrušená či expirovaná ho nechá tak. Na hlásenie sa zapíše rozhodujúci moderátor a jeho poznámka a znova sa spustia ReportResolved, ReportRejected a ReportStatusChanged — vaše listenery tak dostanú rovnaké udalosti bez ohľadu na to, či bolo hlásenie vybavené priamo, alebo cez moderáciu. Pri pravidle Unanimous stačí na zamietnutie hlásenia jediné zamietnutie.

Listener rešpektuje strict\_transitions: ak sa hlásenie medzitým presunulo do stavu, z ktorého tabuľka prechod nepovoľuje, neurobí nič.

## Rozhodujú len určení moderátori

Kým je žiadosť otvorená ($report->isUnderModeration()), resolve() a reject() prijmú moderátora zo zoznamu requiring(\[...\]) alebo jeho zástupcu v approvals (rozhodnutie sa zapíše za moderátora). Ktokoľvek iný dostane ModeratorRequiredException a nič sa nezaznamená — platí to pre cudziu osobu (jej getPrevious() je UnauthorizedApprovalException z enginu approvals), pre volanie bez aktéra aj pre priamy changeStatus() či close() z otvorených stavov:

```php
use RoundlyConsulting\Reports\Exceptions\ModeratorRequiredException;
use RoundlyConsulting\Reports\Facades\Reports;

try {
    Reports::resolve($report, by: $mallory); // not in requiring([...])
} catch (ModeratorRequiredException $e) {
    $e->report; $e->actor;                   // the report, and who was refused (null: no actor)
}
```

review() funguje naďalej. Po rozhodnutí žiadosti sa hlásenie opäť vybavuje priamo.

## Sledovanie priebehu

Report používa trait RequiresApproval z balíka approvals, takže priebeh poslednej žiadosti prečítate priamo z hlásenia:

```php
$progress = $report->approvalProgress();  // ?ApprovalProgress — null before a request is opened

$progress?->approved;      // approvals so far
$progress?->required;      // moderators on the request
$progress?->percentage();  // 0–100

$report->approvalRequests; // every moderation request opened on the report
```

## Vážené pravidlá

Pri ApprovalRule::Weighted je kvórum prahom váhy, nie počtom hlasov. Moderátori deklarujú svoju váhu implementáciou rozhrania ProvidesApprovalWeight z balíka approvals — podrobnosti nájdete v dokumentácii Approvals for Laravel.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel.md)
