URL: http://metabolomics.jp/ */ if( !defined( 'MEDIAWIKI' ) ){ die( 'This file is a MediaWiki extension, see Volatile.php.' ); } $wgExtensionCredits['parserhook'][] = array( 'name' => 'Volatile', 'version' => '0.11', 'author' => 'K, Suwa', 'description' => 'Link and page which receive arguments', 'url' => 'http://metabolomics.jp/wiki/Help:Extension/Volatile', ); $wgHooks['ParserAfterStrip'][] = 'efVolatileReplaceArg'; $wgHooks['InternalParseBeforeLinks'][] = 'efVolatileSetLink'; function efVolatileReplaceArg( &$parser, &$text, &$strip_state ) { global $wgTitle; if( ereg( "^Volatile:.*$", $wgTitle ) ){ $text = preg_replace( "/{{{([^}]*)}}}/", "{{#get:$1}}", $text ); } return true; } function efVolatileSetLink( &$parser, &$text, &$strip_state ) { global $wgTitle, $egParamPrefix, $wgServer, $wgArticlePath; if( !isset( $egParamPrefix ) ) $egParamPrefix = "my_"; $limit = 2000; $i = 0; $str = "===volatile_variable==="; $base = str_replace( '$1', '', $wgArticlePath ); while( $i < $limit && preg_match( "/\[\[[ ]*Volatile:[^\]]*\]\]/i", $text, $matches, PREG_OFFSET_CAPTURE ) != 0 ){ $text = preg_replace( "/\[\[[ ]*Volatile:[^\]]*\]\]/i", $str, $text, 1 ); $datas = split( "\|", $matches[0][0] ); $change = trim( $datas[0] ); $change = preg_replace( "/^\[\[[ ]*/", "[[", $change ); if( count( $datas ) > 1 ){ for( $j = 1, $k = 1; $j < count( $datas ) - 1; $j ++ ){ $datas[$j] = str_replace( "\$", "\\\$", trim( $datas[$j] ) ); if( $j == 1 ) $change .= "?"; else $change .= "&"; if( mb_strpos( $datas[$j], "=" ) === FALSE ){ $change .= "$egParamPrefix$k=$datas[$j]"; $k ++; } else $change .= "$egParamPrefix$datas[$j]"; } $change .= " $datas[$j]"; } $change = preg_replace( "/^\[\[/", "[$wgServer$base", $change ); $change = preg_replace( "/\]$/", "", $change ); $text = preg_replace( "/$str/", $change, $text, 1 ); $i ++; } return true; }