alias.inc.php[edit]

alias.inc.php[edit]
<?php
/*
* PukiWiki Plugin "alias.inc.php"
* ver.1.5 2005/05/28
* ver.1.5.1 2022/04/10
* License is GNU/GPL
* modified by kochi<elfen@s9.xrea.com>
* ver.1.5.1 PHP8.0対応
*/

//ジャンプ先URL文字列の最大長指定
define('URL_MAX_BYTES',1024);

//ジャンプ回数制限
define('JUMP_MAX',2);

function plugin_alias_init()
{
	$messages = array(
		'_alias_messages'=> array(
			'msg_noalias'		=> "''このページは[[\$dest_page]]へのエイリアスに設定されています。''\n",
			'war_mode_invalid'	=> false,	//GETパラメータが対象外
			//'war_ignore'		=> false,	//ループの危険性がある呼び出し
			'err_loc_invalid'	=> false,	//BODY外での呼び出し(MenuBarなど)
			'err_loop'			=> '(alias:ループしています)',				//ジャンプ経路のループ
			'err_url_too_long'	=> '(alias:URLの長さが上限を超えました)',	//URL長の上限オーバー
			'err_not_exist'		=> '(alias:指定されたページは存在しません)',//ページが無い・アンカーが不適切
			'err_jump_max'			=> '(alias:ジャンプの回数が上限を超えました)',//ジャンプ回数オーバー
		)
	);
	set_plugin_messages($messages);
}

function plugin_alias_convert()
{
	global $script,$vars,$defaultpage,$get;
	global $_alias_messages;

	if($vars['cmd']=='edit') return '';

	$my_get_vars = $get;

	//MenuBarなどで呼び出されている可能性
	global $body;
	if(isset($body))
		return $_alias_messages['err_loc_invalid'];


	//第一引数をジャンプ先ページ名とする
	if(func_num_args()<=0)
		return false;

	$arg = func_get_arg(0);
	$temp = explode('#',$arg);
	if(count($temp) > 2)
		return $_alias_messages['err_not_exist'];
	list($dest_page,$anchor) = $temp;

	if(!is_page($dest_page))
		return $_alias_messages['err_not_exist'];


	//cmd=readでない場合は何もしない
	if(array_key_exists('plugin',$my_get_vars) || $my_get_vars['cmd'] != 'read' || !is_page($my_get_vars['page']))
		return $_alias_messages['war_mode_invalid'];

	//noaliasパラメータがtrueの場合はジャンプしない
	if($get["noalias"]=='true'){
		$msg = str_replace('$dest_page',$dest_page,$_alias_messages['msg_noalias']);
		return convert_html($msg);
	}

	$alias = '&'.rawurlencode('alias[]').'=';
	$history = '';

	if(isset($my_get_vars['alias'])){
		//ジャンプ回数がすでに上限値に達していたらエラー
		if(count($my_get_vars['alias'])>=JUMP_MAX)
			return $_alias_messages['err_jump_max'];
		//経路履歴をチェック。ループしていればエラー
		foreach($my_get_vars['alias'] as $pg){
			if($pg == $my_get_vars['page'] || $pg == $dest_page)
				return $_alias_messages['err_loop'];
			$history .= $alias. rawurlencode($pg);
		}
	}

	//経路履歴にカレントのページを付け加える
	$history .= $alias .rawurlencode($my_get_vars['page']);

	//ジャンプ先URLを生成。長すぎたらエラー
	$url = $script.'?cmd=read&page='.rawurlencode($dest_page).$history;
	if(isset($anchor))
		$url .= '#'.rawurlencode($anchor);

	if(strlen($url) > URL_MAX_BYTES) return $_alias_messages['err_url_too_long'];

	//HTTP Headerを出力して終了
	header("Location: $url");
	die();

}
?>

トップ   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS