Completed
Push — irc-link-update ( 5c98e1 )
by Simon
17s queued 13s
created

WelcomeUserTask::markFailed()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 5
ccs 0
cts 4
cp 0
rs 10
cc 1
nc 1
nop 2
crap 2
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\Background\Task;
10
11
use Waca\Background\BackgroundTaskBase;
12
use Waca\DataObjects\JobQueue;
13
use Waca\DataObjects\Request;
14
use Waca\DataObjects\User;
15
use Waca\DataObjects\WelcomeTemplate;
16
use Waca\Helpers\MediaWikiHelper;
17
use Waca\Helpers\OAuthUserHelper;
18
use Waca\PdoDatabase;
19
use Waca\RequestStatus;
20
21
class WelcomeUserTask extends BackgroundTaskBase
22
{
23
    /** @var Request */
24
    private $request;
25
26
    public static function enqueue(User $triggerUser, Request $request, PdoDatabase $database)
27
    {
28
        $job = new JobQueue();
29
        $job->setDatabase($database);
30
        $job->setTask(WelcomeUserTask::class);
31
        $job->setRequest($request->getId());
32
        $job->setTriggerUserId($triggerUser->getId());
33
        $job->save();
34
    }
35
36
    public function execute()
37
    {
38
        $database = $this->getDatabase();
39
        $this->request = $this->getRequest();
40
        $user = $this->getTriggerUser();
41
42
        if ($user->getWelcomeTemplate() === null) {
0 ignored issues
show
introduced by
The condition $user->getWelcomeTemplate() === null is always false.
Loading history...
43
            $this->markFailed('Welcome template not specified');
44
45
            return;
46
        }
47
48
        /** @var WelcomeTemplate $template */
49
        $template = WelcomeTemplate::getById($user->getWelcomeTemplate(), $database);
50
51
        if ($template === false) {
0 ignored issues
show
introduced by
The condition $template === false is always false.
Loading history...
52
            $this->markFailed('Welcome template missing');
53
54
            return;
55
        }
56
57
        $oauth = new OAuthUserHelper($user, $database, $this->getOauthProtocolHelper(),
58
            $this->getSiteConfiguration());
59
        $mediaWikiHelper = new MediaWikiHelper($oauth, $this->getSiteConfiguration());
60
61
        if ($this->request->getStatus() !== RequestStatus::CLOSED) {
62
            $this->markFailed('Request is currently open');
63
64
            return;
65
        }
66
67
        if (!$mediaWikiHelper->checkAccountExists($this->request->getName())) {
68
            $this->markFailed('Account does not exist!');
69
70
            return;
71
        }
72
73
        $this->performWelcome($template, $this->request, $user, $mediaWikiHelper);
74
        $this->markComplete();
75
    }
76
77
    /**
78
     * Performs the welcome
79
     *
80
     * @param WelcomeTemplate $template
81
     * @param Request         $request
82
     * @param User            $user             The user who triggered the job
83
     * @param MediaWikiHelper $mediaWikiHelper
84
     */
85
    private function performWelcome(
86
        WelcomeTemplate $template,
87
        Request $request,
88
        User $user,
89
        MediaWikiHelper $mediaWikiHelper
90
    ) {
91
        $templateText = $template->getBotCodeForWikiSave($request->getName(), $user->getOnWikiName());
92
93
        $mediaWikiHelper->addTalkPageMessage($request->getName(), $template->getSectionHeader(), 'Welcoming user created through [[WP:ACC]]', $templateText);
94
    }
95
96
    protected function markFailed($reason = null, bool $acknowledged = false)
97
    {
98
        $this->getNotificationHelper()->requestWelcomeFailed($this->request, $this->getTriggerUser());
99
100
        parent::markFailed($reason, $acknowledged);
101
    }
102
}