function plugin_showrss_convert() { if (func_num_args() == 0) { // 引数がない場合はエラー return "<p>showrss: no parameter(s).</p>\n"; } if (!extension_loaded('xml')) { // xml 拡張機能が有効でない場合。 return "<p>showrss: xml extension is not loaded</p>\n"; } $array = func_get_args(); $rssurl = $tmplname = $usecache = $usetimestamp = ''; switch (func_num_args()) { case 4: $usetimestamp = trim($array[3]); case 3: $usecache = $array[2]; case 2: $tmplname = strtolower(trim($array[1])); case 1: $rssurl = trim($array[0]); } // RSS パスの値チェック if (!PukiWikiFunc::is_url($rssurl)) { return '<p>showrss: syntax error. ' . htmlspecialchars($rssurl) . "</p>\n"; } $class = "ShowRSS_html_{$tmplname}"; if (!class_exists($class)) { $class = 'ShowRSS_html'; } list($rss, $time) = plugin_showrss_get_rss($rssurl, $usecache); if ($rss === FALSE) { return "<p>showrss: cannot get rss from server.</p>\n"; } $obj = new $class($rss); $timestamp = ''; if ($usetimestamp > 0) { $time = PukiWikiFunc::get_date('Y/m/d H:i:s', $time); $timestamp = "<p style=\"font-size:10px; font-weight:bold\">Last-Modified:{$time}</p>"; } return $obj->toString($timestamp); }
function plugin_ref_body($name, $args, $params) { // $nameをもとに以下の変数を設定 // $url : URL // $title :タイトル // $ext : 拡張子判別用文字列 // $icon : アイコンのimgタグ // $size : 画像ファイルのときサイズ // $info : 画像ファイル以外のファイルの情報 // 添付ファイルのとき : ファイルの最終更新日とサイズ // URLのとき : URLそのもの $ret = ""; if (PukiWikiFunc::is_url($name)) { //URL $url = $ext = $info = htmlspecialchars($name); $icon = $size = ''; $l_url = $url; $icon = MOD_PUKI_REF_FILE_ICON; if (preg_match('/([^\\/]+)$/', $name, $match)) { $ext = $match[1]; } } else { $page = ''; if (count($args) > 0) { $_page = $args[0]; if (PukiWikiFunc::is_page($_page)) { $page = $_page; array_shift($args); } } //相対パスからフルパスを得る if (preg_match('/^(.+)\\/([^\\/]+)$/', $name, $matches)) { if ($matches[1] == '.' or $matches[1] == '..') { $matches[1] .= '/'; } $page = PukiWikiFunc::add_bracket($matches[1]); $name = $matches[2]; } $ext = $name; if (MOD_PUKI_WIKI_VER == '1.3') { $page = PukiWikiFunc::add_bracket(PukiWikiFunc::strip_bracket($page)); } $file = MOD_PUKI_WIKI_UPLOAD_DIR . PukiWikiFunc::encode($page) . '_' . PukiWikiFunc::encode($name); if (!is_file($file)) { if (!PukiWikiFunc::is_page($page)) { $rets['_error'] = 'page not found.'; return $rets; } else { $rets['_error'] = 'not found.'; return $rets; } } $l_url = MOD_PUKI_WIKI_URL . '?plugin=attach&openfile=' . rawurlencode($name) . '&refer=' . rawurlencode($page); $fsize = sprintf('%01.1f', round(filesize($file) / 1000, 1)) . 'KB'; $is_picture = is_picture($file, $page); $is_flash = $is_picture ? false : plugin_ref_is_flash($file); if ($is_picture) { $url = $file; $size = getimagesize($file); $org_w = $size[0]; $org_h = $size[1]; } else { $lastmod = date('Y/m/d H:i:s', filemtime($file)); $info = "{$lastmod} {$fsize}"; } } //タイトルを決定 if (!isset($title) or $title == '') { $title = $ext; } $title = htmlspecialchars($title); // ファイル種別判定 if (!isset($is_picture)) { $is_picture = is_picture($url); } if (!isset($is_flash)) { $is_flash = plugin_ref_is_flash($url); } if ($is_picture) { // 画像 $info = ""; $width = $height = 0; //URLの場合キャッシュ判定 if (PukiWikiFunc::is_url($url)) { $parse = parse_url($url); $name = $parse['host'] . "_" . basename($parse['path']); $filename = PukiWikiFunc::encode($name); if (!$params['nocache']) { //キャッシュする $size = plugin_ref_cache_image_fetch($filename, &$url); $fsize = sprintf('%01.1f', round(filesize(MOD_PUKI_UPLOAD_DIR . $filename) / 1000, 1)) . 'KB'; $l_url = $url; } else { //キャッシュしない $size = @getimagesize($url); $l_url = $url; $fsize = '?KB'; } $org_w = $size[0]; $org_h = $size[1]; } foreach ($params['_args'] as $arg) { if (preg_match("/^(m)?w:([0-9]+)\$/i", $arg, $m)) { $params['_size'] = TRUE; $params['_w'] = $m[2]; $max_flg = $m[1]; } if (preg_match("/^(m)?h:([0-9]+)\$/i", $arg, $m)) { $params['_size'] = TRUE; $params['_h'] = $m[2]; $max_flg = $m[1]; } if (preg_match("/^([0-9.]+)%\$/i", $arg, $m)) { $params['_%'] = $m[1]; } if (preg_match("/^t:(.*)\$/i", $arg, $m)) { $m[1] = htmlspecialchars(str_replace("&quot;", "", $m[1])); if ($m[1]) { $title = $m[1] . " " . $title; } } } // 指定されたサイズを使用する if ($params['_size']) { if ($params['_w'] > 0 && $params['_h'] > 0 && !$max_flg) { $width = $params['_w']; $height = $params['_h']; } else { $_w = $params['_w'] ? $org_w / $params['_w'] : 0; $_h = $params['_h'] ? $org_h / $params['_h'] : 0; $zoom = max($_w, $_h); if ($zoom) { if (!$max_flg || $zoom >= 1 && $max_flg) { $width = floor($org_w / $zoom); $height = floor($org_h / $zoom); } } } } if ($params['_%']) { $width = floor($org_w * $params['_%'] / 100); $height = floor($org_h * $params['_%'] / 100); } if ($org_w && $width && $org_h && $height) { $zoom = floor(max($width / $org_w, $height / $org_h) * 100); } $title .= " SIZE:{$org_w}x{$org_h}({$fsize})"; // &を変換 $title = str_replace("&", "&", $title); //IE以外は改行文字をスペースに変換 if (!strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) { $title = str_replace(" ", " ", $title); } if ($width && $height) { $s_file_base = PukiWikiFunc::encode($zoom . "%" . $name); $s_file = MOD_PUKI_UPLOAD_DIR . $s_file_base; if (!file_exists($s_file) && $zoom < 90 && !$params['nocache']) { //サムネイル作成 $url = plugin_ref_make_thumb($url, $s_file_base, $width, $height, $org_w, $org_h); } else { if (file_exists($s_file)) { //サムネイルがあればサムネイルを参照 $url = MOD_PUKI_UPLOAD_URL . $s_file_base; } } $info = "width=\"{$width}\" height=\"{$height}\" "; $ret .= "<a href=\"{$l_url}\" title=\"{$title}\"><img src=\"{$url}\" alt=\"{$title}\" title=\"{$title}\" {$info}/></a>"; } else { if ($org_w and $org_h) { $info = "width=\"{$org_w}\" height=\"{$org_h}\" "; } if (!$params['nocache']) { $ret .= "<img src=\"{$url}\" alt=\"{$title}\" title=\"{$title}\" {$info}/>"; } else { $ret .= "<img src=\"{$url}\" alt=\"{$title}\" title=\"{$title}\" {$info}/>"; } } } else { if ($is_flash) { // Flashファイル //初期化 $params['_qp'] = $params['_q'] = $params['_pp'] = $params['_p'] = $params['_lp'] = $params['_l'] = $params['_w'] = $params['_h'] = $params['_a'] = $params['_bp'] = $params['_b'] = $params['_scp'] = $params['_sc'] = $params['_sap'] = $params['_sa'] = $params['_mp'] = $params['_m'] = $params['_wmp'] = ""; foreach ($params['_args'] as $arg) { if (preg_match("/^q(?:uality)?:((auto)?(high|low|best|medium))\$/i", $arg, $m)) { $params['_qp'] = "<param name=\"quality\" value=\"{$m[1]}\">"; $params['_q'] = " quality=\"{$m[1]}\""; } if (preg_match("/^p(?:lay)?:(true|false)\$/i", $arg, $m)) { $params['_pp'] = "<param name=\"play\" value=\"{$m[1]}\">"; $params['_p'] = " play=\"{$m[1]}\""; } if (preg_match("/^l(?:oop)?:(true|false)\$/i", $arg, $m)) { $params['_lp'] = "<param name=\"loop\" value=\"{$m[1]}\">"; $params['_l'] = " loop=\"{$m[1]}\""; } if (preg_match("/^w(?:idth)?:([0-9]+)\$/i", $arg, $m)) { $params['_w'] = " width=" . $m[1]; } if (preg_match("/^h(?:eight)?:([0-9]+)\$/i", $arg, $m)) { $params['_h'] = " height=" . $m[1]; } if (preg_match("/^a(?:lign)?:(l|r|t|b)\$/i", $arg, $m)) { $params['_a'] = " align=\"{$m[1]}\""; } if (preg_match("/^b(?:gcolor)?:#?([abcdef\\d]{6,6})\$/i", $arg, $m)) { $params['_bp'] = "<param name=\"bgcolor\" value=\"{$m[1]}\">"; $params['_b'] = " bgcolor=\"#{$m[1]}\""; } if (preg_match("/^sc(?:ale)?:(showall|noborder|exactfit|noscale)\$/i", $arg, $m)) { $params['_scp'] = "<param name=\"scale\" value=\"{$m[1]}\">"; $params['_sc'] = " scale=\"{$m[1]}\""; } if (preg_match("/^sa(?:lign)?:(l|r|t|b|tl|tr|bl|br)\$/i", $arg, $m)) { $params['_sap'] = "<param name=\"salign\" value=\"{$m[1]}\">"; $params['_sa'] = " salign=\"{$m[1]}\""; } if (preg_match("/^m(?:enu)?:(true|false)\$/i", $arg, $m)) { $params['_mp'] = "<param name=\"menu\" value=\"{$m[1]}\">"; $params['_m'] = " menu=\"{$m[1]}\""; } if (preg_match("/^wm(?:ode)?:(window|opaque|transparent)\$/i", $arg, $m)) { $params['_wmp'] = "<param name=\"wmode\" value=\"{$m[1]}\">"; } } $ret .= <<<_HTML_ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0"{$params['_w']}{$params['_h']}{$params['_a']}> <param name="movie" value="{$file}"> {$params['_qp']}{$params['_lp']}{$params['_pp']}{$params['_scp']}{$params['_sap']}{$params['_mp']}{$params['_wmp']} <embed src="{$file}" pluginspage="http://www.macromedia.com/jp/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"{$params['_w']}{$params['_h']}{$params['_a']}{$params['_p']}{$params['_l']}{$params['_q']}{$params['_b']}{$params['_sc']}{$params['_sa']}{$params['_m']}> </embed> </object> _HTML_; } else { // 通常ファイル foreach ($params['_args'] as $arg) { if (preg_match("/^t:(.*)\$/i", $arg, $m)) { $m[1] = htmlspecialchars(str_replace("&quot;", "", $m[1])); if ($m[1]) { $info = $m[1] . " " . $info; } } } // &を変換 $info = str_replace("&", "&", $info); //IE以外は改行文字をスペースに変換 if (!strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) { $info = str_replace(" ", " ", $info); } $ret .= "<a href=\"{$l_url}\" title=\"{$info}\">{$icon}{$title}</a>"; } } $rets['_body'] = $ret; return $rets; }
function plugin_ref_make_thumb($url, $s_file_base, $width, $height, $org_w, $org_h) { $s_file = MOD_PUKI_UPLOAD_DIR . $s_file_base; // GD fuction のチェック if (!function_exists("ImageCreate")) { return $url; } //GDをサポートしていない $gifread = ''; if (MOD_PUKI_REF_GD_VERSION == 2) { $imagecreate = "ImageCreateTrueColor"; $imageresize = "ImageCopyResampled"; } else { $imagecreate = "ImageCreate"; $imageresize = "ImageCopyResized"; } if (function_exists("ImageCreateFromGif")) { $gifread = "on"; } if (PukiWikiFunc::is_url($url)) { //URL $result = PukiWikiFunc::http_request($url); if ($result['rc'] !== 200) { return ''; } $orgimg = tempnam(MOD_PUKI_UPLOAD_DIR, 'mpw_thumb'); $fp = fopen($orgimg, 'w'); fwrite($fp, $result['data']); fclose($fp); $url = $orgimg; } $size = @GetImageSize($url); $dst_im = $imagecreate($width, $height); switch ($size[2]) { case "1": //gif形式 if ($gifread == "on") { $src_im = ImageCreateFromGif($url); $imageresize($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); touch($s_file); ImageJpeg($dst_im, $s_file); $url = MOD_PUKI_UPLOAD_URL . $s_file_base; } break; case "2": //jpg形式 $src_im = ImageCreateFromJpeg($url); $imageresize($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); touch($s_file); ImageJpeg($dst_im, $s_file); $url = MOD_PUKI_UPLOAD_URL . $s_file_base; break; case "3": //png形式 $src_im = ImageCreateFromPng($url); $imageresize($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); touch($s_file); ImageJpeg($dst_im, $s_file); $url = MOD_PUKI_UPLOAD_URL . $s_file_base; break; default: break; } if (!empty($orgimg)) { unlink($orgimg); } return $url; }
function plugin_isbn_cache_image_fetch($target, &$info, $check = true, $img_size = "M") { $filename = MOD_PUKI_UPLOAD_DIR . PukiWikiFunc::encode("ISBN" . $target . $img_size . ".jpg"); if (!is_readable($filename) || is_readable($filename) && $check && MOD_PUKI_ISBN_AMAZON_EXPIRE_IMG * 3600 * 24 < time() - filemtime($filename)) { $url = "http://images-jp.amazon.com/images/P/" . strtoupper($target) . ".09." . $img_size . "ZZZZZZZ.jpg"; if (!PukiWikiFunc::is_url($url)) { return false; } // URL 形式チェック $result = PukiWikiFunc::http_request($url); if ($result['rc'] !== 200) { $data = ''; $info[0] = 0; } else { $data = $result['data']; plugin_isbn_cache_image_save($data, $filename); $info = @getimagesize($filename); } if ($info[0] <= 1) { $url = "http://images-jp.amazon.com/images/P/" . strtoupper($target) . ".01." . $img_size . "ZZZZZZZ.jpg"; $result = PukiWikiFunc::http_request($url); if ($result['rc'] !== 200) { $data = ''; $info[0] = 0; } else { $data = $result['data']; plugin_isbn_cache_image_save($data, $filename); $info = @getimagesize($filename); } if ($info[0] <= 1) { $url = $noimage = $img_size == "M" ? MOD_PUKI_NOIMAGE : MOD_PUKI_NOIMAGE_S; $result = PukiWikiFunc::http_request($url); if ($result['rc'] === 200) { $data = $result['data']; plugin_isbn_cache_image_save($data, $filename); $info = @getimagesize($filename); } } } } else { $info = @getimagesize($filename); } return MOD_PUKI_UPLOAD_URL . PukiWikiFunc::encode("ISBN" . $target . $img_size . ".jpg"); }
function plugin_isbn_cache_image_fetch($target, $dir, $check = true, $img_size = "M") { $filename = MOD_PUKI_UPLOAD_DIR . PukiWikiFunc::encode("ISBN" . $target . $img_size . ".jpg"); if (!is_readable($filename) || is_readable($filename) && $check && MOD_PUKI_ISBN_AMAZON_EXPIRE_IMG * 3600 * 24 < time() - filemtime($filename)) { $url = "http://images-jp.amazon.com/images/P/" . strtoupper($target) . ".09." . $img_size . "ZZZZZZZ.jpg"; if (!PukiWikiFunc::is_url($url)) { return false; } // URL 形式チェック $size = @getimagesize($url); if ($size[0] <= 1) { $url = "http://images-jp.amazon.com/images/P/" . strtoupper($target) . ".01." . $img_size . "ZZZZZZZ.jpg"; $size = @getimagesize($url); if ($size[0] <= 1) { $url = $noimage = $img_size == "M" ? MOD_PUKI_NOIMAGE : MOD_PUKI_NOIMAGE_S; } } if ($url != $noimage) { $file = fopen($url, "rb"); // リモートファイルのパケット有効後対策 // http://search.net-newbie.com/php/function.fread.html $contents = ""; do { $data = fread($file, 8192); if (strlen($data) == 0) { break; } $contents .= $data; } while (true); fclose($file); $data = $contents; unset($contents); $url = $filename; } else { // キャッシュを NOIMAGE のコピーとする $file = fopen($url, "rb"); if (!$file) { return false; } $data = fread($file, 100000); fclose($file); } plugin_isbn_cache_image_save($data, $target . $img_size, MOD_PUKI_UPLOAD_DIR); return MOD_PUKI_UPLOAD_URL . PukiWikiFunc::encode("ISBN" . $target . $img_size . ".jpg"); } else { return MOD_PUKI_UPLOAD_URL . PukiWikiFunc::encode("ISBN" . $target . $img_size . ".jpg"); } }
function setParam($page, $name, $body, $type = '', $alias = '') { static $converter = NULL; $this->page = $page; $this->name = $name; $this->body = $body; $this->type = $type; if (PukiWikiFunc::is_url($alias) && preg_match('/\\.(gif|png|jpe?g)$/i', $alias)) { $alias = htmlspecialchars($alias); $alias = "<img src=\"{$alias}\" alt=\"{$name}\" />"; } else { if ($alias != '') { if ($converter === NULL) { $converter = new PukiWikiInlineConverter(array('plugin')); } $alias = PukiWikiConfig::applyRules($converter->convert($alias, $page)); $alias = preg_replace('#</?a[^>]*>#i', '', $alias); //BugTrack 669 } } $this->alias = $alias; return TRUE; }