他のバージョンについては
MediaWiki

MediaWiki/1.10 Edit

MediaWiki 1.10の解析。
MediaWikiの主要部分を調べた結果。

参考 Edit

Google:MediaWiki

design.txt
http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/docs/design.txt?view=markup
Development/ja - MediaWiki
http://www.mediawiki.org/wiki/Development/ja
Manual:Database layout - MediaWiki
http://www.mediawiki.org/wiki/Manual:Database_layout
Manual:Contents/ja - MediaWiki
http://www.mediawiki.org/wiki/Manual:Contents/ja
MediaWiki Documentation
http://svn.wikimedia.org/doc/
The MediaWiki codebase
http://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker#The_MediaWiki_codebase

主処理への入り口 Edit

  • index.phpがエントリーポイント。
  • initialize直後にCleanup。主処理はどこか?
  • なぜかMediaWiki::initializeの中に主処理がある。
    index.php -> MediaWiki::initialize -> MediaWiki::performAction -> (リクエストの'action'次第で分岐、それぞれの処理へ)

MediaWikiひとめぐり Edit

起動から終了までの主な処理を処理順に記す。

MediaWiki::performActionが処理の中心。
ここで何をするかはMediaWikiの外から与えられるリクエスト次第。

  1. index.php
  2. includes/Wiki.php(41)
    MediaWiki::initialize
  3. includes/Wiki.php(365)
    MediaWiki::performAction
    クエリー'action'次第でいろいろ処理。またはOutputPage::redirectを呼び出して、あとでリダイレクトすることにする(実際は後のOutputPage::outputで行なう)。
  4. includes/Wiki.php(289)
    MediaWiki::finalCleanup
  5. includes/Wiki.php(305)
    MediaWiki::doUpdates
    $wgDeferredUpdateListに溜め込んだオブジェクト全て->doUpdates
    こうして処理タイミングを遅らせているのは、処理間の依存関係を解決するため?
  6. includes/OutputPage.php(553)
    OutputPage::output
    スキン適用、HTTPヘッダー・HTMLヘッダー生成、レスポンス出力

action Edit

actionはほとんどMediaWiki(includes/Wiki.php)とArticle(includes/Article.php)で処理される。
それ以外には3つ程度のクラスしか関与しない。
処理の中心になっているのはこれらの数少ないクラスらしい。

'view'というactionは複数のクラスを通して処理される。
'view'はactionのデフォルト値。

MediaWiki[?]が処理する'action' Edit

  • dublincore
  • creativecommons
  • credits

Article[?]が処理する'action' Edit

  • view *
  • watch
  • unwatch
  • delete
  • revert
  • rollback
  • protect
  • unprotect
  • info
  • markpatrolled
  • render
  • deletetrackback
  • purge
  • print

その他の'action'一覧 Edit

  • submit *(editを含む)
  • edit *
  • history *
  • raw ?

action 'view' Edit

'view'
actionのデフォルト。
Articleが処理する。
クエリーで指示されたページを表示する。

関連するクエリー Edit

  • diff
    差分表示するか否か。差分表示は独立したactionではなく、action 'view'の一部になっている。
  • rcid
    RecentChange(最近更新されたページ)?
    巡回にのみ関連。
  • rdfrom
    外部からのリダイレクトに関連。
  • diffonly(利用者設定と関連)
  • oldid
    履歴(特定)ID
  • direction
    履歴と関連。値は'next'または'prev'のどちらかになる。
    表示する履歴に関連。

やってること Edit

処理を順に列記する。


スキン参照。
プロセス名変更。
名前空間取得。

クエリーからOldIDを得て、不正なものならリダイレクト
OldID…履歴のID、Wikipediaでの「特定」?

ArticleFlagをtrueに。
検索エンジンのロボット向けヘッダーの用意。

'diff'やOldIDを与えられたら差分ページを用意。
差分はDifferenceEngine[?]に任せる。
でも最新版を表示することもある。

$this->mIsRedirect でなく、OldIDも与えられていなければ…$this->viewUpdates()
HTTPヘッダーにETagも設定

	wfDebug( 'Article::view using parser cache: ' . ($pcache ? 'yes' : 'no' ) . "\n" );
	if ( $wgUser->getOption( 'stubthreshold' ) ) {
		wfIncrStats( 'pcache_miss_stub' );
	}

リダイレクトページの処理。「~より転送」

リダイレクトページではなくrdfromがあれば…
外部からのリダイレクト

ログインページの処理。

履歴


ページに追加。
<pre>…</pre>追加。
<span class="redirectText">…</span>追加。
MediaWikiでのページキャッシュ。
履歴ではページキャッシュを無効に。

ページタイトル取得。

名無しさん用会話ページの場合に追加される処理。

巡回機能のためのUI追加。
<div class='patrollink'>…</div>追加。

トラックバック表示の追加。


ページ出力。

action 'edit' Edit

EditPage[?]またはExternalEdit[?]が処理する。
イベント'CustomEditor'実行。正しく実行できたことが前提条件。

ExternalEditは「編集に外部アプリケーションを使う」[?]のレスポンスを返す(.ini形式で編集するページ名などを返す)だけ。
この仕組みはMediaWikiの範疇ではなく、ee.plによって実現されている。

MediaWiki/1.10/ Edit