Adjust whitespace
[lhc/web/wiklou.git] / includes / SpecialUpload.php
1 <?
2
3 function wfSpecialUpload()
4 {
5 global $wgUser, $wgOut, $wpUpload, $wpReUpload, $action;
6 global $wgDisableUploads;
7
8 $fields = array( "wpUploadFile", "wpUploadDescription" );
9 wfCleanFormFields( $fields );
10
11 if ( $wgDisableUploads ) {
12 $wgOut->addWikiText( wfMsg( "uploaddisabled" ) );
13 return;
14 }
15 if ( ( 0 == $wgUser->getID() )
16 or $wgUser->isBlocked() ) {
17 $wgOut->errorpage( "uploadnologin", "uploadnologintext" );
18 return;
19 }
20 if ( wfReadOnly() ) {
21 $wgOut->readOnlyPage();
22 return;
23 }
24 if ( isset( $wpReUpload) ) {
25 unsaveUploadedFile();
26 mainUploadForm( "" );
27 } else if ( "submit" == $action || isset( $wpUpload ) ) {
28 processUpload();
29 } else {
30 mainUploadForm( "" );
31 }
32 }
33
34 function processUpload()
35 {
36 global $wgUser, $wgOut, $wgLang, $wpUploadAffirm, $wpUploadFile;
37 global $wpUploadDescription, $wpIgnoreWarning;
38 global $HTTP_POST_FILES, $wgUploadDirectory;
39 global $wpUploadSaveName, $wpUploadTempName, $wpUploadSize;
40 global $wgSavedFile, $wgUploadOldVersion, $wpUploadOldVersion;
41 global $wgUseCopyrightUpload , $wpUploadCopyStatus , $wpUploadSource ;
42 global $wgCheckFileExtensions, $wgFileExtensions;
43
44 if ( $wgUseCopyrightUpload ) {
45 $wpUploadAffirm = 1;
46 if ( trim ( $wpUploadCopyStatus ) == "" || trim ( $wpUploadSource ) == "" ) {
47 $wpUploadAffirm = 0;
48 }
49 }
50
51 if ( 1 != $wpUploadAffirm ) {
52 mainUploadForm( WfMsg( "noaffirmation" ) );
53 return;
54 }
55 if ( ! $wpUploadTempName ) {
56 $wpUploadTempName = $HTTP_POST_FILES['wpUploadFile']['tmp_name'];
57 }
58 if ( ! $wpUploadSize ) {
59 $wpUploadSize = $HTTP_POST_FILES['wpUploadFile']['size'];
60 }
61 $prev = error_reporting( E_ALL & ~( E_NOTICE | E_WARNING ) );
62 $oname = wfCleanQueryVar( $HTTP_POST_FILES['wpUploadFile']['name'] );
63 if ( $wpUploadSaveName != "" ) $wpUploadSaveName = wfCleanQueryVar( $wpUploadSaveName );
64 error_reporting( $prev );
65
66 if ( "" != $oname ) {
67 $basename = strrchr( $oname, "/" );
68 if ( false === $basename ) { $basename = $oname; }
69 else ( $basename = substr( $basename, 1 ) );
70
71 $ext = strrchr( $basename, "." );
72 if ( false === $ext ) { $ext = ""; }
73 else { $ext = substr( $ext, 1 ); }
74
75 if ( "" == $ext ) { $xl = 0; } else { $xl = strlen( $ext ) + 1; }
76 $partname = substr( $basename, 0, strlen( $basename ) - $xl );
77
78 if ( strlen( $partname ) < 3 ) {
79 mainUploadForm( WfMsg( "minlength" ) );
80 return;
81 }
82 $nt = Title::newFromText( $basename );
83 $wpUploadSaveName = $nt->getDBkey();
84
85 saveUploadedFile();
86 if ( ( ! $wpIgnoreWarning ) &&
87 ( 0 != strcmp( ucfirst( $basename ), $wpUploadSaveName ) ) ) {
88 return uploadWarning( wfMsg( "badfilename", $wpUploadSaveName ) );
89 }
90
91 if ( $wgCheckFileExtensions ) {
92 if ( ( ! $wpIgnoreWarning ) &&
93 ( ! in_array( strtolower( $ext ), $wgFileExtensions ) ) ) {
94 return uploadWarning( wfMsg( "badfiletype", $ext ) );
95 }
96 }
97 if ( ( ! $wpIgnoreWarning ) && ( $wpUploadSize > 150000 ) ) {
98 return uploadWarning( WfMsg( "largefile" ) );
99 }
100 }
101 if ( isset( $wpUploadOldVersion ) ) {
102 $wgUploadOldVersion = $wpUploadOldVersion;
103 }
104 wfRecordUpload( $wpUploadSaveName, $wgUploadOldVersion,
105 $wpUploadSize, $wpUploadDescription );
106
107 $sk = $wgUser->getSkin();
108 $ilink = $sk->makeMediaLink( $wpUploadSaveName, wfImageUrl(
109 $wpUploadSaveName ) );
110 $dname = $wgLang->getNsText( Namespace::getImage() ) . ":{$wpUploadSaveName}";
111 $dlink = $sk->makeKnownLink( $dname, $dname );
112
113 $wgOut->addHTML( "<h2>" . wfMsg( "successfulupload" ) . "</h2>\n" );
114 $text = wfMsg( "fileuploaded", $ilink, $dlink );
115 $wgOut->addHTML( "<p>{$text}\n" );
116 $wgOut->returnToMain( false );
117 }
118
119 function saveUploadedFile()
120 {
121 global $wpUploadSaveName, $wpUploadTempName;
122 global $wgSavedFile, $wgUploadOldVersion;
123 global $wgUploadDirectory, $wgOut;
124
125 $dest = wfImageDir( $wpUploadSaveName );
126 $archive = wfImageArchiveDir( $wpUploadSaveName );
127 $wgSavedFile = "{$dest}/{$wpUploadSaveName}";
128
129 if ( is_file( $wgSavedFile ) ) {
130 $wgUploadOldVersion = gmdate( "YmdHis" ) . "!{$wpUploadSaveName}";
131
132 if ( ! rename( $wgSavedFile, "${archive}/{$wgUploadOldVersion}" ) ) {
133 $wgOut->fileRenameError( $wgSavedFile,
134 "${archive}/{$wgUploadOldVersion}" );
135 return;
136 }
137 } else {
138 $wgUploadOldVersion = "";
139 }
140 if ( ! move_uploaded_file( $wpUploadTempName, $wgSavedFile ) ) {
141 $wgOut->fileCopyError( $wpUploadTempName, $wgSavedFile );
142 }
143 chmod( $wgSavedFile, 0644 );
144 }
145
146 function unsaveUploadedFile()
147 {
148 global $wpSessionKey, $wpUploadOldVersion;
149 global $wgUploadDirectory, $wgOut, $wsUploadFiles;
150
151 $wgSavedFile = $wsUploadFiles[$wpSessionKey];
152 $wgUploadOldVersion = $wpUploadOldVersion;
153
154 if ( ! @unlink( $wgSavedFile ) ) {
155 $wgOut->fileDeleteError( $wgSavedFile );
156 return;
157 }
158 if ( "" != $wgUploadOldVersion ) {
159 $hash = md5( substr( $wgUploadOldVersion, 15 ) );
160 $archive = "{$wgUploadDirectory}/archive/" . $hash{0} .
161 "/" . substr( $hash, 0, 2 );
162
163 if ( ! rename( "{$archive}/{$wgUploadOldVersion}", $wgSavedFile ) ) {
164 $wgOut->fileRenameError( "{$archive}/{$wgUploadOldVersion}",
165 $wgSavedFile );
166 }
167 }
168 }
169
170 function uploadWarning( $warning )
171 {
172 global $wgOut, $wgUser, $wgLang, $wgUploadDirectory;
173 global $wpUpload, $wpReUpload, $wpUploadAffirm, $wpUploadFile;
174 global $wpUploadDescription, $wpIgnoreWarning;
175 global $wpUploadSaveName, $wpUploadTempName, $wpUploadSize;
176 global $wgSavedFile, $wgUploadOldVersion;
177 global $wpSessionKey, $wpUploadOldVersion, $wsUploadFiles;
178 global $wgUseCopyrightUpload , $wpUploadCopyStatus , $wpUploadSource ;
179
180 # wgSavedFile is stored in the session not the form, for security
181 $wpSessionKey = mt_rand( 0, 0x7fffffff );
182 $wsUploadFiles[$wpSessionKey] = $wgSavedFile;
183
184 $sub = wfMsg( "uploadwarning" );
185 $wgOut->addHTML( "<h2>{$sub}</h2>\n" );
186 $wgOut->addHTML( "<h4><font color=red>{$warning}</font></h4>\n" );
187
188 $save = wfMsg( "savefile" );
189 $reupload = wfMsg( "reupload" );
190 $iw = wfMsg( "ignorewarning" );
191 $reup = wfMsg( "reuploaddesc" );
192 $action = wfLocalUrlE( $wgLang->specialPage( "Upload" ),
193 "action=submit" );
194
195 if ( $wgUseCopyrightUpload )
196 {
197 $copyright = "
198 <input type=hidden name=\"wpUploadCopyStatus\" value=\"" . htmlspecialchars( $wpUploadCopyStatus ) . "\">
199 <input type=hidden name=\"wpUploadSource\" value=\"" . htmlspecialchars( $wpUploadSource ) . "\">
200 ";
201 }
202
203 $wgOut->addHTML( "
204 <form id=\"uploadwarning\" method=\"post\" enctype=\"multipart/form-data\"
205 action=\"{$action}\">
206 <input type=hidden name=\"wpUploadAffirm\" value=\"1\">
207 <input type=hidden name=\"wpIgnoreWarning\" value=\"1\">
208 <input type=hidden name=\"wpUploadDescription\" value=\"" . htmlspecialchars( $wpUploadDescription ) . "\">
209 {$copyright}
210 <input type=hidden name=\"wpUploadSaveName\" value=\"" . htmlspecialchars( $wpUploadSaveName ) . "\">
211 <input type=hidden name=\"wpUploadTempName\" value=\"" . htmlspecialchars( $wpUploadTempName ) . "\">
212 <input type=hidden name=\"wpUploadSize\" value=\"" . htmlspecialchars( $wpUploadSize ) . "\">
213 <input type=hidden name=\"wpSessionKey\" value=\"" . htmlspecialchars( $wpSessionKey ) . "\">
214 <input type=hidden name=\"wpUploadOldVersion\" value=\"" . htmlspecialchars( $wgUploadOldVersion) . "\">
215 <table border=0><tr>
216 <tr><td align=right>
217 <input tabindex=2 type=submit name=\"wpUpload\" value=\"{$save}\">
218 </td><td align=left>{$iw}</td></tr>
219 <tr><td align=right>
220 <input tabindex=2 type=submit name=\"wpReUpload\" value=\"{$reupload}\">
221 </td><td align=left>{$reup}</td></tr></table></form>\n" );
222 }
223
224 function mainUploadForm( $msg )
225 {
226 global $wgOut, $wgUser, $wgLang, $wgUploadDirectory;
227 global $wpUpload, $wpUploadAffirm, $wpUploadFile;
228 global $wpUploadDescription, $wpIgnoreWarning;
229 global $wgUseCopyrightUpload , $wpUploadSource , $wpUploadCopyStatus ;
230
231 if ( "" != $msg ) {
232 $sub = wfMsg( "uploaderror" );
233 $wgOut->addHTML( "<h2>{$sub}</h2>\n" .
234 "<h4><font color=red>{$msg}</font></h4>\n" );
235 } else {
236 $sub = wfMsg( "uploadfile" );
237 $wgOut->addHTML( "<h2>{$sub}</h2>\n" );
238 }
239 $wgOut->addHTML( "<p>" . wfMsg( "uploadtext" ) );
240 $sk = $wgUser->getSkin();
241
242 $fn = wfMsg( "filename" );
243 $fd = wfMsg( "filedesc" );
244 $ulb = wfMsg( "uploadbtn" );
245
246 $clink = $sk->makeKnownLink( wfMsg( "copyrightpage" ),
247 wfMsg( "copyrightpagename" ) );
248 $ca = wfMsg( "affirmation", $clink );
249 $iw = wfMsg( "ignorewarning" );
250
251 $action = wfLocalUrl( $wgLang->specialPage( "Upload" ) );
252
253 $source = "
254 <td align=right>
255 <input tabindex=3 type=checkbox name=\"wpUploadAffirm\" value=\"1\" id=\"wpUploadAffirm\">
256 </td><td align=left><label for=\"wpUploadAffirm\">{$ca}</label></td>
257 " ;
258 if ( $wgUseCopyrightUpload )
259 {
260 $source = "
261 <td align=right nowrap>" . wfMsg ( "filestatus" ) . ":</td>
262 <td><input tabindex=3 type=text name=\"wpUploadCopyStatus\" value=\"" .
263 htmlspecialchars($wpUploadCopyStatus). "\" size=40></td>
264 </tr><tr>
265 <td align=right>". wfMsg ( "filesource" ) . ":</td>
266 <td><input tabindex=4 type=text name=\"wpUploadSource\" value=\"" .
267 htmlspecialchars($wpUploadSource). "\" size=40></td>
268 " ;
269 }
270
271 $wgOut->addHTML( "
272 <form id=\"upload\" method=\"post\" enctype=\"multipart/form-data\"
273 action=\"{$action}\">
274 <table border=0><tr>
275 <td align=right>{$fn}:</td><td align=left>
276 <input tabindex=1 type=file name=\"wpUploadFile\" value=\""
277 . htmlspecialchars( $wpUploadFile ) . "\" size=40>
278 </td></tr><tr>
279 <td align=right>{$fd}:</td><td align=left>
280 <input tabindex=2 type=text name=\"wpUploadDescription\" value=\""
281 . htmlspecialchars( $wpUploadDescription ) . "\" size=40>
282 </td></tr><tr>
283 {$source}
284 </tr>
285 <tr><td>&nbsp;</td><td align=left>
286 <input tabindex=5 type=submit name=\"wpUpload\" value=\"{$ulb}\">
287 </td></tr></table></form>\n" );
288 }
289
290 ?>