. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\Services\MessageService; use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; /** * Compose messages from an administrator. */ class BroadcastPage implements RequestHandlerInterface { use ViewResponseTrait; private MessageService $message_service; /** * MessagePage constructor. * * @param MessageService $message_service */ public function __construct(MessageService $message_service) { $this->message_service = $message_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $user = Validator::attributes($request)->user(); $params = $request->getQueryParams(); $body = $params['body'] ?? ''; $subject = $params['subject'] ?? ''; $to = $params['to']; $to_names = $this->message_service->recipientUsers($to) ->map(static function (UserInterface $user): string { return $user->realName(); }); $title = $this->message_service->recipientDescription($to); $this->layout = 'layouts/administration'; return $this->viewResponse('admin/broadcast', [ 'body' => $body, 'from' => $user, 'subject' => $subject, 'title' => $title, 'to' => $to, 'to_names' => $to_names, ]); } }