'image/gif', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'bmp' => 'image/bmp', 'ico' => 'image/x-icon', 'wbmp' => 'image/vnd.wap.wbmp', 'mp3' => 'audio/mpeg', 'au' => 'audio/basic', 'wav' => 'audio/x-wav', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mov' => 'video/quicktime', 'qt' => 'video/quicktime', 'wmf' => 'text/plain', 'avi' => 'video/x-msvideo', 'zip' => 'application/zip', 'gz' => 'application/x-gzip', 'tgz' => 'application/x-gzip', 'rpm' => 'application/x-rpm', 'hqx' => 'application/mac-binhex40', 'sit' => 'application/x-stuffit', 'doc' => 'application/msword', 'ppt' => 'application/vnd.ms-powerpoint', 'xls' => 'application/vnd.ms-excel', 'mdb' => 'text/plain', 'exe' => 'application/octet-stream', 'pdf' => 'application/pdf', 'psd' => 'text/plain', 'ps' => 'application/postscript', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'htm' => 'text/html', 'html' => 'text/html', 'css' => 'text/css', 'fla' => 'application/x-shockwave-flash', 'swf' => 'application/x-shockwave-flash', 'txt' => 'text/plain', 'rtf' => 'application/rtf', 'tex' => 'application/x-tex', 'dvi' => 'application/x-dvi', '' => 'text/plain')); SDV($UploadMaxSize,5000000); SDV($UploadPrefixQuota,0); SDV($UploadDirQuota,0); foreach($UploadExts as $k=>$v) if (!isset($UploadExtSize[$k])) $UploadExtSize[$k]=$UploadMaxSize; SDV($UploadDir,'uploads'); SDV($UploadPrefixFmt,'/$Group'); SDV($UploadFileFmt,"$UploadDir$UploadPrefixFmt"); SDV($UploadUrlFmt,preg_replace('#/[^/]*$#',"/$UploadDir",$ScriptUrl,1)); SDV($LinkUploadCreateFmt, "\$LinkText Δ"); SDV($PageUploadFmt,array("

$[Attachments for] \$FullName

\$UploadResult

$[File to upload:]
$[Name attachment as:]
", 'wiki:$[Site.UploadQuickReference]')); XLSDV('en',array( 'ULsuccess' => 'successfully uploaded', 'ULbadname' => 'invalid attachment name', 'ULbadtype' => '\'$upext\' is not an allowed file extension', 'ULtoobig' => 'file is larger than maximum allowed by webserver', 'ULtoobigext' => 'file is larger than allowed maximum of $upmax bytes for \'$upext\' files', 'ULpartial' => 'incomplete file received', 'ULnofile' => 'no file uploaded', 'ULexists' => 'file with that name already exists', 'ULpquota' => 'group quota exceeded', 'ULtquota' => 'upload quota exceeded')); SDV($PageAttributes['passwdupload'],'$[Set new upload password:]'); SDV($DefaultPasswords['upload'],'*'); SDV($AuthCascade['upload'], 'read'); Markup('attachlist', ''.FmtUploadList('$pagename',PSS('$1')).'')"); SDV($GUIButtons['attach'], array(220, 'Attach:', '', '$[file.ext]', '$GUIButtonDirUrlFmt/attach.gif"$[Attach file]"')); SDV($LinkFunctions['Attach:'], 'LinkUpload'); SDV($IMap['Attach:'], '$1'); SDVA($HandleActions, array('upload' => 'HandleUpload', 'postupload' => 'HandlePostUpload', 'download' => 'HandleDownload')); SDVA($HandleAuth, array('upload' => 'upload', 'postupload' => 'upload', 'download' => 'read')); SDV($UploadVerifyFunction, 'UploadVerifyBasic'); function MakeUploadName($pagename,$x) { $x = preg_replace('/[^-\\w. ]/', '', $x); $x = preg_replace('/\\.[^.]*$/e', "strtolower('$0')", $x); $x = preg_replace('/^[^[:alnum:]]+/', '', $x); return preg_replace('/[^[:alnum:]]+$/', '', $x); } function LinkUpload($pagename, $imap, $path, $title, $txt, $fmt=NULL) { global $FmtV, $UploadFileFmt, $LinkUploadCreateFmt, $UploadUrlFmt, $UploadPrefixFmt, $EnableDirectDownload; if (preg_match('!^(.*)/([^/]+)$!', $path, $match)) { $pagename = MakePageName($pagename, $match[1]); $path = $match[2]; } $upname = MakeUploadName($pagename, $path); $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename); $FmtV['$LinkUpload'] = FmtPageName("\$PageUrl?action=upload&upname=$upname", $pagename); $FmtV['$LinkText'] = $txt; if (!file_exists($filepath)) return FmtPageName($LinkUploadCreateFmt, $pagename); $path = FmtPageName(IsEnabled($EnableDirectDownload, 1) ? "$UploadUrlFmt$UploadPrefixFmt/$upname" : "\$PageUrl?action=download&upname=$upname", $pagename); return LinkIMap($pagename, $imap, $path, $title, $txt, $fmt); } function HandleUpload($pagename, $auth = 'upload') { global $FmtV,$UploadExtMax, $HandleUploadFmt,$PageStartFmt,$PageEndFmt,$PageUploadFmt; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) Abort("?cannot upload to $pagename"); PCache($pagename,$page); $FmtV['$UploadName'] = MakeUploadName($pagename,@$_REQUEST['upname']); $upresult = @$_REQUEST['upresult']; $uprname = @$_REQUEST['uprname']; $FmtV['$upext'] = @$_REQUEST['upext']; $FmtV['$upmax'] = @$_REQUEST['upmax']; $FmtV['$UploadResult'] = ($upresult) ? FmtPageName("$uprname: $[UL$upresult]",$pagename) : ''; SDV($HandleUploadFmt,array(&$PageStartFmt,&$PageUploadFmt,&$PageEndFmt)); PrintFmt($pagename,$HandleUploadFmt); } function HandleDownload($pagename, $auth = 'read') { global $UploadFileFmt, $UploadExts, $DownloadDisposition; SDV($DownloadDisposition, "inline"); $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) Abort("?cannot read $pagename"); $upname = MakeUploadName($pagename, @$_REQUEST['upname']); $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename); if (!$upname || !file_exists($filepath)) { header("HTTP/1.0 404 Not Found"); Abort("?requested file not found"); exit(); } preg_match('/\\.([^.]+)$/',$filepath,$match); #Uncompress file before send them to the client. Michael Savchuk [mehos@ngs.ru] $bz = bzopen($filepath, "r"); $decompressed_file = ''; while (!feof($bz)) { $decompressed_file .= bzread($bz, 4096); } bzclose($bz); if ($UploadExts[@$match[1]]) header("Content-Type: {$UploadExts[@$match[1]]}"); header("Content-disposition: $DownloadDisposition; filename=$upname"); print($decompressed_file); exit(); #End of patch } function HandlePostUpload($pagename, $auth = 'upload') { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, $EnableUploadVersions, $Now; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) Abort("?cannot upload to $pagename"); $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname=='') $upname=$uploadfile['name']; $upname = MakeUploadName($pagename,$upname); if (!function_exists($UploadVerifyFunction)) Abort('?no UploadVerifyFunction available'); $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename); $result = $UploadVerifyFunction($pagename,$uploadfile,$filepath); if ($result=='') { $filedir = preg_replace('#/[^/]*$#','',$filepath); mkdirp($filedir); if (IsEnabled($EnableUploadVersions, 0)) @rename($filepath, "$filepath,$Now"); #Compress uploaded files by bzip2. Michael Savchuk [mehos@ngs.ru] $c = file_get_contents($uploadfile['tmp_name']); $bz = bzopen($filepath , "w"); bzwrite($bz, $c, strlen($c)); bzclose($bz); unlink($uploadfile['tmp_name']); fixperms($filepath,0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; #End of patch } Redirect($pagename,"\$PageUrl?action=upload&uprname=$upname&$result"); } function UploadVerifyBasic($pagename,$uploadfile,$filepath) { global $EnableUploadOverwrite,$UploadExtSize,$UploadPrefixQuota, $UploadDirQuota,$UploadDir; if (!$EnableUploadOverwrite && file_exists($filepath)) return 'upresult=exists'; preg_match('/\\.([^.\\/]+)$/',$filepath,$match); $ext=@$match[1]; $maxsize = $UploadExtSize[$ext]; if ($maxsize<=0) return "upresult=badtype&upext=$ext"; if ($uploadfile['size']>$maxsize) return "upresult=toobigext&upext=$ext&upmax=$maxsize"; switch (@$uploadfile['error']) { case 1: return 'upresult=toobig'; case 2: return 'upresult=toobig'; case 3: return 'upresult=partial'; case 4: return 'upresult=nofile'; } if (!is_uploaded_file($uploadfile['tmp_name'])) return 'upresult=nofile'; $filedir = preg_replace('#/[^/]*$#','',$filepath); if ($UploadPrefixQuota && (dirsize($filedir)-@filesize($filepath)+$uploadfile['size']) > $UploadPrefixQuota) return 'upresult=pquota'; if ($UploadDirQuota && (dirsize($UploadDir)-@filesize($filepath)+$uploadfile['size']) > $UploadDirQuota) return 'upresult=tquota'; return ''; } function dirsize($dir) { $size = 0; $dirp = @opendir($dir); if (!$dirp) return 0; while (($file=readdir($dirp)) !== false) { if ($file[0]=='.') continue; if (is_dir("$dir/$file")) $size+=dirsize("$dir/$file"); else $size+=filesize("$dir/$file"); } closedir($dirp); return $size; } function FmtUploadList($pagename, $args) { global $UploadDir, $UploadPrefixFmt, $UploadUrlFmt, $EnableUploadOverwrite, $TimeFmt, $EnableDirectDownload; $opt = ParseArgs($args); if (@$opt[''][0]) $pagename = MakePageName($pagename, $opt[''][0]); if (@$opt['ext']) $matchext = '/\\.(' . implode('|', preg_split('/\\W+/', $opt['ext'], -1, PREG_SPLIT_NO_EMPTY)) . ')$/i'; $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename); $uploadurl = FmtPageName(IsEnabled($EnableDirectDownload, 1) ? "$UploadUrlFmt$UploadPrefixFmt/" : "\$PageUrl?action=download&upname=", $pagename); $dirp = @opendir($uploaddir); if (!$dirp) return ''; $filelist = array(); while (($file=readdir($dirp)) !== false) { if ($file{0} == '.') continue; if ($matchext && !preg_match($matchext, $file)) continue; $filelist[$file] = $file; } closedir($dirp); $out = array(); asort($filelist); $overwrite = ''; foreach($filelist as $file=>$x) { $name = PUE("$uploadurl$file"); $stat = stat("$uploaddir/$file"); if ($EnableUploadOverwrite) $overwrite = FmtPageName(" Δ", $pagename); $out[] = "
  • $file$overwrite ... ". number_format($stat['size']) . " bytes ... " . strftime($TimeFmt, $stat['mtime']) . "
  • "; } return implode("\n",$out); } # this adds (:if [!]attachments:) to the markup $Conditions['attachments'] = "AttachExist(\$pagename)"; function AttachExist($pagename) { global $UploadDir, $UploadPrefixFmt; $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename); $count = 0; $dirp = @opendir($uploaddir); if ($dirp) { while (($file = readdir($dirp)) !== false) if ($file{0} != '.') $count++; closedir($dirp); } return $count; }