diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index eddec329aac..e9291810d54 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -308,6 +308,8 @@ $wgSiteSupportPage = ''; # A page where you users can receive donations
$wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
+$wgUseData = false ;
+
# The debug log file should be not be publicly accessible if it is
# used, as it may contain private data.
$wgDebugLogFile = '';
diff --git a/includes/SpecialData.php b/includes/SpecialData.php
new file mode 100644
index 00000000000..19db7005158
--- /dev/null
+++ b/includes/SpecialData.php
@@ -0,0 +1,276 @@
+{$value}" ;
+ $s .= $value . $y[1] ;
+ }
+ else $s .= $x ;
+ }
+ return $s ;
+ }
+
+function wfDataView ( $dt ) # $dt = data type
+ {
+ if ( $dt == "" ) return ;
+ global $wgParser, $wgTitle;
+ global $wgOut , $wgUser ;
+ $nsdata = 20 ;
+ $s = "
{$dt}
" ;
+
+ # Read from source
+ $dbr =& wfGetDB( DB_SLAVE );
+ $sql = "SELECT * FROM cur WHERE cur_namespace={$nsdata} AND cur_title=\"{$dt}\"";
+ $res1 = $dbr->query( $sql, "wfDataEdit" );
+ $data = $dbr->fetchObject( $res1 ) ;
+
+ $sql = "SELECT * FROM data_rev WHERE rev_cur_id={$data->cur_id} GROUP BY rev_masterkey ORDER BY rev_masterkey" ;
+ $r = $dbr->query( $sql, "wfDataEdit" );
+ $mk = array () ;
+ while ( ($d = $dbr->fetchObject( $r )) ) $mk[] = $d->rev_masterkey ;
+ foreach ( $mk AS $x )
+ {
+ $s .= "{$x}" ;
+ }
+
+ $wgOut->AddHTML ( $s ) ;
+ }
+
+function wfDataEdit ( $dt ) # $dt = data type
+ {
+ if ( $dt == "" ) return ;
+ global $wgParser, $wgTitle;
+ global $wgOut , $wgUser ;
+ $nsdata = 20 ;
+ $s = "{$dt}
" ;
+
+ if ( isset ( $_POST['revision'] ) ) $revision = $_POST['revision'] ;
+ else if ( isset ( $_GET['revision'] ) ) $revision = $_GET['revision'] ;
+ else $revision = "" ;
+
+ if ( isset ( $_POST['masterkey'] ) ) $masterkey = $_POST['masterkey'] ;
+ else $masterkey = "" ;
+
+ if ( isset ( $_POST['comment'] ) ) $comment = $_POST['comment'] ;
+ else $comment = "" ;
+
+ # Read form source
+ $dbr =& wfGetDB( DB_SLAVE );
+ $sql = "SELECT * FROM cur WHERE cur_namespace={$nsdata} AND cur_title=\"{$dt}\"";
+ $res1 = $dbr->query( $sql, "wfDataEdit" );
+ $data = $dbr->fetchObject( $res1 ) ;
+
+ # Pre-render
+ $parserOutput = $wgParser->parse( $data->cur_text, $wgTitle, $wgOut->mParserOptions, true );
+ $t = $parserOutput->getText() ;
+
+ # Read from last form
+ if ( isset ( $_POST['dk'] ) ) $dk = $_POST['dk'] ;
+
+ # Store new version
+ if ( isset ( $_POST['doit'] ) && $dk[$masterkey] )
+ {
+ # Get next revision number
+ $dbw =& wfGetDB( DB_MASTER ); # Maybe DB_SLAVE didn't update yet
+ $sql = "SELECT MAX(rev_id) AS m FROM data_rev WHERE rev_cur_id={$data->cur_id} AND rev_masterkey=\"" . $dk[$masterkey] . "\"" ;
+ $r = $dbw->query( $sql, "wfDataEdit" );
+ $newrev = $dbr->fetchObject( $r ) ;
+ if ( isset ( $newrev ) AND isset ( $newrev->m ) ) $newrev = $newrev->m ;
+ else $newrev = "" ;
+ if ( $newrev == "" ) $newrev = 1 ;
+
+ # Generate SQL
+ $dbw->query( "BEGIN", "wfDataEdit" );
+ $sql = "INSERT INTO data_rev (rev_cur_id,rev_id,rev_masterkey,rev_user_id,rev_user_text,rev_comment,rev_time) VALUES (" .
+ "\"{$data->cur_id}\"," .
+ "\"{$newrev}\",".
+ "\"" . $dk[$masterkey] . "\"," .
+ "\"" . $wgUser->getID() . "\",".
+ "\"" . $wgUser->getName() . "\",".
+ "\"{$comment}\",".
+ "\"" . time() . "\");" ;
+ $dbw->query( $sql, "wfDataEdit" );
+
+ foreach ( $dk AS $k => $v )
+ {
+ $sql = "INSERT INTO data (data_cur_id,data_revision,data_key,data_value) VALUES (" .
+ "\"" . $data->cur_id . "\"," .
+ "\"" . $newrev . "\"," .
+ "\"" . $k . "\"," .
+ "\"" . $v . "\");" ;
+ $dbw->query( $sql, "wfDataEdit" );
+ }
+ $dbw->query( "COMMIT", "wfDataEdit" );
+
+ $s .= "Action complete.
\n" ;
+ $s .= wfDataPreview ( $t , $dk ) ;
+ $wgOut->AddHTML ( $s ) ;
+
+ return ;
+ }
+
+ # Preview
+ if ( isset ( $_POST['preview'] ) ) $s .= wfDataPreview ( $t , $dk ) . "\n
\n" ;
+
+ # Editing
+ $t = explode ( "((" , $t ) ;
+ $s .= "" ;
+
+ $wgOut->AddHTML ( $s ) ;
+ }
+
+
+function wfSpecialData()
+{
+ global $wgUseData ;
+ if ( !$wgUseData ) return "" ;
+
+ global $wgOut ;
+ if ( isset ( $_GET['data_action'] ) ) $data_action = $_GET['data_action'] ;
+ else $data_action = "" ;
+ if ( isset ( $_POST['add_data'] ) ) $data_action = "add_data" ;
+ if ( isset ( $_POST['view_data'] ) ) $data_action = "view_data" ;
+ $nsdata = 20 ;
+
+ $last = "
Back to data" ;
+
+ if ( $data_action == "" )
+ {
+ $s = "" ;
+
+ $s .= "" ;
+
+ $wgOut->AddHTML ( $s ) ;
+ $last = "" ;
+ }
+ else if ( $data_action == "add_data" )
+ {
+ wfDataEdit ( $_POST['data_type'] ) ;
+ }
+ else if ( $data_action == "view_data" )
+ {
+ wfDataView ( $_POST['data_type'] ) ;
+ }
+
+ if ( $last ) $wgOut->AddHTML ( $last ) ;
+
+ return "" ;
+ }
+
+?>
diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php
index e7b9939a519..8dfa787f85f 100644
--- a/includes/SpecialPage.php
+++ b/includes/SpecialPage.php
@@ -43,10 +43,17 @@ $wgSpecialPages = array(
'Uncategorizedpages'=> new SpecialPage( 'Uncategorizedpages' ),
'Unusedimages' => new SpecialPage( 'Unusedimages' )
);
+
global $wgDisableCounters;
if( !$wgDisableCounters ) {
$wgSpecialPages['Popularpages'] = new SpecialPage( 'Popularpages' );
}
+
+global $wgUseData ;
+if ( $wgUseData ) {
+ $wgSpecialPages['Data'] = new SpecialPage( 'Data' );
+}
+
$wgSpecialPages = array_merge($wgSpecialPages, array (
'Wantedpages' => new SpecialPage( 'Wantedpages' ),
'Shortpages' => new SpecialPage( 'Shortpages' ),
diff --git a/index.php b/index.php
index 9b829c703bb..704f792a8f0 100644
--- a/index.php
+++ b/index.php
@@ -18,6 +18,11 @@ define( "MEDIAWIKI", true );
require_once( "./includes/Defines.php" );
require_once( "./LocalSettings.php" );
+if ( $wgUseData )
+ {
+ $wgExtraNamespaces[20] = 'Data' ;
+ $wgExtraNamespaces[21] = 'Data_talk' ;
+ }
require_once( "includes/Setup.php" );
wfProfileIn( "main-misc-setup" );
diff --git a/languages/Language.php b/languages/Language.php
index 19bfa191bef..496f5ab4665 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -1015,6 +1015,7 @@ a direct URL, and so may still be listed here despite being
in active use.',
'booksources' => 'Book sources',
'categoriespagetext' => 'The following categories exists in the wiki.',
+'data' => 'Data',
# FIXME: Other sites, of course, may have affiliate relations with the booksellers list
'booksourcetext' => "Below is a list of links to other sites that