diff options
Diffstat (limited to 'includes/PatrolLog.php')
-rw-r--r-- | includes/PatrolLog.php | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/includes/PatrolLog.php b/includes/PatrolLog.php new file mode 100644 index 00000000..a22839ff --- /dev/null +++ b/includes/PatrolLog.php @@ -0,0 +1,83 @@ +<?php + +/** + * Class containing static functions for working with + * logs of patrol events + * + * @author Rob Church <robchur@gmail.com> + */ +class PatrolLog { + + /** + * Record a log event for a change being patrolled + * + * @param mixed $change Change identifier or RecentChange object + * @param bool $auto Was this patrol event automatic? + */ + public static function record( $change, $auto = false ) { + if( !( is_object( $change ) && $change instanceof RecentChange ) ) { + $change = RecentChange::newFromId( $change ); + if( !is_object( $change ) ) + return false; + } + $title = Title::makeTitleSafe( $change->getAttribute( 'rc_namespace' ), + $change->getAttribute( 'rc_title' ) ); + if( is_object( $title ) ) { + $params = self::buildParams( $change, $auto ); + $log = new LogPage( 'patrol', false ); # False suppresses RC entries + $log->addEntry( 'patrol', $title, '', $params ); + return true; + } else { + return false; + } + } + + /** + * Generate the log action text corresponding to a patrol log item + * + * @param Title $title Title of the page that was patrolled + * @param array $params Log parameters (from logging.log_params) + * @param Skin $skin Skin to use for building links, etc. + * @return string + */ + public static function makeActionText( $title, $params, $skin ) { + # This is a bit of a hack, but...if $skin is not a Skin, then *do nothing* + # -- this is fine, because the action text we would be queried for under + # these conditions would have gone into recentchanges, which we aren't + # supposed to be updating + if( is_object( $skin ) ) { + list( $cur, $prev, $auto ) = $params; + # Standard link to the page in question + $link = $skin->makeLinkObj( $title ); + # Generate a diff link + $bits[] = 'oldid=' . urlencode( $cur ); + $bits[] = 'diff=prev'; + $bits = implode( '&', $bits ); + $diff = $skin->makeLinkObj( $title, htmlspecialchars( wfMsg( 'patrol-log-diff', $cur ) ), $bits ); + # Indicate whether or not the patrolling was automatic + $auto = $auto ? wfMsgHtml( 'patrol-log-auto' ) : ''; + # Put it all together + return wfMsgHtml( 'patrol-log-line', $diff, $link, $auto ); + } else { + return ''; + } + } + + /** + * Prepare log parameters for a patrolled change + * + * @param RecentChange $change RecentChange to represent + * @param bool $auto Whether the patrol event was automatic + * @return array + */ + private static function buildParams( $change, $auto ) { + return array( + $change->getAttribute( 'rc_this_oldid' ), + $change->getAttribute( 'rc_last_oldid' ), + (int)$auto + ); + } + +} + +?>
\ No newline at end of file |