OSDN Git Service

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