Blame
Date:
Mon Jan 3 05:00:26 2022 UTC
Message:
Daily backup
001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2004-2020 Patrick R. Michaud (pmichaud@pobox.com)
003
2021-12-17
jrmu
This file is part of PmWiki; you can redistribute it and/or modify
004
2021-12-17
jrmu
it under the terms of the GNU General Public License as published
005
2021-12-17
jrmu
by the Free Software Foundation; either version 2 of the License, or
006
2021-12-17
jrmu
(at your option) any later version. See pmwiki.php for full details.
007
2021-12-17
jrmu
008
2021-12-17
jrmu
This script adds upload capabilities to PmWiki. Uploads can be
009
2021-12-17
jrmu
enabled by setting
010
2021-12-17
jrmu
$EnableUpload = 1;
011
2021-12-17
jrmu
in config.php. In addition, an upload password must be set, as
012
2021-12-17
jrmu
the default is to lock uploads. In some configurations it may also
013
2021-12-17
jrmu
be necessary to set values for $UploadDir and $UploadUrlFmt,
014
2021-12-17
jrmu
especially if any form of URL rewriting is being performed.
015
2021-12-17
jrmu
See the PmWiki.UploadsAdmin page for more information.
016
2021-12-17
jrmu
017
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
018
2021-12-17
jrmu
*/
019
2021-12-17
jrmu
020
2021-12-17
jrmu
## $EnableUploadOverwrite determines if we allow previously uploaded
021
2021-12-17
jrmu
## files to be overwritten.
022
2021-12-17
jrmu
SDV($EnableUploadOverwrite,1);
023
2021-12-17
jrmu
024
2021-12-17
jrmu
## $UploadExts contains the list of file extensions we're willing to
025
2021-12-17
jrmu
## accept, along with the Content-Type: value appropriate for each.
026
2021-12-17
jrmu
SDVA($UploadExts,array(
027
2021-12-17
jrmu
'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg',
028
2021-12-17
jrmu
'png' => 'image/png', 'bmp' => 'image/bmp', 'ico' => 'image/x-icon',
029
2021-12-17
jrmu
'wbmp'=> 'image/vnd.wap.wbmp', 'xcf' => 'image/x-xcf', 'webp' => 'image/webp',
030
2021-12-17
jrmu
'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml',
031
2021-12-17
jrmu
'mp3' => 'audio/mpeg', 'au' => 'audio/basic', 'wav' => 'audio/x-wav',
032
2021-12-17
jrmu
'ogg' => 'audio/ogg', 'flac' => 'audio/x-flac', 'opus' => 'audio/opus',
033
2021-12-17
jrmu
'ogv' => 'video/ogg', 'mp4' => 'video/mp4', 'webm' => 'video/webm',
034
2021-12-17
jrmu
'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mkv' => 'video/x-matroska',
035
2021-12-17
jrmu
'm4v' => 'video/x-m4v', '3gp' => 'video/3gpp',
036
2021-12-17
jrmu
'mov' => 'video/quicktime', 'qt' => 'video/quicktime',
037
2021-12-17
jrmu
'wmf' => 'text/plain', 'avi' => 'video/x-msvideo',
038
2021-12-17
jrmu
'zip' => 'application/zip', '7z' => 'application/x-7z-compressed',
039
2021-12-17
jrmu
'gz' => 'application/x-gzip', 'tgz' => 'application/x-gzip',
040
2021-12-17
jrmu
'rpm' => 'application/x-rpm',
041
2021-12-17
jrmu
'hqx' => 'application/mac-binhex40', 'sit' => 'application/x-stuffit',
042
2021-12-17
jrmu
'doc' => 'application/msword', 'ppt' => 'application/vnd.ms-powerpoint',
043
2021-12-17
jrmu
'xls' => 'application/vnd.ms-excel', 'mdb' => 'text/plain',
044
2021-12-17
jrmu
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
045
2021-12-17
jrmu
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
046
2021-12-17
jrmu
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
047
2021-12-17
jrmu
'exe' => 'application/octet-stream',
048
2021-12-17
jrmu
'pdf' => 'application/pdf', 'psd' => 'text/plain',
049
2021-12-17
jrmu
'ps' => 'application/postscript', 'ai' => 'application/postscript',
050
2021-12-17
jrmu
'eps' => 'application/postscript',
051
2021-12-17
jrmu
'htm' => 'text/html', 'html' => 'text/html', 'css' => 'text/css',
052
2021-12-17
jrmu
'fla' => 'application/x-shockwave-flash',
053
2021-12-17
jrmu
'swf' => 'application/x-shockwave-flash',
054
2021-12-17
jrmu
'txt' => 'text/plain', 'rtf' => 'application/rtf',
055
2021-12-17
jrmu
'tex' => 'application/x-tex', 'dvi' => 'application/x-dvi',
056
2021-12-17
jrmu
'odt' => 'application/vnd.oasis.opendocument.text',
057
2021-12-17
jrmu
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
058
2021-12-17
jrmu
'odp' => 'application/vnd.oasis.opendocument.presentation',
059
2021-12-17
jrmu
'odg' => 'application/vnd.oasis.opendocument.graphics',
060
2021-12-17
jrmu
'epub'=> 'application/epub+zip',
061
2021-12-17
jrmu
'kml' => 'application/vnd.google-earth.kml+xml',
062
2021-12-17
jrmu
'kmz' => 'application/vnd.google-earth.kmz',
063
2021-12-17
jrmu
'vtt' => 'text/vtt',
064
2021-12-17
jrmu
'' => 'text/plain'));
065
2021-12-17
jrmu
066
2021-12-17
jrmu
# Array containing forbidden strings in a filename, array('.php', '.cgi')
067
2021-12-17
jrmu
SDV($UploadBlacklist, array());
068
2021-12-17
jrmu
069
2021-12-17
jrmu
SDV($UploadMaxSize,50000);
070
2021-12-17
jrmu
SDV($UploadPrefixQuota,0);
071
2021-12-17
jrmu
SDV($UploadDirQuota,0);
072
2021-12-17
jrmu
foreach($UploadExts as $k=>$v)
073
2021-12-17
jrmu
if (!isset($UploadExtSize[$k])) $UploadExtSize[$k]=$UploadMaxSize;
074
2021-12-17
jrmu
075
2021-12-17
jrmu
SDV($UploadDir,'uploads');
076
2021-12-17
jrmu
SDV($UploadPermAdd,0444);
077
2021-12-17
jrmu
SDV($UploadPermSet,0);
078
2021-12-17
jrmu
SDV($UploadPrefixFmt,'/$Group');
079
2021-12-17
jrmu
SDV($UploadFileFmt,"$UploadDir$UploadPrefixFmt");
080
2021-12-17
jrmu
$v = preg_replace('#^/(.*/)#', '', $UploadDir);
081
2021-12-17
jrmu
SDV($UploadUrlFmt,preg_replace('#/[^/]*$#', "/$v", $PubDirUrl, 1));
082
2021-12-17
jrmu
SDV($LinkUploadCreateFmt, "<a rel='nofollow' class='createlinktext' href='\$LinkUpload'>\$LinkText</a><a rel='nofollow' class='createlink' href='\$LinkUpload'>&nbsp;&Delta;</a>");
083
2021-12-17
jrmu
SDVA($ActionTitleFmt, array('upload' => '| $[Attach]'));
084
2021-12-17
jrmu
085
2021-12-17
jrmu
086
2021-12-17
jrmu
if ($EnablePostAuthorRequired)
087
2021-12-17
jrmu
SDV($EnableUploadAuthorRequired, $EnablePostAuthorRequired);
088
2021-12-17
jrmu
089
2021-12-17
jrmu
SDV($PageUploadFmt,array("
090
2021-12-17
jrmu
<div id='wikiupload'>
091
2021-12-17
jrmu
<h2 class='wikiaction'>$[Attachments for] {\$FullName}</h2>
092
2021-12-17
jrmu
<h3>\$UploadResult</h3>
093
2021-12-17
jrmu
<form enctype='multipart/form-data' action='{\$PageUrl}?action=postupload' method='post'>
094
2021-12-17
jrmu
<input type='hidden' name='n' value='{\$FullName}' />
095
2021-12-17
jrmu
<input type='hidden' name='action' value='postupload' />
096
2021-12-17
jrmu
<table border='0'>
097
2021-12-17
jrmu
<tr><td align='right'>$[File to upload:]</td><td><input
098
2021-12-17
jrmu
name='uploadfile' type='file' required='required' /></td></tr>
099
2021-12-17
jrmu
<tr><td align='right'>$[Name attachment as:]</td>
100
2021-12-17
jrmu
<td><input type='text' name='upname' value='\$UploadName' />
101
2021-12-17
jrmu
</td></tr>
102
2021-12-17
jrmu
<tr><td align='right'>$[Uploader]:</td>
103
2021-12-17
jrmu
<td><input type='text' name='author' value='\$UploadAuthor' \$UploadAuthorRequired />
104
2021-12-17
jrmu
<input type='submit' value=' $[Upload] ' />
105
2021-12-17
jrmu
</td></tr></table></form></div>",
106
2021-12-17
jrmu
'wiki:$[{$SiteGroup}/UploadQuickReference]'));
107
2021-12-17
jrmu
XLSDV('en',array(
108
2021-12-17
jrmu
'ULsuccess' => 'successfully uploaded',
109
2021-12-17
jrmu
'ULauthorrequired' => 'An author name is required.',
110
2021-12-17
jrmu
'ULbadname' => 'invalid attachment name',
111
2021-12-17
jrmu
'ULbadtype' => '\'$upext\' is not an allowed file extension',
112
2021-12-17
jrmu
'ULtoobig' => 'file is larger than maximum allowed by webserver',
113
2021-12-17
jrmu
'ULtoobigext' => 'file is larger than allowed maximum of $upmax
114
2021-12-17
jrmu
bytes for \'$upext\' files',
115
2021-12-17
jrmu
'ULpartial' => 'incomplete file received',
116
2021-12-17
jrmu
'ULnofile' => 'no file uploaded',
117
2021-12-17
jrmu
'ULexists' => 'file with that name already exists',
118
2021-12-17
jrmu
'ULpquota' => 'group quota exceeded',
119
2021-12-17
jrmu
'ULtquota' => 'upload quota exceeded'));
120
2021-12-17
jrmu
SDV($PageAttributes['passwdupload'],'$[Set new upload password:]');
121
2021-12-17
jrmu
SDV($DefaultPasswords['upload'],'@lock');
122
2021-12-17
jrmu
SDV($AuthCascade['upload'], 'read');
123
2021-12-17
jrmu
SDV($FmtPV['$PasswdUpload'], 'PasswdVar($pn, "upload")');
124
2021-12-17
jrmu
125
2021-12-17
jrmu
Markup('attachlist', 'directives',
126
2021-12-17
jrmu
'/\\(:attachlist\\s*(.*?):\\)/i',
127
2021-12-17
jrmu
"MarkupFmtUploadList");
128
2021-12-17
jrmu
function MarkupFmtUploadList($m) {
129
2021-12-17
jrmu
extract($GLOBALS["MarkupToHTML"]); # get $pagename
130
2021-12-17
jrmu
return Keep('<ul>'.FmtUploadList($pagename,$m[1]).'</ul>');
131
2021-12-17
jrmu
}
132
2021-12-17
jrmu
SDV($GUIButtons['attach'], array(220, 'Attach:', '', '$[file.ext]',
133
2021-12-17
jrmu
'$GUIButtonDirUrlFmt/attach.gif"$[Attach file]"'));
134
2021-12-17
jrmu
SDV($LinkFunctions['Attach:'], 'LinkUpload');
135
2021-12-17
jrmu
SDV($IMap['Attach:'], '$1');
136
2021-12-17
jrmu
SDVA($HandleActions, array('upload' => 'HandleUpload',
137
2021-12-17
jrmu
'postupload' => 'HandlePostUpload',
138
2021-12-17
jrmu
'download' => 'HandleDownload'));
139
2021-12-17
jrmu
SDVA($HandleAuth, array('upload' => 'upload',
140
2021-12-17
jrmu
'download' => 'read'));
141
2021-12-17
jrmu
SDV($HandleAuth['postupload'], $HandleAuth['upload']);
142
2021-12-17
jrmu
SDV($UploadVerifyFunction, 'UploadVerifyBasic');
143
2021-12-17
jrmu
144
2021-12-17
jrmu
function MakeUploadName($pagename,$x) {
145
2021-12-17
jrmu
global $UploadNameChars, $MakeUploadNamePatterns;
146
2021-12-17
jrmu
SDV($UploadNameChars, "-\\w. ");
147
2021-12-17
jrmu
SDV($MakeUploadNamePatterns, array(
148
2021-12-17
jrmu
"/[^$UploadNameChars]/" => '',
149
2021-12-17
jrmu
'/(\\.[^.]*)$/' => 'cb_tolower',
150
2021-12-17
jrmu
'/^[^[:alnum:]_]+/' => '',
151
2021-12-17
jrmu
'/[^[:alnum:]_]+$/' => ''));
152
2021-12-17
jrmu
return PPRA($MakeUploadNamePatterns, $x);
153
2021-12-17
jrmu
}
154
2021-12-17
jrmu
155
2021-12-17
jrmu
function LinkUpload($pagename, $imap, $path, $alt, $txt, $fmt=NULL) {
156
2021-12-17
jrmu
global $FmtV, $UploadFileFmt, $LinkUploadCreateFmt,
157
2021-12-17
jrmu
$UploadUrlFmt, $UploadPrefixFmt, $EnableDirectDownload;
158
2021-12-17
jrmu
if (preg_match('!^(.*)/([^/]+)$!', $path, $match)) {
159
2021-12-17
jrmu
$pagename = MakePageName($pagename, $match[1]);
160
2021-12-17
jrmu
$path = $match[2];
161
2021-12-17
jrmu
}
162
2021-12-17
jrmu
$upname = MakeUploadName($pagename, $path);
163
2021-12-17
jrmu
$encname = rawurlencode($upname);
164
2021-12-17
jrmu
$filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
165
2021-12-17
jrmu
$FmtV['$LinkUpload'] =
166
2021-12-17
jrmu
FmtPageName("\$PageUrl?action=upload&amp;upname=$encname", $pagename);
167
2021-12-17
jrmu
$FmtV['$LinkText'] = $txt;
168
2021-12-17
jrmu
if (!file_exists($filepath))
169
2021-12-17
jrmu
return FmtPageName($LinkUploadCreateFmt, $pagename);
170
2021-12-17
jrmu
$path = PUE(FmtPageName(IsEnabled($EnableDirectDownload, 1)
171
2021-12-17
jrmu
? "$UploadUrlFmt$UploadPrefixFmt/$encname"
172
2021-12-17
jrmu
: "{\$PageUrl}?action=download&amp;upname=$encname",
173
2021-12-17
jrmu
$pagename));
174
2021-12-17
jrmu
return LinkIMap($pagename, $imap, $path, $alt, $txt, $fmt);
175
2021-12-17
jrmu
}
176
2021-12-17
jrmu
177
2021-12-17
jrmu
# Authenticate group downloads with the group password
178
2021-12-17
jrmu
function UploadAuth($pagename, $auth, $cache=0){
179
2021-12-17
jrmu
global $GroupAttributesFmt, $EnableUploadGroupAuth;
180
2021-12-17
jrmu
if (IsEnabled($EnableUploadGroupAuth,0)){
181
2021-12-17
jrmu
SDV($GroupAttributesFmt,'$Group/GroupAttributes');
182
2021-12-17
jrmu
$pn_upload = FmtPageName($GroupAttributesFmt, $pagename);
183
2021-12-17
jrmu
} else $pn_upload = $pagename;
184
2021-12-17
jrmu
$page = RetrieveAuthPage($pn_upload, $auth, true, READPAGE_CURRENT);
185
2021-12-17
jrmu
if (!$page) Abort("?No '$auth' permissions for $pagename");
186
2021-12-17
jrmu
if ($cache) PCache($pn_upload,$page);
187
2021-12-17
jrmu
return true;
188
2021-12-17
jrmu
}
189
2021-12-17
jrmu
190
2021-12-17
jrmu
function UploadSetVars($pagename) {
191
2021-12-17
jrmu
global $Author, $FmtV, $UploadExtMax, $EnableReadOnly,
192
2021-12-17
jrmu
$EnablePostAuthorRequired, $EnableUploadAuthorRequired;
193
2021-12-17
jrmu
$FmtV['$UploadName'] = MakeUploadName($pagename,@$_REQUEST['upname']);
194
2021-12-17
jrmu
$FmtV['$UploadAuthor'] = PHSC($Author, ENT_QUOTES);
195
2021-12-17
jrmu
$upresult = PHSC(@$_REQUEST['upresult']);
196
2021-12-17
jrmu
$uprname = PHSC(@$_REQUEST['uprname']);
197
2021-12-17
jrmu
$FmtV['$upext'] = PHSC(@$_REQUEST['upext']);
198
2021-12-17
jrmu
$FmtV['$upmax'] = PHSC(@$_REQUEST['upmax']);
199
2021-12-17
jrmu
$FmtV['$UploadResult'] = ($upresult) ?
200
2021-12-17
jrmu
FmtPageName("<i>$uprname</i>: $[UL$upresult]",$pagename) :
201
2021-12-17
jrmu
(@$EnableReadOnly ? XL('Cannot modify site -- $EnableReadOnly is set'): '');
202
2021-12-17
jrmu
$FmtV['$UploadAuthorRequired'] = @$EnableUploadAuthorRequired ?
203
2021-12-17
jrmu
'required="required"' : '';
204
2021-12-17
jrmu
}
205
2021-12-17
jrmu
206
2021-12-17
jrmu
function HandleUpload($pagename, $auth = 'upload') {
207
2021-12-17
jrmu
global $HandleUploadFmt,$PageStartFmt,$PageEndFmt,$PageUploadFmt;
208
2021-12-17
jrmu
UploadAuth($pagename, $auth, 1);
209
2021-12-17
jrmu
UploadSetVars($pagename);
210
2021-12-17
jrmu
SDV($HandleUploadFmt,array(&$PageStartFmt,&$PageUploadFmt,&$PageEndFmt));
211
2021-12-17
jrmu
PrintFmt($pagename,$HandleUploadFmt);
212
2021-12-17
jrmu
}
213
2021-12-17
jrmu
214
2021-12-17
jrmu
function HandleDownload($pagename, $auth = 'read') {
215
2021-12-17
jrmu
global $UploadFileFmt, $UploadExts, $DownloadDisposition, $EnableIMSCaching;
216
2021-12-17
jrmu
SDV($DownloadDisposition, "inline");
217
2021-12-17
jrmu
UploadAuth($pagename, $auth);
218
2021-12-17
jrmu
$upname = MakeUploadName($pagename, @$_REQUEST['upname']);
219
2021-12-17
jrmu
$filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
220
2021-12-17
jrmu
if (!$upname || !file_exists($filepath)) {
221
2021-12-17
jrmu
header("HTTP/1.0 404 Not Found");
222
2021-12-17
jrmu
Abort("?requested file not found");
223
2021-12-17
jrmu
exit();
224
2021-12-17
jrmu
}
225
2021-12-17
jrmu
if (IsEnabled($EnableIMSCaching, 0)) {
226
2021-12-17
jrmu
header('Cache-Control: private');
227
2021-12-17
jrmu
header('Expires: ');
228
2021-12-17
jrmu
$filelastmod = gmdate('D, d M Y H:i:s \G\M\T', filemtime($filepath));
229
2021-12-17
jrmu
if (@$_SERVER['HTTP_IF_MODIFIED_SINCE'] == $filelastmod)
230
2021-12-17
jrmu
{ header("HTTP/1.0 304 Not Modified"); exit(); }
231
2021-12-17
jrmu
header("Last-Modified: $filelastmod");
232
2021-12-17
jrmu
}
233
2021-12-17
jrmu
preg_match('/\\.([^.]+)$/',$filepath,$match);
234
2021-12-17
jrmu
if ($UploadExts[@$match[1]])
235
2021-12-17
jrmu
header("Content-Type: {$UploadExts[@$match[1]]}");
236
2021-12-17
jrmu
$fsize = $length = filesize($filepath);
237
2021-12-17
jrmu
$end = $fsize-1;
238
2021-12-17
jrmu
header("Accept-Ranges: bytes");
239
2021-12-17
jrmu
if (@$_SERVER['HTTP_RANGE']) {
240
2021-12-17
jrmu
if(! preg_match('/^\\s*bytes\\s*=\\s*(\\d*)\\s*-\\s*(\\d*)\\s*$/i', $_SERVER['HTTP_RANGE'], $r)
241
2021-12-17
jrmu
|| intval($r[1])>$end
242
2021-12-17
jrmu
|| intval($r[2])>$end
243
2021-12-17
jrmu
|| ($r[2] && intval($r[1])>intval($r[2]))
244
2021-12-17
jrmu
) {
245
2021-12-17
jrmu
header('HTTP/1.1 416 Requested Range Not Satisfiable');
246
2021-12-17
jrmu
header("Content-Range: bytes 0-$end/$fsize");
247
2021-12-17
jrmu
exit;
248
2021-12-17
jrmu
}
249
2021-12-17
jrmu
if ($r[2]=='') $r[2] = $end;
250
2021-12-17
jrmu
if ($r[1]=='') $r[1] = $end - $r[2];
251
2021-12-17
jrmu
$length = $r[2] - $r[1] + 1;
252
2021-12-17
jrmu
header('HTTP/1.1 206 Partial Content');
253
2021-12-17
jrmu
header("Content-Range: bytes $r[1]-$r[2]/$fsize");
254
2021-12-17
jrmu
}
255
2021-12-17
jrmu
else {
256
2021-12-17
jrmu
$r = array( null, 0, $end);
257
2021-12-17
jrmu
}
258
2021-12-17
jrmu
header("Content-Length: $length");
259
2021-12-17
jrmu
header("Content-Disposition: $DownloadDisposition; filename=\"$upname\"");
260
2021-12-17
jrmu
$fp = fopen($filepath, "rb");
261
2021-12-17
jrmu
if ($fp) {
262
2021-12-17
jrmu
$bf = 8192;
263
2021-12-17
jrmu
fseek($fp, $r[1]);
264
2021-12-17
jrmu
while (!feof($fp) && ($pos = ftell($fp)) <= $r[2]) {
265
2021-12-17
jrmu
$bf = max($bf, $r[2] - $pos + 1);
266
2021-12-17
jrmu
echo fread($fp, $bf);
267
2021-12-17
jrmu
flush();
268
2021-12-17
jrmu
}
269
2021-12-17
jrmu
fclose($fp);
270
2021-12-17
jrmu
}
271
2021-12-17
jrmu
exit();
272
2021-12-17
jrmu
}
273
2021-12-17
jrmu
274
2021-12-17
jrmu
function HandlePostUpload($pagename, $auth = 'upload') {
275
2021-12-17
jrmu
global $UploadVerifyFunction, $UploadFileFmt, $LastModFile,
276
2021-12-17
jrmu
$EnableUploadVersions, $Now, $RecentUploadsFmt, $FmtV,
277
2021-12-17
jrmu
$NotifyItemUploadFmt, $NotifyItemFmt, $IsUploadPosted,
278
2021-12-17
jrmu
$UploadRedirectFunction, $UploadPermAdd, $UploadPermSet,
279
2021-12-17
jrmu
$EnableReadOnly;
280
2021-12-17
jrmu
281
2021-12-17
jrmu
if (IsEnabled($EnableReadOnly, 0))
282
2021-12-17
jrmu
Abort('Cannot modify site -- $EnableReadOnly is set', 'readonly');
283
2021-12-17
jrmu
284
2021-12-17
jrmu
UploadAuth($pagename, $auth);
285
2021-12-17
jrmu
$uploadfile = $_FILES['uploadfile'];
286
2021-12-17
jrmu
$upname = @$_REQUEST['upname'];
287
2021-12-17
jrmu
if ($upname=='') $upname=$uploadfile['name'];
288
2021-12-17
jrmu
$upname = MakeUploadName($pagename,$upname);
289
2021-12-17
jrmu
if (!function_exists($UploadVerifyFunction))
290
2021-12-17
jrmu
Abort('?no UploadVerifyFunction available');
291
2021-12-17
jrmu
$filepath = FmtPageName("$UploadFileFmt/$upname",$pagename);
292
2021-12-17
jrmu
$result = $UploadVerifyFunction($pagename,$uploadfile,$filepath);
293
2021-12-17
jrmu
if ($result=='') {
294
2021-12-17
jrmu
$filedir = preg_replace('#/[^/]*$#','',$filepath);
295
2021-12-17
jrmu
mkdirp($filedir);
296
2021-12-17
jrmu
if (IsEnabled($EnableUploadVersions, 0))
297
2021-12-17
jrmu
@rename($filepath, "$filepath,$Now");
298
2021-12-17
jrmu
if (!move_uploaded_file($uploadfile['tmp_name'],$filepath))
299
2021-12-17
jrmu
{ Abort("?cannot move uploaded file to $filepath"); return; }
300
2021-12-17
jrmu
fixperms($filepath, $UploadPermAdd, $UploadPermSet);
301
2021-12-17
jrmu
if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); }
302
2021-12-17
jrmu
$result = "upresult=success";
303
2021-12-17
jrmu
$FmtV['$upname'] = $upname;
304
2021-12-17
jrmu
$FmtV['$upsize'] = $uploadfile['size'];
305
2021-12-17
jrmu
if (IsEnabled($RecentUploadsFmt, 0)) {
306
2021-12-17
jrmu
PostRecentChanges($pagename, '', '', $RecentUploadsFmt);
307
2021-12-17
jrmu
}
308
2021-12-17
jrmu
if (IsEnabled($NotifyItemUploadFmt, 0) && function_exists('NotifyUpdate')) {
309
2021-12-17
jrmu
$NotifyItemFmt = $NotifyItemUploadFmt;
310
2021-12-17
jrmu
$IsUploadPosted = 1;
311
2021-12-17
jrmu
register_shutdown_function('NotifyUpdate', $pagename, getcwd());
312
2021-12-17
jrmu
}
313
2021-12-17
jrmu
}
314
2021-12-17
jrmu
$FmtV['$upresult'] = $result;
315
2021-12-17
jrmu
SDV($UploadRedirectFunction, 'Redirect');
316
2021-12-17
jrmu
$UploadRedirectFunction($pagename,"{\$PageUrl}?action=upload&uprname=$upname&$result");
317
2021-12-17
jrmu
}
318
2021-12-17
jrmu
319
2021-12-17
jrmu
function UploadVerifyBasic($pagename,$uploadfile,$filepath) {
320
2021-12-17
jrmu
global $EnableUploadOverwrite,$UploadExtSize,$UploadPrefixQuota,
321
2021-12-17
jrmu
$UploadDirQuota,$UploadDir, $UploadBlacklist,
322
2021-12-17
jrmu
$Author, $EnablePostAuthorRequired, $EnableUploadAuthorRequired;
323
2021-12-17
jrmu
324
2021-12-17
jrmu
if (IsEnabled($EnableUploadAuthorRequired,0) && !$Author)
325
2021-12-17
jrmu
return 'upresult=authorrequired';
326
2021-12-17
jrmu
327
2021-12-17
jrmu
if (count($UploadBlacklist)) {
328
2021-12-17
jrmu
$tmp = explode("/", $filepath);
329
2021-12-17
jrmu
$upname = strtolower(end($tmp));
330
2021-12-17
jrmu
foreach($UploadBlacklist as $needle) {
331
2021-12-17
jrmu
if (strpos($upname, $needle)!==false) return 'upresult=badname';
332
2021-12-17
jrmu
}
333
2021-12-17
jrmu
}
334
2021-12-17
jrmu
if (!$EnableUploadOverwrite && file_exists($filepath))
335
2021-12-17
jrmu
return 'upresult=exists';
336
2021-12-17
jrmu
preg_match('/\\.([^.\\/]+)$/',$filepath,$match); $ext=@$match[1];
337
2021-12-17
jrmu
$maxsize = $UploadExtSize[$ext];
338
2021-12-17
jrmu
if ($maxsize<=0) return "upresult=badtype&upext=$ext";
339
2021-12-17
jrmu
if ($uploadfile['size']>$maxsize)
340
2021-12-17
jrmu
return "upresult=toobigext&upext=$ext&upmax=$maxsize";
341
2021-12-17
jrmu
switch (@$uploadfile['error']) {
342
2021-12-17
jrmu
case 1: return 'upresult=toobig';
343
2021-12-17
jrmu
case 2: return 'upresult=toobig';
344
2021-12-17
jrmu
case 3: return 'upresult=partial';
345
2021-12-17
jrmu
case 4: return 'upresult=nofile';
346
2021-12-17
jrmu
}
347
2021-12-17
jrmu
if (!is_uploaded_file($uploadfile['tmp_name'])) return 'upresult=nofile';
348
2021-12-17
jrmu
$filedir = preg_replace('#/[^/]*$#','',$filepath);
349
2021-12-17
jrmu
if ($UploadPrefixQuota &&
350
2021-12-17
jrmu
(dirsize($filedir)-@filesize($filepath)+$uploadfile['size']) >
351
2021-12-17
jrmu
$UploadPrefixQuota) return 'upresult=pquota';
352
2021-12-17
jrmu
if ($UploadDirQuota &&
353
2021-12-17
jrmu
(dirsize($UploadDir)-@filesize($filepath)+$uploadfile['size']) >
354
2021-12-17
jrmu
$UploadDirQuota) return 'upresult=tquota';
355
2021-12-17
jrmu
return '';
356
2021-12-17
jrmu
}
357
2021-12-17
jrmu
358
2021-12-17
jrmu
function dirsize($dir) {
359
2021-12-17
jrmu
$size = 0;
360
2021-12-17
jrmu
$dirp = @opendir($dir);
361
2021-12-17
jrmu
if (!$dirp) return 0;
362
2021-12-17
jrmu
while (($file=readdir($dirp)) !== false) {
363
2021-12-17
jrmu
if ($file[0]=='.') continue;
364
2021-12-17
jrmu
if (is_dir("$dir/$file")) $size+=dirsize("$dir/$file");
365
2021-12-17
jrmu
else $size+=filesize("$dir/$file");
366
2021-12-17
jrmu
}
367
2021-12-17
jrmu
closedir($dirp);
368
2021-12-17
jrmu
return $size;
369
2021-12-17
jrmu
}
370
2021-12-17
jrmu
371
2021-12-17
jrmu
function FmtUploadList($pagename, $args) {
372
2021-12-17
jrmu
global $UploadDir, $UploadPrefixFmt, $UploadUrlFmt, $EnableUploadOverwrite,
373
2021-12-17
jrmu
$TimeFmt, $EnableDirectDownload, $IMapLinkFmt, $UrlLinkFmt, $FmtV;
374
2021-12-17
jrmu
375
2021-12-17
jrmu
$opt = ParseArgs($args);
376
2021-12-17
jrmu
if (@$opt[''][0]) $pagename = MakePageName($pagename, $opt[''][0]);
377
2021-12-17
jrmu
378
2021-12-17
jrmu
$matchfnames = '';
379
2021-12-17
jrmu
if (@$opt['names'] ) $matchfnames = $opt['names'];
380
2021-12-17
jrmu
if (@$opt['ext'])
381
2021-12-17
jrmu
$matchfnames .= FixGlob($opt['ext'], '$1*.$2');
382
2021-12-17
jrmu
383
2021-12-17
jrmu
$uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename);
384
2021-12-17
jrmu
$uploadurl = FmtPageName(IsEnabled($EnableDirectDownload, 1)
385
2021-12-17
jrmu
? "$UploadUrlFmt$UploadPrefixFmt/"
386
2021-12-17
jrmu
: "\$PageUrl?action=download&amp;upname=",
387
2021-12-17
jrmu
$pagename);
388
2021-12-17
jrmu
389
2021-12-17
jrmu
$dirp = @opendir($uploaddir);
390
2021-12-17
jrmu
if (!$dirp) return '';
391
2021-12-17
jrmu
$filelist = array();
392
2021-12-17
jrmu
while (($file=readdir($dirp)) !== false) {
393
2021-12-17
jrmu
if ($file[0] == '.') continue;
394
2021-12-17
jrmu
if ($matchfnames && ! MatchNames($file, $matchfnames)) continue;
395
2021-12-17
jrmu
$filelist[$file] = rawurlencode($file);
396
2021-12-17
jrmu
}
397
2021-12-17
jrmu
closedir($dirp);
398
2021-12-17
jrmu
$out = array();
399
2021-12-17
jrmu
natcasesort($filelist);
400
2021-12-17
jrmu
$overwrite = '';
401
2021-12-17
jrmu
$fmt = IsEnabled($IMapLinkFmt['Attach:'], $UrlLinkFmt);
402
2021-12-17
jrmu
foreach($filelist as $file=>$encfile) {
403
2021-12-17
jrmu
$FmtV['$LinkUrl'] = PUE("$uploadurl$encfile");
404
2021-12-17
jrmu
$FmtV['$LinkText'] = $file;
405
2021-12-17
jrmu
$FmtV['$LinkUpload'] =
406
2021-12-17
jrmu
FmtPageName("\$PageUrl?action=upload&amp;upname=$encfile", $pagename);
407
2021-12-17
jrmu
$stat = stat("$uploaddir/$file");
408
2021-12-17
jrmu
if ($EnableUploadOverwrite)
409
2021-12-17
jrmu
$overwrite = FmtPageName("<a rel='nofollow' class='createlink'
410
2021-12-17
jrmu
href='\$LinkUpload'>&nbsp;&Delta;</a>",
411
2021-12-17
jrmu
$pagename);
412
2021-12-17
jrmu
$lnk = FmtPageName($fmt, $pagename);
413
2021-12-17
jrmu
$out[] = "<li> $lnk$overwrite ... ".
414
2021-12-17
jrmu
number_format($stat['size']) . " bytes ... " .
415
2021-12-17
jrmu
strftime($TimeFmt, $stat['mtime']) . "</li>";
416
2021-12-17
jrmu
}
417
2021-12-17
jrmu
return implode("\n",$out);
418
2021-12-17
jrmu
}
419
2021-12-17
jrmu
420
2021-12-17
jrmu
# this adds (:if [!]attachments filepattern pagename:) to the markup
421
2021-12-17
jrmu
$Conditions['attachments'] = "AttachExist(\$pagename, \$condparm)";
422
2021-12-17
jrmu
function AttachExist($pagename, $condparm='*') {
423
2021-12-17
jrmu
global $UploadFileFmt;
424
2021-12-17
jrmu
@list($fpat, $pn) = explode(' ', $condparm, 2);
425
2021-12-17
jrmu
$pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename;
426
2021-12-17
jrmu
427
2021-12-17
jrmu
$uploaddir = FmtPageName($UploadFileFmt, $pn);
428
2021-12-17
jrmu
$flist = array();
429
2021-12-17
jrmu
$dirp = @opendir($uploaddir);
430
2021-12-17
jrmu
if ($dirp) {
431
2021-12-17
jrmu
while (($file = readdir($dirp)) !== false)
432
2021-12-17
jrmu
if ($file[0] != '.') $flist[] = $file;
433
2021-12-17
jrmu
closedir($dirp);
434
2021-12-17
jrmu
$flist = MatchNames($flist, $fpat);
435
2021-12-17
jrmu
}
436
2021-12-17
jrmu
return count($flist);
437
2021-12-17
jrmu
}
IRCNow