/**
* Contain log classes
- *
+ * @file
*/
/**
*
*/
class LogPage {
+ const DELETED_ACTION = 1;
+ const DELETED_COMMENT = 2;
+ const DELETED_USER = 4;
+ const DELETED_RESTRICTED = 8;
/* @access private */
var $type, $action, $comment, $params, $target;
/* @acess public */
$this->updateRecentChanges = $rc;
}
- function saveContent() {
- if( wfReadOnly() ) return false;
-
- global $wgUser;
+ protected function saveContent() {
+ global $wgUser, $wgLogRestrictions;
$fname = 'LogPage::saveContent';
$dbw = wfGetDB( DB_MASTER );
- $uid = $wgUser->getID();
+ $uid = $wgUser->getId();
$log_id = $dbw->nextSequenceValue( 'log_log_id_seq' );
$this->timestamp = $now = wfTimestampNow();
$data = array(
+ 'log_id' => $log_id,
'log_type' => $this->type,
'log_action' => $this->action,
'log_timestamp' => $dbw->timestamp( $now ),
'log_comment' => $this->comment,
'log_params' => $this->params
);
-
- # log_id doesn't exist on Wikimedia servers yet, and it's a tricky
- # schema update to do. Hack it for now to ignore the field on MySQL.
- if ( !is_null( $log_id ) ) {
- $data['log_id'] = $log_id;
- }
$dbw->insert( 'logging', $data, $fname );
+ $newId = !is_null($log_id) ? $log_id : $dbw->insertId();
+ if( !($dbw->affectedRows() > 0) ) {
+ wfDebugLog( "logging", "LogPage::saveContent failed to insert row - Error {$dbw->lastErrno()}: {$dbw->lastError()}" );
+ }
# And update recentchanges
- if ( $this->updateRecentChanges ) {
- $titleObj = SpecialPage::getTitleFor( 'Log', $this->type );
- $rcComment = $this->getRcComment();
- RecentChange::notifyLog( $now, $titleObj, $wgUser, $rcComment, '',
- $this->type, $this->action, $this->target, $this->comment, $this->params );
+ if( $this->updateRecentChanges ) {
+ # Don't add private logs to RC!
+ if( !isset($wgLogRestrictions[$this->type]) || $wgLogRestrictions[$this->type]=='*' ) {
+ $titleObj = SpecialPage::getTitleFor( 'Log', $this->type );
+ $rcComment = $this->getRcComment();
+ RecentChange::notifyLog( $now, $titleObj, $wgUser, $rcComment, '',
+ $this->type, $this->action, $this->target, $this->comment, $this->params, $newId );
+ }
}
return true;
}
/**
* @todo handle missing log types
- * @static
+ * @param string $type logtype
+ * @return string Headertext of this logtype
*/
static function logHeader( $type ) {
global $wgLogHeaders;
- return wfMsg( $wgLogHeaders[$type] );
+ return wfMsgExt($wgLogHeaders[$type],array('parseinline'));
}
/**
global $wgLang, $wgContLang, $wgLogActions;
$key = "$type/$action";
-
+
if( $key == 'patrol/patrol' )
return PatrolLog::makeActionText( $title, $params, $skin );
-
+
if( isset( $wgLogActions[$key] ) ) {
if( is_null( $title ) ) {
$rv=wfMsg( $wgLogActions[$key] );
switch( $type ) {
case 'move':
- $titleLink = $skin->makeLinkObj( $title, $title->getPrefixedText(), 'redirect=no' );
+ $titleLink = $skin->makeLinkObj( $title, htmlspecialchars( $title->getPrefixedText() ), 'redirect=no' );
$params[0] = $skin->makeLinkObj( Title::newFromText( $params[0] ), htmlspecialchars( $params[0] ) );
break;
case 'block':
$text = $wgContLang->ucfirst( $title->getText() );
$titleLink = $skin->makeLinkObj( Title::makeTitle( NS_USER, $text ) );
break;
+ case 'merge':
+ $titleLink = $skin->makeLinkObj( $title, $title->getPrefixedText(), 'redirect=no' );
+ $params[0] = $skin->makeLinkObj( Title::newFromText( $params[0] ), htmlspecialchars( $params[0] ) );
+ $params[1] = $wgLang->timeanddate( $params[1] );
+ break;
default:
$titleLink = $skin->makeLinkObj( $title );
}
}
} else {
array_unshift( $params, $titleLink );
- if ( $key == 'block/block' ) {
+ if ( $key == 'block/block' || $key == 'suppress/block' ) {
if ( $skin ) {
$params[1] = '<span title="' . htmlspecialchars( $params[1] ). '">' . $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
} else {
$params[1] = $wgContLang->translateBlockExpiry( $params[1] );
}
$params[2] = isset( $params[2] )
- ? self::formatBlockFlags( $params[2] )
+ ? self::formatBlockFlags( $params[2], is_null( $skin ) )
: '';
}
$rv = wfMsgReal( $wgLogActions[$key], $params, true, !$skin );
}
}
} else {
- wfDebug( "LogPage::actionText - unknown action $key\n" );
- $rv = "$action";
+ global $wgLogActionsHandlers;
+ if( isset( $wgLogActionsHandlers[$key] ) ) {
+ $args = func_get_args();
+ $rv = call_user_func_array( $wgLogActionsHandlers[$key], $args );
+ } else {
+ wfDebug( "LogPage::actionText - unknown action $key\n" );
+ $rv = "$action";
+ }
}
if( $filterWikilinks ) {
$rv = str_replace( "[[", "", $rv );
return explode( "\n", $blob );
}
}
-
+
/**
* Convert a comma-delimited list of block log flags
* into a more readable (and translated) form
*
* @param $flags Flags to format
+ * @param $forContent Whether to localize the message depending of the user
+ * language
* @return string
*/
- public static function formatBlockFlags( $flags ) {
+ public static function formatBlockFlags( $flags, $forContent = false ) {
$flags = explode( ',', trim( $flags ) );
if( count( $flags ) > 0 ) {
for( $i = 0; $i < count( $flags ); $i++ )
- $flags[$i] = self::formatBlockFlag( $flags[$i] );
+ $flags[$i] = self::formatBlockFlag( $flags[$i], $forContent );
return '(' . implode( ', ', $flags ) . ')';
} else {
return '';
}
}
-
+
/**
* Translate a block log flag if possible
*
* @param $flag Flag to translate
+ * @param $forContent Whether to localize the message depending of the user
+ * language
* @return string
*/
- public static function formatBlockFlag( $flag ) {
+ public static function formatBlockFlag( $flag, $forContent = false ) {
static $messages = array();
if( !isset( $messages[$flag] ) ) {
$k = 'block-log-flags-' . $flag;
- $msg = wfMsg( $k );
+ if( $forContent )
+ $msg = wfMsgForContent( $k );
+ else
+ $msg = wfMsg( $k );
$messages[$flag] = htmlspecialchars( wfEmptyMsg( $k, $msg ) ? $flag : $msg );
}
return $messages[$flag];
}
-
}
-
+/**
+ * Aliases for backwards compatibility with 1.6
+ */
+define( 'MW_LOG_DELETED_ACTION', LogPage::DELETED_ACTION );
+define( 'MW_LOG_DELETED_USER', LogPage::DELETED_USER );
+define( 'MW_LOG_DELETED_COMMENT', LogPage::DELETED_COMMENT );
+define( 'MW_LOG_DELETED_RESTRICTED', LogPage::DELETED_RESTRICTED );