netdraw.inc.php

サマリお絵描き(ドロー)プログラムのプラグイン
リビジョン1.0
対応バージョン1.4.7
投稿者takashi yamanoue
投稿日2009-04-11 (土) 08:29:37

文書と同様に、絵も共有したいと思うことがよくあります。pukiwiki では、ビットマップの画像を作成するペイントプログラムのプラグイン paint はあるのですが、線や多角形などの画素を配置して絵を作成するドロープログラムのプラグインは見当たりませんでした。そこで、dsr(または solar-cats)に備わっているドロープログラムをpukiwiki で利用できるようにしました。

詳細, ダウンロード方法, インストール方法, 利用方法, バグ情報など

ライセンス

  • 個人利用や教育利用の場合は自由にご利用ください。改造も自由です。再配布も自由です。
  • 商用利用の場合は yamanoue at cc.kagoshima-u.ac.jp にご相談ください。

今後の予定(いつになるかわからないので、やりたい人がやってくれると嬉しいです)

  • dsr (solar-cats)のお絵描きプログラムの改善

コメント

  • Install のページにあるnetdraw のプラグインのソース、見ただけでもツッコミどころ満載なんですが。 -- 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 の値がそのまま使っている、ということになると思いますが、バグや脆弱性の温床になる場合があるでしょうか? -- 2009-04-11 (土) 20:15:07
  • あ、gloval 宣言してるのを見逃してました。ただ、dev:BugTrack2/213 で各ソースの修正が開始されてますので、後々のためにgloval の値ではなくget_script_uri() の値を使うことが推奨されてます。 -- 2009-04-11 (土) 21:02:28
    • あと、おせっかいかもしれませんが、dev:BugTrack2/61/まだの物一覧 で調査中のpaint プラグインの著作クレジットを、併記しておいたほうがいいかもしれませんよ。($id に残っている残骸からすると、paint.inc.php Rev. 1.13 がベースで、PukiWiki Developers Team が直接変更をかけたのは2003年までみたいですけど) -- 2009-04-11 (土) 21:02:28
  • どうもありがとうございます。今、手元で以下のように修正しました。どうでしょうか? -- 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;
    }
    ?>
  • ほぼ大丈夫そうですね。
    欲を言えば、いたずら防止のために$charset をエスケープするか、入力値が不正でないか(スクリプトが受け付ける値なのか)をチェックするか、したほうが無難です。
    もうひとつおせっかい、1.4.5以降で改造していなければ「テキストの文字コード = ブラウザで表示する文字コード」なので、CONTENT_CHARSET 定数を使えば初期値が自動化されて楽になるかもしれません。(EUC_JP だけじゃなくEUC-JP もスクリプトが受け付けてくれるならですけど) -- 2009-04-11 (土) 22:33:02
  • さっそくありがとうございます。引数のエスケープ、完全に忘れてました。大河原哲さんの “PukiWiki による Web コラボレーション”を見ながらプラグインを作成したのですが、CONTENT_CHARSET 定数を見つけきれませんでした。これがあれば利用者は余計な気遣いをしなくていいので、ぜひ使おうと思います。 -- 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
    ツギハギな構成ですが、プラグインを作成するための情報がdev:プラグイン/開発者向け やそのリンク先にあります。もしかしたら、何かの役に立つ日が来るかもしれません。 -- 2009-04-11 (土) 23:52:19
  • どうもありがとうございます。将来役に立つと思います。 -- 2009-04-11 (土) 23:56:27
  • 上記の修正を、http://yama-linux.cc.kagoshima-u.ac.jp/netdraw でも行いました。 -- 2009-04-13 (月) 08:08:14
  • </applet> が消えてしまっているので、プラグインを呼び出した以降の文章が(編集のプレビュー時は、編集領域なども)表示されない場合があるようです。勝手ながら、上の修正には閉じタグを書き込んでおきました。
    あと素朴な疑問なのですが、1つのページ中で複数回プラグインを呼び出した場合、プラグインを書き込んだ数だけウインドが表示されますが、競合などの問題はないのでしょうか?(リミッターを仕込んでいないので、こうなるのだと思いますが・・・) -- 2009-04-13 (月) 13:41:53
  • 閉じタグ、ありがとうございます。閉じタグを付けなくても applet は起動されて、ついでに、絵を表わす文字列が隠れて見えないので良いかなと思いましたが、文法的には間違いですね。競合についてはまだ何も考えていませんでした。考えてみます。この点についてみなさまのアドバイスをいただけると幸いです。 -- 2009-04-13 (月) 15:09:26
  • rewritemap.inc.php」を入れたPukiWikiだと「netdraw.inc.php」で絵が保存できなのですが、どうしたら良いでしょう?お知恵を拝借出来ればと思います。PukiWikiのバージョンは「pukiwiki-1.4.7_notb_utf8」でrewritemap.inc.php導入済みの物を使わせてもらってます。
    例えば、
    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 
    にするにはどう様にしたら良いでしょう?-- けんじ? 2010-07-13 (火) 13:37:58
  • 大変申し訳ありません。今、けんじさんのコメントを見ました。調べてみます。 -- takashi yamanoue? 2011-07-07 (木) 15:40:16
  • ありがとうございます、よろしくお願いします。 -- けんじ? 2011-09-13 (火) 18:49:34
  • QADgiTDcYDBPLiKoUPk -- Xhgjphiw? 2014-01-30 (木) 00:51:22
  • IUrUjWkqptNQCMavgmo -- Magjqapq? 2014-01-30 (木) 07:46:34
  • sodszEIck -- oxyajl? 2014-01-31 (金) 06:13:47
  • ZWzPsapfyq -- rapwcicezw? 2014-01-31 (金) 07:15:45


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-01-31 (金) 07:15:45
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.237 sec.

OSDN