-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathImportCallbacks.php
More file actions
91 lines (78 loc) · 2.46 KB
/
ImportCallbacks.php
File metadata and controls
91 lines (78 loc) · 2.46 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
namespace PubSubHubbubSubscriber;
use Title;
use User;
use WikiPage;
use WikiRevision;
class ImportCallbacks {
private $previousPageOutCallback = null;
/**
* @codeCoverageIgnore
* @param callable $previousPageOutCallback
*/
public function setPreviousPageOutCallback( $previousPageOutCallback ) {
$this->previousPageOutCallback = $previousPageOutCallback;
}
/**
* @param WikiRevision $revision
*/
public function deletionPage( WikiRevision $revision ) {
if ( $revision->getAction() != 'delete' ){
return;
}
$username = $revision->getUser();
if ( !empty( $username ) ) {
$user = User::newFromName( $username );
}
else {
$user = null;
}
$error = array();
$title = $revision->getTitle();
$wikipage = new WikiPage( $title );
$wikipage->doDeleteArticle( $revision->getComment(), false, 0, true, $error, $user );
}
/**
* @param Title $title
* @param $origTitle
* @param $revCount
* @param $sucCount
* @param $pageInfo
* @return bool
*/
function callOriginalPageOutCallback( Title $title, $origTitle, $revCount, $sucCount, $pageInfo ) {
if ( is_callable( $this->previousPageOutCallback) ) {
call_user_func_array( $this->previousPageOutCallback, func_get_args() );
}
return true;
}
/**
* @param Title $title
* @param $origTitle
* @param $revCount
* @param $sucCount
* @param $pageInfo
*/
public function createRedirect( Title $title, $origTitle, $revCount, $sucCount, $pageInfo ) {
if ( !array_key_exists( 'redirect', $pageInfo ) || $pageInfo['redirect'] == "" || $sucCount < 1 ) {
$this->callOriginalPageOutCallback( $title, $origTitle, $revCount, $sucCount, $pageInfo );
return;
}
$wikipage = new WikiPage( $title );
$redirectTitle = Title::newFromText( $pageInfo['redirect'] );
if ( $redirectTitle->exists() ){
$this->callOriginalPageOutCallback( $title, $origTitle, $revCount, $sucCount, $pageInfo );
return;
}
$dbw = wfGetDB( DB_MASTER );
$pageId = $wikipage->getId();
$currentRevision = $wikipage->getRevision();
$contentRevision = $currentRevision->getPrevious();
$currentRevisionID = $currentRevision->getId();
$contentRevisionID = $contentRevision->getId();
$dbw->delete( 'revision', array( 'rev_id' => $currentRevisionID ) );
$dbw->update( 'page', array( 'page_latest' => $contentRevisionID ), array( 'page_id' => $pageId ) );
$title->moveTo( $redirectTitle, false );
$this->callOriginalPageOutCallback( $title, $origTitle, $revCount, $sucCount, $pageInfo );
}
}