Difference between revisions of "MediaWiki Implementation"

From Geohashing
(Variables Extension too plz)
imported>MykaDragonBlue
(reversion of the spammmmms)
Line 8: Line 8:
 
--[[User:Edgemaster|Edgemaster]] 21:39, 23 May 2008 (UTC)
 
--[[User:Edgemaster|Edgemaster]] 21:39, 23 May 2008 (UTC)
  
this post is fantastic <a href=" http://www.playlist.com/blog/entry/12464443395 ">preteen lolitas, top lolitas</a>  uro <a href=" http://www.playlist.com/blog/entry/12464442115 ">young lolitas little teenies free</a>  tce <a href=" http://www.playlist.com/blog/entry/12464443907 ">loli movies</a>  96195 <a href=" http://www.playlist.com/blog/entry/12464444931 ">illegal underage lolita</a>  23323 <a href=" http://www.playlist.com/blog/entry/12464441859 ">lolita nn teen model art</a>  rvkoko <a href=" http://www.playlist.com/blog/entry/12464444419 ">gothic lolitas</a> bwaeud <a href=" http://www.playlist.com/blog/entry/12464442371 ">nude asian lolitas</a>  xkdu <a href=" http://www.playlist.com/blog/entry/12464441603 ">ls pre loli pics</a>  55231 <a href=" http://www.playlist.com/blog/entry/12464441091 ">shy lolita top</a>  :] <a href=" http://www.playlist.com/blog/entry/12464442883 ">lolita preteen rape incest pic galleries</a>  dgkuk
+
== Installation ==
 +
* Drop the code below into ''mediawiki''/extensions/geohashes.php
 +
* Add the following to ''mediawiki''/LocalSettings.php:
 +
  require_once "$IP/extensions/geohashes.php";
 +
* Check [[Special:Version]] to confirm installation
  
Very funny pictures <a href=" http://www.playlist.com/blog/entry/12464550915 ">preteen nudede lolita nn topless 7-17 portal</a>  453828 <a href=" http://www.playlist.com/blog/entry/12464550147 ">tpg porn teen lolita preteen gallery petite</a>  07930 <a href=" http://www.playlist.com/blog/entry/12464551171 ">free preteen lolitas sex pics
+
== The Code ==
</a>  uwjxzm <a href=" http://www.playlist.com/blog/entry/12464551683 ">underage lolita pussy, lolita pussy</a>  607925 <a href=" http://www.playlist.com/blog/entry/12464549891 ">pre chil loli pedo</a>  8OOO <a href=" http://www.playlist.com/blog/entry/12464551427 ">xxx lolita girls</a>  ofbdy <a href=" http://www.playlist.com/blog/entry/12464549635 ">web lolidus</a>  8((( <a href=" http://www.playlist.com/blog/entry/12464550403 ">hardcore sex lolitas bbs nude girls</a>  jde <a href=" http://www.playlist.com/blog/entry/12464549123 ">bbs loli rompl dorki pthc</a>  sxentm <a href=" http://www.playlist.com/blog/entry/12464550659 ">illegal lolita porn</a>  3233
+
Feel free to tidy it up, poke an admin if you feel your changes are worthy to be deployed on this wiki.
  
Cool site goodluck :) <a href=" http://www.playlist.com/blog/entry/12464448771 ">lolita preteen panties</a>  =OOO <a href=" http://www.playlist.com/blog/entry/12464447491 ">teen lolitas index</a> %-]]] <a href=" http://www.playlist.com/blog/entry/12464449027 ">loli toplist
+
<pre><?php
</a> 9912 <a href=" http://www.playlist.com/blog/entry/12464449795 ">loli ladies</a>  :(( <a href=" http://www.playlist.com/blog/entry/12464446723 ">preteen lolita nude</a>  zntqb <a href=" http://www.playlist.com/blog/entry/12464449539 ">lolita in stockings
+
$wgExtensionCredits[$type][] = array(
</a> 39969 <a href=" http://www.playlist.com/blog/entry/12464445955 ">young girls, lolitas</a> >:]]] <a href=" http://www.playlist.com/blog/entry/12464447747 ">lolita bbs tgp underground nude</a>  5500 <a href=" http://www.playlist.com/blog/entry/12464445699 ">little school lolita</a>  55750 <a href=" http://www.playlist.com/blog/entry/12464448259 ">lolita teen guestbook</a>  6720
+
    'name' => "Geohashing MediaWiki Parser Functions",
 +
    'description' => "Adds {{#md5}} and {{#dow}} handlers",
 +
    'descriptionmsg' => "",
 +
    'version' => "1.01",
 +
    'author' => "Edgemaster (grand.edgemaster@gmail.com)",
 +
    'url' => "http://wiki.xkcd.com/geohashing/MediaWiki_Implementation"
 +
);
  
I'm happy very good site <a href=" http://www.playlist.com/blog/entry/12464553475 ">free bbs lists lolitas</a> 1749 <a href=" http://www.playlist.com/blog/entry/12464552707 ">sexy preteen loli</a> =-((( <a href=" http://www.playlist.com/blog/entry/12464553731 ">free preteen lolita mpegs</a> 175236 <a href=" http://www.playlist.com/blog/entry/12464554243 ">top kds list lolita</a> 0387 <a href=" http://www.playlist.com/blog/entry/12464552451 ">lolitas in stories</a> 279 <a href=" http://www.playlist.com/blog/entry/12464553987 ">underage bbs preteen lolita pedo lolis girls having sex</a> :-OOO <a href=" http://www.playlist.com/blog/entry/12464552195 ">underground illegal cp pre teen lolitas</a> 8-[[ <a href=" http://www.playlist.com/blog/entry/12464552963 ">pedo cp underage illegal kds lolita</a> 458644 <a href=" http://www.playlist.com/blog/entry/12464551939 ">free lolita art
+
$wgExtensionFunctions[] = 'geohashingFunction_Setup';
</a> 8OO <a href=" http://www.playlist.com/blog/entry/12464553219 ">preteen lolita pay site portal illegal</a> zumgr
+
$wgHooks['LanguageGetMagic'][]      = 'geohashingFunction_Magic';
 +
 +
function geohashingFunction_Setup() {
 +
    global $wgParser;
 +
    $wgParser->setFunctionHook( 'md5', 'geohashingMd5Function_Render' );
 +
    $wgParser->setFunctionHook( 'dow', 'geohashingDowFunction_Render' );
 +
}
 +
 +
function geohashingFunction_Magic( &$magicWords, $langCode ) {
 +
    $magicWords['md5'] = array( 0, 'md5' );
 +
    $magicWords['dow'] = array( 0, 'dow' );
 +
    return true;
 +
}
 +
 +
function geohashingMd5Function_Render( &$parser, $src = '', $half = 0, $decimal = 0) {
 +
    $md5 = md5(trim($src));
 +
    if(!$half) return $md5;
 +
   
 +
    $md5 = substr($md5, ($half-1)*16, 15);
 +
    if(!$decimal) return $md5;
 +
   
 +
    $dec = ('0x'.$md5) / pow(16,15);
 +
    return $dec;
 +
}
 +
 
 +
function geohashingDowFunction_Render( &$parser, $Y = 0, $m = 0, $d = 0) {
 +
    foreach(array('Y', 'm', 'd') as $var) {
 +
        $$var = intval($$var);
 +
        if($$var < 10) $$var = '0' . $$var;
 +
        if(!intval($$var)) $$var = date($var);
 +
    }
 +
    return trim(@file_get_contents("http://irc.peeron.com/xkcd/map/data/$Y/$m/$d"));
 +
    // file_get_contents returns nothing on http error, we hide the warning from php
 +
}
 +
?></pre>
 +
 
 +
=== Changelog ===
 +
 
 +
*'''[{{fullurl:MediaWiki Implementation|diff=30594&oldid=6067}} v1.01 - 1 Jul 2008]''' Passing all 16 hex-characters of a half-hash causes PHP to misinterpret sign when decimalising, so instead we only pass the first 15... besides, that still gives microscopic accuracy (~100 femtometres).  Hence the fifteens shown in lines 30 and 33 above. --[[User:Tjtrumpet2323|Tim P]] 19:13, 1 July 2008 (UTC)
 +
 
 +
== In-wiki Usage ==
 +
This extension adds two new parser functions: <nowiki>{{#md5}} and {{#dow}}</nowiki>.
 +
 
 +
=== #md5 ===
 +
md5s a string, optionally splitting into halves and decimalising.
 +
<nowiki>{{</nowiki>#md5:'''string'''|'''halve'''|'''decimal'''<nowiki>}}</nowiki>
 +
 
 +
Parameters:
 +
* '''string''': the string to md5
 +
* '''halve''': ''(optional)'' splits the hash into two, as required by [[The Algorithm]]. 0 = do not half, 1 = first half, 2 = 2nd half. Defaults to 0.
 +
* '''decimal''': ''(optional)'' converts the half to decimal if set. Defaults to 0, ''requires halve to be set to 1 or 2''!
 +
 
 +
Examples:
 +
*<nowiki>{{#md5:testing testing!}}:</nowiki> {{#md5:testing testing!}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68}}:</nowiki> {{#md5:2005-05-26-10458.68}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68|0}}:</nowiki> {{#md5:2005-05-26-10458.68|0}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68|1}}:</nowiki> {{#md5:2005-05-26-10458.68|1}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68|2}}:</nowiki> {{#md5:2005-05-26-10458.68|2}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68|1|1}}:</nowiki> {{#md5:2005-05-26-10458.68|1|1}}
 +
*<nowiki>{{#md5:2005-05-26-10458.68|2|1}}:</nowiki> {{#md5:2005-05-26-10458.68|2|1}}
 +
 
 +
=== #dow ===
 +
Fetches the opening [[Dow_Jones_Industrial_Average|Dow Index]] for a date from the irc.peeron.com service.
 +
<nowiki>{{</nowiki>#dow:'''year'''|'''month'''|'''day'''<nowiki>}}</nowiki>
 +
 
 +
Parameters:
 +
* '''year''': 4 digit year
 +
* '''month''': month (1 or 2 digits are acceptable)
 +
* '''day''': day (1 or 2 digits are acceptable)
 +
The only validation done is to check the values are non-null. If any of the 3 are null (or all of the 3), then today's date will be used instead. (Always requires the colon to produce a result)
 +
 
 +
Examples:
 +
*<nowiki>{{#dow:}}:</nowiki> {{#dow:}}
 +
*<nowiki>{{#dow:2005|05|26}}:</nowiki> {{#dow:2005|05|26}}
 +
*These will fail:
 +
**<nowiki>(lack of data) {{#dow:1854|05|26}}:</nowiki> {{#dow:1854|05|26}}
 +
**<nowiki>(bad syntax) {{#dow}}:</nowiki> {{#dow}}
 +
 
 +
 
 +
 
 +
 
 +
 
 +
==Variables Extension too plz==
 +
 
 +
=== Installing ===
 +
 
 +
Copy this into a file called $mediwikipath/extensions/Variables/Variables.php:
 +
 
 +
<pre>
 +
<?php
 +
 
 +
if ( !defined( 'MEDIAWIKI' ) ) {
 +
    die( 'This file is a MediaWiki extension, it is not a valid entry point' );
 +
}
 +
 
 +
$wgExtensionFunctions[] = 'wfSetupVariables';
 +
 
 +
$wgExtensionCredits['parserhook'][] = array(
 +
'name' => 'Variables',
 +
'url' => 'http://www.mediawiki.org/wiki/Extension:VariablesExtension',
 +
'author' => 'Rob Adams',
 +
'description' => 'Define page-scoped variables'
 +
);
 +
 
 +
$wgHooks['LanguageGetMagic'][]      = 'wfVariablesLanguageGetMagic';
 +
 
 +
class ExtVariables {
 +
    var $mVariables;
 +
 
 +
    function vardefine( &$parser, $expr = '', $value = '' ) {
 +
$this->mVariables[$expr] = $value;
 +
return '';
 +
    }
 +
 
 +
    function varf( &$parser, $expr = '' ) {
 +
return $this->mVariables[$expr];
 +
    }
 +
}
 +
 
 +
function wfSetupVariables() {
 +
    global $wgParser, $wgMessageCache, $wgExtVariables, $wgMessageCache, $wgHooks;
 +
 
 +
    $wgExtVariables = new ExtVariables;
 +
 
 +
    $wgParser->setFunctionHook( 'vardefine', array( &$wgExtVariables, 'vardefine' ) );
 +
    $wgParser->setFunctionHook( 'var', array( &$wgExtVariables, 'varf' ) );
 +
}
 +
 
 +
function wfVariablesLanguageGetMagic( &$magicWords, $langCode = 0 ) {
 +
require_once( dirname( __FILE__ ) . '/Variables.i18n.php' );
 +
foreach( efVariablesWords( $langCode ) as $word => $trans )
 +
$magicWords[$word] = $trans;
 +
return true;
 +
}
 +
</pre>
 +
 
 +
Copy this into a file called $mediwikipath/extensions/Variables/Variables.i18n.php:
 +
<pre>
 +
 
 +
<?php
 +
 
 +
/**
 +
* Get translated magic words, if available
 +
*
 +
* @param string $lang Language code
 +
* @return array
 +
*/
 +
function efVariablesWords( $lang ) {
 +
$words = array();
 +
 
 +
/**
 +
* English
 +
*/
 +
$words['en'] = array(
 +
'var' => array( 0, 'var' ),
 +
'vardefine' => array( 0, 'vardefine' ),
 +
);
 +
 
 +
# English is used as a fallback, and the English synonyms are
 +
# used if a translation has not been provided for a given word
 +
return ( $lang == 'en' || !isset( $words[$lang] ) )
 +
? $words['en']
 +
: array_merge( $words['en'], $words[$lang] );
 +
}
 +
</pre>
 +
 
 +
Then add
 +
<pre>require_once( "$IP/extensions/Variables/Variables.php" );</pre>
 +
to the end of LocalSettings.php.
 +
 
 +
[[Category:Algorithm]]

Revision as of 04:39, 19 November 2009

Note: Version 1.01 of geohashes.php is currently installed on this wiki, as well as Variables.php.

A MediaWiki extension to allow us to handle Geohashes a little nicer and more automatically. Any questions to the talk page here, although I would appreciate a poke on my talk page also.

Note that the whole algorithm is not fully implemented, because those on IRC said that templates could do the rest.

--Edgemaster 21:39, 23 May 2008 (UTC)

Installation

  • Drop the code below into mediawiki/extensions/geohashes.php
  • Add the following to mediawiki/LocalSettings.php:
require_once "$IP/extensions/geohashes.php";

The Code

Feel free to tidy it up, poke an admin if you feel your changes are worthy to be deployed on this wiki.

<?php
$wgExtensionCredits[$type][] = array(
    'name' => "Geohashing MediaWiki Parser Functions",
    'description' => "Adds {{#md5}} and {{#dow}} handlers",
    'descriptionmsg' => "",
    'version' => "1.01",
    'author' => "Edgemaster (grand.edgemaster@gmail.com)",
    'url' => "http://wiki.xkcd.com/geohashing/MediaWiki_Implementation"
);

$wgExtensionFunctions[] = 'geohashingFunction_Setup';
$wgHooks['LanguageGetMagic'][]       = 'geohashingFunction_Magic';
 
function geohashingFunction_Setup() {
    global $wgParser;
    $wgParser->setFunctionHook( 'md5', 'geohashingMd5Function_Render' );
    $wgParser->setFunctionHook( 'dow', 'geohashingDowFunction_Render' );
}
 
function geohashingFunction_Magic( &$magicWords, $langCode ) {
    $magicWords['md5'] = array( 0, 'md5' );
    $magicWords['dow'] = array( 0, 'dow' );
    return true;
}
 
function geohashingMd5Function_Render( &$parser, $src = '', $half = 0, $decimal = 0) {
    $md5 = md5(trim($src));
    if(!$half) return $md5;
    
    $md5 = substr($md5, ($half-1)*16, 15);
    if(!$decimal) return $md5;
    
    $dec = ('0x'.$md5) / pow(16,15);
    return $dec;
}

function geohashingDowFunction_Render( &$parser, $Y = 0, $m = 0, $d = 0) {
    foreach(array('Y', 'm', 'd') as $var) {
        $$var = intval($$var);
        if($$var < 10) $$var = '0' . $$var;
        if(!intval($$var)) $$var = date($var);
    }
    return trim(@file_get_contents("http://irc.peeron.com/xkcd/map/data/$Y/$m/$d"));
    // file_get_contents returns nothing on http error, we hide the warning from php
}
?>

Changelog

  • v1.01 - 1 Jul 2008 Passing all 16 hex-characters of a half-hash causes PHP to misinterpret sign when decimalising, so instead we only pass the first 15... besides, that still gives microscopic accuracy (~100 femtometres). Hence the fifteens shown in lines 30 and 33 above. --Tim P 19:13, 1 July 2008 (UTC)

In-wiki Usage

This extension adds two new parser functions: {{#md5}} and {{#dow}}.

#md5

md5s a string, optionally splitting into halves and decimalising.

{{#md5:string|halve|decimal}}

Parameters:

  • string: the string to md5
  • halve: (optional) splits the hash into two, as required by The Algorithm. 0 = do not half, 1 = first half, 2 = 2nd half. Defaults to 0.
  • decimal: (optional) converts the half to decimal if set. Defaults to 0, requires halve to be set to 1 or 2!

Examples:

  • {{#md5:testing testing!}}: f9da4c546dff04d46e1fab3ca0456b42
  • {{#md5:2005-05-26-10458.68}}: db9318c2259923d08b672cb305440f97
  • {{#md5:2005-05-26-10458.68|0}}: db9318c2259923d08b672cb305440f97
  • {{#md5:2005-05-26-10458.68|1}}: db9318c2259923d
  • {{#md5:2005-05-26-10458.68|2}}: 8b672cb305440f9
  • {{#md5:2005-05-26-10458.68|1|1}}: 0.857713267707
  • {{#md5:2005-05-26-10458.68|2|1}}: 0.54454306955928

#dow

Fetches the opening Dow Index for a date from the irc.peeron.com service.

{{#dow:year|month|day}}

Parameters:

  • year: 4 digit year
  • month: month (1 or 2 digits are acceptable)
  • day: day (1 or 2 digits are acceptable)

The only validation done is to check the values are non-null. If any of the 3 are null (or all of the 3), then today's date will be used instead. (Always requires the colon to produce a result)

Examples:

  • {{#dow:}}: 44760.05
  • {{#dow:2005|05|26}}: 10458.68
  • These will fail:
    • (lack of data) {{#dow:1854|05|26}}:
    • (bad syntax) {{#dow}}: {{#dow}}



Variables Extension too plz

Installing

Copy this into a file called $mediwikipath/extensions/Variables/Variables.php:

<?php

if ( !defined( 'MEDIAWIKI' ) ) {
    die( 'This file is a MediaWiki extension, it is not a valid entry point' );
}

$wgExtensionFunctions[] = 'wfSetupVariables';

$wgExtensionCredits['parserhook'][] = array(
	'name' => 'Variables',
	'url' => 'http://www.mediawiki.org/wiki/Extension:VariablesExtension',
	'author' => 'Rob Adams',
	'description' => 'Define page-scoped variables'
);

$wgHooks['LanguageGetMagic'][]       = 'wfVariablesLanguageGetMagic';

class ExtVariables {
    var $mVariables;

    function vardefine( &$parser, $expr = '', $value = '' ) {
	$this->mVariables[$expr] = $value;
	return '';
    }

    function varf( &$parser, $expr = '' ) {
	return $this->mVariables[$expr];
    }
}

function wfSetupVariables() {
    global $wgParser, $wgMessageCache, $wgExtVariables, $wgMessageCache, $wgHooks;

    $wgExtVariables = new ExtVariables;

    $wgParser->setFunctionHook( 'vardefine', array( &$wgExtVariables, 'vardefine' ) );
    $wgParser->setFunctionHook( 'var', array( &$wgExtVariables, 'varf' ) );
}

function wfVariablesLanguageGetMagic( &$magicWords, $langCode = 0 ) {
	require_once( dirname( __FILE__ ) . '/Variables.i18n.php' );
	foreach( efVariablesWords( $langCode ) as $word => $trans )
		$magicWords[$word] = $trans;
	return true;
}

Copy this into a file called $mediwikipath/extensions/Variables/Variables.i18n.php:


<?php

/**
 * Get translated magic words, if available
 *
 * @param string $lang Language code
 * @return array
 */
function efVariablesWords( $lang ) {
	$words = array();

	/**
	 * English
	 */
	$words['en'] = array(
		'var' 		=> array( 0, 'var' ),
		'vardefine' 	=> array( 0, 'vardefine' ),
	);

	# English is used as a fallback, and the English synonyms are
	# used if a translation has not been provided for a given word
	return ( $lang == 'en' || !isset( $words[$lang] ) )
		? $words['en']
		: array_merge( $words['en'], $words[$lang] );
}

Then add

require_once( "$IP/extensions/Variables/Variables.php" );

to the end of LocalSettings.php.