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
|
<?php
#
# This Mediawiki extension creates a bullet list of the most
# recent new pages. This can be useful for a small project's
# main page to give visitors a quick view of the new pages
# created since the last visit.
#
# The wiki syntax is,
#
# <newpages>
# limit=10
# </newpages>
#
# where limit is the maximum number of new pages to show.
#
# To activate the extension, include it from your LocalSettings.php
# with: require_once("extensions/NewPages.php");
#
# Author: Michael Meffie
# Date: Jan 17 2006
# Credits: This extension was derived from SpecialNewpages.php.
# License: GPL v2.0
#
$wgExtensionFunctions[] = "wfNewPagesExtension";
$wgExtensionCredits['parserhook'][] = array(
'name' => 'NewPages',
'author' => 'Michael Meffie',
'url' => 'http://meta.wikimedia.org/wiki/User:Meffiem',
);
function wfNewPagesExtension() {
global $wgParser;
$wgParser->setHook( "newpages", "renderNewPages" );
}
function renderNewPages( $input ) {
global $wgOut;
$output = "<br />No new pages since last database cleaning<br />";
$limit = 5;
getBoxOption($limit,$input,'limit',true);
$dbr =& wfGetDB( DB_SLAVE );
extract( $dbr->tableNames( 'recentchanges', 'page' ) );
$query_limit = $limit + 1; # to determine if we should display (more...)
$sql = "SELECT rc_namespace AS namespace,
rc_title AS title,
rc_cur_id AS value,
rc_user AS user,
rc_user_text AS user_text,
rc_comment as comment,
rc_timestamp AS timestamp,
rc_id AS rcid,
page_len as length,
page_latest as rev_id
FROM $recentchanges,$page
WHERE rc_cur_id=page_id AND rc_new=1
AND rc_namespace=".NS_MAIN." AND page_is_redirect=0
ORDER BY value DESC
LIMIT $query_limit";
$result = $dbr->query( $sql );
$num = $dbr->numRows( $result );
if ($num > 0) {
$output = "<ul>\n";
for ($i=0; $i<$num && $i<$limit; $i++) {
$row = $dbr->fetchObject( $result );
$s = formatRow( $row );
$output .= "<li>$s</li>\n";
}
if ($num > $limit) {
$more = $wgOut->parse("[[Special:Newpages|more...]]", false);
$output .= "<li>$more</li>\n";
}
$output .= "</ul>\n";
}
$dbr->freeResult( $result );
return $output;
}
function formatRow( $row ) {
global $wgLang, $wgUser;
$skin = $wgUser->getSkin();
$link = $skin->makeKnownLink( $row->title, '' );
$d = $wgLang->date( $row->timestamp, true );
$s = "$link, $d";
return $s;
}
function getBoxOption(&$value,&$input,$name,$isNumber=false) {
if(preg_match("/^\s*$name\s*=\s*(.*)/mi",$input,$matches)) {
if($isNumber) {
$value=intval($matches[1]);
} else {
$value=htmlspecialchars($matches[1]);
}
}
}
?> |
Partager