OSDN Git Service

[[pukiwiki:BugTrack/2]] 各プラグインに$Id$を追加
[pukiwiki/pukiwiki.git] / plugin / attach.inc.php
1 <?
2 // ¥×¥é¥°¥¤¥ó attach
3
4 // changed by Y.MASUI <masui@hisec.co.jp> http://masui.net/pukiwiki/
5 // $Id: attach.inc.php,v 1.4 2002/06/26 06:23:57 masui Exp $
6
7 // set PHP value to enable file upload
8 ini_set("file_uploads","1");
9
10 // upload dir(must set end of /)
11 define("UPLOAD_DIR","./attach/");
12
13 // max file size for upload on PHP(PHP default 2MB)
14 ini_set("upload_max_filesize","2M");
15
16 // max file size for upload on script of PukiWiki(default 1MB)
17 define("MAX_FILESIZE",1000000);
18
19 // file icon image
20 define("FILE_ICON","<img src=\"./image/file.gif\" width=\"20\" height=\"20\" border=\"0\">");
21
22 function plugin_attach_convert()
23 {
24         global $script,$vars,$max_size;
25         global $_msg_attach_filelist,$_msg_maxsize,$_msg_delete,$_btn_upload,$_btn_delete,$_msg_attachfile;
26         
27         $ret = "";
28         $decoded_pgname = encode($vars["page"]);
29         
30         $icon = FILE_ICON;
31         
32         if ($dir = @opendir(UPLOAD_DIR))
33         {
34                 while($file = readdir($dir))
35                 {
36                         if($file == ".." || $file == ".") continue;
37                         if(!preg_match("/^${decoded_pgname}_([^.]+)$/",$file,$match)) continue;
38                         
39                         $lastmod = date("Y/m/d H:i:s",filemtime(UPLOAD_DIR.$file));
40                         
41                         settype($dfile_size,"double");
42                         $dfile_size = round(filesize(UPLOAD_DIR.$file)/1000,1);
43                         if($dfile_size == 0) $dfile_size = 0.1;
44                         $file_size = sprintf("%01.1f",$dfile_size)."KB";
45                         
46                         $filename = decode($match[1]);
47                         $filename_url = rawurlencode($filename);
48                         $refername_url = rawurlencode($vars[page]);
49                         
50                         $counter = '';
51                         if(file_exists(UPLOAD_DIR.$file.'.log')) {
52                                 $list = file(UPLOAD_DIR.$file.'.log');
53                                 
54                                 $counter = ' <small>' . chop($list[0]) . '·ï</small>';
55                         }
56                         
57                         $del = "[<a href=\"$script?plugin=attach&amp;mode=confirm&amp;delfile=${filename_url}&amp;refer=${refername_url}\" title=\"".str_replace('$1',$filename,$_msg_delete)."\">$_btn_delete</a>]";
58                         $open = "<a href=\"$script?plugin=attach&amp;openfile=${filename_url}&amp;refer=${refername_url}\" title=\"$lastmod $file_size\">$icon$filename</a>$counter\n";
59                         
60                         $into = "$open <small>$del</small>";
61                         
62                         $attach_files[$lastmod] = $into;
63                 }
64                 closedir($dir);
65                 @krsort($attach_files);
66         }
67         
68         $max_size = number_format(MAX_FILESIZE/1000);
69         $max_size.= "KB";
70         
71         $args = func_get_args();
72         
73         if(is_array($attach_files))
74         {
75                 if($args[0]===FALSE) $ret.= "$_msg_attachfile: ";
76                 $ret.= join("\n&nbsp;&nbsp;",$attach_files)."\n";
77         }
78         
79         if($args[0]!==FALSE)
80         {
81                 $ret.= "<p>\n";
82                 
83                 $ret.= "<form enctype=\"multipart/form-data\" action=\"$script\" method=\"post\">\n";
84                 $ret.= "<input type=\"hidden\" name=\"plugin\" value=\"attach\">\n";
85                 $ret.= "<input type=\"hidden\" name=\"refer\" value=\"$vars[page]\">\n";
86                 $ret.= "<input type=\"hidden\" name=\"max_file_size\" value=\"".MAX_FILESIZE."\">\n";
87                 $ret.= "<small>[<a href=\"$script?plugin=attach&amp;pcmd=list\">$_msg_attach_filelist</a>]</small><br>\n";
88                 $ret.= "<small>".str_replace('$1',$max_size,$_msg_maxsize)."</small><br>\n";
89                 $ret.= "$_msg_attachfile: <input type=\"file\" name=\"attach_file\">\n";
90                 $ret.= "<input type=\"submit\" value=\"$_btn_upload\"><br>\n";
91                 $ret.= "</form>\n";
92         }
93         
94         return $ret;
95 }
96 function plugin_attach_action()
97 {
98         global $vars,$script,$max_size,$HTTP_POST_FILES;
99         global $_title_uploaded,$_title_file_deleted,$_title_notfound,$_msg_noparm,$_msg_already_exists,$_msg_attach_filelist,$_msg_delete,$_msg_exceed,$_btn_delete;
100         global $_msg_maxsize,$_btn_upload,$_msg_attachfile,$_title_upload,$_title_confirm_delete,$_msg_confirm_delete;
101         
102         $postfiles = $HTTP_POST_FILES;
103         $icon = FILE_ICON;
104
105         $vars["mode"] = rawurldecode($vars["mode"]);
106         $vars["openfile"] = rawurldecode($vars["openfile"]);
107         $vars["delfile"] = rawurldecode($vars["delfile"]);
108         $vars["refer"] = rawurldecode($vars["refer"]);
109
110         if(is_uploaded_file($postfiles["attach_file"]["tmp_name"]))
111         {
112                 if($postfiles["attach_file"]["size"] > MAX_FILESIZE) return array("msg" => $_msg_exceed);
113                 if(is_freeze($vars["refer"]) || !is_editable($vars["refer"])) return array("msg" => $_msg_noparm);
114                 
115                 $filename = encode($vars["refer"])."_".encode($postfiles["attach_file"]["name"]);
116                 
117                 if(file_exists(UPLOAD_DIR.$filename)) return array("msg" => $_msg_already_exists);
118                 
119                 move_uploaded_file($postfiles["attach_file"]["tmp_name"],UPLOAD_DIR.$filename);
120                 
121                 if(file_exists(DATA_DIR.encode($vars["refer"]).".txt"))
122                         @touch(DATA_DIR.encode($vars["refer"]).".txt");
123                 
124                 return array("msg" => $_title_uploaded);
125         }
126         else if($vars["delfile"])
127         {
128                 if($vars["mode"] == "confirm") {
129                   $form = "<form action=\"$script\" method=\"post\">\n";
130                   $form .= "<input type=\"hidden\" name=\"plugin\" value=\"attach\">\n";
131                   $form .= "<input type=\"hidden\" name=\"refer\" value=\"$vars[refer]\">\n";
132                   $form .= "<input type=\"hidden\" name=\"delfile\" value=\"$vars[delfile]\">\n";
133                   $form .= "<input type=\"submit\" value=\"$_btn_delete\">\n";
134                   $form .= "</form>";
135
136                   $retvars["body"] = sprintf($_msg_confirm_delete,$vars["delfile"],$form);
137                   $retvars["msg"] = sprintf($_title_confirm_delete,$vars["delfile"]);
138                   return $retvars;
139                 }
140                 else {
141                   $filename = encode($vars["refer"])."_".encode($vars["delfile"]);
142                   if(is_freeze($vars["refer"]) || !is_editable($vars["refer"])) return array("msg" => $_msg_noparm);
143                 
144                   if(!file_exists(UPLOAD_DIR.$filename))
145                         return array("msg" => $_title_notfound);
146                 
147                   @unlink(UPLOAD_DIR.$filename);
148
149                   if(file_exists(DATA_DIR.encode($vars["refer"]).".txt"))
150                     @touch(DATA_DIR.encode($vars["refer"]).".txt");
151                 
152                   return array("msg" => $_title_file_deleted);
153                 }
154         }
155         else if($vars["openfile"])
156         {
157                 $filename = encode($vars["refer"])."_".encode($vars["openfile"]);
158                 
159                 if(!file_exists(UPLOAD_DIR.$filename))
160                         return array("msg" => $_title_notfound);
161                 
162                 download_file(UPLOAD_DIR.$filename,$vars["openfile"]);
163
164                 die();
165         }
166         else if($vars["pcmd"] == "list")
167         {
168                 if ($dir = @opendir(UPLOAD_DIR))
169                 {
170                         $pgname_keep = "";
171                         $retbody = "";
172                         $aryret = array();
173                         $pagenames = array();
174                         while($file = readdir($dir))
175                         {
176                                 if($file == ".." || $file == "." || strstr($file,".log")!=FALSE) continue;
177                                 
178                                 settype($dfile_size,"double");
179                                 $dfile_size = round(filesize(UPLOAD_DIR.$file)/1000,1);
180                                 if($dfile_size == 0) $dfile_size = 0.1;
181                                 $file_size = sprintf("%01.1f",$dfile_size)."KB";
182                                 
183                                 preg_match("/^([^_]+)_([^_]+)$/",$file,$match);
184                                 
185                                 $pagename = decode($match[1]);
186                                 $pagename_url = rawurlencode($pagename);
187                                 $filename = decode($match[2]);
188                                 $filename_url = rawurlencode($filename);
189                                 $passage = get_pg_passage($pagename);
190                                 
191                                 $pagename = strip_bracket($pagename);
192                                 $pagenames[$pagename] = "<li><a href=\"$script?${pagename_url}\">$pagename</a>$passage</li>\n";
193                                 
194                                 $lastmod = date("Y/m/d H:i:s",filemtime(UPLOAD_DIR.$file));
195                                 
196                                 $del = "[<a href=\"$script?plugin=attach&amp;mode=confirm&amp;delfile=${filename_url}&amp;refer=${pagename_url}\" title=\"".str_replace('$1',$filename,$_msg_delete)."\">$_btn_delete</a>]";
197                                 
198                                 $open = "<a href=\"$script?plugin=attach&amp;openfile=${filename_url}&amp;refer=${pagename_url}\" title=\"$lastmod $file_size\">$filename</a>";
199
200                                 $aryret[$pagename] .= "<li>$open <small>$del</small></li>\n";
201                         }
202                         closedir($dir);
203                         ksort($aryret);
204                         $retbody = '';
205                         foreach($aryret as $pagename => $list) {
206                                 $retbody .= $pagenames[$pagename] . "<ul>\n" . $list . "</ul>\n";
207                         }
208                 }
209                 
210                 $retvars["msg"] = $_msg_attach_filelist;
211                 $retvars["body"] = "<ul>\n".$retbody."</ul>\n";
212                 if($retbody) $retvars["body"] .= "</ul>\n";
213                 
214                 return $retvars;
215         }
216         else if($vars["pcmd"] == "upload" && $vars["page"])
217         {
218                 $vars["refer"] = $vars["page"];
219                 
220                 $max_size = number_format(MAX_FILESIZE/1000);
221                 $max_size.= "KB";
222                 
223                 $ret.= "<blockquote>\n";
224                 $ret.= "<form enctype=\"multipart/form-data\" action=\"$script\" method=\"post\">\n";
225                 $ret.= "<input type=\"hidden\" name=\"plugin\" value=\"attach\">\n";
226                 $ret.= "<input type=\"hidden\" name=\"refer\" value=\"$vars[page]\">\n";
227                 $ret.= "<input type=\"hidden\" name=\"max_file_size\" value=\"".MAX_FILESIZE."\">\n";
228                 $ret.= "<small>[<a href=\"$script?plugin=attach&amp;pcmd=list\">$_msg_attach_filelist</a>]</small><br>\n";
229                 $ret.= "<small>".str_replace('$1',$max_size,$_msg_maxsize)."</small><br>\n";
230                 $ret.= "$_msg_attachfile: <input type=\"file\" name=\"attach_file\">\n";
231                 $ret.= "<input type=\"submit\" value=\"$_btn_upload\"><br>\n";
232                 $ret.= "</form>\n";
233                 $ret.= "</blockquote>\n";
234                 
235                 $retvars["msg"] = $_title_upload;
236                 $retvars["body"] = $ret;
237                 
238                 return $retvars;
239         }
240 }
241
242 function attach_filelist()
243 {
244         return plugin_attach_convert(FALSE);
245 }
246
247 function download_file($path_file,$filename)
248 {
249         $content_length = filesize($path_file);
250         
251         $list = array(1);
252         if(file_exists($path_file.'.log')) {
253                 $list = file($path_file.'.log');
254                 $list[0] = chop($list[0]) + 1;
255         }
256         $fp = fopen($path_file.'.log','w');
257         foreach ($list as $l) {
258                 fputs($fp,$l);
259         }
260         fclose($fp);
261         
262         // for japanese
263         if(function_exists("mb_convert_encoding"))
264                 $filename = mb_convert_encoding($filename,"SJIS","auto");
265
266         header("Content-Disposition: inline; filename=\"$filename\"");
267         header("Content-Length: ".$content_length);
268         header("Content-Type: application/octet-stream");
269
270         @readfile($path_file);
271 }
272
273 ?>