https://www.mediawiki.org/wiki/Special:Code/MediaWiki/108243
Revision: 108243
Author: ialex
Date: 2012-01-06 15:56:08 +0000 (Fri, 06 Jan 2012)
Log Message:
-----------
* Moved hooks to their own file
* Defer opening of syslog until a message is logged and removed extension
function
* Made hooks work with current MW; removed all reference in hooks signatures,
removed no-longer passed (or useless) parameters and added some missing "return
true;"
* Bump version
Modified Paths:
--------------
trunk/extensions/Syslog/Syslog.php
Added Paths:
-----------
trunk/extensions/Syslog/SyslogHooks.php
Modified: trunk/extensions/Syslog/Syslog.php
===================================================================
--- trunk/extensions/Syslog/Syslog.php 2012-01-06 15:38:20 UTC (rev 108242)
+++ trunk/extensions/Syslog/Syslog.php 2012-01-06 15:56:08 UTC (rev 108243)
@@ -1,6 +1,7 @@
<?php
-/* Syslog.php -- an extension to log events to the system logger
- * Copyright 2004 Evan Prodromou <[email protected]>
+/**
+ * Syslog.php -- an extension to log events to the system logger
+ * Copyright © 2004 Evan Prodromou <[email protected]>
*
* 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
@@ -17,123 +18,38 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* @author Evan Prodromou <[email protected]>
+ * @author Alexandre Emsenhuber
* @ingroup Extensions
*/
if ( !defined( 'MEDIAWIKI' ) ) {
- die(1);
+ die( 1 );
}
-# Setup globals
-
-$wgSyslogIdentity = false;
-$wgSyslogFacility = LOG_USER;
-
-
-# Hook for article protection
-
-function syslogArticleProtect(&$article, &$user, $protect, &$reason,
&$moveonly) {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' " .
- (($protect) ? "protected" : "unprotected") . " article '" .
- $title->getPrefixedText() .
- "' for '" . $reason . "' " . (($moveonly) ? "(moves only)" :
"") );
- return true;
-}
-
-# Hook for article deletion
-
-function syslogArticleDelete(&$article, &$user, &$reason) {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' deleted '" .
- $title->getPrefixedText() .
- "' for '" . $reason . "' ");
- return true;
-}
-
-# Hook for article save
-
-function syslogArticleSave(&$article, &$user, &$text, $summary, $isminor,
$iswatch, $section) {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' saved '" .
- $title->getPrefixedText() .
- "' with comment '" . $summary . "' ");
- return true;
-}
-
-# Hook for IP & user blocks
-
-function syslogBlockIp(&$block, &$user) {
- syslog(LOG_NOTICE, "User '" . $user->getName() .
- "' blocked '" . (($block->mUser) ? $block->mUser :
$block->mAddress) .
- "' for '" . $block->mReason . "' until '" . $block->mExpiry
. "'");
- return true;
-}
-
-function syslogEmailUser(&$to, &$from, &$subject, &$text) {
- syslog(LOG_INFO, "Email sent from '$from' to '$to' with subject
'$subject'");
-}
-
-# Hook for unwatch
-
-function syslogUnwatch(&$user, &$article) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' stopped watching '" .
- $article->mTitle->getPrefixedText() . "'");
-}
-
-# Hook for login
-
-function syslogUserLogin(&$user) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' logged in");
- return true;
-}
-
-# Hook for logout
-
-function syslogUserLogout(&$user) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' logged out");
- return true;
-}
-
-# Hook for watch
-
-function syslogWatch(&$user, &$article) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' started watching '" .
- $article->mTitle->getPrefixedText() . "'");
-}
-
-# Setup -- called once environment is configured
-
-function setupSyslog() {
-
- global $wgSyslogIdentity, $wgSyslogFacility, $_syslogId;
- global $wgHooks, $wgDBname;
-
- openlog($wgSyslogIdentity ? $wgSyslogIdentity : $wgDBname, LOG_ODELAY |
LOG_PID, $wgSyslogFacility);
-
- $wgHooks['UserLoginComplete'][] = 'syslogUserLogin';
- $wgHooks['UserLogout'][] = 'syslogUserLogout';
- $wgHooks['BlockIpComplete'][] = 'syslogBlockIp';
- $wgHooks['ArticleProtectComplete'][] = 'syslogArticleProtect';
- $wgHooks['ArticleDeleteComplete'][] = 'syslogArticleDelete';
- $wgHooks['ArticleSaveComplete'][] = 'syslogArticleSave';
- $wgHooks['EmailUserComplete'][] = 'syslogEmailUser';
- $wgHooks['WatchArticleComplete'][] = 'syslogWatch';
- $wgHooks['UnwatchArticleComplete'][] = 'syslogUnwatch';
-
- return true;
-}
-
-# Add to global list of extensions
-
-$wgExtensionFunctions[] = 'setupSyslog';
-
$wgExtensionCredits['other'][] = array(
'path' => __FILE__,
'name' => 'Syslog',
- 'author' => 'Evan Prodromou',
+ 'author' => array( 'Evan Prodromou', 'Alexandre Emsenhuber' ),
'url' => 'https://www.mediawiki.org/wiki/Extension:Syslog',
'description' => 'An extension to log events to the system logger',
- 'version' => '1.1'
+ 'version' => '1.2'
);
+$wgAutoloadClasses['SyslogHooks'] = dirname( __FILE__ ) . '/SyslogHooks.php';
+
+# Setup globals
+
+$wgSyslogIdentity = false;
+$wgSyslogFacility = LOG_USER;
+
+# Setup hooks
+
+$wgHooks['ArticleDeleteComplete'][] = 'SyslogHooks::onArticleDeleteComplete';
+$wgHooks['ArticleProtectComplete'][] = 'SyslogHooks::onArticleProtectComplete';
+$wgHooks['ArticleSaveComplete'][] = 'SyslogHooks::onArticleSaveComplete';
+$wgHooks['BlockIpComplete'][] = 'SyslogHooks::onBlockIpComplete';
+$wgHooks['EmailUserComplete'][] = 'SyslogHooks::onEmailUserComplete';
+$wgHooks['UnwatchArticleComplete'][] = 'SyslogHooks::onUnwatchArticleComplete';
+$wgHooks['UserLoginComplete'][] = 'SyslogHooks::onUserLoginComplete';
+$wgHooks['UserLogoutComplete'][] = 'SyslogHooks::onUserLogoutComplete';
+$wgHooks['WatchArticleComplete'][] = 'SyslogHooks::onWatchArticleComplete';
Added: trunk/extensions/Syslog/SyslogHooks.php
===================================================================
--- trunk/extensions/Syslog/SyslogHooks.php (rev 0)
+++ trunk/extensions/Syslog/SyslogHooks.php 2012-01-06 15:56:08 UTC (rev
108243)
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * Hooks for Syslog extension
+ *
+ * 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
+ */
+
+class SyslogHooks {
+
+ /**
+ * Log a message in the syslog
+ *
+ * @param $message string
+ */
+ private static function log( $message ) {
+ static $init = false;
+
+ if ( !$init ) {
+ $init = true;
+
+ global $wgSyslogIdentity, $wgSyslogFacility, $wgHooks;
+
+ openlog( $wgSyslogIdentity ? $wgSyslogIdentity :
wfWikiID(), LOG_ODELAY | LOG_PID, $wgSyslogFacility);
+ }
+
+ syslog( LOG_NOTICE, $message );
+ }
+
+ /**
+ * Hook for article deletion
+ */
+ public static function onArticleDeleteComplete( $article, $user,
$reason ) {
+ $userName = $user->getName();
+ $pageName = $article->getTitle()->getPrefixedText();
+ self::log( "User '{$userName}' deleted '{$pageName}' for
'{$reason}'" );
+ return true;
+ }
+
+ /**
+ * Hook for article protection
+ */
+ public static function onArticleProtectComplete( $article, $user,
$protect, $reason ) {
+ $userName = $user->getName();
+ $pageName = $article->getTitle()->getPrefixedText();
+ $action = count( $protect ) ? 'protected' : 'unprotected';
+ self::log( "User '{$userName}' {$action} '{$pageName}' for
'{$reason}'" );
+ return true;
+ }
+
+ /**
+ * Hook for article save
+ */
+ public static function onArticleSaveComplete( $article, $user, $text,
$summary ) {
+ $userName = $user->getName();
+ $pageName = $article->getTitle()->getPrefixedText();
+ self::log( "User '{$userName}' saved '{$pageName}' with comment
'{$summary}'" );
+ return true;
+ }
+
+ /**
+ * Hook for IP & user blocks
+ */
+ public static function onBlockIpComplete( $block, $user ) {
+ $userName = $user->getName();
+ $target = $block->getTarget();
+ $target = is_object( $target ) ? $target->getName() : $target;
+ self::log( "User '{$userName}' blocked '{$target}' for
'{$block->mReason}' until '{$block->mExpiry}'" );
+ return true;
+ }
+
+ /**
+ * Hook for Special:Emailuser
+ */
+ public static function onEmailUserComplete( $to, $from, $subject, $text
) {
+ self::log( "Email sent from '$from' to '$to' with subject
'$subject'" );
+ return true;
+ }
+
+ /**
+ * Hook for page unwatching
+ */
+ public static function onUnwatchArticleComplete( $user, $article ) {
+ $userName = $user->getName();
+ $pageName = $article->getTitle()->getPrefixedText();
+ self::log( "User '{$userName}' stopped watching '{$pageName}'"
);
+ return true;
+ }
+
+ /**
+ * Hook for login
+ */
+ public static function onUserLoginComplete( $user ) {
+ self::log( "User '" . $user->getName() . "' logged in" );
+ return true;
+ }
+
+ /**
+ * Hook for logout
+ */
+ public static function onUserLogoutComplete( $user, $inject_html,
$oldName ) {
+ self::log( "User '" . $oldName . "' logged out" );
+ return true;
+ }
+
+ /**
+ * Hook for watch
+ */
+ public static function onWatchArticleComplete( $user, $article ) {
+ $userName = $user->getName();
+ $pageName = $article->getTitle()->getPrefixedText();
+ self::log( "User '{$userName}' started watching '{$pageName}'"
);
+ return true;
+ }
+}
Property changes on: trunk/extensions/Syslog/SyslogHooks.php
___________________________________________________________________
Added: svn:eol-style
+ native
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs