<?php
//////////////////////////////////////////
//  iframe.inc.php by ino_mori and sonots
//////////////////////////////////////////

global $iframe_accept_regurl;
global $iframe_accept_url;
//正規表現による指定。ホスト許可などに使用。
//正規表現なので本当は \. にすべき。www.google.co.jp はそのURLだけ。pukiwiki.org はホスト全体を許可。
$iframe_accept_regurl = '^http://www.google.co.jp$|^http://pukiwiki.org'; 
//ただの文字列マッチ。常にこちらを使用した方が安全。日本語を使用する場合はURLエンコードしておくこと。
$iframe_accept_url = array(
'http://pukiwiki.org/index.php?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fiframe.inc.php',
);


/*
**使い方 (sonots バージョン) [#ee9649c9]
***書式 [#r1bd66ec]
 #iframe(URL[,オプション])
-URL~
とりこむURL。許可されているものしかとりこめない。許可するURLは iframe.inc.php 中で設定する。絶対アドレスのみ許可されるように設定してください。
-style~
スタイル設定。ここで style="width:500px;height:500px;" のように指定。CSSファイル中の記述よりも優先される。~
ところで IE以外(Mozilla, Opera) では object タグを使用しているのだが、その際 height:100% では全く 100% の表示にならない。height:500px あたりが無難？
-iestyle~
IE 用のスタイル指定。指定されなくても style の値が使われる。ここで iestyle="width:500px;height:500px;" のように指定。CSSファイル中の記述よりも優先される。~
ところで width:100% ではスクロールバーが切れたので width:99% あたりが無難？height:100% はこっちではありらしい。

***設定方法 [#i568a4ac]
iframe.inc.php を開き、許可する URL を編集します。
-$iframe_accept_regurl~
正規表現による指定。ホスト許可などに使用。例）
 $iframe_accept_regurl = '^http://www.google.co.jp$|^http://pukiwiki.org'; 
http://www.google.co.jp を許可。http://pukiwiki.org 以下のページをすべて許可。
正規表現なので本当は \. にすべきです。
-$iframe_accept_url~
ただの文字列マッチによる指定。常にこちらを使用した方が安全。
日本語を使用する場合はURLエンコードしておくこと。例）
 $iframe_accept_url = array(
 'http://pukiwiki.org/index.php?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fiframe.inc.php',
 );

デフォルトのサイズはスタイルシートを編集することで指定可能です。
-pukiwiki.css.php、1.4.3 以前なら default.ja.cssに付け加えます。~
 .iframe_others
 {
 	height: 600px;
 	width:100%;
 	margin-left:auto;
 	margin-right:auto;
 }
 
 .iframe_ie
 {
 	height: 600px;
 	width:100%;
 	margin-left:auto;
 	margin-right:auto;
 }
*/

function plugin_iframe_inline()
{
	if (!func_num_args())
	{
		return 'no argument(s).';
	}
	return plugin_iframe_body(func_get_args());
}

function plugin_iframe_convert()
{
	if (!func_num_args())
	{
		return 'no argument(s).';
	}
	return plugin_iframe_body(func_get_args());
}

function plugin_iframe_body($args)
{
	global $pkwk_dtd; //1.4.4以降
	global $html_transitional; //1.4.3以前
	global $iframe_accept_regurl;
	global $iframe_accept_url;
	$url = array_shift( $args );
	
	if(! ereg( $iframe_accept_regurl , $url ) ) // 正規表現マッチが失敗
	{
		$match = FALSE;
		foreach( $iframe_accept_url as $value ) // ただの文字列マッチ
		{
			if( $value == $url )
			{
				$match = TRUE;
			}
		}
		if(! $match)
		{
			return "not accepted.";
		}
	}
	
	$url = htmlspecialchars($url); 
	$params = array(
		'style'    => FALSE,
		'iestyle'   => FALSE,
		'_args'   => array(),
	);
	array_walk($args, 'iframe_check_arg', &$params);
	
	// USER_AGENT が IE の場合は iframe タグを使用
	// コンテンツがheight,widthの値よりも小さい場合でもダミーのscrollbarが表示されてしまうため
	// iframe を使用するには XHTML1.1 のままだと XHTML 構文エラー
	if (ereg("MSIE (3|4|5|6)", getenv("HTTP_USER_AGENT") ) )
	{
		$pkwk_dtd = PKWK_DTD_XHTML_1_0_TRANSITIONAL;
		$html_transitional = 1;
		$class=" class=\"iframe_ie\"";
		if ( $params['iestyle'] != FALSE )
		{
			$style = " style=".$params['iestyle']; 
		}
		else if ( $params['style'] != FALSE )
		{
			$style = " style=".$params['style'];
		}
		
return <<<HTML
<iframe frameborder="0"${class}${style} src="$url">
Please see here by browsers dealing with iframe tag.<br />
Go to <a href="$url">$url</a>
</iframe>
HTML;

	}
	else
	// その他のブラウザは object タグを使用
	{
		$class=" class=\"iframe_others\"";
		if ( $params['style'] != FALSE )
		{
			$style = " style=".$params['style'];
		}

return <<<HTML
<object${class}${style} data="$url" type="text/html">
Please see here by browsers dealing with object tag.<br />
Go to <a href="$url">$url</a>
</object>
HTML;

	}
}

//オプションを解析する
function iframe_check_arg($val, $key, &$params)
{
	if ($val == '')
	{
		return;
	}
	$lowval = strtolower($val); //trim はあえてしません。
	foreach (array_keys($params) as $key)
	{
		if (strpos($lowval, $key) === 0)
		{
			$lowval = ereg_replace("^$key=",'',$lowval);
			$lowval = strip_tags($lowval);
			$params[$key] = $lowval;
			return;
		}
	}
	$params['_args'][] = $val;
}
?>
