OSDN Git Service

PukiWiki/1.4 first beta release
[pukiwiki/pukiwiki.git] / plugin / paint.inc.php
1 <?php
2 /*
3 Last-Update:2002-10-30 rev.20
4
5 *¥×¥é¥°¥¤¥ó paint
6 ³¨¤òÉÁ¤¯
7
8 *Usage
9  #paint(width,height)
10
11 *¥Ñ¥é¥á¡¼¥¿
12 -width,height~
13  ¥­¥ã¥ó¥Ð¥¹¤ÎÉý¤È¹â¤µ
14
15 */
16
17 // upload dir(must set end of /) attach.inc.php¤È¹ç¤ï¤»¤ë
18 define('PAINT_UPLOAD_DIR','./attach/');
19 //
20 // ÁÞÆþ¤¹¤ë°ÌÃÖ 1:Íó¤ÎÁ° 0:Íó¤Î¸å
21 define('PAINT_INSERT_INS',0);
22 //
23 // ¥Ç¥Õ¥©¥ë¥È¤ÎÉÁ²èÎΰè¤ÎÉý¤È¹â¤µ
24 define('PAINT_DEFAULT_WIDTH',80);
25 define('PAINT_DEFAULT_HEIGHT',60);
26 //
27 // ÉÁ²èÎΰè¤ÎÉý¤È¹â¤µ¤ÎÀ©¸ÂÃÍ
28 define('PAINT_MAX_WIDTH',320);
29 define('PAINT_MAX_HEIGHT',240);
30 //
31 // ¥¢¥×¥ì¥Ã¥ÈÎΰè¤ÎÉý¤È¹â¤µ 50x50̤Ëþ¤ÇÊÌ¥¦¥¤¥ó¥É¥¦¤¬³«¤¯
32 define('PAINT_APPLET_WIDTH',800);
33 define('PAINT_APPLET_HEIGHT',300);
34 //
35 //¥³¥á¥ó¥È¤ÎÁÞÆþ¥Õ¥©¡¼¥Þ¥Ã¥È
36 define('PAINT_FORMAT_NAME','[[%s]]');
37 define('PAINT_FORMAT_MSG','%s');
38 define('PAINT_FORMAT_DATE','SIZE(10){%s}');
39 //¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ë¾ì¹ç
40 define('PAINT_FORMAT',"\x08MSG\x08 -- \x08NAME\x08 \x08DATE\x08");
41 //¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¾ì¹ç
42 define('PAINT_FORMAT_NOMSG',"\x08NAME\x08 \x08DATE\x08"); 
43
44 function plugin_paint_init()
45 {
46         $messages = array('_paint_messages'=>array(
47                 'field_name'    => '¤ªÌ¾Á°',
48                 'field_filename'=> '¥Õ¥¡¥¤¥ë̾',
49                 'field_comment' => '¥³¥á¥ó¥È',
50                 'btn_submit'    => 'paint',
51                 'msg_max'       => '(ºÇÂç %d x %d)',
52                 'msg_title'     => 'Paint and Attach to $1',
53                 'msg_title_collided' => '$1 ¤Ç¡Ú¹¹¿·¤Î¾×ÆÍ¡Û¤¬µ¯¤­¤Þ¤·¤¿',
54                 'msg_collided'  => '¤¢¤Ê¤¿¤¬²èÁü¤òÊÔ½¸¤·¤Æ¤¤¤ë´Ö¤Ë¡¢Â¾¤Î¿Í¤¬Æ±¤¸¥Ú¡¼¥¸¤ò¹¹¿·¤·¤Æ¤·¤Þ¤Ã¤¿¤è¤¦¤Ç¤¹¡£<br />
55 ²èÁü¤È¥³¥á¥ó¥È¤òÄɲä·¤Þ¤·¤¿¤¬¡¢°ã¤¦°ÌÃÖ¤ËÁÞÆþ¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£<br />',
56         ));
57   set_plugin_messages($messages);
58 }
59 function plugin_paint_action()
60 {
61         global $script,$vars,$HTTP_POST_FILES;
62         global $_paint_messages;
63         global $html_transitional;
64         
65         //Ìá¤êÃͤò½é´ü²½
66         $retval['msg'] = $_paint_messages['msg_title'];
67         $retval['body'] = '';
68         
69         if (array_key_exists('attach_file',$HTTP_POST_FILES) and is_uploaded_file($HTTP_POST_FILES['attach_file']['tmp_name'])) {
70                 //BBSPaiter.jar¤Ï¡¢shift-jis¤ÇÆâÍƤòÁ÷¤Ã¤Æ¤¯¤ë¡£ÌÌÅݤʤΤǥڡ¼¥¸Ì¾¤Ï¥¨¥ó¥³¡¼¥É¤·¤Æ¤«¤éÁ÷¿®¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£
71                 $vars['page'] = $vars['refer'] = decode($vars['refer']);
72                 
73                 $filename = $vars['filename'];
74                 if (function_exists('mb_convert_encoding'))
75                         $filename = mb_convert_encoding($filename,ENCODING,'auto');
76                 
77                 //¥Õ¥¡¥¤¥ë̾ÃÖ´¹
78                 $attachname = preg_replace('/^[^\.]+/', $filename, $HTTP_POST_FILES['attach_file']['name']);
79                 //¤¹¤Ç¤Ë¸ºß¤·¤¿¾ì¹ç¡¢ ¥Õ¥¡¥¤¥ë̾¤Ë'_0','_1',...¤òÉÕ¤±¤Æ²óÈò(¸È©)
80                 $count = '_0';
81                 while (file_exists(PAINT_UPLOAD_DIR.encode($vars['refer']).'_'.encode($attachname))) {
82                         $attachname = preg_replace('/^[^\.]+/', $filename.$count++, $HTTP_POST_FILES['attach_file']['name']);
83                 }
84                 
85                 $HTTP_POST_FILES['attach_file']['name'] = $attachname;
86                 
87                 $retval = do_plugin_action('attach');
88                 $retval = insert_ref($HTTP_POST_FILES['attach_file']['name']);
89         }
90         else {
91                 $message = '';
92                 if (!function_exists('mb_convert_encoding')) {
93                         $message = 'cannot use KANJI in filename.';
94                 }
95                 
96                 $r_refer = $s_refer = '';
97                 if (array_key_exists('refer',$vars)) {
98                         $r_refer = rawurlencode($vars['refer']);
99                         $s_refer = htmlspecialchars($vars['refer']);
100                 }
101                 $link = "<p><a href=\"$script?$r_refer\">$s_refer</a></p>";;
102                 
103                 $w = PAINT_APPLET_WIDTH;
104                 $h = PAINT_APPLET_HEIGHT;
105                 
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;
115                 
116                 if ($f_w > PAINT_MAX_WIDTH) {
117                         $f_w = PAINT_MAX_WIDTH;
118                 }
119                 if ($f_h > PAINT_MAX_HEIGHT) {
120                         $f_h = PAINT_MAX_HEIGHT;
121                 }
122                 
123                 $retval['body'] = <<<EOD
124  <div>
125  $link
126  $message
127  <applet codebase="." archive="BBSPainter.jar" code="Main.class" width="$w" height="$h">
128  <param name="size" value="$f_w,$f_h" />
129  <param name="action" value="$script" />
130  <param name="image" value="attach_file" />
131  <param name="form1" value="filename={$_paint_messages['field_filename']}=!" />
132  <param name="form2" value="yourname={$_paint_messages['field_name']}" />
133  <param name="comment" value="msg={$_paint_messages['field_comment']}" />
134  <param name="param1" value="plugin=paint" />
135  <param name="param2" value="refer=$f_refer" />
136  <param name="param3" value="digest=$f_digest" />
137  <param name="param4" value="max_file_size=1000000" />
138  <param name="param5" value="paint_no=$f_no" />
139  <param name="enctype" value="multipart/form-data" />
140  <param name="return.URL" value="$script?$r_refer" />
141  </applet>
142  </div>
143 EOD;
144                 $html_transitional = TRUE;
145         }
146         return $retval;
147 }
148 function plugin_paint_convert()
149 {
150         global $script,$vars,$digest;
151         global $_paint_messages;
152         static $paint_no = 0;
153         
154         //Ìá¤êÃÍ
155         $ret = '';
156         
157         $paint_no++;
158         
159         //ʸ»úÎó¤ò¼èÆÀ
160         $width = $height = 0;
161         $args = func_get_args();
162         if (count($args) >= 2) {
163                 $width = array_shift($args);
164                 $height = array_shift($args);
165         }
166         if (!is_numeric($width) or $width <= 0) {
167                 $width = PAINT_DEFAULT_WIDTH;
168         }
169         if (!is_numeric($height) or $height <= 0) {
170                 $height = PAINT_DEFAULT_HEIGHT;
171         }
172         
173         //XSSÀȼåÀ­ÌäÂê - ³°Éô¤«¤éÍ褿ÊÑ¿ô¤ò¥¨¥¹¥±¡¼¥×
174         $f_page = htmlspecialchars($vars['page']);
175         
176         $max = sprintf($_paint_messages['msg_max'],PAINT_MAX_WIDTH,PAINT_MAX_HEIGHT);
177         
178         $ret = <<<EOD
179   <form action="$script" method="post">
180   <div>
181   <input type="hidden" name="paint_no" value="$paint_no" />
182   <input type="hidden" name="digest" value="$digest" />
183   <input type="hidden" name="plugin" value="paint" />
184   <input type="hidden" name="refer" value="$f_page" />
185   <input type="text" name="width" size="3" value="$width" accesskey="w" />
186   x
187   <input type="text" name="height" size="3" value="$height" accesskey="h" />
188   $max
189   <input type="submit" value="{$_paint_messages['btn_submit']}" />
190   </div>
191   </form>
192 EOD;
193         return $ret;
194 }
195 function insert_ref($filename)
196 {
197         global $script,$vars,$now,$do_backup;
198         global $_paint_messages;
199         
200         $ret['msg'] = $_paint_messages['msg_title'];
201         
202         $msg = sprintf(PAINT_FORMAT_MSG, rtrim($vars['msg']));
203         
204         if ($vars['yourname'] != '') {
205                 $name = sprintf(PAINT_FORMAT_NAME, $vars['yourname']);
206         }
207         $date = sprintf(PAINT_FORMAT_DATE, $now);
208         
209         if (function_exists('mb_convert_encoding')) {
210                 $msg = mb_convert_encoding($msg, ENCODING, 'auto');
211                 $name = mb_convert_encoding($name, ENCODING, 'auto');
212         }
213         
214         $msg = trim($msg);
215         $msg = ($msg == '') ?
216                 PAINT_FORMAT_NOMSG :
217                 str_replace("\x08MSG\x08", $msg, PAINT_FORMAT);
218         $msg = str_replace("\x08NAME\x08",$name, $msg);
219         $msg = str_replace("\x08DATE\x08",$date, $msg);
220         //¥Ö¥í¥Ã¥¯¤Ë¿©¤ï¤ì¤Ê¤¤¤è¤¦¤Ë¡¢#img¤ÎľÁ°¤Ë\n¤ò2¸Ä½ñ¤¤¤Æ¤ª¤¯¡£
221         $msg = "#ref($filename,wrap,around)\n".trim($msg)."\n\n#img(,clear)\n";
222         
223         $postdata_old = get_source($vars['refer']);
224         $postdata = '';
225         $paint_no = 0; //'#paint'¤Î½Ð¸½²ó¿ô
226         foreach ($postdata_old as $line)
227         {
228                 if (!PAINT_INSERT_INS) {
229                         $postdata .= $line;
230                 }
231                 if (preg_match('/^#paint/',$line) and (++$paint_no == $vars['paint_no'])) {
232                                 $postdata .= $msg;
233                 }
234                 if (PAINT_INSERT_INS) {
235                         $postdata .= $line;
236                 }
237         }
238         
239         // ¹¹¿·¤Î¾×Æͤò¸¡½Ð
240         if (md5(join('',$postdata_old)) != $vars['digest']) {
241                 $ret['msg'] = $_paint_messages['msg_title_collided'];
242                 $ret['body'] = $_paint_messages['msg_collided'];
243         }
244         
245         page_write($vars['refer'],$postdata);
246         
247         return $ret;
248 }
249 ?>