RIGHT:[[:t/解析]] [[:t/参考に]]

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

#contents

*MediaWiki/1.10 [#ya91fe21]

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


***参考 [#k91a73dd]
[[Google:MediaWiki]]

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


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


*MediaWikiひとめぐり [#cb2127c6]
起動から終了までの主な処理を処理順に記す。

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

+index.php
+includes/Wiki.php(41)
MediaWiki::initialize
+includes/Wiki.php(365)
MediaWiki::performAction
&color(#f00){※};クエリー'action'次第でいろいろ処理。またはOutputPage::redirectを呼び出して、あとでリダイレクトすることにする(実際は後のOutputPage::outputで行なう)。
+includes/Wiki.php(289)
MediaWiki::finalCleanup
+includes/Wiki.php(305)
MediaWiki::doUpdates
$wgDeferredUpdateListに溜め込んだオブジェクト全て->doUpdates
こうして処理タイミングを遅らせているのは、処理間の依存関係を解決するため?
+includes/OutputPage.php(553)
OutputPage::output
&color(#f00){※};スキン適用、HTTPヘッダー・HTMLヘッダー生成、レスポンス出力
*action [#h4078d05]
actionはほとんどMediaWiki(includes/Wiki.php)とArticle(includes/Article.php)で処理される。
それ以外には3つ程度のクラスしか関与しない。
処理の中心になっているのはこれらの数少ないクラスらしい。

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


**[[MediaWiki>MediaWiki/1.10/class/MediaWiki]]が処理する'action' [#fbde7197]
-dublincore
-creativecommons
-credits


**[[Article>MediaWiki/1.10/class/Article]]が処理する'action' [#r99ec491]
-view *
-watch
-unwatch
-delete
-revert
-rollback
-protect
-unprotect
-info
-markpatrolled
-render
-deletetrackback
-purge
-print


**その他の'action'一覧 [#feb68484]
-submit *(editを含む)
-edit *
-history *
-raw ?


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


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


***やってること [#ia7b9a25]

処理を順に列記する。

----

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

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

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

'diff'やOldIDを与えられたら差分ページを用意。
差分は[[DifferenceEngine>MediaWiki/1.10/class/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があれば…
外部からのリダイレクト。

要ログインなページの処理。

履歴。

----

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

ページタイトル取得。

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

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

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

----

ページ出力。


**action 'edit' [#e02da3fe]
[[EditPage>MediaWiki/1.10/class/EditPage]]または[[ExternalEdit>MediaWiki/1.10/class/ExternalEdit]]が処理する。
イベント'CustomEditor'実行。正しく実行できたことが前提条件。


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


**1.10/ [#b3bfa084]
**MediaWiki/1.10/ [#b3bfa084]
#ls