summaryrefslogtreecommitdiff
path: root/trackback.php
blob: f673c50877acc910282198dd63108e85d8e3fdf4 (plain)
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
<?php
/**
 * Provide functions to handle article trackbacks.
 * @file
 * @ingroup SpecialPage
 */

require_once( './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();