Passed
Pull Request — main (#4432)
by Greg
29:56 queued 23:54
created

BroadcastAction   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 26
dl 0
loc 58
rs 10
c 0
b 0
f 0
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
B handle() 0 37 6
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2022 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Http\RequestHandlers;
21
22
use Fisharebest\Webtrees\FlashMessages;
23
use Fisharebest\Webtrees\Http\ViewResponseTrait;
24
use Fisharebest\Webtrees\I18N;
25
use Fisharebest\Webtrees\Registry;
26
use Fisharebest\Webtrees\Services\MessageService;
27
use Fisharebest\Webtrees\Validator;
28
use Psr\Http\Message\ResponseInterface;
29
use Psr\Http\Message\ServerRequestInterface;
30
use Psr\Http\Server\RequestHandlerInterface;
31
32
use function e;
33
34
/**
35
 * Send messages from an administrator.
36
 */
37
class BroadcastAction implements RequestHandlerInterface
38
{
39
    use ViewResponseTrait;
40
41
    private MessageService $message_service;
42
43
    /**
44
     * MessagePage constructor.
45
     *
46
     * @param MessageService $message_service
47
     */
48
    public function __construct(MessageService $message_service)
49
    {
50
        $this->message_service = $message_service;
51
    }
52
53
    /**
54
     * @param ServerRequestInterface $request
55
     *
56
     * @return ResponseInterface
57
     */
58
    public function handle(ServerRequestInterface $request): ResponseInterface
59
    {
60
        $recipients = $this->message_service->recipientTypes();
61
62
        $user    = Validator::attributes($request)->user();
63
        $to      = Validator::attributes($request)->isInArrayKeys($recipients)->string('to');
64
        $ip      = Validator::attributes($request)->string('client-ip');
65
        $body    = Validator::parsedBody($request)->isNotEmpty()->string('body');
66
        $subject = Validator::parsedBody($request)->isNotEmpty()->string('subject');
67
68
        if ($body === '' || $subject === '') {
69
            return Registry::responseFactory()->redirect(BroadcastPage::class, [
70
                'body'    => $body,
71
                'subject' => $subject,
72
                'to'      => $to,
73
            ]);
74
        }
75
76
        foreach ($this->message_service->recipientUsers($to) as $to_user) {
77
            if ($this->message_service->deliverMessage($user, $to_user, $subject, $body, '', $ip)) {
78
                FlashMessages::addMessage(
79
                    I18N::translate('The message was successfully sent to %s.', e($to_user->realName())),
80
                    'success'
81
                );
82
            } else {
83
                FlashMessages::addMessage(
84
                    I18N::translate('The message was not sent to %s.', e($to_user->realName())),
85
                    'danger'
86
                );
87
            }
88
        }
89
90
        if ($errors) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $errors seems to be never defined.
Loading history...
91
            FlashMessages::addMessage(I18N::translate('The message was not sent.'), 'danger');
92
        }
93
94
        return Registry::responseFactory()->redirect(ControlPanel::class);
95
    }
96
}
97