X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2FInitialiseMessages.inc;h=3976d1864d66bb0556965c4042dedb7aa5b5e0f8;hb=739cab780c0fd0265da048f709688eca0b0edd72;hp=b28b335acaf014592d4f23da03a6a33973fb2f7b;hpb=abdfb338003ac720acd7c47dc8bb15f5e1b8e79c;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/InitialiseMessages.inc b/maintenance/InitialiseMessages.inc index b28b335aca..3976d1864d 100755 --- a/maintenance/InitialiseMessages.inc +++ b/maintenance/InitialiseMessages.inc @@ -1,11 +1,80 @@ getVariants(); + if(!in_array($wgContLanguageCode, $variants)) + $variants[]=$wgContLanguageCode; + + foreach ($variants as $v) { + $langclass = 'Language'. str_replace( '-', '_', ucfirst( $v ) ); + if( !class_exists($langclass) ) { + die ("class $langclass not defined. perhaps you need to include the file $langclass.php in $wgContLangClass.php?"); + } + $lang = new $langclass; + + if($v==$wgContLanguageCode) + $suffix=''; + else + $suffix="/$v"; + foreach ($sortedArray as $key => $msg) { + $messages[$key.$suffix] = $lang->getMessage($key); + } + } + + require_once('languages/Names.php'); + + /* + initialize all messages in $wgForceUIMsgAsContentMsg for all + languages in Names.php + */ + if( is_array( $wgForceUIMsgAsContentMsg ) ) { + foreach( $wgForceUIMsgAsContentMsg as $uikey ) { + foreach( $wgLanguageNames as $code => $name) { + if( $code == $wgContLanguageCode ) + continue; + $msg = $wgContLang->getMessage( $uikey ); + if( $msg ) + $messages[$uikey. '/' . $code] = $msg; + } + } + } + initialiseMessagesReal( $overwrite, $messages ); +} + +/** */ +function initialiseMessagesReal( $overwrite = false, $messageArray = false ) { + global $wgContLang, $wgScript, $wgServer, $wgAllMessagesEn; global $wgOut, $wgArticle, $wgUser; global $wgMessageCache, $wgMemc, $wgDBname, $wgUseMemCached; @@ -14,176 +83,142 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) { $wgUser = new User; $wgUser->setLoaded( true ); # Don't load from DB - $wgUser->setName( "MediaWiki default" ); + $wgUser->setName( 'MediaWiki default' ); # Don't try to draw messages from the database we're initialising $wgMessageCache->disable(); + $wgMessageCache->disableTransform(); - $fname = "initialiseMessages"; + $fname = 'initialiseMessages'; $ns = NS_MEDIAWIKI; # cur_user_text responsible for the modifications # Don't change it unless you're prepared to update the DBs accordingly, otherwise the # default messages won't be overwritte - $username = "MediaWiki default"; + $username = 'MediaWiki default'; - $timestamp = wfTimestampNow(); - $invTimestamp = wfInvertTimestamp( $timestamp ); - $navText = '{{int:allmessagestext}}'; - $navText .= " - -"; print "Initialising \"MediaWiki\" namespace...\n"; - $sql = "SELECT cur_title,cur_is_new,cur_user_text FROM cur WHERE cur_namespace=$ns AND cur_title IN("; + + + $dbr =& wfGetDB( DB_SLAVE ); + $dbw =& wfGetDB( DB_MASTER ); + $page = $dbr->tableName( 'page' ); + $revision = $dbr->tableName( 'revision' ); + + $timestamp = wfTimestampNow(); + + #$sql = "SELECT cur_title,cur_is_new,cur_user_text FROM $cur WHERE cur_namespace=$ns AND cur_title IN("; + $sql = "SELECT page_title,page_is_new,rev_user_text FROM $page, $revision WHERE + page_namespace=$ns AND rev_page=page_id AND page_title IN("; # Get keys from $wgAllMessagesEn, which is more complete than the local language $first = true; if ( $messageArray ) { - $sortedArray = $wgAllMessagesEn; + $sortedArray = $messageArray; } else { $sortedArray = $wgAllMessagesEn; } ksort( $sortedArray ); - + # SELECT all existing messages + # Can't afford to be locking all rows for update, this script can take quite a long time to complete foreach ( $sortedArray as $key => $enMsg ) { - if ( $key == "" ) { + if ( $key == '' ) { continue; // Skip odd members } if ( $first ) { $first = false; } else { - $sql .= ","; + $sql .= ','; } - $titleObj = Title::newFromText( $key ); - $enctitle = wfStrencode($titleObj->getDBkey()); + $titleObj = Title::newFromText( $wgContLang->ucfirst( $key ) ); + $enctitle = $dbr->strencode($titleObj->getDBkey()); $sql .= "'$enctitle'"; } - $sql .= ")"; - $res = wfQuery( $sql, DB_READ ); - $row = wfFetchObject( $res ); + $sql .= ')'; + $res = $dbr->query( $sql ); + $row = $dbr->fetchObject( $res ); # Read the results into an array # Decide whether or not each one needs to be overwritten $existingTitles = array(); while ( $row ) { - if ( $row->cur_user_text != $username ) { - $existingTitles[$row->cur_title] = "keep"; + if ( $row->rev_user_text != $username && $row->rev_user_text != 'Template namespace initialisation script' ) { + $existingTitles[$row->page_title] = 'keep'; } else { - $existingTitles[$row->cur_title] = "chuck"; + $existingTitles[$row->page_title] = 'chuck'; } - $row = wfFetchObject( $res ); + $row = $dbr->fetchObject( $res ); } # Insert queries are done in one multi-row insert # Here's the start of it: - $sql = "INSERT INTO cur (cur_namespace, cur_title, cur_text, - cur_user_text, cur_timestamp, cur_restrictions, - cur_is_new, inverse_timestamp, cur_touched) VALUES "; - $first = true; - $talk = $wgLang->getNsText( NS_TALK ); - $mwtalk = $wgLang->getNsText( NS_MEDIAWIKI_TALK ); + $arr = array(); + $talk = $wgContLang->getNsText( NS_TALK ); + $mwtalk = $wgContLang->getNsText( NS_MEDIAWIKI_TALK ); # Process each message foreach ( $sortedArray as $key => $enMsg ) { - if ( $key == "" ) { + if ( $key == '' ) { continue; // Skip odd members } # Get message text if ( $messageArray ) { $message = $enMsg; } else { - $message = wfMsgNoDB( $key ); + $message = wfMsgNoDBForContent( $key ); } - $titleObj = Title::newFromText( $key ); + $titleObj = Title::newFromText( $wgContLang->ucfirst( $key ), NS_MEDIAWIKI ); $title = $titleObj->getDBkey(); - $dbencMsg = wfStrencode( $message ); # Update messages which already exist if ( array_key_exists( $title, $existingTitles ) ) { - if ( $existingTitles[$title] == "chuck" || $overwrite) { - # print "$title\n"; - $mwTitleObj = Title::makeTitle( NS_MEDIAWIKI, $title ); - $article = new Article( $mwTitleObj ); - $article->quickEdit( $message ); + if ( $existingTitles[$title] == 'chuck' || $overwrite) { + # Don't bother writing a new revision if we're the same + # as the current text! + $revision = Revision::newFromTitle( $titleObj ); + if( is_null( $revision ) || $revision->getText() != $message ) { + $article = new Article( $titleObj ); + $article->quickEdit( $message ); + } } - $doInsert = false; } else { - # Queue for insertion - if ( $first ) { - $first = false; - } else { - $sql .= ","; - } - $sql .= - "($ns, - '$title', - '$dbencMsg', - '$username', - '$timestamp', - 'sysop', - 1, - '$invTimestamp', - '$timestamp')"; + $article = new Article( $titleObj ); + $newid = $article->insertOn( $dbw, 'sysop' ); + # FIXME: set restrictions + $revision = new Revision( array( + 'page' => $newid, + 'text' => $message, + 'user' => 0, + 'user_text' => $username, + 'comment' => '', + ) ); + $revid = $revision->insertOn( $dbw ); + $article->updateRevisionOn( $dbw, $revision ); } - - # Make table row for navigation page - $message = wfEscapeWikiText( $message ); - $navText .= -""; } - # Perform the insert query - if ( !$first ) { - wfQuery( $sql, DB_WRITE, $fname ); - } - - # Write the navigation page - - $navText .= "
-'''Name''' - -'''Default text''' - -'''Current text''' -
-[$wgServer$wgScript?title=MediaWiki:$title&action=edit $key]
-[[$mwtalk:$title|$talk]] -
-$message - -{{int:$title}} -
"; - $title = wfMsgNoDB( "allmessages" ); - $titleObj = Title::makeTitle( NS_MEDIAWIKI, $title ); - $wgArticle = new Article( $titleObj ); - $wgOut->disable(); - $wgUser = User::newFromName( 'MediaWiki default' ); - if ( $titleObj->getArticleID() ) { - $wgArticle->updateArticle( $navText, '', 0, 0 ); - } else { - $wgArticle->insertNewArticle( $navText, '', 0, 0 ); - } - # Clear the relevant memcached key - if( $wgUseMemCached ) { - print "Clearing message cache..."; - $wgMemc->delete( "$wgDBname:messages" ); - print "Done.\n"; - } + print 'Clearing message cache...'; + $wgMessageCache->clear(); + print "Done.\n"; } -function loadArrayFromFile( $filename ) -{ +/** */ +function loadLanguageFile( $filename ) { $contents = file_get_contents( $filename ); + # Remove header line + $p = strpos( $contents, "\n" ) + 1; + $contents = substr( $contents, $p ); + # Unserialize return unserialize( $contents ); } +/** */ function doUpdates() { global $wgDeferredUpdateList; foreach ( $wgDeferredUpdateList as $up ) { $up->doUpdate(); } } - ?>