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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
<?php
/**
*
* @package MediaWiki
* @subpackage SpecialPage
*/
/**
*
* @package MediaWiki
* @subpackage SpecialPage
*/
class WantedPagesPage extends QueryPage {
var $nlinks;
function WantedPagesPage( $inc = false, $nlinks = true ) {
$this->setListoutput( $inc );
$this->nlinks = $nlinks;
}
function getName() {
return 'Wantedpages';
}
function isExpensive() {
return true;
}
function isSyndicated() { return false; }
function getSQL() {
global $wgWantedPagesThreshold;
$count = $wgWantedPagesThreshold - 1;
$dbr =& wfGetDB( DB_SLAVE );
$pagelinks = $dbr->tableName( 'pagelinks' );
$page = $dbr->tableName( 'page' );
return
"SELECT 'Wantedpages' AS type,
pl_namespace AS namespace,
pl_title AS title,
COUNT(*) AS value
FROM $pagelinks
LEFT JOIN $page AS pg1
ON pl_namespace = pg1.page_namespace AND pl_title = pg1.page_title
LEFT JOIN $page AS pg2
ON pl_from = pg2.page_id
WHERE pg1.page_namespace IS NULL
AND pl_namespace NOT IN ( 2, 3 )
AND pg2.page_namespace != 8
GROUP BY 1,2,3
HAVING COUNT(*) > $count";
}
/**
* Cache page existence for performance
*/
function preprocessResults( &$db, &$res ) {
$batch = new LinkBatch;
while ( $row = $db->fetchObject( $res ) )
$batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
$batch->execute();
// Back to start for display
if ( $db->numRows( $res ) > 0 )
// If there are no rows we get an error seeking.
$db->dataSeek( $res, 0 );
}
function formatResult( $skin, $result ) {
global $wgLang;
$title = Title::makeTitleSafe( $result->namespace, $result->title );
if( $this->isCached() ) {
# Check existence; which is stored in the link cache
if( !$title->exists() ) {
# Make a redlink
$pageLink = $skin->makeBrokenLinkObj( $title );
} else {
# Make a a struck-out normal link
$pageLink = "<s>" . $skin->makeLinkObj( $title ) . "</s>";
}
} else {
# Not cached? Don't bother checking existence; it can't
$pageLink = $skin->makeBrokenLinkObj( $title );
}
# Make a link to "what links here" if it's required
$wlhLink = $this->nlinks
? $this->makeWlhLink( $title, $skin,
wfMsgExt( 'nlinks', array( 'parsemag', 'escape'),
$wgLang->formatNum( $result->value ) ) )
: null;
return wfSpecialList($pageLink, $wlhLink);
}
/**
* Make a "what links here" link for a specified title
* @param $title Title to make the link for
* @param $skin Skin to use
* @param $text Link text
* @return string
*/
function makeWlhLink( &$title, &$skin, $text ) {
$wlhTitle = Title::makeTitle( NS_SPECIAL, 'Whatlinkshere' );
return $skin->makeKnownLinkObj( $wlhTitle, $text, 'target=' . $title->getPrefixedUrl() );
}
}
/**
* constructor
*/
function wfSpecialWantedpages( $par = null, $specialPage ) {
$inc = $specialPage->including();
if ( $inc ) {
@list( $limit, $nlinks ) = explode( '/', $par, 2 );
$limit = (int)$limit;
$nlinks = $nlinks === 'nlinks';
$offset = 0;
} else {
list( $limit, $offset ) = wfCheckLimits();
$nlinks = true;
}
$wpp = new WantedPagesPage( $inc, $nlinks );
$wpp->doQuery( $offset, $limit, !$inc );
}
?>
|