*/ private $reason_codes; /** * Constructor. * * @param string $verdict Decision verdict. * @param array $reason_codes Safe internal reason codes. */ private function __construct( string $verdict, array $reason_codes = array() ) { $this->verdict = $verdict; $this->reason_codes = array_values( array_unique( $reason_codes ) ); } /** * Create an allow decision. */ public static function allow(): self { return new self( self::VERDICT_ALLOW ); } /** * Create a suspicious decision. * * @param array $reason_codes Safe internal reason codes. */ public static function suspicious( array $reason_codes ): self { return new self( self::VERDICT_SUSPICIOUS, $reason_codes ); } /** * Create a block decision. * * @param array $reason_codes Safe internal reason codes. */ public static function block( array $reason_codes ): self { return new self( self::VERDICT_BLOCK, $reason_codes ); } /** * Get decision verdict. */ public function get_verdict(): string { return $this->verdict; } /** * Whether the submission should be blocked. */ public function should_block(): bool { return self::VERDICT_BLOCK === $this->verdict; } /** * Whether the submission should be treated as suspicious. */ public function is_suspicious(): bool { return self::VERDICT_SUSPICIOUS === $this->verdict; } /** * Get safe internal reason codes. * * @return array */ public function get_reason_codes(): array { return $this->reason_codes; } /** * Get a generic frontend-facing message. */ public function get_frontend_message(): string { return self::GENERIC_BLOCK_MESSAGE; } }