<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/index.php?action=history&amp;feed=atom&amp;title=Utilisateur%3ALea%2Fmw-insertnewimage</id>
	<title>Utilisateur:Lea/mw-insertnewimage - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/index.php?action=history&amp;feed=atom&amp;title=Utilisateur%3ALea%2Fmw-insertnewimage"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;action=history"/>
	<updated>2026-05-01T00:47:33Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9343&amp;oldid=prev</id>
		<title>Fred : /* Usage */</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9343&amp;oldid=prev"/>
		<updated>2005-10-16T16:52:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Usage&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 16 octobre 2005 à 16:52&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Ligne 1 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 1 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Usage =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Usage =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Catégorie:Script PHP]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Copier le script dans &amp;lt;code&amp;gt;$MEDIAWIKI_ROOT/maintenance/&amp;lt;/code&amp;gt;, modifier un peu le script, par exemple pour lui donner un nom d&amp;#039;utilisateur adapté, etc ... Puis,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Copier le script dans &amp;lt;code&amp;gt;$MEDIAWIKI_ROOT/maintenance/&amp;lt;/code&amp;gt;, modifier un peu le script, par exemple pour lui donner un nom d&amp;#039;utilisateur adapté, etc ... Puis,  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fred</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9316&amp;oldid=prev</id>
		<title>Untest : typo</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9316&amp;oldid=prev"/>
		<updated>2005-10-16T13:30:05Z</updated>

		<summary type="html">&lt;p&gt;typo&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 16 octobre 2005 à 13:30&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Ligne 1 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 1 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Usage =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Usage =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Copier le script dans &amp;lt;code&amp;gt;$MEDIAWIKI_ROOT/maintenance/&amp;lt;/code&amp;gt;, modifier un &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;peut &lt;/del&gt;le script, par exemple pour lui donner un nom d&#039;utilisateur adapté, etc ... Puis,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Copier le script dans &amp;lt;code&amp;gt;$MEDIAWIKI_ROOT/maintenance/&amp;lt;/code&amp;gt;, modifier un &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;peu &lt;/ins&gt;le script, par exemple pour lui donner un nom d&#039;utilisateur adapté, etc ... Puis,  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd $MEDIAWIKI_ROOT/maintenance/&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd $MEDIAWIKI_ROOT/maintenance/&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot;&gt;Ligne 6 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 6 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;pour insérer une image portant le nom du fichier et la copier au bon endroit dans l&amp;#039;arborescence du wiki.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;pour insérer une image portant le nom du fichier et la copier au bon endroit dans l&amp;#039;arborescence du wiki.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Code =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Code =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code multi&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Untest</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9315&amp;oldid=prev</id>
		<title>Untest le 16 octobre 2005 à 13:29</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Lea/mw-insertnewimage&amp;diff=9315&amp;oldid=prev"/>
		<updated>2005-10-16T13:29:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Usage =&lt;br /&gt;
Copier le script dans &amp;lt;code&amp;gt;$MEDIAWIKI_ROOT/maintenance/&amp;lt;/code&amp;gt;, modifier un peut le script, par exemple pour lui donner un nom d&amp;#039;utilisateur adapté, etc ... Puis, &lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
cd $MEDIAWIKI_ROOT/maintenance/&lt;br /&gt;
php &amp;lt;nom du script&amp;gt; &amp;lt;chemin relatif vers le fichier&amp;gt;.wiki&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
pour insérer une image portant le nom du fichier et la copier au bon endroit dans l&amp;#039;arborescence du wiki.&lt;br /&gt;
= Code =&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/usr/bin/php&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
&lt;br /&gt;
	define(&amp;quot;MW_PATH&amp;quot;, &amp;quot;../&amp;quot;) ;&lt;br /&gt;
	$working_dir = getcwd() ;&lt;br /&gt;
	chdir(MW_PATH) ;&lt;br /&gt;
	&lt;br /&gt;
	define(&amp;quot;MEDIAWIKI&amp;quot;, true) ;&lt;br /&gt;
	require_once( &amp;#039;includes/Defines.php&amp;#039; );&lt;br /&gt;
	require_once (&amp;quot;./LocalSettings.php&amp;quot;) ;&lt;br /&gt;
	require_once (&amp;quot;includes/Setup.php&amp;quot;) ;&lt;br /&gt;
	&lt;br /&gt;
	$wgUser = User::newFromName( &amp;quot;Lea&amp;quot; ) ;&lt;br /&gt;
	if (!$wgUser-&amp;gt;isAllowed(&amp;quot;edit&amp;quot;)) {&lt;br /&gt;
		echo &amp;quot;Lea can&amp;#039;t edit\n&amp;quot; ;&lt;br /&gt;
		exit ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	require_once (&amp;quot;maintenance/SpecialUpload-FAKE.php&amp;quot;) ;&lt;br /&gt;
	&lt;br /&gt;
	// trompons mw&lt;br /&gt;
	$_SERVER[&amp;#039;REQUEST_METHOD&amp;#039;] = &amp;#039;POST&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
	for($i = 1 ; $i &amp;lt; $argc ; $i++) {&lt;br /&gt;
		$filename = $argv[$i] ;&lt;br /&gt;
		echo &amp;quot;Fichier [$filename] : &amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
		$_REQUEST[&amp;quot;wpDestFile&amp;quot;] = &amp;quot;$filename&amp;quot; ;&lt;br /&gt;
		$_REQUEST[&amp;quot;wpUpload&amp;quot;] = &amp;quot;upload&amp;quot; ;&lt;br /&gt;
		$_REQUEST[&amp;quot;wpUploadDescription&amp;quot;] = &amp;quot;importé depuis Léa pré-wiki&amp;quot; ;&lt;br /&gt;
		$_REQUEST[&amp;quot;wpUploadSource&amp;quot;] = &amp;quot;$filename&amp;quot; ;&lt;br /&gt;
		$_FILES[&amp;quot;wpUploadFile&amp;quot;][&amp;#039;tmp_name&amp;#039;] = $filename ;&lt;br /&gt;
		$_FILES[&amp;quot;wpUploadFile&amp;quot;][&amp;#039;size&amp;#039;] = &amp;quot;12&amp;quot; ;&lt;br /&gt;
		$_FILES[&amp;quot;wpUploadFile&amp;quot;][&amp;#039;name&amp;#039;] = $filename ;&lt;br /&gt;
&lt;br /&gt;
		$request = new WebRequest();&lt;br /&gt;
&lt;br /&gt;
		$uploadform = new UploadForm($request) ;&lt;br /&gt;
		$uploadform-&amp;gt;processUpload() ;&lt;br /&gt;
		&lt;br /&gt;
		echo &amp;quot; [done]\n&amp;quot; ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//echo $wgOut-&amp;gt;output() ;&lt;br /&gt;
	&lt;br /&gt;
	foreach ( $wgDeferredUpdateList as $key =&amp;gt; $up ) {&lt;br /&gt;
		$up-&amp;gt;doUpdate();&lt;br /&gt;
	}&lt;br /&gt;
	$wgLoadBalancer-&amp;gt;commitAll();&lt;br /&gt;
	$wgLoadBalancer-&amp;gt;closeAll();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
et &amp;lt;code&amp;gt;SpecialUpload-FAKE.php&amp;lt;/code&amp;gt; (dérivé directement du code de mediawiki pour fonctionner dans le cadre du script précédant) :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @package MediaWiki&lt;br /&gt;
 * @subpackage SpecialPage&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
require_once( &amp;#039;Image.php&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Entry point&lt;br /&gt;
 */&lt;br /&gt;
function wfSpecialUpload() {&lt;br /&gt;
	global $wgRequest;&lt;br /&gt;
	$form = new UploadForm( $wgRequest );&lt;br /&gt;
	$form-&amp;gt;execute();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @package MediaWiki&lt;br /&gt;
 * @subpackage SpecialPage&lt;br /&gt;
 */&lt;br /&gt;
class UploadForm {&lt;br /&gt;
	/**#@+&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	var $mUploadFile, $mUploadDescription, $mIgnoreWarning;&lt;br /&gt;
	var $mUploadSaveName, $mUploadTempName, $mUploadSize, $mUploadOldVersion;&lt;br /&gt;
	var $mUploadCopyStatus, $mUploadSource, $mReUpload, $mAction, $mUpload;&lt;br /&gt;
	var $mOname, $mSessionKey, $mStashed, $mDestFile;&lt;br /&gt;
	/**#@-*/&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Constructor : initialise object&lt;br /&gt;
	 * Get data POSTed through the form and assign them to the object&lt;br /&gt;
	 * @param $request Data posted.&lt;br /&gt;
	 */&lt;br /&gt;
	function UploadForm( &amp;amp;$request ) {&lt;br /&gt;
		$this-&amp;gt;mDestFile          = $request-&amp;gt;getText( &amp;#039;wpDestFile&amp;#039; );&lt;br /&gt;
		&lt;br /&gt;
		if( !$request-&amp;gt;wasPosted() ) {&lt;br /&gt;
			# GET requests just give the main form; no data except wpDestfile.&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;mIgnoreWarning     = $request-&amp;gt;getCheck( &amp;#039;wpIgnoreWarning&amp;#039;);&lt;br /&gt;
		$this-&amp;gt;mReUpload          = $request-&amp;gt;getCheck( &amp;#039;wpReUpload&amp;#039; );&lt;br /&gt;
		$this-&amp;gt;mUpload            = $request-&amp;gt;getCheck( &amp;#039;wpUpload&amp;#039; );&lt;br /&gt;
		&lt;br /&gt;
		$this-&amp;gt;mUploadDescription = $request-&amp;gt;getText( &amp;#039;wpUploadDescription&amp;#039; );&lt;br /&gt;
		$this-&amp;gt;mUploadCopyStatus  = $request-&amp;gt;getText( &amp;#039;wpUploadCopyStatus&amp;#039; );&lt;br /&gt;
		$this-&amp;gt;mUploadSource      = $request-&amp;gt;getText( &amp;#039;wpUploadSource&amp;#039;);&lt;br /&gt;
		&lt;br /&gt;
		$this-&amp;gt;mAction            = $request-&amp;gt;getVal( &amp;#039;action&amp;#039; );&lt;br /&gt;
		&lt;br /&gt;
		$this-&amp;gt;mSessionKey        = $request-&amp;gt;getInt( &amp;#039;wpSessionKey&amp;#039; );&lt;br /&gt;
		if( !empty( $this-&amp;gt;mSessionKey ) &amp;amp;&amp;amp;&lt;br /&gt;
			isset( $_SESSION[&amp;#039;wsUploadData&amp;#039;][$this-&amp;gt;mSessionKey] ) ) {&lt;br /&gt;
			/**&lt;br /&gt;
			 * Confirming a temporarily stashed upload.&lt;br /&gt;
			 * We don&amp;#039;t want path names to be forged, so we keep&lt;br /&gt;
			 * them in the session on the server and just give&lt;br /&gt;
			 * an opaque key to the user agent.&lt;br /&gt;
			 */&lt;br /&gt;
			$data = $_SESSION[&amp;#039;wsUploadData&amp;#039;][$this-&amp;gt;mSessionKey];&lt;br /&gt;
			$this-&amp;gt;mUploadTempName   = $data[&amp;#039;mUploadTempName&amp;#039;];&lt;br /&gt;
			$this-&amp;gt;mUploadSize       = $data[&amp;#039;mUploadSize&amp;#039;];&lt;br /&gt;
			$this-&amp;gt;mOname            = $data[&amp;#039;mOname&amp;#039;];&lt;br /&gt;
			$this-&amp;gt;mStashed	 	 = true;&lt;br /&gt;
		} else {&lt;br /&gt;
			/**&lt;br /&gt;
			 *Check for a newly uploaded file.&lt;br /&gt;
			 */&lt;br /&gt;
			$this-&amp;gt;mUploadTempName = $request-&amp;gt;getFileTempName( &amp;#039;wpUploadFile&amp;#039; );&lt;br /&gt;
			$this-&amp;gt;mUploadSize     = $request-&amp;gt;getFileSize( &amp;#039;wpUploadFile&amp;#039; );&lt;br /&gt;
			$this-&amp;gt;mOname          = $request-&amp;gt;getFileName( &amp;#039;wpUploadFile&amp;#039; );&lt;br /&gt;
			$this-&amp;gt;mSessionKey     = false;&lt;br /&gt;
			$this-&amp;gt;mStashed        = false;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Start doing stuff&lt;br /&gt;
	 * @access public&lt;br /&gt;
	 */&lt;br /&gt;
	function execute() {&lt;br /&gt;
		global $wgUser, $wgOut;&lt;br /&gt;
		global $wgEnableUploads, $wgUploadDirectory;&lt;br /&gt;
&lt;br /&gt;
		/** Show an error message if file upload is disabled */ &lt;br /&gt;
		if( ! $wgEnableUploads ) {&lt;br /&gt;
			$wgOut-&amp;gt;addWikiText( wfMsg( &amp;#039;uploaddisabled&amp;#039; ) );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/** Various rights checks */&lt;br /&gt;
		if( !$wgUser-&amp;gt;isAllowed( &amp;#039;upload&amp;#039; ) || $wgUser-&amp;gt;isBlocked() ) {&lt;br /&gt;
			$wgOut-&amp;gt;errorpage( &amp;#039;uploadnologin&amp;#039;, &amp;#039;uploadnologintext&amp;#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		if( wfReadOnly() ) {&lt;br /&gt;
			$wgOut-&amp;gt;readOnlyPage();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/** Check if the image directory is writeable, this is a common mistake */&lt;br /&gt;
		if ( !is_writeable( $wgUploadDirectory ) ) {&lt;br /&gt;
			$wgOut-&amp;gt;addWikiText( wfMsg( &amp;#039;upload_directory_read_only&amp;#039;, $wgUploadDirectory ) );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( $this-&amp;gt;mReUpload ) {&lt;br /&gt;
			$this-&amp;gt;unsaveUploadedFile();&lt;br /&gt;
			$this-&amp;gt;mainUploadForm();&lt;br /&gt;
		} else if ( &amp;#039;submit&amp;#039; == $this-&amp;gt;mAction || $this-&amp;gt;mUpload ) {&lt;br /&gt;
			$this-&amp;gt;processUpload();&lt;br /&gt;
		} else {&lt;br /&gt;
			$this-&amp;gt;mainUploadForm();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* -------------------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Really do the upload&lt;br /&gt;
	 * Checks are made in SpecialUpload::execute()&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function processUpload() {&lt;br /&gt;
		global $wgUser, $wgOut, $wgLang, $wgContLang;&lt;br /&gt;
		global $wgUploadDirectory;&lt;br /&gt;
		global $wgUseCopyrightUpload, $wgCheckCopyrightUpload;&lt;br /&gt;
&lt;br /&gt;
		/**&lt;br /&gt;
		 * If there was no filename or a zero size given, give up quick.&lt;br /&gt;
		 */&lt;br /&gt;
		if( trim( $this-&amp;gt;mOname ) == &amp;#039;&amp;#039; || empty( $this-&amp;gt;mUploadSize ) ) {&lt;br /&gt;
			return $this-&amp;gt;mainUploadForm(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;emptyfile&amp;#039; ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# Chop off any directories in the given filename&lt;br /&gt;
		if ( $this-&amp;gt;mDestFile ) {&lt;br /&gt;
			$basename = basename( $this-&amp;gt;mDestFile );&lt;br /&gt;
		} else {&lt;br /&gt;
			$basename = basename( $this-&amp;gt;mOname );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/**&lt;br /&gt;
		 * We&amp;#039;ll want to blacklist against *any* &amp;#039;extension&amp;#039;, and use&lt;br /&gt;
		 * only the final one for the whitelist.&lt;br /&gt;
		 */&lt;br /&gt;
		list( $partname, $ext ) = $this-&amp;gt;splitExtensions( $basename );&lt;br /&gt;
		if( count( $ext ) ) {&lt;br /&gt;
			$finalExt = $ext[count( $ext ) - 1];&lt;br /&gt;
		} else {&lt;br /&gt;
			$finalExt = &amp;#039;&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$fullExt = implode( &amp;#039;.&amp;#039;, $ext );&lt;br /&gt;
		&lt;br /&gt;
		if ( strlen( $partname ) &amp;lt; 3 ) {&lt;br /&gt;
			$this-&amp;gt;mainUploadForm( wfMsg( &amp;#039;minlength&amp;#039; ) );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/**&lt;br /&gt;
		 * Filter out illegal characters, and try to make a legible name&lt;br /&gt;
		 * out of it. We&amp;#039;ll strip some silently that Title would die on.&lt;br /&gt;
		 */&lt;br /&gt;
		$filtered = preg_replace ( &amp;quot;/[^&amp;quot;.Title::legalChars().&amp;quot;]|:/&amp;quot;, &amp;#039;-&amp;#039;, $basename );&lt;br /&gt;
		$nt = Title::newFromText( $filtered );&lt;br /&gt;
		if( is_null( $nt ) ) {&lt;br /&gt;
			return $this-&amp;gt;uploadError( wfMsg( &amp;#039;illegalfilename&amp;#039;, htmlspecialchars( $filtered ) ) );&lt;br /&gt;
		}&lt;br /&gt;
		$nt =&amp;amp; Title::makeTitle( NS_IMAGE, $nt-&amp;gt;getDBkey() );&lt;br /&gt;
		$this-&amp;gt;mUploadSaveName = $nt-&amp;gt;getDBkey();&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * If the image is protected, non-sysop users won&amp;#039;t be able&lt;br /&gt;
		 * to modify it by uploading a new revision.&lt;br /&gt;
		 */&lt;br /&gt;
		if( !$nt-&amp;gt;userCanEdit() ) {&lt;br /&gt;
			return $this-&amp;gt;uploadError( wfMsg( &amp;#039;protectedpage&amp;#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/* Don&amp;#039;t allow users to override the blacklist (check file extension) */&lt;br /&gt;
		global $wgStrictFileExtensions;&lt;br /&gt;
		global $wgFileExtensions, $wgFileBlacklist;&lt;br /&gt;
		if( $this-&amp;gt;checkFileExtensionList( $ext, $wgFileBlacklist ) ||&lt;br /&gt;
			($wgStrictFileExtensions &amp;amp;&amp;amp;&lt;br /&gt;
				!$this-&amp;gt;checkFileExtension( $finalExt, $wgFileExtensions ) ) ) {&lt;br /&gt;
			return $this-&amp;gt;uploadError( wfMsg( &amp;#039;badfiletype&amp;#039;, htmlspecialchars( $fullExt ) ) );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * Look at the contents of the file; if we can recognize the&lt;br /&gt;
		 * type but it&amp;#039;s corrupt or data of the wrong type, we should&lt;br /&gt;
		 * probably not accept it.&lt;br /&gt;
		 */&lt;br /&gt;
		if( !$this-&amp;gt;mStashed ) {&lt;br /&gt;
			$veri= $this-&amp;gt;verify($this-&amp;gt;mUploadTempName, $finalExt);&lt;br /&gt;
			&lt;br /&gt;
			if( $veri !== true ) { //it&amp;#039;s a wiki error...&lt;br /&gt;
				return $this-&amp;gt;uploadError( $veri-&amp;gt;toString() );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * Check for non-fatal conditions&lt;br /&gt;
		 */&lt;br /&gt;
		if ( ! $this-&amp;gt;mIgnoreWarning ) {&lt;br /&gt;
			$warning = &amp;#039;&amp;#039;;&lt;br /&gt;
			if( $this-&amp;gt;mUploadSaveName != ucfirst( $filtered ) ) {&lt;br /&gt;
				$warning .=  &amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;badfilename&amp;#039;, htmlspecialchars( $this-&amp;gt;mUploadSaveName ) ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			global $wgCheckFileExtensions;&lt;br /&gt;
			if ( $wgCheckFileExtensions ) {&lt;br /&gt;
				if ( ! $this-&amp;gt;checkFileExtension( $finalExt, $wgFileExtensions ) ) {&lt;br /&gt;
					$warning .= &amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;badfiletype&amp;#039;, htmlspecialchars( $fullExt ) ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			global $wgUploadSizeWarning;&lt;br /&gt;
			if ( $wgUploadSizeWarning &amp;amp;&amp;amp; ( $this-&amp;gt;mUploadSize &amp;gt; $wgUploadSizeWarning ) ) {&lt;br /&gt;
				# TODO: Format $wgUploadSizeWarning to something that looks better than the raw byte&lt;br /&gt;
				# value, perhaps add GB,MB and KB suffixes?&lt;br /&gt;
				$warning .= &amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;largefile&amp;#039;, $wgUploadSizeWarning, $this-&amp;gt;mUploadSize ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
			if ( $this-&amp;gt;mUploadSize == 0 ) {&lt;br /&gt;
				$warning .= &amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;emptyfile&amp;#039; ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if( $nt-&amp;gt;getArticleID() ) {&lt;br /&gt;
				global $wgUser;&lt;br /&gt;
				$sk = $wgUser-&amp;gt;getSkin();&lt;br /&gt;
				$dlink = $sk-&amp;gt;makeKnownLinkObj( $nt );&lt;br /&gt;
				$warning .= &amp;#039;&amp;lt;li&amp;gt;&amp;#039;.wfMsg( &amp;#039;fileexists&amp;#039;, $dlink ).&amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if( $warning != &amp;#039;&amp;#039; ) {&lt;br /&gt;
				/**&lt;br /&gt;
				 * Stash the file in a temporary location; the user can choose&lt;br /&gt;
				 * to let it through and we&amp;#039;ll complete the upload then.&lt;br /&gt;
				 */&lt;br /&gt;
				return $this-&amp;gt;uploadWarning($warning);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/**&lt;br /&gt;
		 * Try actually saving the thing...&lt;br /&gt;
		 * It will show an error form on failure.&lt;br /&gt;
		 */&lt;br /&gt;
		if( $this-&amp;gt;saveUploadedFile( $this-&amp;gt;mUploadSaveName,&lt;br /&gt;
		                             $this-&amp;gt;mUploadTempName,&lt;br /&gt;
		                             !empty( $this-&amp;gt;mSessionKey ) ) ) {&lt;br /&gt;
			/**&lt;br /&gt;
			 * Update the upload log and create the description page&lt;br /&gt;
			 * if it&amp;#039;s a new file.&lt;br /&gt;
			 */&lt;br /&gt;
			$img = Image::newFromName( $this-&amp;gt;mUploadSaveName );&lt;br /&gt;
			$success = $img-&amp;gt;recordUpload( $this-&amp;gt;mUploadOldVersion,&lt;br /&gt;
			                                $this-&amp;gt;mUploadDescription,&lt;br /&gt;
			                                $this-&amp;gt;mUploadCopyStatus,&lt;br /&gt;
			                                $this-&amp;gt;mUploadSource );&lt;br /&gt;
&lt;br /&gt;
			if ( $success ) {&lt;br /&gt;
				$this-&amp;gt;showSuccess();&lt;br /&gt;
			} else {&lt;br /&gt;
				// Image::recordUpload() fails if the image went missing, which is &lt;br /&gt;
				// unlikely, hence the lack of a specialised message&lt;br /&gt;
				$wgOut-&amp;gt;fileNotFoundError( $this-&amp;gt;mUploadSaveName );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Move the uploaded file from its temporary location to the final&lt;br /&gt;
	 * destination. If a previous version of the file exists, move&lt;br /&gt;
	 * it into the archive subdirectory.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @todo If the later save fails, we may have disappeared the original file.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $saveName&lt;br /&gt;
	 * @param string $tempName full path to the temporary file&lt;br /&gt;
	 * @param bool $useRename if true, doesn&amp;#039;t check that the source file&lt;br /&gt;
	 *                        is a PHP-managed upload temporary&lt;br /&gt;
	 */&lt;br /&gt;
	function saveUploadedFile( $saveName, $tempName, $useRename = false ) {&lt;br /&gt;
		global $wgUploadDirectory, $wgOut;&lt;br /&gt;
&lt;br /&gt;
		$fname= &amp;quot;SpecialUpload::saveUploadedFile&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$dest = wfImageDir( $saveName );&lt;br /&gt;
		$archive = wfImageArchiveDir( $saveName );&lt;br /&gt;
		$this-&amp;gt;mSavedFile = &amp;quot;{$dest}/{$saveName}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		if( is_file( $this-&amp;gt;mSavedFile ) ) {&lt;br /&gt;
			$this-&amp;gt;mUploadOldVersion = gmdate( &amp;#039;YmdHis&amp;#039; ) . &amp;quot;!{$saveName}&amp;quot;;&lt;br /&gt;
			wfSuppressWarnings();&lt;br /&gt;
			$success = rename( $this-&amp;gt;mSavedFile, &amp;quot;${archive}/{$this-&amp;gt;mUploadOldVersion}&amp;quot; );&lt;br /&gt;
			wfRestoreWarnings();&lt;br /&gt;
&lt;br /&gt;
			if( ! $success ) { &lt;br /&gt;
				$wgOut-&amp;gt;fileRenameError( $this-&amp;gt;mSavedFile,&lt;br /&gt;
				  &amp;quot;${archive}/{$this-&amp;gt;mUploadOldVersion}&amp;quot; );&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
			else wfDebug(&amp;quot;$fname: moved file &amp;quot;.$this-&amp;gt;mSavedFile.&amp;quot; to ${archive}/{$this-&amp;gt;mUploadOldVersion}\n&amp;quot;);&lt;br /&gt;
		} &lt;br /&gt;
		else {&lt;br /&gt;
			$this-&amp;gt;mUploadOldVersion = &amp;#039;&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if( $useRename ) {&lt;br /&gt;
			wfSuppressWarnings();&lt;br /&gt;
			$success = rename( $tempName, $this-&amp;gt;mSavedFile );&lt;br /&gt;
			wfRestoreWarnings();&lt;br /&gt;
			&lt;br /&gt;
			if( ! $success ) {&lt;br /&gt;
				$wgOut-&amp;gt;fileCopyError( $tempName, $this-&amp;gt;mSavedFile );&lt;br /&gt;
				return false;&lt;br /&gt;
			} else {&lt;br /&gt;
				wfDebug(&amp;quot;$fname: wrote tempfile $tempName to &amp;quot;.$this-&amp;gt;mSavedFile.&amp;quot;\n&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			wfSuppressWarnings();&lt;br /&gt;
&lt;br /&gt;
			$success = copy ($tempName, $this-&amp;gt;mSavedFile) ;&lt;br /&gt;
			//$success = move_uploaded_file( $tempName, $this-&amp;gt;mSavedFile );&lt;br /&gt;
			wfRestoreWarnings();&lt;br /&gt;
			&lt;br /&gt;
			if( ! $success ) {&lt;br /&gt;
				$wgOut-&amp;gt;fileCopyError( $tempName, $this-&amp;gt;mSavedFile );&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
			else wfDebug(&amp;quot;$fname: wrote tempfile $tempName to &amp;quot;.$this-&amp;gt;mSavedFile.&amp;quot;\n&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		chmod( $this-&amp;gt;mSavedFile, 0644 );&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Stash a file in a temporary directory for later processing&lt;br /&gt;
	 * after the user has confirmed it.&lt;br /&gt;
	 *&lt;br /&gt;
	 * If the user doesn&amp;#039;t explicitly cancel or accept, these files&lt;br /&gt;
	 * can accumulate in the temp directory.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $saveName - the destination filename&lt;br /&gt;
	 * @param string $tempName - the source temporary file to save&lt;br /&gt;
	 * @return string - full path the stashed file, or false on failure&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function saveTempUploadedFile( $saveName, $tempName ) {&lt;br /&gt;
		global $wgOut;		&lt;br /&gt;
		$archive = wfImageArchiveDir( $saveName, &amp;#039;temp&amp;#039; );&lt;br /&gt;
		$stash = $archive . &amp;#039;/&amp;#039; . gmdate( &amp;quot;YmdHis&amp;quot; ) . &amp;#039;!&amp;#039; . $saveName;&lt;br /&gt;
&lt;br /&gt;
		if ( !move_uploaded_file( $tempName, $stash ) ) {&lt;br /&gt;
			$wgOut-&amp;gt;fileCopyError( $tempName, $stash );&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		return $stash;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Stash a file in a temporary directory for later processing,&lt;br /&gt;
	 * and save the necessary descriptive info into the session.&lt;br /&gt;
	 * Returns a key value which will be passed through a form&lt;br /&gt;
	 * to pick up the path info on a later invocation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return int&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function stashSession() {		&lt;br /&gt;
		$stash = $this-&amp;gt;saveTempUploadedFile(&lt;br /&gt;
			$this-&amp;gt;mUploadSaveName, $this-&amp;gt;mUploadTempName );&lt;br /&gt;
&lt;br /&gt;
		if( !$stash ) {&lt;br /&gt;
			# Couldn&amp;#039;t save the file.&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		$key = mt_rand( 0, 0x7fffffff );&lt;br /&gt;
		$_SESSION[&amp;#039;wsUploadData&amp;#039;][$key] = array(&lt;br /&gt;
			&amp;#039;mUploadTempName&amp;#039; =&amp;gt; $stash,&lt;br /&gt;
			&amp;#039;mUploadSize&amp;#039;     =&amp;gt; $this-&amp;gt;mUploadSize,&lt;br /&gt;
			&amp;#039;mOname&amp;#039;          =&amp;gt; $this-&amp;gt;mOname );&lt;br /&gt;
		return $key;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Remove a temporarily kept file stashed by saveTempUploadedFile().&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function unsaveUploadedFile() {&lt;br /&gt;
		wfSuppressWarnings();&lt;br /&gt;
		$success = unlink( $this-&amp;gt;mUploadTempName );&lt;br /&gt;
		wfRestoreWarnings();&lt;br /&gt;
		if ( ! $success ) {&lt;br /&gt;
			$wgOut-&amp;gt;fileDeleteError( $this-&amp;gt;mUploadTempName );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* -------------------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Show some text and linkage on successful upload.&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function showSuccess() {&lt;br /&gt;
		global $wgUser, $wgOut, $wgContLang;&lt;br /&gt;
		&lt;br /&gt;
		$sk = $wgUser-&amp;gt;getSkin();&lt;br /&gt;
		$ilink = $sk-&amp;gt;makeMediaLink( $this-&amp;gt;mUploadSaveName, Image::imageUrl( $this-&amp;gt;mUploadSaveName ) );&lt;br /&gt;
		$dname = $wgContLang-&amp;gt;getNsText( NS_IMAGE ) . &amp;#039;:&amp;#039;.$this-&amp;gt;mUploadSaveName;&lt;br /&gt;
		$dlink = $sk-&amp;gt;makeKnownLink( $dname, $dname );&lt;br /&gt;
&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;#039;&amp;lt;h2&amp;gt;&amp;#039; . wfMsg( &amp;#039;successfulupload&amp;#039; ) . &amp;quot;&amp;lt;/h2&amp;gt;\n&amp;quot; );&lt;br /&gt;
		$text = wfMsg( &amp;#039;fileuploaded&amp;#039;, $ilink, $dlink );&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( $text );&lt;br /&gt;
		$wgOut-&amp;gt;returnToMain( false );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param string $error as HTML&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function uploadError( $error ) {&lt;br /&gt;
		global $wgOut;&lt;br /&gt;
		$sub = wfMsg( &amp;#039;uploadwarning&amp;#039; );&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;h2&amp;gt;{$sub}&amp;lt;/h2&amp;gt;\n&amp;quot; );&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;h4 class=&amp;#039;error&amp;#039;&amp;gt;{$error}&amp;lt;/h4&amp;gt;\n&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * There&amp;#039;s something wrong with this file, not enough to reject it&lt;br /&gt;
	 * totally but we require manual intervention to save it for real.&lt;br /&gt;
	 * Stash it away, then present a form asking to confirm or cancel.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $warning as HTML&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function uploadWarning( $warning ) {&lt;br /&gt;
		global $wgOut, $wgUser, $wgLang, $wgUploadDirectory, $wgRequest;&lt;br /&gt;
		global $wgUseCopyrightUpload;&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;mSessionKey = $this-&amp;gt;stashSession();&lt;br /&gt;
		if( !$this-&amp;gt;mSessionKey ) {&lt;br /&gt;
			# Couldn&amp;#039;t save file; an error has been displayed so let&amp;#039;s go.&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$sub = wfMsg( &amp;#039;uploadwarning&amp;#039; );&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;h2&amp;gt;{$sub}&amp;lt;/h2&amp;gt;\n&amp;quot; );&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;ul class=&amp;#039;warning&amp;#039;&amp;gt;{$warning}&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		$save = wfMsg( &amp;#039;savefile&amp;#039; );&lt;br /&gt;
		$reupload = wfMsg( &amp;#039;reupload&amp;#039; );&lt;br /&gt;
		$iw = wfMsg( &amp;#039;ignorewarning&amp;#039; );&lt;br /&gt;
		$reup = wfMsg( &amp;#039;reuploaddesc&amp;#039; );&lt;br /&gt;
		$titleObj = Title::makeTitle( NS_SPECIAL, &amp;#039;Upload&amp;#039; );&lt;br /&gt;
		$action = $titleObj-&amp;gt;escapeLocalURL( &amp;#039;action=submit&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
		if ( $wgUseCopyrightUpload )&lt;br /&gt;
		{&lt;br /&gt;
			$copyright =  &amp;quot;&lt;br /&gt;
	&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpUploadCopyStatus&amp;#039; value=\&amp;quot;&amp;quot; . htmlspecialchars( $this-&amp;gt;mUploadCopyStatus ) . &amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpUploadSource&amp;#039; value=\&amp;quot;&amp;quot; . htmlspecialchars( $this-&amp;gt;mUploadSource ) . &amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;quot;;&lt;br /&gt;
		} else {&lt;br /&gt;
			$copyright = &amp;quot;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&lt;br /&gt;
	&amp;lt;form id=&amp;#039;uploadwarning&amp;#039; method=&amp;#039;post&amp;#039; enctype=&amp;#039;multipart/form-data&amp;#039; action=&amp;#039;$action&amp;#039;&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpIgnoreWarning&amp;#039; value=&amp;#039;1&amp;#039; /&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpSessionKey&amp;#039; value=\&amp;quot;&amp;quot; . htmlspecialchars( $this-&amp;gt;mSessionKey ) . &amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpUploadDescription&amp;#039; value=\&amp;quot;&amp;quot; . htmlspecialchars( $this-&amp;gt;mUploadDescription ) . &amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;#039;hidden&amp;#039; name=&amp;#039;wpDestFile&amp;#039; value=\&amp;quot;&amp;quot; . htmlspecialchars( $this-&amp;gt;mDestFile ) . &amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
	{$copyright}&lt;br /&gt;
	&amp;lt;table border=&amp;#039;0&amp;#039;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;&lt;br /&gt;
					&amp;lt;input tabindex=&amp;#039;2&amp;#039; type=&amp;#039;submit&amp;#039; name=&amp;#039;wpUpload&amp;#039; value=&amp;#039;$save&amp;#039; /&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;$iw&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;&lt;br /&gt;
					&amp;lt;input tabindex=&amp;#039;2&amp;#039; type=&amp;#039;submit&amp;#039; name=&amp;#039;wpReUpload&amp;#039; value=&amp;#039;{$reupload}&amp;#039; /&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;$reup&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&amp;lt;/form&amp;gt;\n&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Displays the main upload form, optionally with a highlighted&lt;br /&gt;
	 * error message up at the top.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $msg as HTML&lt;br /&gt;
	 * @access private&lt;br /&gt;
	 */&lt;br /&gt;
	function mainUploadForm( $msg=&amp;#039;&amp;#039; ) {&lt;br /&gt;
		global $wgOut, $wgUser, $wgLang, $wgUploadDirectory, $wgRequest;&lt;br /&gt;
		global $wgUseCopyrightUpload;&lt;br /&gt;
		&lt;br /&gt;
		$cols = intval($wgUser-&amp;gt;getOption( &amp;#039;cols&amp;#039; ));&lt;br /&gt;
		$ew = $wgUser-&amp;gt;getOption( &amp;#039;editwidth&amp;#039; );&lt;br /&gt;
		if ( $ew ) $ew = &amp;quot; style=\&amp;quot;width:100%\&amp;quot;&amp;quot;;&lt;br /&gt;
		else $ew = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		if ( &amp;#039;&amp;#039; != $msg ) {&lt;br /&gt;
			$sub = wfMsg( &amp;#039;uploaderror&amp;#039; );&lt;br /&gt;
			$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;h2&amp;gt;{$sub}&amp;lt;/h2&amp;gt;\n&amp;quot; .&lt;br /&gt;
			  &amp;quot;&amp;lt;h4 class=&amp;#039;error&amp;#039;&amp;gt;{$msg}&amp;lt;/h4&amp;gt;\n&amp;quot; );&lt;br /&gt;
		}&lt;br /&gt;
		$wgOut-&amp;gt;addWikiText( wfMsg( &amp;#039;uploadtext&amp;#039; ) );&lt;br /&gt;
		$sk = $wgUser-&amp;gt;getSkin();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$sourcefilename = wfMsg( &amp;#039;sourcefilename&amp;#039; );&lt;br /&gt;
		$destfilename = wfMsg( &amp;#039;destfilename&amp;#039; );&lt;br /&gt;
		&lt;br /&gt;
		$fd = wfMsg( &amp;#039;filedesc&amp;#039; );&lt;br /&gt;
		$ulb = wfMsg( &amp;#039;uploadbtn&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
		$iw = wfMsg( &amp;#039;ignorewarning&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
		$titleObj = Title::makeTitle( NS_SPECIAL, &amp;#039;Upload&amp;#039; );&lt;br /&gt;
		$action = $titleObj-&amp;gt;escapeLocalURL();&lt;br /&gt;
&lt;br /&gt;
		$encDestFile = htmlspecialchars( $this-&amp;gt;mDestFile );&lt;br /&gt;
		$source = null;&lt;br /&gt;
&lt;br /&gt;
		if ( $wgUseCopyrightUpload )&lt;br /&gt;
		  {&lt;br /&gt;
			$source = &amp;quot;&lt;br /&gt;
	&amp;lt;td align=&amp;#039;right&amp;#039; nowrap=&amp;#039;nowrap&amp;#039;&amp;gt;&amp;quot; . wfMsg ( &amp;#039;filestatus&amp;#039; ) . &amp;quot;:&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;input tabindex=&amp;#039;3&amp;#039; type=&amp;#039;text&amp;#039; name=\&amp;quot;wpUploadCopyStatus\&amp;quot; value=\&amp;quot;&amp;quot; .&lt;br /&gt;
	htmlspecialchars($this-&amp;gt;mUploadCopyStatus). &amp;quot;\&amp;quot; size=&amp;#039;40&amp;#039; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;&amp;quot;. wfMsg ( &amp;#039;filesource&amp;#039; ) . &amp;quot;:&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;input tabindex=&amp;#039;4&amp;#039; type=&amp;#039;text&amp;#039; name=&amp;#039;wpUploadSource&amp;#039; value=\&amp;quot;&amp;quot; .&lt;br /&gt;
	htmlspecialchars($this-&amp;gt;mUploadSource). &amp;quot;\&amp;quot; size=&amp;#039;40&amp;#039; /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;quot; ;&lt;br /&gt;
		  }&lt;br /&gt;
&lt;br /&gt;
		$wgOut-&amp;gt;addHTML( &amp;quot;&lt;br /&gt;
	&amp;lt;form id=&amp;#039;upload&amp;#039; method=&amp;#039;post&amp;#039; enctype=&amp;#039;multipart/form-data&amp;#039; action=\&amp;quot;$action\&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;table border=&amp;#039;0&amp;#039;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;{$sourcefilename}:&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;input tabindex=&amp;#039;1&amp;#039; type=&amp;#039;file&amp;#039; name=&amp;#039;wpUploadFile&amp;#039; id=&amp;#039;wpUploadFile&amp;#039; onchange=&amp;#039;fillDestFilename()&amp;#039; size=&amp;#039;40&amp;#039; /&amp;gt;&lt;br /&gt;
	&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;{$destfilename}:&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;input tabindex=&amp;#039;1&amp;#039; type=&amp;#039;text&amp;#039; name=&amp;#039;wpDestFile&amp;#039; id=&amp;#039;wpDestFile&amp;#039; size=&amp;#039;40&amp;#039; value=\&amp;quot;$encDestFile\&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;td align=&amp;#039;right&amp;#039;&amp;gt;{$fd}:&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;textarea tabindex=&amp;#039;2&amp;#039; name=&amp;#039;wpUploadDescription&amp;#039; rows=&amp;#039;6&amp;#039; cols=&amp;#039;{$cols}&amp;#039;{$ew}&amp;gt;&amp;quot;	&lt;br /&gt;
	  . htmlspecialchars( $this-&amp;gt;mUploadDescription ) .&lt;br /&gt;
	&amp;quot;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
	&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
	{$source}&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;#039;left&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;input tabindex=&amp;#039;5&amp;#039; type=&amp;#039;submit&amp;#039; name=&amp;#039;wpUpload&amp;#039; value=\&amp;quot;{$ulb}\&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/form&amp;gt;\n&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/* -------------------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Split a file into a base name and all dot-delimited &amp;#039;extensions&amp;#039;&lt;br /&gt;
	 * on the end. Some web server configurations will fall back to&lt;br /&gt;
	 * earlier pseudo-&amp;#039;extensions&amp;#039; to determine type and execute&lt;br /&gt;
	 * scripts, so the blacklist needs to check them all.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return array&lt;br /&gt;
	 */&lt;br /&gt;
	function splitExtensions( $filename ) {&lt;br /&gt;
		$bits = explode( &amp;#039;.&amp;#039;, $filename );&lt;br /&gt;
		$basename = array_shift( $bits );&lt;br /&gt;
		return array( $basename, $bits );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Perform case-insensitive match against a list of file extensions.&lt;br /&gt;
	 * Returns true if the extension is in the list.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $ext&lt;br /&gt;
	 * @param array $list&lt;br /&gt;
	 * @return bool&lt;br /&gt;
	 */&lt;br /&gt;
	function checkFileExtension( $ext, $list ) {&lt;br /&gt;
		return in_array( strtolower( $ext ), $list );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Perform case-insensitive match against a list of file extensions.&lt;br /&gt;
	 * Returns true if any of the extensions are in the list.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param array $ext&lt;br /&gt;
	 * @param array $list&lt;br /&gt;
	 * @return bool&lt;br /&gt;
	 */&lt;br /&gt;
	function checkFileExtensionList( $ext, $list ) {&lt;br /&gt;
		foreach( $ext as $e ) {&lt;br /&gt;
			if( in_array( strtolower( $e ), $list ) ) {&lt;br /&gt;
				return true;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Verifies that it&amp;#039;s ok to include the uploaded file&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $tmpfile the full path opf the temporary file to verify&lt;br /&gt;
	 * @param string $extension The filename extension that the file is to be served with&lt;br /&gt;
	 * @return mixed true of the file is verified, a WikiError object otherwise.&lt;br /&gt;
	 */&lt;br /&gt;
	function verify( $tmpfile, $extension ) {&lt;br /&gt;
		#magically determine mime type&lt;br /&gt;
		$magic=&amp;amp; wfGetMimeMagic();&lt;br /&gt;
		$mime= $magic-&amp;gt;guessMimeType($tmpfile,false);&lt;br /&gt;
		&lt;br /&gt;
		$fname= &amp;quot;SpecialUpload::verify&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		#check mime type, if desired&lt;br /&gt;
		global $wgVerifyMimeType;&lt;br /&gt;
		if ($wgVerifyMimeType) {&lt;br /&gt;
&lt;br /&gt;
			#check mime type against file extension&lt;br /&gt;
			if( !$this-&amp;gt;verifyExtension( $mime, $extension ) ) {&lt;br /&gt;
				return new WikiErrorMsg( &amp;#039;uploadcorrupt&amp;#039; );&lt;br /&gt;
			}&lt;br /&gt;
		&lt;br /&gt;
			#check mime type blacklist&lt;br /&gt;
			global $wgMimeTypeBlacklist;&lt;br /&gt;
			if( isset($wgMimeTypeBlacklist) &amp;amp;&amp;amp; !is_null($wgMimeTypeBlacklist) &lt;br /&gt;
				&amp;amp;&amp;amp; $this-&amp;gt;checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {&lt;br /&gt;
				return new WikiErrorMsg( &amp;#039;badfiletype&amp;#039;, htmlspecialchars( $mime ) );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		#check for htmlish code and javascript&lt;br /&gt;
		if( $this-&amp;gt;detectScript ( $tmpfile, $mime ) ) {&lt;br /&gt;
			return new WikiErrorMsg( &amp;#039;uploadscripted&amp;#039; );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* Scan the uploaded file for viruses&lt;br /&gt;
		*/&lt;br /&gt;
		$virus= $this-&amp;gt;detectVirus($tmpfile);&lt;br /&gt;
		if ( $virus ) {&lt;br /&gt;
			return new WikiErrorMsg( &amp;#039;uploadvirus&amp;#039;, htmlspecialchars($virus) );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		wfDebug( &amp;quot;$fname: all clear; passing.\n&amp;quot; );&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Checks if the mime type of the uploaded file matches the file extension.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param string $mime the mime type of the uploaded file&lt;br /&gt;
	 * @param string $extension The filename extension that the file is to be served with&lt;br /&gt;
	 * @return bool&lt;br /&gt;
	 */&lt;br /&gt;
	function verifyExtension( $mime, $extension ) {&lt;br /&gt;
		$fname = &amp;#039;SpecialUpload::verifyExtension&amp;#039;;&lt;br /&gt;
		&lt;br /&gt;
		if (!$mime || $mime==&amp;quot;unknown&amp;quot; || $mime==&amp;quot;unknown/unknown&amp;quot;) {&lt;br /&gt;
			wfDebug( &amp;quot;$fname: passing file with unknown mime type\n&amp;quot; );&lt;br /&gt;
			return true; &lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		$magic=&amp;amp; wfGetMimeMagic();&lt;br /&gt;
		&lt;br /&gt;
		$match= $magic-&amp;gt;isMatchingExtension($extension,$mime);&lt;br /&gt;
		&lt;br /&gt;
		if ($match===NULL) {&lt;br /&gt;
			wfDebug( &amp;quot;$fname: no file extension known for mime type $mime, passing file\n&amp;quot; );&lt;br /&gt;
			return true; &lt;br /&gt;
		} elseif ($match===true) {&lt;br /&gt;
			wfDebug( &amp;quot;$fname: mime type $mime matches extension $extension, passing file\n&amp;quot; );&lt;br /&gt;
			&lt;br /&gt;
			#TODO: if it&amp;#039;s a bitmap, make sure PHP or ImageMagic resp. can handle it!&lt;br /&gt;
			return true;&lt;br /&gt;
			&lt;br /&gt;
		} else {&lt;br /&gt;
			wfDebug( &amp;quot;$fname: mime type $mime mismatches file extension $extension, rejecting file\n&amp;quot; );&lt;br /&gt;
			return false; &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/** Heuristig for detecting files that *could* contain JavaScript instructions or &lt;br /&gt;
	* things that may look like HTML to a browser and are thus&lt;br /&gt;
	* potentially harmful. The present implementation will produce false positives in some situations.&lt;br /&gt;
	*&lt;br /&gt;
	* @param string $file Pathname to the temporary upload file&lt;br /&gt;
	* @param string $mime The mime type of the file&lt;br /&gt;
	* @return bool true if the file contains something looking like embedded scripts&lt;br /&gt;
	*/&lt;br /&gt;
	function detectScript($file,$mime) {&lt;br /&gt;
		&lt;br /&gt;
		#ugly hack: for text files, always look at the entire file.&lt;br /&gt;
		#For binarie field, just check the first K.&lt;br /&gt;
		&lt;br /&gt;
		if (strpos($mime,&amp;#039;text/&amp;#039;)===0) $chunk = file_get_contents( $file );&lt;br /&gt;
		else {&lt;br /&gt;
			$fp = fopen( $file, &amp;#039;rb&amp;#039; );&lt;br /&gt;
			$chunk = fread( $fp, 1024 );&lt;br /&gt;
			fclose( $fp );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		$chunk= strtolower( $chunk );&lt;br /&gt;
		&lt;br /&gt;
		if (!$chunk) return false;&lt;br /&gt;
		&lt;br /&gt;
		#decode from UTF-16 if needed (could be used for obfuscation).&lt;br /&gt;
		if (substr($chunk,0,2)==&amp;quot;\xfe\xff&amp;quot;) $enc= &amp;quot;UTF-16BE&amp;quot;; &lt;br /&gt;
		elseif (substr($chunk,0,2)==&amp;quot;\xff\xfe&amp;quot;) $enc= &amp;quot;UTF-16LE&amp;quot;; &lt;br /&gt;
		else $enc= NULL;&lt;br /&gt;
			&lt;br /&gt;
		if ($enc) $chunk= iconv($enc,&amp;quot;ASCII//IGNORE&amp;quot;,$chunk);&lt;br /&gt;
		&lt;br /&gt;
		$chunk= trim($chunk);&lt;br /&gt;
		&lt;br /&gt;
		#FIXME: convert from UTF-16 if necessarry!&lt;br /&gt;
		&lt;br /&gt;
		wfDebug(&amp;quot;SpecialUpload::detectScript: checking for embedded scripts and HTML stuff\n&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		#check for HTML doctype&lt;br /&gt;
		if (eregi(&amp;quot;&amp;lt;!DOCTYPE *X?HTML&amp;quot;,$chunk)) return true;&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* Internet Explorer for Windows performs some really stupid file type&lt;br /&gt;
		* autodetection which can cause it to interpret valid image files as HTML&lt;br /&gt;
		* and potentially execute JavaScript, creating a cross-site scripting&lt;br /&gt;
		* attack vectors.&lt;br /&gt;
		*&lt;br /&gt;
		* Apple&amp;#039;s Safari browser also performs some unsafe file type autodetection&lt;br /&gt;
		* which can cause legitimate files to be interpreted as HTML if the&lt;br /&gt;
		* web server is not correctly configured to send the right content-type&lt;br /&gt;
		* (or if you&amp;#039;re really uploading plain text and octet streams!)&lt;br /&gt;
		*&lt;br /&gt;
		* Returns true if IE is likely to mistake the given file for HTML.&lt;br /&gt;
		* Also returns true if Safari would mistake the given file for HTML&lt;br /&gt;
		* when served with a generic content-type.&lt;br /&gt;
		*/&lt;br /&gt;
		&lt;br /&gt;
		$tags = array(&lt;br /&gt;
			&amp;#039;&amp;lt;body&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;head&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;html&amp;#039;,   #also in safari&lt;br /&gt;
			&amp;#039;&amp;lt;img&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;pre&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;script&amp;#039;, #also in safari&lt;br /&gt;
			&amp;#039;&amp;lt;table&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;title&amp;#039;   #also in safari&lt;br /&gt;
			);&lt;br /&gt;
			&lt;br /&gt;
		foreach( $tags as $tag ) {&lt;br /&gt;
			if( false !== strpos( $chunk, $tag ) ) {&lt;br /&gt;
				return true;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		/*&lt;br /&gt;
		* look for javascript &lt;br /&gt;
		*/&lt;br /&gt;
		&lt;br /&gt;
		#resolve entity-refs to look at attributes. may be harsh on big files... cache result?&lt;br /&gt;
		$chunk = Sanitizer::decodeCharReferences( $chunk );&lt;br /&gt;
		&lt;br /&gt;
		#look for script-types&lt;br /&gt;
		if (preg_match(&amp;quot;!type\s*=\s*[&amp;#039;\&amp;quot;]?\s*(\w*/)?(ecma|java)!sim&amp;quot;,$chunk)) return true;&lt;br /&gt;
		&lt;br /&gt;
		#look for html-style script-urls&lt;br /&gt;
		if (preg_match(&amp;quot;!(href|src|data)\s*=\s*[&amp;#039;\&amp;quot;]?\s*(ecma|java)script:!sim&amp;quot;,$chunk)) return true;&lt;br /&gt;
		&lt;br /&gt;
		#look for css-style script-urls&lt;br /&gt;
		if (preg_match(&amp;quot;!url\s*\(\s*[&amp;#039;\&amp;quot;]?\s*(ecma|java)script:!sim&amp;quot;,$chunk)) return true;&lt;br /&gt;
		&lt;br /&gt;
		wfDebug(&amp;quot;SpecialUpload::detectScript: no scripts found\n&amp;quot;);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/** Generic wrapper function for a virus scanner program.&lt;br /&gt;
	* This relies on the $wgAntivirus and $wgAntivirusSetup variables.&lt;br /&gt;
	* $wgAntivirusRequired may be used to deny upload if the scan fails.&lt;br /&gt;
	*&lt;br /&gt;
	* @param string $file Pathname to the temporary upload file&lt;br /&gt;
	* @return mixed false if not virus is found, NULL if the scan fails or is disabled,&lt;br /&gt;
	*         or a string containing feedback from the virus scanner if a virus was found.&lt;br /&gt;
	*         If textual feedback is missing but a virus was found, this function returns true.&lt;br /&gt;
	*/&lt;br /&gt;
	function detectVirus($file) {&lt;br /&gt;
		global $wgAntivirus, $wgAntivirusSetup, $wgAntivirusRequired;&lt;br /&gt;
		&lt;br /&gt;
		$fname= &amp;quot;SpecialUpload::detectVirus&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		if (!$wgAntivirus) { #disabled?&lt;br /&gt;
			wfDebug(&amp;quot;$fname: virus scanner disabled\n&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			return NULL;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if (!$wgAntivirusSetup[$wgAntivirus]) { &lt;br /&gt;
			wfDebug(&amp;quot;$fname: unknown virus scanner: $wgAntivirus\n&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
			$wgOut-&amp;gt;addHTML( &amp;quot;&amp;lt;div class=&amp;#039;error&amp;#039;&amp;gt;Bad configuration: unknown virus scanner: &amp;lt;i&amp;gt;$wgAntivirus&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;\n&amp;quot; ); #LOCALIZE&lt;br /&gt;
			&lt;br /&gt;
			return &amp;quot;unknown antivirus: $wgAntivirus&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		#look up scanner configuration&lt;br /&gt;
		$virus_scanner= $wgAntivirusSetup[$wgAntivirus][&amp;quot;command&amp;quot;]; #command pattern&lt;br /&gt;
		$virus_scanner_codes= $wgAntivirusSetup[$wgAntivirus][&amp;quot;codemap&amp;quot;]; #exit-code map&lt;br /&gt;
		$msg_pattern= $wgAntivirusSetup[$wgAntivirus][&amp;quot;messagepattern&amp;quot;]; #message pattern&lt;br /&gt;
		&lt;br /&gt;
		$scanner= $virus_scanner; #copy, so we can resolve the pattern&lt;br /&gt;
		&lt;br /&gt;
		if (strpos($scanner,&amp;quot;%f&amp;quot;)===false) $scanner.= &amp;quot; &amp;quot;.wfEscapeShellArg($file); #simple pattern: append file to scan&lt;br /&gt;
		else $scanner= str_replace(&amp;quot;%f&amp;quot;,wfEscapeShellArg($file),$scanner); #complex pattern: replace &amp;quot;%f&amp;quot; with file to scan&lt;br /&gt;
		&lt;br /&gt;
		wfDebug(&amp;quot;$fname: running virus scan: $scanner \n&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		#execute virus scanner&lt;br /&gt;
		$code= false;&lt;br /&gt;
		&lt;br /&gt;
		#NOTE: there&amp;#039;s a 50 line workaround to make stderr redirection work on windows, too.&lt;br /&gt;
		#      that does not seem to be worth the pain. &lt;br /&gt;
		#      Ask me (Duesentrieb) about it if it&amp;#039;s ever needed.&lt;br /&gt;
		if (wfIsWindows()) exec(&amp;quot;$scanner&amp;quot;,$output,$code); &lt;br /&gt;
		else exec(&amp;quot;$scanner 2&amp;gt;&amp;amp;1&amp;quot;,$output,$code); &lt;br /&gt;
		&lt;br /&gt;
		$exit_code= $code; #remeber for user feedback&lt;br /&gt;
		&lt;br /&gt;
		if ($virus_scanner_codes) { #map exit code to AV_xxx constants.&lt;br /&gt;
			if (isset($virus_scanner_codes[$code])) $code= $virus_scanner_codes[$code]; #explicite mapping&lt;br /&gt;
			else if (isset($virus_scanner_codes[&amp;quot;*&amp;quot;])) $code= $virus_scanner_codes[&amp;quot;*&amp;quot;]; #fallback mapping&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($code===AV_SCAN_FAILED) { #scan failed (code was mapped to false by $virus_scanner_codes)&lt;br /&gt;
			wfDebug(&amp;quot;$fname: failed to scan $file (code $exit_code).\n&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			if ($wgAntivirusRequired) return &amp;quot;scan failed (code $exit_code)&amp;quot;;&lt;br /&gt;
			else return NULL; &lt;br /&gt;
		}&lt;br /&gt;
		else if ($code===AV_SCAN_ABORTED) { #scan failed because filetype is unknown (probably imune)&lt;br /&gt;
			wfDebug(&amp;quot;$fname: unsupported file type $file (code $exit_code).\n&amp;quot;);&lt;br /&gt;
			return NULL; &lt;br /&gt;
		}&lt;br /&gt;
		else if ($code===AV_NO_VIRUS) {&lt;br /&gt;
			wfDebug(&amp;quot;$fname: file passed virus scan.\n&amp;quot;);&lt;br /&gt;
			return false; #no virus found&lt;br /&gt;
		}&lt;br /&gt;
		else { &lt;br /&gt;
			$output= join(&amp;quot;\n&amp;quot;,$output);&lt;br /&gt;
			$output= trim($output);&lt;br /&gt;
			&lt;br /&gt;
			if (!$output) $output= true; #if ther&amp;#039;s no output, return true&lt;br /&gt;
			else if ($msg_pattern) {&lt;br /&gt;
				$groups= array();&lt;br /&gt;
				if (preg_match($msg_pattern,$output,$groups)) {&lt;br /&gt;
					if ($groups[1]) $output= $groups[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			wfDebug(&amp;quot;$fname: FOUND VIRUS! scanner feedback: $output&amp;quot;);&lt;br /&gt;
			return $output;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
{{GPL}}&lt;/div&gt;</summary>
		<author><name>Untest</name></author>
	</entry>
</feed>