(MediaWiki) protect page拡張機能

戻る一つ前のメニューに戻る

目次

ソフトウエアのダウンロード

soft-ico-download.gif PHPソースコードをSubversionブラウザよりダウンロード

機能の概要

protect page拡張機能protect page extention)は、MediaWikiで任意のページに未ログオンユーザによる閲覧制限を儲けることができる拡張機能です。 ページに <protect></protect> というタグを記述することで、そのページに閲覧制限を儲けることが出来ます。

この拡張機能は、MediaWiki$wgParserのsetHookメンバ関数を利用して、タグを検出して、フック機能BeforePageDisplayを利用して、コンテンツの出力前に該当ページの出力を制限します。

閲覧制限したいページに書き込むタグ

  • <protect></protect>

動作確認しているMediaWikiバージョン

  • MediaWiki 1.18

インストール方法

LocalSettings.phpに次の行を追加する。

require_once("$IP/extensions/protect_page.php");

プログラムについての技術的説明

ソースコード

最新のソースコードは、ダウンロードセクションのSubversionからダウンロードしてください。

<?php
if (!defined('MEDIAWIKI')) die("MediaWiki extensions cannot be run directly.");
 
$wgExtensionCredits['other'][] = array(
    'name' => "protectpage_extention",
    'author' => "INOUE. Hirokazu",
    'version' => "1.0 (2012/Jan/21) for mw 1.18",
    'description' => "prohibit to open page with protect tag for non-logon user",
    'url' => "http://oasis.halfmoon.jp/mw/index.php?title=Soft-MediaWiki-Protectpage-Ext",
);
 
$flag_protect = false;
 
$wgExtensionFunctions[] = "wfProtectpage_setup";
 
function wfProtectpage_setup() {
    global $wgMessageCache, $wgParser, $wgHooks;
    global $pCrudeProtection_Messages;
 
    // set hook
    $wgHooks['BeforePageDisplay'][]='wfBeforeDisplay';
 
    // set hook function for 'protect' tag
    $wgParser->setHook( "protect", "wfFound_tag_hook" );
}
 
// hook function, if detect <protect></protect>
// <protect></protect> タグが検出された場合のフック関数
function wfFound_tag_hook($Input, $Args) {
    global $wgOut, $wgUser, $wgParser;
    global $flag_protect;
 
    // disable cache (キャッシュを破棄する)
    $wgParser->disableCache();
 
    // default : protect page (デフォルトで、保護フラグを立てる)
    $flag_protect = true;
    # if Loggedin, unprotect page (ログインしている場合、保護フラグを消す)
    if($wgUser->isLoggedIn()) {
        $flag_protect = false;
        return '';
    }
    return '';
}
 
function wfBeforeDisplay(&$wgOut) {
    global $wgRequest, $flag_protect;
    if(isset($flag_protect) && $flag_protect == true)
    {
        # show error(protected message) page (エラーメッセージのページを表示する)
        $wgOut->showErrorPage( 'errorpagetitle', 'notloggedin' );
        $wgOut->setSubtitle( 'this topic is not allowed to view for non login user' );
    }
    return true;
}

バージョンアップ情報

  • Version 1.0 2012/01/21
    当初バージョン MediaWiki 1.18対応

使用許諾条件

GNU GPL フリーソフトウエア

関連情報

戻る一つ前のメニューに戻る