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 $
7 // set PHP value to enable file upload
8 ini_set("file_uploads","1");
10 // upload dir(must set end of /)
11 define("UPLOAD_DIR","./attach/");
13 // max file size for upload on PHP(PHP default 2MB)
14 ini_set("upload_max_filesize","2M");
16 // max file size for upload on script of PukiWiki(default 1MB)
17 define("MAX_FILESIZE",1000000);
20 define("FILE_ICON","<img src=\"./image/file.gif\" width=\"20\" height=\"20\" border=\"0\">");
22 function plugin_attach_convert()
24 global $script,$vars,$max_size;
25 global $_msg_attach_filelist,$_msg_maxsize,$_msg_delete,$_btn_upload,$_btn_delete,$_msg_attachfile;
28 $decoded_pgname = encode($vars["page"]);
32 if ($dir = @opendir(UPLOAD_DIR))
34 while($file = readdir($dir))
36 if($file == ".." || $file == ".") continue;
37 if(!preg_match("/^${decoded_pgname}_([^.]+)$/",$file,$match)) continue;
39 $lastmod = date("Y/m/d H:i:s",filemtime(UPLOAD_DIR.$file));
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";
46 $filename = decode($match[1]);
47 $filename_url = rawurlencode($filename);
48 $refername_url = rawurlencode($vars[page]);
51 if(file_exists(UPLOAD_DIR.$file.'.log')) {
52 $list = file(UPLOAD_DIR.$file.'.log');
54 $counter = ' <small>' . chop($list[0]) . '·ï</small>';
57 $del = "[<a href=\"$script?plugin=attach&mode=confirm&delfile=${filename_url}&refer=${refername_url}\" title=\"".str_replace('$1',$filename,$_msg_delete)."\">$_btn_delete</a>]";
58 $open = "<a href=\"$script?plugin=attach&openfile=${filename_url}&refer=${refername_url}\" title=\"$lastmod $file_size\">$icon$filename</a>$counter\n";
60 $into = "$open <small>$del</small>";
62 $attach_files[$lastmod] = $into;
65 @krsort($attach_files);
68 $max_size = number_format(MAX_FILESIZE/1000);
71 $args = func_get_args();
73 if(is_array($attach_files))
75 if($args[0]===FALSE) $ret.= "$_msg_attachfile: ";
76 $ret.= join("\n ",$attach_files)."\n";
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&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";
96 function plugin_attach_action()
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;
102 $postfiles = $HTTP_POST_FILES;
105 $vars["mode"] = rawurldecode($vars["mode"]);
106 $vars["openfile"] = rawurldecode($vars["openfile"]);
107 $vars["delfile"] = rawurldecode($vars["delfile"]);
108 $vars["refer"] = rawurldecode($vars["refer"]);
110 if(is_uploaded_file($postfiles["attach_file"]["tmp_name"]))
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);
115 $filename = encode($vars["refer"])."_".encode($postfiles["attach_file"]["name"]);
117 if(file_exists(UPLOAD_DIR.$filename)) return array("msg" => $_msg_already_exists);
119 move_uploaded_file($postfiles["attach_file"]["tmp_name"],UPLOAD_DIR.$filename);
121 if(file_exists(DATA_DIR.encode($vars["refer"]).".txt"))
122 @touch(DATA_DIR.encode($vars["refer"]).".txt");
124 return array("msg" => $_title_uploaded);
126 else if($vars["delfile"])
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";
136 $retvars["body"] = sprintf($_msg_confirm_delete,$vars["delfile"],$form);
137 $retvars["msg"] = sprintf($_title_confirm_delete,$vars["delfile"]);
141 $filename = encode($vars["refer"])."_".encode($vars["delfile"]);
142 if(is_freeze($vars["refer"]) || !is_editable($vars["refer"])) return array("msg" => $_msg_noparm);
144 if(!file_exists(UPLOAD_DIR.$filename))
145 return array("msg" => $_title_notfound);
147 @unlink(UPLOAD_DIR.$filename);
149 if(file_exists(DATA_DIR.encode($vars["refer"]).".txt"))
150 @touch(DATA_DIR.encode($vars["refer"]).".txt");
152 return array("msg" => $_title_file_deleted);
155 else if($vars["openfile"])
157 $filename = encode($vars["refer"])."_".encode($vars["openfile"]);
159 if(!file_exists(UPLOAD_DIR.$filename))
160 return array("msg" => $_title_notfound);
162 download_file(UPLOAD_DIR.$filename,$vars["openfile"]);
166 else if($vars["pcmd"] == "list")
168 if ($dir = @opendir(UPLOAD_DIR))
173 $pagenames = array();
174 while($file = readdir($dir))
176 if($file == ".." || $file == "." || strstr($file,".log")!=FALSE) continue;
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";
183 preg_match("/^([^_]+)_([^_]+)$/",$file,$match);
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);
191 $pagename = strip_bracket($pagename);
192 $pagenames[$pagename] = "<li><a href=\"$script?${pagename_url}\">$pagename</a>$passage</li>\n";
194 $lastmod = date("Y/m/d H:i:s",filemtime(UPLOAD_DIR.$file));
196 $del = "[<a href=\"$script?plugin=attach&mode=confirm&delfile=${filename_url}&refer=${pagename_url}\" title=\"".str_replace('$1',$filename,$_msg_delete)."\">$_btn_delete</a>]";
198 $open = "<a href=\"$script?plugin=attach&openfile=${filename_url}&refer=${pagename_url}\" title=\"$lastmod $file_size\">$filename</a>";
200 $aryret[$pagename] .= "<li>$open <small>$del</small></li>\n";
205 foreach($aryret as $pagename => $list) {
206 $retbody .= $pagenames[$pagename] . "<ul>\n" . $list . "</ul>\n";
210 $retvars["msg"] = $_msg_attach_filelist;
211 $retvars["body"] = "<ul>\n".$retbody."</ul>\n";
212 if($retbody) $retvars["body"] .= "</ul>\n";
216 else if($vars["pcmd"] == "upload" && $vars["page"])
218 $vars["refer"] = $vars["page"];
220 $max_size = number_format(MAX_FILESIZE/1000);
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&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";
233 $ret.= "</blockquote>\n";
235 $retvars["msg"] = $_title_upload;
236 $retvars["body"] = $ret;
242 function attach_filelist()
244 return plugin_attach_convert(FALSE);
247 function download_file($path_file,$filename)
249 $content_length = filesize($path_file);
252 if(file_exists($path_file.'.log')) {
253 $list = file($path_file.'.log');
254 $list[0] = chop($list[0]) + 1;
256 $fp = fopen($path_file.'.log','w');
257 foreach ($list as $l) {
263 if(function_exists("mb_convert_encoding"))
264 $filename = mb_convert_encoding($filename,"SJIS","auto");
266 header("Content-Disposition: inline; filename=\"$filename\"");
267 header("Content-Length: ".$content_length);
268 header("Content-Type: application/octet-stream");
270 @readfile($path_file);