Automatické moderovanie
Každá nová recenzia, ktorá nie je vynútene schválená — a každá úprava hodnotenia, nadpisu či textu recenzie (pozrite Úpravy a mazanie) — prejde nakonfigurovaným ReviewModerator. Ten vráti ModerationOutcome: schváliť, zamietnuť (s voliteľným dôvodom) alebo ponechať na neskôr. Predvolený NullModerator vždy odpovie pending, recenzie si teda ponechajú predvolený stav.
Filter zakázaných slov
Pribalený WordListModerator bez závislostí automaticky zamietne každú recenziu, ktorej nadpis alebo text obsahuje zakázané slovo — ako celé slovo, bez ohľadu na veľkosť písmen a v akomkoľvek písme, takže idiót či дурак zachytí rovnako ako scam. Čisté recenzie ostanú čakať na bežné schválenie:
// config/reviews.php
'moderator' => RoundlyConsulting\Reviews\Moderation\WordListModerator::class,
'moderation' => ['banned_words' => ['spam', 'scam']],Alebo zoznam ponechajte v prostredí:
REVIEWS_BANNED_WORDS=spam,scam,casinoZamietnutá recenzia dostane ako meta.rejection_reason preložiteľnú správu reviews::messages.review.banned_word.
Vlastný moderátor
Implementujte kontrakt a zaregistrujte ho cez konfiguračný kľúč moderator. Vytvára sa z kontajnera, takže funguje aj injektovanie cez konštruktor:
use RoundlyConsulting\Reviews\Contracts\ReviewModerator;
use RoundlyConsulting\Reviews\DataTransferObjects\ModerationOutcome;
use RoundlyConsulting\Reviews\Models\Review;
final class TrustedBuyerModerator implements ReviewModerator
{
public function moderate(Review $review): ModerationOutcome
{
if (str_contains((string) $review->content, 'http')) {
return ModerationOutcome::reject('Links are not allowed');
}
if ($review->verified && $review->rating !== null) {
return ModerationOutcome::approve();
}
return ModerationOutcome::pending(); // leave it for a human
}
}
// config/reviews.php
'moderator' => App\Reviews\TrustedBuyerModerator::class,- ModerationOutcome::approve() — okamžite schválené, nastaví sa approved_at.
- ModerationOutcome::reject('dôvod') — zamietnuté, dôvod sa uloží do meta.rejection_reason.
- ModerationOutcome::pending() — ponechané v default_status na posúdenie človekom.
Moderátor vidí celú, ešte neuloženú recenziu: $review->author a $review->reviewable sú už priradené a $review->exists odlíši vytvorenie (false) od úpravy (true, getOriginal() drží predchádzajúce hodnoty). Zamietnuté recenzie a odpovede vlastníka sa znova nemoderujú.
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.