meta.inc.php

サマリページのメタデータを書くためのプラグインです。
リビジョン1.1.2
対応バージョン1.4.7
投稿者jidaikobo
投稿日2007-05-22 (火) 10:50:19

概要

メタデータを書くためのプラグインです。本文には出力したくないけど、メモをとっておきたいときに使います。
またさまざまな表示権限分け(ページの表示期限など)をスムーズに行う装置としても考えてみています(あくまで実験的ですが)。
引数は、出力はされませんが、$vars に突っ込まれます。このときはいわゆる HTML出力サニタイズはしていないので、スキンなどで使うときは注意が必要だと思います。

書式は以下の例の通りです*1。編集画面改造を行わない場合の引数は自由ですが、$vars につっこむので、カンマ区切りで、ラベル = シングルクォート囲みの値にした方がいいと思います。

#meta{{
title='HumptyDumpty'
publish='20070604-220605'
}}

なんだかんだと本体改造箇所の多いプラグインなので、ちょっと邪道かと思いますが、メリットとしては、ページ名と URL を分離できます。 ただしパンくずなどの表示を合わせるのには、もう一工夫必要ですが……。

使い方の例:表示権限分け

pukiwiki.ini.php の 232 行目以降をいじります。

/////////////////////////////////////////////////
// User definition
$auth_users = array(
	// Username => password
	'admin'	=> '{x-php-md5}21232f297a57a5a743894a0e4a801fc3',
	'editor'	=> '{x-php-md5}5aee9dbd2a188839105073571bee1b1f',
);

/////////////////////////////////////////////////
// Authentication method

//$auth_method_type	= 'pagename';	// By Page name
$auth_method_type		= 'contents';	// By Page contents

/////////////////////////////////////////////////
// Read auth (0:Disable, 1:Enable)
$read_auth = 1;

$read_auth_pages = array(
	// Regex		   Username
	'#meta{{(.*\n)*read_auth=\'.*?admin.*?\'#'  => 'admin',
	'#meta{{(.*\n)*read_auth=\'.*?editor.*?\'#' => 'editor,admin',
);

/////////////////////////////////////////////////
// Edit auth (0:Disable, 1:Enable)
$edit_auth = 1;

$edit_auth_pages = array(
	// Regex		   Username
	'#meta{{(.*\n)*edit_auth=\'.*?admin.*?\'#'  => 'admin',
	'#meta{{(.*\n)*edit_auth=\'.*?editor.*?\'#' => 'editor,admin',
	'/.*/'                                      => 'admin,editor',
);

この例では、パスワードと ID が同じユーザとして admin と editor を作っています。
$auth_method_type は、contents(ページ内容)にしています。
$read_auth と $edit_auth を有効にして、ページ内の meta プラグインの引数を確認しています。
この例だと、以下のような meta プラグインが書いてあるページで認証を発動します。

#meta{{
read_auth='editor'
edit_auth='admin'
}}

ゲストは閲覧不能で、 editor というユーザは読むことができます。編集ができるのは admin だけです(というようになっていると思います)。 #editor というユーザ名がちょっと紛らわしいですね。member とかにしたらよかったかしら。
……とここまでは、べつにたいしたことはありません。特にプラグインなど使わなくても、なにか認証のきっかけになる情報をページ内に書いておいて、default.ini.php でそれを非表示にしておけばいいだけです。

使い方の例:表示権限分け - 期限切れのページと公開前のページ

pukiwiki.ini.php の $read_auth_pages を以下のようにしてみます。

$read_auth_pages = array(
	// Regex		   Username
	'#meta{{(.*\n)*read_auth=\'.*?admin.*?\'#'  => 'admin',
	'#meta{{(.*\n)*read_auth=\'.*?editor.*?\'#' => 'editor,admin',
	'#meta{{(.*\n)*release=\'.*?\'#'            => 'editor,admin',
	'#meta{{(.*\n)*expire=\'.*?\'#'             => 'editor,admin',
);

lib/auth.php の 180 行目あたりを改変します。

//	$user_list = array();
//	foreach($auth_pages as $key=>$val)
//		if (preg_match($key, $target_str))
//			$user_list = array_merge($user_list, explode(',', $val));
// publish and exipre check
	$user_list = array();
	foreach( $auth_pages as $key => $val ){
		if ( preg_match( $key, $target_str ) ){
			if( $key == '#meta{{(.*\n)*release=\'.*?\'#' || $key == '#meta{{(.*\n)*expire=\'.*?\'#' ){
				//analyze meta plugin
				preg_match( '/#meta{{(.*\n)*}}/',$target_str,$m );
				$lines = explode( "\n",$m[0] );
				foreach( $lines as $k => $v ){
					if( empty($v) || $v == '#meta{{' || $v == '}}' ) continue ;
					list( $kk,$vv ) = explode( '=\'',$v ) ;
					$vv = trim( $vv ) ;
					$args[$kk] = rtrim( $vv,"'" ) ;
				}
				//analyze args
				foreach( $args as $k => $v ){
					if( $k != 'release' && $k != 'expire' ) continue;
					if( $v != '' ){
//						preg_match( '/(\d\d\d\d)(\d\d)(\d\d)-(\d\d)(\d\d)(\d\d)/',$v,$i ) ;
						$i[1] = substr( $v, 0, 4 ) ;
						$i[2] = substr( $v, 4, 2 ) ;
						$i[3] = substr( $v, 6, 2 ) ;
						$i[4] = substr( $v, 9, 2 ) ;
						$i[5] = substr( $v, 11, 2 ) ;
						$i[6] = substr( $v, 13, 2 ) ;
						$target_date = mktime( $i[4],$i[5],$i[6],$i[2],$i[3],$i[1] ) ;
						if( $k == 'release' && time() <= $target_date ){
							$user_list = array_merge($user_list, explode(',', $val));
						}
						if( $k == 'expire' &&  time() >= $target_date ){
							$user_list = array_merge($user_list, explode(',', $val));
						}
					}
				}
			}else{
				//normal auth check
				$user_list = array_merge($user_list, explode(',', $val));
			}
		}
	}
// publish and exipre check - end

プラグインの引数はこんなふうにします。

#meta{{
release='20070520-000000'
expire='20070521-000000'
}}

すると、2007年5月20日から2007年5月21日の間だけ閲覧認証がかからないページができると思います(この期間以外に閲覧しようとすると、認証がかかると思います)。release と expire は、どちらか一つだけ記載することもできます*2

メタ情報編集インタフェイス

GUI っぽい入力欄を作ってみました。つかうためには、 pukiwiki.ini.php に以下のように設定しておきます*3。拡張する場合は、text, textarea, date, auth から type を選ぶ必要があります。view の値は、TRUE にすると、閲覧モードで、この meta 情報を呼び出した際に、情報開示します。

//meta デフォルトの値(ページタイトル、入力者、概要、作成日、公開日、公開予約、公開期限、閲覧権限、編集権限)
$meta['title']     = array( 'title' => 'タイトル'       , 'type' => 'text'      , 'view' => TRUE ) ;
$meta['author']    = array( 'title' => '入力者'         , 'type' => 'text'      , 'view' => TRUE ) ;
$meta['summary']   = array( 'title' => '概要'           , 'type' => 'textarea'  , 'view' => TRUE ) ;
$meta['publish']   = array( 'title' => '作成日'         , 'type' => 'date'      , 'view' => TRUE ) ;
$meta['timestamp'] = array( 'title' => '更新日'         , 'type' => 'timestamp' , 'view' => TRUE ) ;
$meta['release']   = array( 'title' => '公開予約'       , 'type' => 'date'      , 'view' => FALSE ) ;
$meta['expire']    = array( 'title' => '公開期限'       , 'type' => 'date'      , 'view' => FALSE ) ;
$meta['read_auth'] = array( 'title' => '閲覧権限'       , 'type' => 'auth'      , 'view' => FALSE ) ;
$meta['edit_auth'] = array( 'title' => '編集権限'       , 'type' => 'auth'      , 'view' => FALSE ) ;

通常の編集画面にmeta情報を表示しないようフック

lib/html.php の 237行めあたりにこれを差し込み、html 中に $escaped_plugin_meta を突っ込みます。 なお、タイトルだけは入力欄を拡張するようになっています。上記 pukiwiki.ini.php の改変を忘れないでください。

$e_postdata = $s_original ;
include_once PLUGIN_DIR . 'meta.inc.php';
list( $s_postdata,$e_postdata,$escaped_plugin_meta ) = plugin_meta_smartedit( $s_postdata,$e_postdata );

通常の編集画面にmeta情報を表示しないようフック2(埋め込み直し)

plugin/edit.inc.php の 188 行目あたりです。

include_once PLUGIN_DIR . 'meta.inc.php';
plugin_meta_mergedata( $msg );

pukiwiki.in.php に入れるものだが、これは特に入れなくてもよい。

入れると meta 情報編集へのリンクが各ページに表示されるようになる。

$meta_hidden = TRUE ;// or FALSE

関数など

プラグインなどでメタ情報を取得したいときは、一度 include して、 get_metainfo(ページ名) としてやると、諸々のページ情報を取得できると思います。

include_once PLUGIN_DIR . 'meta.inc.php' ;
$meta = get_metainfo( $vars['page'] ) ;

また、pukiwiki.skin.php を読むときには、

print_r( $vars );

してやることで、与えられているメタ情報を取得できるので、適宜使うことができると思います。

ダウンロード

すべて UTF-8 です。EUC の場合は、文字コードを変更してお使いください。

ライセンス

履歴

2007年5月22日火曜日人柱版公開ver 0.5
2007年6月08日金曜日人柱版(その2)公開。メタ情報編集インタフェイスを試作ver 0.7.0
2007年7月09日月曜日人柱版(その3)公開。改造箇所多数ver 1.0.8
2007年7月10日火曜日ファイル作成日をただしく機能するように修正。編集者($_SERVER['PHP_AUTH_USER'])を残すように改造ver 1.1.0
2007年7月21日火曜日プラグインがページの pre 要素を壊す問題を修正ver 1.1.2

コメント


*1 0.7.0で複数行プラグインにかえました。0.5.0 の説明は 0.5.0 に同梱しています
*2 0.7.0 で publish を release にかえました
*3 たぶんここを拡張すれば、入力欄も拡張すると思うのですが、しっかり検証していません :-P

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-21 (火) 23:42:13
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.368 sec.

SourceForge