make the callback PHP 5.1 compatible with the Class::Method syntax. Add Unit tests to supplement it.
'MessageCache' => 'includes/MessageCache.php',
'MimeMagic' => 'includes/MimeMagic.php',
'MWException' => 'includes/Exception.php',
+ 'MWFunction' => 'includes/MWFunction.php',
'MWHttpRequest' => 'includes/HttpFunctions.php',
'MWMemcached' => 'includes/memcached-client.php',
'MWNamespace' => 'includes/Namespace.php',
--- /dev/null
+<?php
+
+/**
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+class MWFunction {
+
+ protected static function cleanCallback( $callback ) {
+
+ if( is_string( $callback ) ) {
+ if ( in_string( '::', $callback ) ) {
+ //PHP 5.1 cannot use call_user_func( 'Class::Method' )
+ //It can only handle only call_user_func( array( 'Class', 'Method' ) )
+ $callback = explode( '::', $callback, 2);
+ }
+ }
+
+ return $callback;
+ }
+
+ public static function call( $callback ) {
+ $callback = self::cleanCallback( $callback );
+
+ $args = func_get_args();
+
+ return call_user_func_array( 'call_user_func', $args );
+
+ }
+
+ public static function callArray( $callback, $params ) {
+
+ $callback = self::cleanCallback( $callback );
+ return call_user_func_array( $callback, $params );
+
+ }
+
+}
if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
# Use a callback function to configure MediaWiki
- $callback = MW_CONFIG_CALLBACK;
- # PHP 5.1 doesn't support "class::method" for call_user_func, so split it
- if ( strpos( $callback, '::' ) !== false ) {
- $callback = explode( '::', $callback, 2);
- }
- call_user_func( $callback );
+ MWFunction::call( MW_CONFIG_CALLBACK );
+
} else {
if ( !defined('MW_CONFIG_FILE') )
define('MW_CONFIG_FILE', "$IP/LocalSettings.php");
if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
# Use a callback function to configure MediaWiki
- $callback = MW_CONFIG_CALLBACK;
- # PHP 5.1 doesn't support "class::method" for call_user_func, so split it
- if ( strpos( $callback, '::' ) !== false ) {
- $callback = explode( '::', $callback, 2 );
- }
- call_user_func( $callback );
+ MWFunction::call( MW_CONFIG_CALLBACK );
} elseif ( file_exists( "$IP/wmf-config/wikimedia-mode" ) ) {
// Load settings, using wikimedia-mode if needed
// Fixme: replace this hack with general farm-friendly code
--- /dev/null
+<?php
+
+class MWFunctionTest extends MediaWikiTestCase {
+
+ function testCallUserFuncWorkarounds() {
+
+ $this->assertEquals(
+ MWFunction::call( 'MWFunctionTest::someMethod' ),
+ call_user_func( array( 'MWFunctionTest', 'someMethod' ) )
+ );
+ $this->assertEquals(
+ MWFunction::call( 'MWFunctionTest::someMethod', 'foo', 'bar', 'baz' ),
+ call_user_func( array( 'MWFunctionTest', 'someMethod' ), 'foo', 'bar', 'baz' )
+ );
+
+
+
+ $this->assertEquals(
+ MWFunction::callArray( 'MWFunctionTest::someMethod', array() ),
+ call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array() )
+ );
+ $this->assertEquals(
+ MWFunction::callArray( 'MWFunctionTest::someMethod', array( 'foo', 'bar', 'baz' ) ),
+ call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array( 'foo', 'bar', 'baz' ) )
+ );
+
+ }
+
+ public static function someMethod() {
+ return func_get_args();
+ }
+
+}
+