Replaces the ugly, often breaking, manually archived log pages with a nice clean table which can be sorted, trimmed, viewed in pieces, etc. You can see all logged actions by some user, or affecting some page, and can combine the views of all all logs in one. There are probably still some broken things in here, but I want this committed before the patch gets any bigger. recentchanges table is altered to make rc_namespace signed so Special: links can be listed in it.
103 lines
3 KiB
PHP
103 lines
3 KiB
PHP
<?php
|
|
#$Id$
|
|
#
|
|
# Copyright (C) 2002, 2004 Brion Vibber <brion@pobox.com>
|
|
# http://www.mediawiki.org/
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
# http://www.gnu.org/copyleft/gpl.html
|
|
|
|
# Class to simplify the use of log pages.
|
|
# The logs are now kept in a table which is easier to manage and trim
|
|
# than ever-growing wiki pages.
|
|
|
|
class LogPage {
|
|
/* private */ var $type, $action, $comment;
|
|
var $updateRecentChanges = true;
|
|
|
|
function LogPage( $type ) {
|
|
# Type is one of 'block', 'protect', 'rights', 'delete', 'upload'
|
|
$this->type = $type;
|
|
}
|
|
|
|
function saveContent() {
|
|
if( wfReadOnly() ) return;
|
|
|
|
global $wgUser;
|
|
$fname = 'LogPage::saveContent';
|
|
|
|
$dbw =& wfGetDB( DB_MASTER );
|
|
$uid = $wgUser->getID();
|
|
|
|
$this->timestamp = $now = wfTimestampNow();
|
|
$dbw->insertArray( 'logging',
|
|
array(
|
|
'log_type' => $this->type,
|
|
'log_action' => $this->action,
|
|
'log_timestamp' => $dbw->timestamp( $now ),
|
|
'log_user' => $uid,
|
|
'log_namespace' => $this->target->getNamespace(),
|
|
'log_title' => $this->target->getDBkey(),
|
|
'log_comment' => $this->comment
|
|
), $fname
|
|
);
|
|
|
|
# And update recentchanges
|
|
if ( $this->updateRecentChanges ) {
|
|
$rcComment = $this->actionText;
|
|
if( '' != $this->comment ) {
|
|
$rcComment .= ': ' . $this->comment;
|
|
}
|
|
$titleObj = Title::makeTitle( NS_SPECIAL, 'Log/' . $this->type );
|
|
RecentChange::notifyLog( $now, $titleObj, $wgUser, $rcComment );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* static */ function actionText( $type, $action, $titleLink ) {
|
|
static $actions = array(
|
|
'block/block' => 'blocklogentry',
|
|
'block/unblock' => 'blocklogentry',
|
|
'protect/protect' => 'protectedarticle',
|
|
'protect/unprotect' => 'unprotectedarticle',
|
|
'rights/rights' => 'bureaucratlogentry',
|
|
'delete/delete' => 'deletedarticle',
|
|
'delete/restore' => 'undeletedarticle',
|
|
'upload/upload' => 'uploadedimage',
|
|
'upload/revert' => 'uploadedimage',
|
|
);
|
|
$key = "$type/$action";
|
|
if( isset( $actions[$key] ) ) {
|
|
return wfMsg( $actions[$key], $titleLink );
|
|
} else {
|
|
wfDebug( "LogPage::actionText - unknown action $key\n" );
|
|
return "$action $titleLink";
|
|
}
|
|
}
|
|
|
|
function addEntry( $action, &$target, $comment ) {
|
|
global $wgLang, $wgUser;
|
|
|
|
$this->action = $action;
|
|
$this->target =& $target;
|
|
$this->comment = $comment;
|
|
$this->actionText = LogPage::actionText( $this->type, $action,
|
|
$target->getPrefixedText() );
|
|
|
|
return $this->saveContent();
|
|
}
|
|
}
|
|
|
|
?>
|