From c97f3bbdebca1fa1236a902c2ead259f12127785 Mon Sep 17 00:00:00 2001 From: Magnus Manske Date: Fri, 24 Sep 2004 14:49:22 +0000 Subject: [PATCH] Wiki database system --- includes/DefaultSettings.php | 2 + includes/SpecialData.php | 276 +++++++++++++++++++++++++++++++++++ includes/SpecialPage.php | 7 + index.php | 5 + languages/Language.php | 1 + 5 files changed, 291 insertions(+) create mode 100644 includes/SpecialData.php diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index eddec329aa..e9291810d5 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 0000000000..19db700515 --- /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 .= "
    " ; + foreach ( $t AS $x ) + { + $y = explode ( "))" , $x ) ; + if ( count ( $y ) == 2 ) + { + $z = explode ( "/" , $y[0] ) ; + $keyname = $z[0] ; + $isMasterKey = false ; + if ( substr ( $keyname , 0 , 1 ) == "!" ) + { + $keyname = substr ( $keyname , 1 ) ; + $isMasterKey = true ; + } + + $value = "" ; + if ( isset ( $dk[$keyname] ) ) $value= $dk[$keyname] ; + if ( $isMasterKey ) + { + $masterkey = $keyname ; + $masterkeyvalue = $value ; + } + + $input = "" ; + $name = "dk[" . $keyname . "]" ; + + if ( count ( $z ) == 1 ) $z[] = "line" ; # Default + $type = strtolower ( $z[1] ) ; + if ( $type == "line" ) $input = "" ; + else if ( $type == "multiline" ) $input = "" ; + else if ( $type == "number" ) $input = "" ; + else if ( $type == "date" ) $input = "" ; + else if ( $type == "dropdown" ) + { + $s .= "" ; + } + if ( $isMasterKey AND $revision != "" ) $input = "{$value}" ; + + $s .= "{$input}" ; + $s .= $y[1] ; + } + else $s .= $x ; + } + $s .= "
    Comment : " ; + $s .= "   " ; + $s .= "" ; + if ( $masterkey ) $s .= "" ; + $s .= "" ; + $s .= " " ; + $s .= "" ; + $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 .= "
    " ; + $s .= "Data type " ; + $dbr =& wfGetDB( DB_SLAVE ); + $sql = "SELECT cur_id,cur_title FROM cur WHERE cur_namespace={$nsdata}"; + $res1 = $dbr->query( $sql, "wfSpecialData" ); + $s .= "
    \n" ; + $s .= " " ; + $s .= " " ; + $s .= "
    \nTo add a new data type Stuff, edit the page Data:Stuff." ; + $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 e7b9939a51..8dfa787f85 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 9b829c703b..704f792a8f 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 19bfa191be..496f5ab466 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 -- 2.20.1