forked from wikimedia/mediawiki-extensions-InviteSignup
/
InviteSignupHooks.php
68 lines (59 loc) · 1.88 KB
/
InviteSignupHooks.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
class InviteSignupHooks {
public static function onBeforeInitialize( $title, &$unused, &$output, &$user, $request ) {
if ( !$title->isSpecialPage() ) {
return true;
}
list( $name ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
if ( $name !== 'Userlogin' ) {
return true;
}
$hash = $request->getVal( 'invite', $request->getCookie( 'invite' ) );
if ( $hash ) {
$store = new InviteStore( wfGetDB( DB_SLAVE ), 'invitesignup' );
$invite = $store->getInvite( $hash );
if ( $invite && $invite['used'] === null ) {
global $wgInviteSignupHash;
$wgInviteSignupHash = $hash;
$request->response()->setCookie( 'invite', $hash );
}
}
}
public static function onUserGetRights( $user, &$rights ) {
global $wgInviteSignupHash;
if ( $wgInviteSignupHash === null ) {
return true;
}
$rights[] = 'createaccount';
}
public static function onUserCreateForm( &$template ) {
global $wgInviteSignupHash;
if ( $wgInviteSignupHash === null ) {
return true;
}
$template->data['link'] = null;
$template->data['useemail'] = false;
}
public static function onAddNewAccount( $user ) {
global $wgInviteSignupHash;
if ( $wgInviteSignupHash === null ) {
return true;
}
$store = new InviteStore( wfGetDB( DB_MASTER ), 'invitesignup' );
$invite = $store->getInvite( $wgInviteSignupHash );
$user->setOption( 'is-inviter', $invite['inviter'] );
$user->setEmail( $invite['email'] );
$user->confirmEmail();
foreach ( $invite['groups'] as $group ) {
$user->addGroup( $group );
}
$user->saveSettings();
$store->addSignupDate( $user, $wgInviteSignupHash );
global $wgRequest;
$wgRequest->response()->setCookie( 'invite', '', time() - 86400 );
}
public static function onLoadExtensionSchemaUpdates( DatabaseUpdater $updater ) {
$dir = __DIR__ . '/sql';
$updater->addExtensionTable( 'invitesignup', "$dir/invitesignup.sql" );
}
}