Passed
Push — search ( bdb480...5e7f6e )
by Simon
17:14 queued 07:17
created

PageQueueManagement   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 178
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 20
eloc 107
dl 0
loc 178
rs 10
c 2
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
B edit() 0 55 7
B create() 0 72 10
A main() 0 14 1
A populateFromObject() 0 16 1
1
<?php
2
/******************************************************************************
3
 * Wikipedia Account Creation Assistance tool                                 *
4
 *                                                                            *
5
 * All code in this file is released into the public domain by the ACC        *
6
 * Development Team. Please see team.json for a list of contributors.         *
7
 ******************************************************************************/
8
9
namespace Waca\Pages;
10
11
use Waca\DataObjects\RequestQueue;
12
use Waca\DataObjects\User;
13
use Waca\Helpers\Logger;
14
use Waca\Helpers\RequestQueueHelper;
15
use Waca\SessionAlert;
16
use Waca\Tasks\InternalPageBase;
17
use Waca\WebRequest;
18
19
class PageQueueManagement extends InternalPageBase
20
{
21
    /** @var RequestQueueHelper */
22
    private $helper;
23
24
    public function __construct()
25
    {
26
        $this->helper = new RequestQueueHelper();
27
    }
28
29
    protected function main()
30
    {
31
        $this->setHtmlTitle('Request Queue Management');
32
33
        $database = $this->getDatabase();
34
        $queues = RequestQueue::getAllQueues($database);
35
36
        $this->assign('queues', $queues);
37
38
        $user = User::getCurrent($database);
39
        $this->assign('canCreate', $this->barrierTest('create', $user));
40
        $this->assign('canEdit', $this->barrierTest('edit', $user));
41
42
        $this->setTemplate('queue-management/main.tpl');
43
    }
44
45
    protected function create()
46
    {
47
        if (WebRequest::wasPosted()) {
48
            $this->validateCSRFToken();
49
            $database = $this->getDatabase();
50
51
            $queue = new RequestQueue();
52
53
            $queue->setDatabase($database);
54
            $queue->setDomain(1); // FIXME: domain
55
56
            $queue->setHeader(WebRequest::postString('header'));
0 ignored issues
show
Bug introduced by
It seems like Waca\WebRequest::postString('header') can also be of type null; however, parameter $header of Waca\DataObjects\RequestQueue::setHeader() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

56
            $queue->setHeader(/** @scrutinizer ignore-type */ WebRequest::postString('header'));
Loading history...
57
            $queue->setDisplayName(WebRequest::postString('displayName'));
0 ignored issues
show
Bug introduced by
It seems like Waca\WebRequest::postString('displayName') can also be of type null; however, parameter $displayName of Waca\DataObjects\RequestQueue::setDisplayName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

57
            $queue->setDisplayName(/** @scrutinizer ignore-type */ WebRequest::postString('displayName'));
Loading history...
58
            $queue->setEnabled(WebRequest::postBoolean('enabled'));
59
            $queue->setDefault(WebRequest::postBoolean('default') && WebRequest::postBoolean('enabled'));
60
            $queue->setDefaultAntispoof(WebRequest::postBoolean('antispoof') && WebRequest::postBoolean('enabled'));
61
            $queue->setDefaultTitleBlacklist(WebRequest::postBoolean('titleblacklist') && WebRequest::postBoolean('enabled'));
62
            $queue->setHelp(WebRequest::postString('help'));
63
            $queue->setLogName(WebRequest::postString('logName'));
0 ignored issues
show
Deprecated Code introduced by
The function Waca\DataObjects\RequestQueue::setLogName() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

63
            /** @scrutinizer ignore-deprecated */ $queue->setLogName(WebRequest::postString('logName'));
Loading history...
Bug introduced by
It seems like Waca\WebRequest::postString('logName') can also be of type null; however, parameter $logName of Waca\DataObjects\RequestQueue::setLogName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

63
            $queue->setLogName(/** @scrutinizer ignore-type */ WebRequest::postString('logName'));
Loading history...
64
65
            $proceed = true;
66
67
            if (RequestQueue::getByApiName($database, $queue->getApiName(), 1) !== false) {
68
                // FIXME: domain
69
                SessionAlert::error("The chosen API name is already in use. Please choose another.");
70
                $proceed = false;
71
            }
72
73
            if (preg_match('^[A-Za-z][a-zA-Z0-9_-]*$', $queue->getApiName()) !== 1) {
74
                SessionAlert::error("The chosen API name contains invalid characters");
75
                $proceed = false;
76
            }
77
78
            if (RequestQueue::getByDisplayName($database, $queue->getDisplayName(), 1) !== false) {
79
                // FIXME: domain
80
                SessionAlert::error("The chosen target display name is already in use. Please choose another.");
81
                $proceed = false;
82
            }
83
84
            if (RequestQueue::getByHeader($database, $queue->getHeader(), 1) !== false) {
85
                // FIXME: domain
86
                SessionAlert::error("The chosen header is already in use. Please choose another.");
87
                $proceed = false;
88
            }
89
90
            if ($proceed) {
91
                $queue->save();
92
                Logger::requestQueueCreated($database, $queue);
93
                $this->redirect('queueManagement');
94
            }
95
            else {
96
                $this->populateFromObject($queue);
97
98
                $this->assign('createMode', true);
99
                $this->setTemplate('queue-management/edit.tpl');
100
            }
101
        }
102
        else {
103
            $this->assign('header', null);
104
            $this->assign('displayName', null);
105
            $this->assign('apiName', null);
106
            $this->assign('enabled', false);
107
            $this->assign('antispoof', false);
108
            $this->assign('isTarget', false);
109
            $this->assign('titleblacklist', false);
110
            $this->assign('default', false);
111
            $this->assign('help', null);
112
            $this->assign('logName', null);
113
114
            $this->assignCSRFToken();
115
            $this->assign('createMode', true);
116
            $this->setTemplate('queue-management/edit.tpl');
117
        }
118
    }
119
120
    protected function edit()
121
    {
122
        $database = $this->getDatabase();
123
124
        /** @var RequestQueue $queue */
125
        $queue = RequestQueue::getById(WebRequest::getInt('queue'), $database);
126
127
        if (WebRequest::wasPosted()) {
128
            $this->validateCSRFToken();
129
130
            $this->helper->configureDefaults(
131
                $queue,
132
                WebRequest::postBoolean('enabled'),
133
                WebRequest::postBoolean('default'),
134
                WebRequest::postBoolean('antispoof'),
135
                WebRequest::postBoolean('titleblacklist'),
136
                $this->helper->isEmailTemplateTarget($queue, $this->getDatabase()));
137
138
            $queue->setHeader(WebRequest::postString('header'));
0 ignored issues
show
Bug introduced by
It seems like Waca\WebRequest::postString('header') can also be of type null; however, parameter $header of Waca\DataObjects\RequestQueue::setHeader() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

138
            $queue->setHeader(/** @scrutinizer ignore-type */ WebRequest::postString('header'));
Loading history...
139
            $queue->setDisplayName(WebRequest::postString('displayName'));
0 ignored issues
show
Bug introduced by
It seems like Waca\WebRequest::postString('displayName') can also be of type null; however, parameter $displayName of Waca\DataObjects\RequestQueue::setDisplayName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

139
            $queue->setDisplayName(/** @scrutinizer ignore-type */ WebRequest::postString('displayName'));
Loading history...
140
            $queue->setHelp(WebRequest::postString('help'));
141
142
            $proceed = true;
143
144
            $foundRequestQueue = RequestQueue::getByDisplayName($database, $queue->getDisplayName(), 1);
145
            if ($foundRequestQueue !== false && $foundRequestQueue->getId() !== $queue->getId()) {
146
                // FIXME: domain
147
                SessionAlert::error("The chosen target display name is already in use. Please choose another.");
148
                $proceed = false;
149
            }
150
151
            $foundRequestQueue = RequestQueue::getByHeader($database, $queue->getHeader(), 1);
152
            if ($foundRequestQueue !== false && $foundRequestQueue->getId() !== $queue->getId()) {
153
                // FIXME: domain
154
                SessionAlert::error("The chosen header is already in use. Please choose another.");
155
                $proceed = false;
156
            }
157
158
            if ($proceed) {
159
                Logger::requestQueueEdited($database, $queue);
160
                $queue->save();
161
                $this->redirect('queueManagement');
162
            }
163
            else {
164
                $this->populateFromObject($queue);
165
166
                $this->assign('createMode', false);
167
                $this->setTemplate('queue-management/edit.tpl');
168
            }
169
        }
170
        else {
171
            $this->populateFromObject($queue);
172
173
            $this->assign('createMode', false);
174
            $this->setTemplate('queue-management/edit.tpl');
175
        }
176
    }
177
178
    /**
179
     * @param RequestQueue $queue
180
     */
181
    protected function populateFromObject(RequestQueue $queue): void
182
    {
183
        $this->assignCSRFToken();
184
185
        $this->assign('header', $queue->getHeader());
186
        $this->assign('displayName', $queue->getDisplayName());
187
        $this->assign('apiName', $queue->getApiName());
188
        $this->assign('enabled', $queue->isEnabled());
189
        $this->assign('default', $queue->isDefault());
190
        $this->assign('antispoof', $queue->isDefaultAntispoof());
191
        $this->assign('titleblacklist', $queue->isDefaultTitleBlacklist());
192
        $this->assign('help', $queue->getHelp());
193
        $this->assign('logName', $queue->getLogName());
0 ignored issues
show
Deprecated Code introduced by
The function Waca\DataObjects\RequestQueue::getLogName() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

193
        $this->assign('logName', /** @scrutinizer ignore-deprecated */ $queue->getLogName());
Loading history...
194
195
        $isTarget = $this->helper->isEmailTemplateTarget($queue, $this->getDatabase());
196
        $this->assign('isTarget', $isTarget);
197
    }
198
}