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();
}
?>