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
|
|
View Code Duplication |
public static function enqueue(User $triggerUser, Request $request, PdoDatabase $database) |
|
|
|
|
24
|
|
|
{ |
25
|
|
|
$job = new JobQueue(); |
26
|
|
|
$job->setDatabase($database); |
27
|
|
|
$job->setTask(WelcomeUserTask::class); |
28
|
|
|
$job->setRequest($request->getId()); |
29
|
|
|
$job->setTriggerUserId($triggerUser->getId()); |
30
|
|
|
$job->save(); |
31
|
|
|
} |
32
|
|
|
|
33
|
|
|
public function execute() |
34
|
|
|
{ |
35
|
|
|
$database = $this->getDatabase(); |
36
|
|
|
$request = $this->getRequest(); |
37
|
|
|
$user = $this->getTriggerUser(); |
38
|
|
|
|
39
|
|
|
if ($user->getWelcomeTemplate() === null) { |
40
|
|
|
$this->markFailed('Welcome template not specified'); |
41
|
|
|
|
42
|
|
|
return; |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
/** @var WelcomeTemplate $template */ |
46
|
|
|
$template = WelcomeTemplate::getById($user->getWelcomeTemplate(), $database); |
47
|
|
|
|
48
|
|
|
if ($template === false) { |
49
|
|
|
$this->markFailed('Welcome template missing'); |
50
|
|
|
|
51
|
|
|
return; |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
$oauth = new OAuthUserHelper($user, $database, $this->getOauthProtocolHelper(), |
55
|
|
|
$this->getSiteConfiguration()); |
56
|
|
|
$mediaWikiHelper = new MediaWikiHelper($oauth, $this->getSiteConfiguration()); |
57
|
|
|
|
58
|
|
|
if ($request->getStatus() !== RequestStatus::CLOSED) { |
59
|
|
|
$this->markFailed('Request is currently open'); |
60
|
|
|
|
61
|
|
|
return; |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
if (!$mediaWikiHelper->checkAccountExists($request->getName())){ |
65
|
|
|
$this->markFailed('Account does not exist!'); |
66
|
|
|
|
67
|
|
|
return; |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
$this->performWelcome($template, $request, $mediaWikiHelper); |
71
|
|
|
$this->markComplete(); |
72
|
|
|
} |
73
|
|
|
|
74
|
|
|
/** |
75
|
|
|
* Performs the welcome |
76
|
|
|
* |
77
|
|
|
* @param WelcomeTemplate $template |
78
|
|
|
* @param Request $request |
79
|
|
|
* @param MediaWikiHelper $mediaWikiHelper |
80
|
|
|
*/ |
81
|
|
|
private function performWelcome( |
82
|
|
|
WelcomeTemplate $template, |
83
|
|
|
Request $request, |
84
|
|
|
MediaWikiHelper $mediaWikiHelper |
85
|
|
|
) { |
86
|
|
|
$templateText = $template->getBotCode(); |
87
|
|
|
$templateText = str_replace('$signature', '~~~~', $templateText); |
88
|
|
|
$templateText = str_replace('$username', $request->getName(), $templateText); |
89
|
|
|
|
90
|
|
|
$mediaWikiHelper->addTalkPageMessage($request->getName(), 'Welcome!', 'Welcoming user created through [[WP:ACC]]', $templateText); |
91
|
|
|
} |
92
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.