| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 | 
							- <?php if (!defined('PmWiki')) exit();
 
- /*  Copyright 2003-2004 Patrick R. Michaud (pmichaud@pobox.com)
 
-     This file is part of PmWiki; you can redistribute it and/or modify
 
-     it under the terms of the GNU General Public License as published
 
-     by the Free Software Foundation; either version 2 of the License, or
 
-     (at your option) any later version.  See pmwiki.php for full details.
 
-     This file adds upload capabilities to PmWiki.  Uploads can be
 
-     enabled by setting
 
- 	$EnableUpload = 1
 
-     in config.php.  In addition, an upload password must be set, and
 
-     some installations may require configuration of the $UploadDir
 
-     and $UploadUrlFmt variables.  See the PmWiki.UploadsAdmin wiki
 
-     page for full details, as it's complicated to explain here.
 
- */
 
- SDV($EnableUploadOverwrite,1);
 
- SDV($UploadExts,array(
 
-   'gif','jpg','jpeg','png','bmp','ico','wbmp',		# images
 
-   'mp3','au','wav',					# audio
 
-   'mpg','mpeg','wmf','mov','qt','avi',			# video
 
-   'zip','gz','tgz','tar','rpm','hqx','sit',		# archives
 
-   'doc','ppt','xls','exe','mdb',			# MSOffice
 
-   'pdf','psd','ps','ai','eps',				# Adobe
 
-   'htm','html','css','fla','swf',			# web stuff
 
-   'txt','rtf','exe','tex','dvi',''));			# misc
 
- $upname=@$_POST['upname'];
 
- if (@$_GET['upname']) $upname=$_GET['upname'];
 
- $upresult=@$_GET['upresult'];
 
- $upext=@$_GET['upext'];
 
- SDV($UploadMaxSize,50000);
 
- SDV($UploadPrefixQuota,0);
 
- SDV($UploadDirQuota,0);
 
- SDV($UploadPerms,0666 & ~umask());
 
- foreach($UploadExts as $ext) 
 
-   if (!isset($UploadExtSize[$ext])) 
 
-     $UploadExtSize[$ext]=$UploadMaxSize;
 
- $upextmax = @$UploadExtSize[$upext];
 
- SDV($UploadDir,'uploads');
 
- SDV($UploadUrlFmt,preg_replace("#/[^/]*\$#","/$UploadDir",$ScriptUrl,1));
 
- SDV($UploadPrefixFmt,'/$Group/');
 
- SDV($UploadNamePattern,'[A-Za-z0-9][-\w.]*[A-Za-z0-9]');
 
- SDV($UploadVerifyFunction,"UploadVerifyBasic");
 
- SDV($PageUploadFmt,array("<h1 class='wikiaction'>$[Attachments for] \$PageName</h1>
 
-   <h3>\$UploadResult</h3>
 
-   <form enctype='multipart/form-data' action='\$ScriptUrl' method='post'>
 
-   <input type='hidden' name='pagename' value='\$PageName' />
 
-   <input type='hidden' name='action' value='postupload' />
 
-   <input type='hidden' name='upname' value='\$UploadName' />
 
-   <table border='0'>
 
-     <tr><td align='right'>$[File to upload:]</td><td><input 
 
-       name='uploadfile' type='file' /></td></tr>
 
-     <tr><td align='right'>$[Name attachment as:]</td>
 
-       <td><input type='text' name='upname' 
 
-         value='\$UploadName' />
 
-         <input type='submit' value=' $[Upload] ' /><br />
 
-       </td></tr>
 
-   </table>
 
-   </form>",'wiki:$[PmWiki.UploadQuickReference]')); 
 
- SDV($HandleUploadFmt,array(&$PageStartFmt, &$PageUploadFmt, &$PageEndFmt));
 
- SDV($UploadFileFmt,"$UploadDir$UploadPrefixFmt");
 
- SDV($RecentUploads, array(
 
-   'Main.AllRecentUploads' => 
 
-     "[[$UploadUrlFmt$UploadPrefixFmt\$UploadName \$UploadName]]",
 
-   '$Group.RecentUploads' => '[[Attach:$UploadName $UploadName]]'));
 
- 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 $upextmax
 
-      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($LinkPatterns[120]["\\bAttach:($UploadNamePattern)"],'FmtAttachLink');
 
- SDV($InterMapUrls['Attach'],
 
-   FmtPageName("$UploadUrlFmt$UploadPrefixFmt$1",$pagename));
 
- SDV($InlineReplacements['/\\[\\[\\$Attachlist\\s*(.*)\\]\\]/e'],
 
-   "'<ul>'.FmtUploadList('$pagename','$1').'</ul>'");
 
- $UploadName = $upname; $UploadResult='';
 
- if ($upresult) 
 
-   $UploadResult = "<i>$upname</i>: ".FmtPageName("$[UL$upresult]",$pagename);
 
- if ($upresult=='success') $UploadName = "";
 
- mkgiddir($UploadDir);
 
- SDV($WikiLibDirs,array($WikiDir,"wikilib.d"));
 
- SDV($HandleActions['upload'],'HandleUpload');
 
- SDV($HandleActions['postupload'],'HandlePostUpload');
 
- function FmtAttachLink($pat,$ref,$txt) {
 
-   global $UploadName,$UploadFileFmt,$pagename,$UploadFormTarget,$FmtUrlLink;
 
-   preg_match("/^([^:]*):(.*)$/",$ref,$match);
 
-   $rtxt=$ref;  if (!is_null($txt)) $rtxt=$txt;
 
-   $UploadName = $match[2];
 
-   $filepath = FmtPageName($UploadFileFmt,$pagename).$UploadName;
 
-   if (!file_exists($filepath)) {
 
-     $target = ($UploadFormTarget) ? "target='$UploadFormTarget'" : '';
 
-     return "$rtxt<a href='".FmtPageName('$PageUrl?action=upload',$pagename).
 
-       "&upname=".urlencode($UploadName)."' $target>?</a>";
 
-   }
 
-   return $FmtUrlLink($pat,$ref,$txt);
 
- }
 
- function HandleUpload($pagename) {
 
-   global $UploadList,$HandleUploadFmt;
 
-   $page = RetrieveAuthPage($pagename,'upload');
 
-   if (!$page) { Abort("?cannot upload to $pagename"); }
 
-   SetPageVars($pagename,$page,"$pagename Attachments");
 
-   $UploadList = FmtUploadList($pagename);
 
-   PrintFmt($pagename,$HandleUploadFmt);
 
- }
 
- function HandlePostUpload($pagename) {
 
-   global $HTTP_POST_FILES,$UploadName,$UploadNamePattern,$UploadFileFmt,
 
-     $UploadVerifyFunction,$UploadPerms,$RecentUploads,$TimeFmt,$Now;
 
-   $page = RetrieveAuthPage($pagename,'upload');
 
-   if (!$page) Abort("?cannot upload to $pagename");
 
-   $uploadfile = $HTTP_POST_FILES['uploadfile'];
 
-   if ($UploadName=='') { $UploadName=$uploadfile['name']; }
 
-   if (!function_exists($UploadVerifyFunction)) 
 
-     Abort("?no UploadVerifyFunction available");
 
-   $filepath = FmtPageName($UploadFileFmt,$pagename).$UploadName;
 
-   $result = $UploadVerifyFunction($pagename,$uploadfile,$filepath);
 
-   if ($result=='') {
 
-     $filedir = preg_replace('/[^\\/]*$/','',$filepath);
 
-     mkgiddir($filedir);
 
-     if (!move_uploaded_file($uploadfile['tmp_name'],$filepath))
 
-       { Abort("?cannot move uploaded file to $filepath"); return; }
 
-     chmod($filepath,$UploadPerms);
 
-     foreach($RecentUploads as $rcfmt => $pgfmt) {
 
-       $rcname=FmtPageName($rcfmt,$pagename); if (!$rcname) continue;
 
-       $pgname=FmtPageName($pgfmt,$pagename); if (!$pgname) continue;
 
-       if (@$seen[$rcname]++) continue;
 
-       $rcpage = ReadPage($rcname,"");
 
-       $rcpage['text'] = "* $pgname . . . . . . ".strftime($TimeFmt,$Now)."\n".
 
-         preg_replace("%\\* ".preg_quote($pgname)." .*?\n%","",
 
-           $rcpage['text']);
 
-       WritePage($rcname,$rcpage);
 
-     }
 
-     $result = "upresult=success";
 
-   }
 
-   Redirect($pagename,
 
-     '$PageUrl?action=upload&upname='.urlencode($UploadName)."&$result");
 
- }  
 
- 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 UploadVerifyBasic($pagename,$uploadfile,$filepath) {
 
-   global $UploadName,$UploadNamePattern,$UploadExtSize,$EnableUploadOverwrite,
 
-     $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";
 
-   if (!is_uploaded_file($uploadfile['tmp_name'])) return 'upresult=nofile';
 
-   switch ($uploadfile['error']) {
 
-     case 1: return 'upresult=toobig';
 
-     case 2: return 'upresult=toobig';
 
-     case 3: return 'upresult=partial';
 
-     case 4: 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 FmtUploadList($pagename,$order='N=A') {
 
-   global $UploadDir,$UploadPrefixFmt,$UploadUrlFmt,$TimeFmt;
 
-   $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt",$pagename);
 
-   $uploadurl = FmtPageName("$UploadUrlFmt$UploadPrefixFmt",$pagename);
 
-   if ($order=='') $order='N=A';
 
-   $dirp = @opendir($uploaddir);
 
-   $out = '';
 
-   if (!$dirp) return $out;
 
-   $filelist = array();
 
-   while (($file=readdir($dirp)) !== false) {
 
-     if ($file[0]=='.') continue;
 
-     switch (strtolower($order[0])) {
 
-       case 'm': $filelist[$file]=filemtime("$uploaddir$file"); break;
 
-       case 's': $filelist[$file]=filesize("$uploaddir$file"); break;
 
-       default: $filelist[$file]=$file; break;
 
-     }
 
-   }
 
-   closedir($dirp);
 
-   if (strtolower($order[2])=='d') arsort($filelist); else asort($filelist);
 
-   foreach($filelist as $file=>$x) {
 
-     $stat = stat("$uploaddir/$file");
 
-     $out .= "<li> <a href='$uploadurl$file'>$file</a> ... "
 
-       .$stat['size']." bytes ... ".strftime($TimeFmt,$stat['mtime'])."\n</li>";
 
-   }
 
-   return $out;
 
- }
 
- ?>
 
 
  |