2 // PukiWiki - Yet another WikiWikiWeb clone
4 // $Id: paint.inc.php,v 1.18 2005/01/29 02:49:41 henoheno Exp $
10 * #paint(width,height)
12 * ¥¥ã¥ó¥Ð¥¹¤ÎÉý¤È¹â¤µ
15 // ÁÞÆþ¤¹¤ë°ÌÃÖ 1:Íó¤ÎÁ° 0:Íó¤Î¸å
16 define('PAINT_INSERT_INS',0);
18 // ¥Ç¥Õ¥©¥ë¥È¤ÎÉÁ²èÎΰè¤ÎÉý¤È¹â¤µ
19 define('PAINT_DEFAULT_WIDTH',80);
20 define('PAINT_DEFAULT_HEIGHT',60);
22 // ÉÁ²èÎΰè¤ÎÉý¤È¹â¤µ¤ÎÀ©¸ÂÃÍ
23 define('PAINT_MAX_WIDTH',320);
24 define('PAINT_MAX_HEIGHT',240);
26 // ¥¢¥×¥ì¥Ã¥ÈÎΰè¤ÎÉý¤È¹â¤µ 50x50̤Ëþ¤ÇÊÌ¥¦¥¤¥ó¥É¥¦¤¬³«¤¯
27 define('PAINT_APPLET_WIDTH',800);
28 define('PAINT_APPLET_HEIGHT',300);
30 //¥³¥á¥ó¥È¤ÎÁÞÆþ¥Õ¥©¡¼¥Þ¥Ã¥È
31 define('PAINT_NAME_FORMAT','[[$name]]');
32 define('PAINT_MSG_FORMAT','$msg');
33 define('PAINT_NOW_FORMAT','&new{$now};');
34 //¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ë¾ì¹ç
35 define('PAINT_FORMAT',"\x08MSG\x08 -- \x08NAME\x08 \x08NOW\x08");
36 //¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¾ì¹ç
37 define('PAINT_FORMAT_NOMSG',"\x08NAME\x08 \x08NOW\x08");
39 function plugin_paint_action()
41 global $script, $vars, $pkwk_dtd, $_paint_messages;
43 if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
46 $retval['msg'] = $_paint_messages['msg_title'];
49 if (array_key_exists('attach_file',$_FILES)
50 and array_key_exists('refer',$vars))
52 $file = $_FILES['attach_file'];
53 //BBSPaiter.jar¤Ï¡¢shift-jis¤ÇÆâÍƤòÁ÷¤Ã¤Æ¤¯¤ë¡£ÌÌÅݤʤΤǥڡ¼¥¸Ì¾¤Ï¥¨¥ó¥³¡¼¥É¤·¤Æ¤«¤éÁ÷¿®¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£
54 $vars['page'] = $vars['refer'] = decode($vars['refer']);
56 $filename = $vars['filename'];
57 $filename = mb_convert_encoding($filename,SOURCE_ENCODING,'auto');
60 $attachname = preg_replace('/^[^\.]+/',$filename,$file['name']);
61 //¤¹¤Ç¤Ë¸ºß¤·¤¿¾ì¹ç¡¢ ¥Õ¥¡¥¤¥ë̾¤Ë'_0','_1',...¤òÉÕ¤±¤Æ²óÈò(¸È©)
63 while (file_exists(UPLOAD_DIR.encode($vars['refer']).'_'.encode($attachname)))
65 $attachname = preg_replace('/^[^\.]+/',$filename.$count++,$file['name']);
68 $file['name'] = $attachname;
70 if (!exist_plugin('attach') or !function_exists('attach_upload'))
72 return array('msg'=>'attach.inc.php not found or not correct version.');
75 $retval = attach_upload($file,$vars['refer'],TRUE);
76 if ($retval['result'] == TRUE)
78 $retval = paint_insert_ref($file['name']);
84 $r_refer = $s_refer = '';
85 if (array_key_exists('refer',$vars))
87 $r_refer = rawurlencode($vars['refer']);
88 $s_refer = htmlspecialchars($vars['refer']);
90 $link = "<p><a href=\"$script?$r_refer\">$s_refer</a></p>";;
92 $w = PAINT_APPLET_WIDTH;
93 $h = PAINT_APPLET_HEIGHT;
96 if ($w < 50 and $h < 50)
100 $vars['page'] = $vars['refer'];
101 $vars['cmd'] = 'read';
102 $retval['body'] = convert_html(get_source($vars['refer']));
106 //XSSÀȼåÀÌäÂê - ³°Éô¤«¤éÍ褿ÊÑ¿ô¤ò¥¨¥¹¥±¡¼¥×
107 $width = empty($vars['width']) ? PAINT_DEFAULT_WIDTH : $vars['width'];
108 $height = empty($vars['height']) ? PAINT_DEFAULT_HEIGHT : $vars['height'];
109 $f_w = (is_numeric($width) and $width > 0) ? $width : PAINT_DEFAULT_WIDTH;
110 $f_h = (is_numeric($height) and $height > 0) ? $height : PAINT_DEFAULT_HEIGHT;
111 $f_refer = array_key_exists('refer',$vars) ? encode($vars['refer']) : ''; // BBSPainter.jar¤¬shift-jis¤ËÊÑ´¹¤¹¤ë¤Î¤ò²óÈò
112 $f_digest = array_key_exists('digest',$vars) ? htmlspecialchars($vars['digest']) : '';
113 $f_no = (array_key_exists('paint_no',$vars) and is_numeric($vars['paint_no'])) ?
114 $vars['paint_no'] + 0 : 0;
116 if ($f_w > PAINT_MAX_WIDTH)
118 $f_w = PAINT_MAX_WIDTH;
120 if ($f_h > PAINT_MAX_HEIGHT)
122 $f_h = PAINT_MAX_HEIGHT;
125 $retval['body'] .= <<<EOD
129 <applet codebase="." archive="BBSPainter.jar" code="Main.class" width="$w" height="$h">
130 <param name="size" value="$f_w,$f_h" />
131 <param name="action" value="$script" />
132 <param name="image" value="attach_file" />
133 <param name="form1" value="filename={$_paint_messages['field_filename']}=!" />
134 <param name="form2" value="yourname={$_paint_messages['field_name']}" />
135 <param name="comment" value="msg={$_paint_messages['field_comment']}" />
136 <param name="param1" value="plugin=paint" />
137 <param name="param2" value="refer=$f_refer" />
138 <param name="param3" value="digest=$f_digest" />
139 <param name="param4" value="max_file_size=1000000" />
140 <param name="param5" value="paint_no=$f_no" />
141 <param name="enctype" value="multipart/form-data" />
142 <param name="return.URL" value="$script?$r_refer" />
146 // XHTML 1.0 Transitional
147 if (! isset($pkwk_dtd) || $pkwk_dtd == PKWK_DTD_XHTML_1_1)
148 $pkwk_dtd = PKWK_DTD_XHTML_1_0_TRANSITIONAL;
153 function plugin_paint_convert()
155 global $script,$vars,$digest;
156 global $_paint_messages;
157 static $numbers = array();
159 if (PKWK_READONLY) return ''; // Show nothing
161 if (!array_key_exists($vars['page'],$numbers))
163 $numbers[$vars['page']] = 0;
165 $paint_no = $numbers[$vars['page']]++;
171 $width = $height = 0;
172 $args = func_get_args();
173 if (count($args) >= 2)
175 $width = array_shift($args);
176 $height = array_shift($args);
178 if (!is_numeric($width) or $width <= 0)
180 $width = PAINT_DEFAULT_WIDTH;
182 if (!is_numeric($height) or $height <= 0)
184 $height = PAINT_DEFAULT_HEIGHT;
187 //XSSÀȼåÀÌäÂê - ³°Éô¤«¤éÍ褿ÊÑ¿ô¤ò¥¨¥¹¥±¡¼¥×
188 $f_page = htmlspecialchars($vars['page']);
190 $max = sprintf($_paint_messages['msg_max'],PAINT_MAX_WIDTH,PAINT_MAX_HEIGHT);
193 <form action="$script" method="post">
195 <input type="hidden" name="paint_no" value="$paint_no" />
196 <input type="hidden" name="digest" value="$digest" />
197 <input type="hidden" name="plugin" value="paint" />
198 <input type="hidden" name="refer" value="$f_page" />
199 <input type="text" name="width" size="3" value="$width" />
201 <input type="text" name="height" size="3" value="$height" />
203 <input type="submit" value="{$_paint_messages['btn_submit']}" />
209 function paint_insert_ref($filename)
211 global $script,$vars,$now,$do_backup;
212 global $_paint_messages,$_no_name;
214 $ret['msg'] = $_paint_messages['msg_title'];
216 $msg = mb_convert_encoding(rtrim($vars['msg']),SOURCE_ENCODING,'auto');
217 $name = mb_convert_encoding($vars['yourname'],SOURCE_ENCODING,'auto');
219 $msg = str_replace('$msg',$msg,PAINT_MSG_FORMAT);
220 $name = ($name == '') ? $_no_name : $vars['yourname'];
221 $name = ($name == '') ? '' : str_replace('$name',$name,PAINT_NAME_FORMAT);
222 $now = str_replace('$now',$now,PAINT_NOW_FORMAT);
225 $msg = ($msg == '') ?
227 str_replace("\x08MSG\x08", $msg, PAINT_FORMAT);
228 $msg = str_replace("\x08NAME\x08",$name, $msg);
229 $msg = str_replace("\x08NOW\x08",$now, $msg);
231 //¥Ö¥í¥Ã¥¯¤Ë¿©¤ï¤ì¤Ê¤¤¤è¤¦¤Ë¡¢#clear¤ÎľÁ°¤Ë\n¤ò2¸Ä½ñ¤¤¤Æ¤ª¤¯
232 $msg = "#ref($filename,wrap,around)\n" . trim($msg) . "\n\n" .
235 $postdata_old = get_source($vars['refer']);
237 $paint_no = 0; //'#paint'¤Î½Ð¸½²ó¿ô
238 foreach ($postdata_old as $line)
240 if (!PAINT_INSERT_INS)
244 if (preg_match('/^#paint/i',$line))
246 if ($paint_no == $vars['paint_no'])
252 if (PAINT_INSERT_INS)
259 if (md5(join('',$postdata_old)) != $vars['digest'])
261 $ret['msg'] = $_paint_messages['msg_title_collided'];
262 $ret['body'] = $_paint_messages['msg_collided'];
265 page_write($vars['refer'],$postdata);