** netdraw.inc.php [#h6da1008]
|RIGHT:100|LEFT:360|c
|~サマリ|お絵描き(ドロー)プログラムのプラグイン|
|~リビジョン|1.0|
|~対応バージョン|1.4.7|
|~投稿者|[[takashi yamanoue:http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue]]|
|~投稿日|&new{2009-04-11 (土) 08:29:37};|
文書と同様に、絵も共有したいと思うことがよくあります。pukiwiki では、ビットマップの画像を作成するペイントプログラムのプラグイン paint はあるのですが、線や多角形などの画素を配置して絵を作成するドロープログラムのプラグインは見当たりませんでした。そこで、dsr(または solar-cats)に備わっているドロープログラムをpukiwiki で利用できるようにしました。
** 詳細, ダウンロード方法, インストール方法, 利用方法, バグ情報など [#k66d8f7a]
- http://yama-linux.cc.kagoshima-u.ac.jp/netdraw をご覧ください。
** ライセンス [#dbf0df0f]
- 個人利用や教育利用の場合は自由にご利用ください。改造も自由です。再配布も自由です。
- 商用利用の場合は yamanoue at cc.kagoshima-u.ac.jp にご相談ください。
** 今後の予定(いつになるかわからないので、やりたい人がやってくれると嬉しいです) [#b466a7ef]
- dsr (solar-cats)のお絵描きプログラムの改善
-- undo は必須
-- グループ化も必須
-- 絵の間のリンク機能の有効化
--- http://yama-linux.cc.kagoshima-u.ac.jp/class/coins/fig/fig2.html では動いているのだが...(play をボタンクリックしてください)
-- dsr (solar-cats) の操作記録/再生機能の有効化
** コメント [#q22c0f55]
- Install のページにあるnetdraw のプラグインのソース、見ただけでもツッコミどころ満載なんですが。 --  &new{2009-04-11 (土) 19:58:08};
-- $source にページの内容を入れているが、その後で使っていない。
-- $width と$height に縦横のサイズを入れているのに、出力では$f_w と$f_h を使っている。(paint プラグインの途中の処理を消したので、食い違っているのだと・・・)
-- $numbers を頭で定義しているが、出力では$f_no を使っている。(これも、途中の処理を・・・)
-- $uri にサイトアドレスを入れているのに、出力では$script を使っている。(名称変更を反映してないだけかと・・・)
-- $f_page にページ名を入れているのに、出力では$r_refer を使っている。(名称変更を、以下略)
-- $f_digest を定義する部分が消えている。。(これも、途中の処理を・・・)
-- $_paint_messages をそのまま使っているが、global 宣言で呼び出していないので、大概のPHP環境はエラーになりそう。
- ツッコミ、どうもありがとうございます。paint.inc.php を書き変えさせてもらっているのですが、それがかなり残っていたようです。applet 側ではほとんど使っていないので、修正します。$script は使っていますが、これは gloval の値がそのまま使っている、ということになると思いますが、バグや脆弱性の温床になる場合があるでしょうか? --  &new{2009-04-11 (土) 20:15:07};
- あ、gloval 宣言してるのを見逃してました。ただ、[[dev:BugTrack2/213#hb0abc89]] で各ソースの修正が開始されてますので、後々のためにgloval の値ではなくget_script_uri() の値を使うことが推奨されてます。 --  &new{2009-04-11 (土) 21:02:28};
-- あと、おせっかいかもしれませんが、[[dev:BugTrack2/61/まだの物一覧#vd314968]] で調査中のpaint プラグインの著作クレジットを、併記しておいたほうがいいかもしれませんよ。($id に残っている残骸からすると、paint.inc.php Rev. 1.13 がベースで、PukiWiki Developers Team が直接変更をかけたのは2003年までみたいですけど) --  &new{2009-04-11 (土) 21:02:28};
- どうもありがとうございます。今、手元で以下のように修正しました。どうでしょうか? --  &new{2009-04-11 (土) 21:32:51};
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone
 //
 // netdraw.inc.php
 //         t.yamanoue, 2009
 //
 // Acknowledgement
 //   This plugin is based on the paint.inc.php
 //     Copyright (C) 2002-2005,2007 PukiWiki Developers Team
 //     Copyright (C) ? -2002        panda
 //
 /*
  * Usage
  *  #netdraw
  * パラメータ
 // 文字コード (EUC_JP, UTF-8, ...)
    例
    #netdraw(EUC_JP)
  */ 
 
 function plugin_netdraw_convert()
 { 
 
 	if (PKWK_READONLY) return ''; // Show nothing
 
 	//戻り値
 	$ret = '';
 
 	//引数
 	$args = func_get_args();
        $charset="UTF-8";
        if(count($args)==1){
            $charset= array_shift($args);
        }
 
        $uri=get_script_uri() ;
 
 	$ret = <<<EOD
  <div>
 <applet codebase="./dsr/classes" 
         code="application/draw/PukiwikiApplet.class"
         archive="lib/commons-codec-1.3.jar,lib/commons-httpclient-3.1.jar,lib/commons-logging-1.1.1.jar"
         width="100" height="100">
  <param name="action" value="$uri" />
  <param name="param1" value="plugin=netdraw" />
  <param name="return.URL" value="uri" />
  <param name="charset" value="$charset" />
 </applet>
   </div>
 EOD;
 	return $ret;
 }
 ?>
- ほぼ大丈夫そうですね。&br;欲を言えば、いたずら防止のために$charset をエスケープするか、入力値が不正でないか(スクリプトが受け付ける値なのか)をチェックするか、したほうが無難です。&br;もうひとつおせっかい、1.4.5以降で改造していなければ「テキストの文字コード = ブラウザで表示する文字コード」なので、CONTENT_CHARSET 定数を使えば初期値が自動化されて楽になるかもしれません。(EUC_JP だけじゃなくEUC-JP もスクリプトが受け付けてくれるならですけど) --  &new{2009-04-11 (土) 22:33:02};
- さっそくありがとうございます。引数のエスケープ、完全に忘れてました。大河原哲さんの “PukiWiki による Web コラボレーション”を見ながらプラグインを作成したのですが、CONTENT_CHARSET 定数を見つけきれませんでした。これがあれば利用者は余計な気遣いをしなくていいので、ぜひ使おうと思います。 --  &new{2009-04-11 (土) 23:20:14};
-- 上の修正を手元で行いました。だいぶ短くなりました。
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone
 //
 // netdraw.inc.php
 //         t.yamanoue, 2009
 //
 // Acknowledgement
 //   This plugin is based on the paint.inc.php
 //     Copyright (C) 2002-2005,2007 PukiWiki Developers Team
 //     Copyright (C) ? -2002        panda
 //
 /*
  * Usage
  *  #netdraw
  * パラメータ なし
  */
 
 function plugin_netdraw_convert()
 { 
 
 	if (PKWK_READONLY) return ''; // Show nothing
 
 	//戻り値
 	$ret = '';
 
        $charset=CONTENT_CHARSET;
        $uri=get_script_uri() ;
 
 	$ret = <<<EOD
  <div>
  <applet codebase="./dsr/classes" 
          code="application/draw/PukiwikiApplet.class"
          archive="lib/commons-codec-1.3.jar,lib/commons-httpclient-3.1.jar,lib/commons-logging-1.1.1.jar"
          width="100" height="100">
  <param name="action" value="$uri" />
  <param name="param1" value="plugin=netdraw" />
  <param name="charset" value="$charset" />
  </applet>
  </div>
 EOD;
 	return $ret;
 }
 ?>
- CONTENT_CHARSET 定数は、PukiWiki 1.4.5 以降ならlib/init.php で定義されています。普通なら、スキンとかでしか使わないですけど。(関連情報: [[dev:開発日記/2004-09-19]])&br;ツギハギな構成ですが、プラグインを作成するための情報が[[dev:プラグイン/開発者向け]] やそのリンク先にあります。もしかしたら、何かの役に立つ日が来るかもしれません。 --  &new{2009-04-11 (土) 23:52:19};
- どうもありがとうございます。将来役に立つと思います。 --  &new{2009-04-11 (土) 23:56:27};
- 上記の修正を、http://yama-linux.cc.kagoshima-u.ac.jp/netdraw でも行いました。 --  &new{2009-04-13 (月) 08:08:14};
- </applet> が消えてしまっているので、プラグインを呼び出した以降の文章が(編集のプレビュー時は、編集領域なども)表示されない場合があるようです。勝手ながら、上の修正には閉じタグを書き込んでおきました。&br;あと素朴な疑問なのですが、1つのページ中で複数回プラグインを呼び出した場合、プラグインを書き込んだ数だけウインドが表示されますが、競合などの問題はないのでしょうか?(リミッターを仕込んでいないので、こうなるのだと思いますが・・・) --  &new{2009-04-13 (月) 13:41:53};
- 閉じタグ、ありがとうございます。閉じタグを付けなくても applet は起動されて、ついでに、絵を表わす文字列が隠れて見えないので良いかなと思いましたが、文法的には間違いですね。競合についてはまだ何も考えていませんでした。考えてみます。この点についてみなさまのアドバイスをいただけると幸いです。 --  &new{2009-04-13 (月) 15:09:26};
- 「[[rewritemap.inc.php>自作プラグイン/rewritemap.inc.php]]」を入れたPukiWikiだと「netdraw.inc.php」で絵が保存できなのですが、どうしたら良いでしょう?お知恵を拝借出来ればと思います。PukiWikiのバージョンは「pukiwiki-1.4.7_notb_utf8」で[[rewritemap.inc.php導入済み>http://wiki.revulo.com/pukiwiki/patch/rewritemap#za845215]]の物を使わせてもらってます。~
例えば、~
 http://sample.domain/pukiwiki/
というPukiWikiに「testdraw」というページを作成し、そこに「#netdraw」と記述します。ページの作成が完了すると「お絵描きプログラム」が起動するので、そこに何かしら描画し「save」ボタンを押します。
本来であれば、これで描いた絵が「絵を表わす関数」としてページに保存されるのですが、「rewritemap.inc.php」でページURLを「 index.php?testdraw から testdraw.html 」に変更しているのでNetDrawのアプレットが編集ページを開けない様で書いた絵が保存されません。
 http://sample.domain/pukiwiki/index.php?cmd=edit&page=testdraw
にNetDrawのアプレットはアクセスしたいのでしょうが、
 http://sample.domain/pukiwiki/testdraw.html?cmd=edit&page=null
と、アクセスしてしまっているようです。これを普通にeditコマンドを呼びだす形、
 http://sample.domain/pukiwiki/?cmd=edit&page=testdraw 
にするにはどう様にしたら良いでしょう?-- [[けんじ]] &new{2010-07-13 (火) 13:37:58};
- 大変申し訳ありません。今、けんじさんのコメントを見ました。調べてみます。 -- [[takashi yamanoue]] &new{2011-07-07 (木) 15:40:16};
- ありがとうございます、よろしくお願いします。 -- [[けんじ]] &new{2011-09-13 (火) 18:49:34};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.072 sec.

OSDN