-
Notifications
You must be signed in to change notification settings - Fork 1
/
trackback.php
89 lines (71 loc) · 1.86 KB
/
trackback.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
* Provide functions to handle article trackbacks.
* @file
* @ingroup SpecialPage
*/
if ( isset( $_SERVER['MW_COMPILED'] ) ) {
require ( 'phase3/includes/WebStart.php' );
} else {
require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
}
class TrackBack {
private $r, $url, $title = null;
private function XMLsuccess() {
header( "Content-Type: application/xml; charset=utf-8" );
echo <<<XML
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>0</error>
</response>
XML;
exit;
}
private function XMLerror( $err = "Invalid request." ) {
header( "HTTP/1.0 400 Bad Request" );
header( "Content-Type: application/xml; charset=utf-8" );
echo <<<XML
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>1</error>
<message>Invalid request: $err</message>
</response>
XML;
exit;
}
public function __construct() {
global $wgUseTrackbacks, $wgRequest;
if( !$wgUseTrackbacks )
$this->XMLerror( "Trackbacks are disabled" );
$this->r = $wgRequest;
if( !$this->r->wasPosted() ) {
$this->XMLerror( "Must be posted" );
}
$this->url = $wgRequest->getText( 'url' );
$article = $wgRequest->getText( 'article' );
if( !$this->url || !$article ) {
$this->XMLerror( "Required field not specified" );
}
$this->title = Title::newFromText( $article );
if( !$this->title || !$this->title->exists() ) {
$this->XMLerror( "Specified article does not exist." );
}
}
public function write() {
$dbw = wfGetDB( DB_MASTER );
$tbtitle = $this->r->getText( 'title' );
$tbex = $this->r->getText( 'excerpt' );
$tbname = $this->r->getText( 'blog_name' );
$dbw->insert('trackbacks', array(
'tb_page' => $this->title->getArticleID(),
'tb_title' => $tbtitle,
'tb_url' => $this->url,
'tb_ex' => $tbex,
'tb_name' => $tbname
));
$dbw->commit();
$this->XMLsuccess();
}
}
$tb = new TrackBack();
$tb->write();