** meta.inc.php [#l2415914]
|RIGHT:100|LEFT:360|c
|~サマリ|ページのメタデータを書くためのプラグインです。|
|~リビジョン|1.1.2|
|~対応バージョン|1.4.7|
|~投稿者|[[jidaikobo]]|
|~投稿日|&new{2007-05-22 (火) 10:50:19};|

#contents

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

書式は以下の例の通りです((0.7.0で複数行プラグインにかえました。0.5.0 の説明は 0.5.0 に同梱しています))。編集画面改造を行わない場合の引数は自由ですが、$vars につっこむので、カンマ区切りで、ラベル = シングルクォート囲みの値にした方がいいと思います。

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

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

*使い方の例:表示権限分け [#b0402cc5]
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 でそれを非表示にしておけばいいだけです。

*使い方の例:表示権限分け - 期限切れのページと公開前のページ [#c0468214]
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 は、どちらか一つだけ記載することもできます(( 0.7.0 で publish を release にかえました))。

*メタ情報編集インタフェイス [#x143c97d]

GUI っぽい入力欄を作ってみました。つかうためには、 pukiwiki.ini.php に以下のように設定しておきます((たぶんここを拡張すれば、入力欄も拡張すると思うのですが、しっかり検証していません :-P ))。拡張する場合は、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情報を表示しないようフック [#u852f02b]
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(埋め込み直し) [#p0905d8b]
plugin/edit.inc.php の 188 行目あたりです。
 include_once PLUGIN_DIR . 'meta.inc.php';
 plugin_meta_mergedata( $msg );

**pukiwiki.in.php に入れるものだが、これは特に入れなくてもよい。 [#cb2f75b2]
入れると meta 情報編集へのリンクが各ページに表示されるようになる。
 $meta_hidden = TRUE ;// or FALSE

*関数など [#h39b9b20]
プラグインなどでメタ情報を取得したいときは、一度 include して、 get_metainfo(ページ名) としてやると、諸々のページ情報を取得できると思います。
 include_once PLUGIN_DIR . 'meta.inc.php' ;
 $meta = get_metainfo( $vars['page'] ) ;

また、pukiwiki.skin.php を読むときには、
 print_r( $vars );
してやることで、与えられているメタ情報を取得できるので、適宜使うことができると思います。

*ダウンロード [#f7a474bf]
すべて UTF-8 です。EUC の場合は、文字コードを変更してお使いください。

-%%meta 0.5.0(http&#x3a;//www.jidaikobo.com/pukiwiki/meta050.zip )%%
-%%meta 0.7.0(http&#x3a;//www.jidaikobo.com/pukiwiki/meta070.zip )%%
-%%meta 1.0.8(http&#x3a;//www.jidaikobo.com/pukiwiki/meta108.zip )%%
-%%meta 1.1.0(http&#x3a;//www.jidaikobo.com/pukiwiki/meta110.zip )%%
-%%meta 1.1.2(http&#x3a;//www.jidaikobo.com/pukiwiki/meta112.zip )%%
-meta 1.1.2(http://www.jidaikobo.com/pukiwiki/meta112.zip )

*ライセンス [#xead3ffa]
-PukiWiki と同じライセンスで。

*履歴 [#wa65bebb]
|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|

*コメント [#mfea5375]
//#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

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

SourceForge