r56374 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r56373‎ | r56374 | r56375 >
Date:17:25, 15 September 2009
Author:brion
Status:deferred
Tags:
Comment:
Merge post-branch trunk updates replacing old live hacks:
Core: r56213, r56215, r56216, r56218, r56334, r56335, r56336, r56338, r56340, r56343, r56345, r56347, r56350
Extensions: r56207, r56209, r56333
Modified paths:
  • /branches/wmf-deployment-work (modified) (history)
  • /branches/wmf-deployment-work/extensions (modified) (history)
  • /branches/wmf-deployment-work/extensions/AbuseFilter/AbuseFilter.parser.php (modified) (history)
  • /branches/wmf-deployment-work/extensions/ContactPageFundraiser (added) (history)
  • /branches/wmf-deployment-work/extensions/FundraiserPortal (modified) (history)
  • /branches/wmf-deployment-work/extensions/HoneypotIntegration/HoneypotIntegration.class.php (modified) (history)
  • /branches/wmf-deployment-work/extensions/LocalisationUpdate (modified) (history)
  • /branches/wmf-deployment-work/extensions/TrustedXFF (modified) (history)
  • /branches/wmf-deployment-work/extensions/TrustedXFF/TrustedXFF.php (modified) (history)
  • /branches/wmf-deployment-work/extensions/TrustedXFF/generate.php (modified) (history)
  • /branches/wmf-deployment-work/extensions/TrustedXFF/trusted-hosts.txt (modified) (history)
  • /branches/wmf-deployment-work/extensions/TrustedXFF/update (modified) (history)
  • /branches/wmf-deployment-work/img_auth.php (modified) (history)
  • /branches/wmf-deployment-work/includes (modified) (history)
  • /branches/wmf-deployment-work/includes/ConfEditor.php (modified) (history)
  • /branches/wmf-deployment-work/includes/DefaultSettings.php (modified) (history)
  • /branches/wmf-deployment-work/includes/HistoryPage.php (modified) (history)
  • /branches/wmf-deployment-work/includes/ImagePage.php (modified) (history)
  • /branches/wmf-deployment-work/includes/Math.php (modified) (history)
  • /branches/wmf-deployment-work/includes/Title.php (modified) (history)
  • /branches/wmf-deployment-work/includes/User.php (modified) (history)
  • /branches/wmf-deployment-work/includes/json/Services_JSON.php (modified) (history)
  • /branches/wmf-deployment-work/includes/specials/SpecialRecentchanges.php (modified) (history)
  • /branches/wmf-deployment-work/includes/specials/SpecialUndelete.php (modified) (history)
  • /branches/wmf-deployment-work/js2/mwEmbed/jquery/jquery.ui (modified) (history)
  • /branches/wmf-deployment-work/languages/Language.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/Maintenance.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/backup.inc (modified) (history)
  • /branches/wmf-deployment-work/maintenance/deleteSelfExternals.php (added) (history)
  • /branches/wmf-deployment-work/maintenance/doMaintenance.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/gearman/gearmanWorker.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/lag.php (added) (history)
  • /branches/wmf-deployment-work/maintenance/rebuildLocalisationCache.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/runJobs.php (modified) (history)
  • /branches/wmf-deployment-work/maintenance/storage/make-blobs (modified) (history)

Diff [purge]

Property changes on: branches/wmf-deployment-work/img_auth.php
___________________________________________________________________
Deleted: svn:mergeinfo
11 Reverse-merged /branches/REL1_15/phase3/img_auth.php:r51646
Property changes on: branches/wmf-deployment-work/js2/mwEmbed/jquery/jquery.ui
___________________________________________________________________
Modified: svn:mergeinfo
22 Merged /trunk/phase3/js2/mwEmbed/jquery/jquery.ui:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Index: branches/wmf-deployment-work/languages/Language.php
@@ -1945,7 +1945,9 @@
19461946 function getMagic( $mw ) {
19471947 if ( !$this->mMagicHookDone ) {
19481948 $this->mMagicHookDone = true;
 1949+ wfProfileIn( 'LanguageGetMagic' );
19491950 wfRunHooks( 'LanguageGetMagic', array( &$this->mMagicExtensions, $this->getCode() ) );
 1951+ wfProfileOut( 'LanguageGetMagic' );
19501952 }
19511953 if ( isset( $this->mMagicExtensions[$mw->mId] ) ) {
19521954 $rawEntry = $this->mMagicExtensions[$mw->mId];
Index: branches/wmf-deployment-work/maintenance/Maintenance.php
@@ -333,7 +333,7 @@
334334 }
335335
336336 # Set the memory limit
337 - ini_set( 'memory_limit', -1 );
 337+ ini_set( 'memory_limit', $this->memoryLimit() );
338338
339339 # Set max execution time to 0 (no limit). PHP.net says that
340340 # "When running PHP from the command line the default setting is 0."
@@ -362,6 +362,15 @@
363363 $this->maybeHelp();
364364 $this->validateParamsAndArgs();
365365 }
 366+
 367+ /**
 368+ * Normally we disable the memory_limit when running admin scripts.
 369+ * Some scripts may wish to actually set a limit, however, to avoid
 370+ * blowing up unexpectedly.
 371+ */
 372+ public function memoryLimit() {
 373+ return -1;
 374+ }
366375
367376 /**
368377 * Clear all params and arguments.
Index: branches/wmf-deployment-work/maintenance/doMaintenance.php
@@ -58,7 +58,8 @@
5959 }
6060
6161 // Load settings, using wikimedia-mode if needed
62 -if( file_exists( dirname(__FILE__).'/wikimedia-mode' ) ) {
 62+// Fixme: replace this hack with general farm-friendly code
 63+if( file_exists( "$IP/wmf-config/wikimedia-mode" ) ) {
6364 # TODO FIXME! Wikimedia-specific stuff needs to go away to an ext
6465 # Maybe a hook?
6566 global $cluster;
@@ -66,10 +67,10 @@
6768 $cluster = 'pmtpa';
6869 require_once( "$IP/includes/AutoLoader.php" );
6970 require_once( "$IP/includes/SiteConfiguration.php" );
70 - require( "$IP/wgConf.php" );
 71+ require( "$IP/wmf-config/wgConf.php" );
7172 $maintenance->loadWikimediaSettings();
7273 require( $IP.'/includes/Defines.php' );
73 - require( $IP.'/CommonSettings.php' );
 74+ require( $IP.'/wmf-config/CommonSettings.php' );
7475 } else {
7576 require_once( "$IP/includes/AutoLoader.php" );
7677 require_once( "$IP/includes/Defines.php" );
Index: branches/wmf-deployment-work/maintenance/rebuildLocalisationCache.php
@@ -37,12 +37,14 @@
3838 $this->addOption( 'force', 'Rebuild all files, even ones not out of date' );
3939 $this->addOption( 'threads', 'Fork more than one thread', false, true );
4040 }
 41+
 42+ public function memoryLimit() {
 43+ return '200M';
 44+ }
4145
4246 public function execute() {
4347 global $wgLocalisationCacheConf;
4448
45 - ini_set( 'memory_limit', '200M' );
46 -
4749 $force = $this->hasOption('force');
4850 $threads = $this->getOption( 'threads', 1 );
4951 if( $threads < 1 || $threads != intval( $threads ) ) {
Index: branches/wmf-deployment-work/maintenance/gearman/gearmanWorker.php
@@ -4,6 +4,8 @@
55 require( dirname(__FILE__).'/../commandLine.inc' );
66 require( dirname(__FILE__).'/gearman.inc' );
77
 8+ini_set('memory_limit', '150M' );
 9+
810 if ( isset( $options['procs'] ) ) {
911 $procs = $options['procs'];
1012 if ( $procs < 1 || $procs > 1000 ) {
Index: branches/wmf-deployment-work/maintenance/runJobs.php
@@ -36,6 +36,11 @@
3737 $this->addOption( 'procs', 'Number of processes to use', false, true );
3838 $wgUseNormalUser = true;
3939 }
 40+
 41+ public function memoryLimit() {
 42+ // Don't eat all memory on the machine if we get a bad job.
 43+ return "150M";
 44+ }
4045
4146 public function execute() {
4247 global $wgTitle;
Index: branches/wmf-deployment-work/maintenance/lag.php
@@ -0,0 +1,33 @@
 2+<?php
 3+
 4+$wgUseNormalUser = true;
 5+require_once('commandLine.inc');
 6+
 7+if ( isset( $options['r'] ) ) {
 8+ $lb = wfGetLB();
 9+ print 'time ';
 10+ for( $i = 0; $i < $lb->getServerCount(); $i++ ) {
 11+ $hostname = $lb->getServerName( $i );
 12+ printf("%-12s ", $hostname );
 13+ }
 14+ print("\n");
 15+
 16+ while( 1 ) {
 17+ $lags = $lb->getLagTimes();
 18+ unset( $lags[0] );
 19+ print( gmdate( 'H:i:s' ) . ' ' );
 20+ foreach( $lags as $i => $lag ) {
 21+ printf("%-12s " , $lag === false ? 'false' : $lag );
 22+ }
 23+ print("\n");
 24+ sleep(5);
 25+ }
 26+} else {
 27+ $lb = wfGetLB();
 28+ $lags = $lb->getLagTimes();
 29+ foreach( $lags as $i => $lag ) {
 30+ $name = $lb->getServerName( $i );
 31+ printf("%-20s %s\n" , $name, $lag === false ? 'false' : $lag );
 32+ }
 33+}
 34+?>
Property changes on: branches/wmf-deployment-work/maintenance/lag.php
___________________________________________________________________
Added: svn:eol-style
135 + native
Index: branches/wmf-deployment-work/maintenance/storage/make-blobs
@@ -1,11 +1,16 @@
22 #!/bin/bash
33
4 -if [ X$2 == X ];then
5 - echo 'Usage: make-blobs <server> <db>'
 4+if [ -z $2 ];then
 5+ echo 'Usage: make-blobs <server> <db> [<table name>]'
66 exit 1
77 fi
 8+if [ -z $3 ]; then
 9+ table=blobs
 10+else
 11+ table=$3
 12+fi
813
914 echo "CREATE DATABASE $2" | mysql -u wikiadmin -p`wikiadmin_pass` -h $1 && \
10 -mysql -u wikiadmin -p`wikiadmin_pass` -h $1 $2 < blobs.sql
 15+sed "s/blobs\>/$table/" blobs.sql | mysql -u wikiadmin -p`wikiadmin_pass` -h $1 $2
1116
1217
Index: branches/wmf-deployment-work/maintenance/backup.inc
@@ -232,28 +232,26 @@
233233 $this->startTime = wfTime();
234234 }
235235
 236+ /**
 237+ * @fixme the --server parameter is currently not respected, as it doesn't seem
 238+ * terribly easy to ask the load balancer for a particular connection by name.
 239+ */
236240 function backupDb() {
237 - global $wgDBadminuser, $wgDBadminpassword;
238 - global $wgDBuser, $wgDBpassword;
239 - global $wgDBname, $wgDebugDumpSql, $wgDBtype;
240 - $flags = ($wgDebugDumpSql ? DBO_DEBUG : 0) | DBO_DEFAULT; // god-damn hack
 241+ $this->lb = wfGetLBFactory()->newMainLB();
 242+ $db = $this->lb->getConnection( DB_SLAVE, 'backup' );
241243
242 - if ( !$wgDBadminuser ) {
243 - $wgDBadminuser = $wgDBuser;
244 - }
245 - if ( !$wgDBadminpassword ) {
246 - $wgDBadminpassword = $wgDBpassword;
247 - }
248 -
249 - $class = 'Database' . ucfirst($wgDBtype);
250 - $db = new $class( $this->backupServer(), $wgDBadminuser, $wgDBadminpassword, $wgDBname, false, $flags );
251 -
252244 // Discourage the server from disconnecting us if it takes a long time
253245 // to read out the big ol' batch query.
254246 $db->setTimeout( 3600 * 24 );
255247
256248 return $db;
257249 }
 250+
 251+ function __destruct() {
 252+ if( isset( $this->lb ) ) {
 253+ $this->lb->closeAll();
 254+ }
 255+ }
258256
259257 function backupServer() {
260258 global $wgDBserver;
Index: branches/wmf-deployment-work/maintenance/deleteSelfExternals.php
@@ -0,0 +1,15 @@
 2+<?php
 3+
 4+require_once("commandLine.inc");
 5+
 6+print "Deleting self externals from $wgServer\n";
 7+$db = wfGetDB(DB_MASTER);
 8+while (1) {
 9+ wfWaitForSlaves( 2 );
 10+ $db->commit();
 11+ $encServer = $db->escapeLike( $wgServer );
 12+ $q="DELETE /* deleteSelfExternals */ FROM externallinks WHERE el_to LIKE '$encServer/%' LIMIT 1000\n";
 13+ print "Deleting a batch\n";
 14+ $db->query($q);
 15+ if (!$db->affectedRows()) exit(0);
 16+}
Property changes on: branches/wmf-deployment-work/maintenance/deleteSelfExternals.php
___________________________________________________________________
Added: svn:mergeinfo
117 Merged /trunk/phase3/maintenance/deleteSelfExternals.php:r52290,52402,52404,52718,52737,52759,52776,52791,52800,52808,52812-52813,52815-52819,52822,52846,52850,52852-52853,52855-52857,52859,52924,52986,53128-53129,53190,53197,53199,53203-53204,53210-53211,53247,53249,53252,53267,53270,53293,53305,53344,53369,53427,53502-53504,53506,53777,54384,54494,54592,54599-54602,54604,54613,54764,54793,54806,55178,55626,56218,56334-56336,56338,56340,56343,56345,56347,56350
218 Merged /branches/REL1_15/phase3/maintenance/deleteSelfExternals.php:r51646
Added: svn:eol-style
319 + native
Index: branches/wmf-deployment-work/extensions/AbuseFilter/AbuseFilter.parser.php
@@ -1590,6 +1590,7 @@
15911591
15921592 public static function regexErrorHandler( $errno, $errstr, $errfile, $errline, $context ) {
15931593 if ( error_reporting() == 0 ) { return true; }
 1594+ wfLoadExtensionMessages( 'AbuseFilter' );
15941595 throw new AFPUserVisibleException( 'regexfailure', $context['pos'],
15951596 array( $errstr, $context['regex'] ) );
15961597 return true;
Index: branches/wmf-deployment-work/extensions/TrustedXFF/TrustedXFF.php
@@ -1,5 +1,9 @@
22 <?php
33
 4+if (!defined('MEDIAWIKI')) {
 5+ die(1);
 6+}
 7+
48 /**
59 * Trusted hosts file in CDB format.
610 * The file can be generated using generate.php
@@ -10,7 +14,7 @@
1115 *
1216 * For details, see http://meta.wikimedia.org/wiki/XFF_project
1317 */
14 -$wgTrustedXffFile = dirname(__FILE__).'/trusted-xff.cdb';
 18+$wgTrustedXffFile = $IP . '/cache/trusted-xff.cdb';
1519
1620
1721 /** Registration */
Property changes on: branches/wmf-deployment-work/extensions/TrustedXFF/trusted-hosts.txt
___________________________________________________________________
Modified: svn:mergeinfo
1822 Merged /trunk/extensions/TrustedXFF/trusted-hosts.txt:r56207,56209,56333
1923 Merged /branches/wmf-deployment/extensions/TrustedXFF/trusted-hosts.txt:r53263
Index: branches/wmf-deployment-work/extensions/TrustedXFF/generate.php
@@ -12,7 +12,16 @@
1313 echo "Unable to open input file \"trusted-xff.txt\"\n";
1414 exit( 1 );
1515 }
16 -$outFile = dba_open( 'trusted-xff.cdb', 'n', 'cdb' );
 16+
 17+if( isset( $args[0] ) ) {
 18+ $target = realpath( $args[0] );
 19+} elseif( isset( $wgTrustedXffFile ) ) {
 20+ $target = $wgTrustedXffFile;
 21+} else {
 22+ echo "TrustedXffFile extension is not enabled. Specify target output file on command line!\n";
 23+ exit( 1 );
 24+}
 25+$outFile = dba_open( $target, 'n', 'cdb' );
1726 if ( !$outFile ) {
1827 echo "Unable open output file \"trusted-xff.cdb\"\n";
1928 exit( 1 );
Index: branches/wmf-deployment-work/extensions/TrustedXFF/update
@@ -1,8 +1,8 @@
22 #!/bin/bash
33
44 cd `dirname $0`
5 -php generate.php
6 -bzip2 -kf trusted-xff.cdb
 5+php generate.php aawiki ../../cache/trusted-xff.cdb
 6+bzip2 -kf ../../cache/trusted-xff.cdb
77 if [ -x /home/wikipedia/bin/sync-common-file ]; then
8 - sync-common-file php-1.5/extensions/TrustedXFF/trusted-xff.cdb
 8+ sync-common-file wmf-deployment/cache/trusted-xff.cdb
99 fi
Property changes on: branches/wmf-deployment-work/extensions/TrustedXFF
___________________________________________________________________
Added: svn:mergeinfo
1010 Merged /trunk/extensions/TrustedXFF:r56207,56209,56333
1111 Merged /branches/wmf-deployment/extensions/TrustedXFF:r53263
1212 Merged /branches/REL1_15/phase3/extensions/TrustedXFF:r51646
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/SpecialContact.php
@@ -0,0 +1,380 @@
 2+<?php
 3+/**
 4+ * Speclial:Contact, a contact form for visitors.
 5+ * Based on SpecialEmailUser.php
 6+ *
 7+ * @addtogroup SpecialPage
 8+ * @author Daniel Kinzler, brightbyte.de
 9+ * @copyright © 2007 Daniel Kinzler
 10+ * @licence GNU General Public Licence 2.0 or later
 11+ */
 12+
 13+if( !defined( 'MEDIAWIKI' ) ) {
 14+ echo( "not a valid entry point.\n" );
 15+ die( 1 );
 16+}
 17+
 18+global $IP; #needed when called from the autoloader
 19+require_once("$IP/includes/UserMailer.php");
 20+
 21+/**
 22+ *
 23+ */
 24+class SpecialContact extends SpecialPage {
 25+
 26+ /**
 27+ * Constructor
 28+ */
 29+ function __construct() {
 30+ global $wgOut;
 31+ SpecialPage::SpecialPage( 'Contact', '', true );
 32+ }
 33+
 34+ /**
 35+ * Main execution function
 36+ * @param $par Parameters passed to the page
 37+ */
 38+ function execute( $par ) {
 39+ global $wgUser, $wgOut, $wgRequest, $wgEnableEmail, $wgContactUser;
 40+
 41+ wfLoadExtensionMessages( 'ContactPage' );
 42+ $fname = "SpecialContact::execute";
 43+
 44+ if ( $wgRequest->wasPosted() ) {
 45+ $nu = User::newFromName( $wgContactUser );
 46+ $f = new EmailContactForm( $nu );
 47+
 48+ $form['fname'] = $wgRequest->getVal('fname');
 49+ $form['lname'] = $wgRequest->getVal('lname');
 50+ $form['orgname'] = $wgRequest->getVal('orgname');
 51+ $form['jobname'] = $wgRequest->getVal('jobname');
 52+ $form['urlname'] = $wgRequest->getVal('urlname');
 53+ $form['email'] = $wgRequest->getVal('email');
 54+ $form['telephone'] = $wgRequest->getVal('telephone');
 55+ $form['other'] = $wgRequest->getVal('other');
 56+ $form['url'] = $wgRequest->getVal('url');
 57+ $form['country'] = $wgRequest->getVal('country');
 58+ $form['citytown'] = $wgRequest->getVal('city-town');
 59+ $form['provstat'] = $wgRequest->getVal('prov-state');
 60+ $form['story'] = $wgRequest->getVal('story');
 61+ $form['followup'] = $wgRequest->getVal('follow-up');
 62+
 63+ $text = '';
 64+ foreach( $form as $key => $value) {
 65+ $text .= sprintf("%10s : %s\n", $key,$value);
 66+ }
 67+ $f->setText( $text );
 68+ $f->doSubmit();
 69+ }
 70+
 71+ else {
 72+
 73+ }
 74+ if( !$wgEnableEmail || !$wgContactUser ) {
 75+ $wgOut->showErrorPage( "nosuchspecialpage", "nospecialpagetext" );
 76+ return;
 77+ }
 78+
 79+ $action = $wgRequest->getVal( 'action' );
 80+
 81+ $nu = User::newFromName( $wgContactUser );
 82+ if( is_null( $nu ) || !$nu->canReceiveEmail() ) {
 83+ wfDebug( "Target is invalid user or can't receive.\n" );
 84+ $wgOut->showErrorPage( "noemailtitle", "noemailtext" );
 85+ return;
 86+ }
 87+
 88+ $f = new EmailContactForm( $nu );
 89+
 90+ if ( "success" == $action ) {
 91+ wfDebug( "$fname: success.\n" );
 92+ $f->showSuccess( );
 93+ } else if ( "submit" == $action && $wgRequest->wasPosted() && $f->hasAllInfo() ) {
 94+ $token = $wgRequest->getVal( 'wpEditToken' );
 95+
 96+ if( $wgUser->isAnon() ) {
 97+ # Anonymous users may not have a session
 98+ # open. Check for suffix anyway.
 99+ $tokenOk = ( EDIT_TOKEN_SUFFIX == $token );
 100+ } else {
 101+ $tokenOk = $wgUser->matchEditToken( $token );
 102+ }
 103+
 104+ if ( !$tokenOk ) {
 105+ wfDebug( "$fname: bad token (".($wgUser->isAnon()?'anon':'user')."): $token\n" );
 106+ $wgOut->addWikiText( wfMsg( 'sessionfailure' ) );
 107+ $f->showForm();
 108+ } else if ( !$f->passCaptcha() ) {
 109+ wfDebug( "$fname: captcha failed" );
 110+ $wgOut->addWikiText( wfMsg( 'contactpage-captcha-failed' ) ); //TODO: provide a message for this!
 111+ $f->showForm();
 112+ } else {
 113+ wfDebug( "$fname: submit\n" );
 114+ $f->doSubmit();
 115+ }
 116+ } else {
 117+ wfDebug( "$fname: form\n" );
 118+ $f->showForm();
 119+ }
 120+ }
 121+}
 122+
 123+/**
 124+ * @todo document
 125+ * @addtogroup SpecialPage
 126+ */
 127+class EmailContactForm {
 128+
 129+ var $target;
 130+ var $text, $subject;
 131+ var $cc_me; // Whether user requested to be sent a separate copy of their email.
 132+
 133+ /**
 134+ * @param User $target
 135+ */
 136+ function EmailContactForm( $target ) {
 137+ global $wgRequest, $wgUser;
 138+ global $wgCaptchaClass;
 139+
 140+ $this->target = $target;
 141+ $this->text = $wgRequest->getText( 'wpText' );
 142+ $this->subject = $wgRequest->getText( 'wpSubject' );
 143+ $this->cc_me = $wgRequest->getBool( 'wpCCMe' );
 144+
 145+ $this->fromname = $wgRequest->getText( 'wpFromName' );
 146+ $this->fromaddress = $wgRequest->getText( 'wpFromAddress' );
 147+
 148+ if ($wgUser->isLoggedIn()) {
 149+ if (!$this->fromname) $this->fromname = $wgUser->getName();
 150+ if (!$this->fromaddress) $this->fromaddress = $wgUser->getEmail();
 151+ }
 152+
 153+ //prepare captcha if applicable
 154+ if ( $this->useCaptcha() ) {
 155+ $captcha = ConfirmEditHooks::getInstance();
 156+ $captcha->trigger = 'contactpage';
 157+ $captcha->action = 'contact';
 158+ }
 159+ }
 160+
 161+ function setText( $text ) {
 162+ $this->text = $text;
 163+ }
 164+
 165+ function hasAllInfo() {
 166+ global $wgContactRequireAll;
 167+
 168+ if ( $this->text === NULL ) return false;
 169+ else $this->text = trim( $this->text );
 170+ if ( $this->text === '' ) return false;
 171+
 172+ if ( $wgContactRequireAll ) {
 173+ if ( $this->fromname === NULL ) return false;
 174+ else $this->fromname = trim( $this->fromname );
 175+ if ( $this->fromname === '' ) return false;
 176+
 177+ if ( $this->fromaddress === NULL ) return false;
 178+ else $this->fromaddress = trim( $this->fromaddress );
 179+ if ( $this->fromaddress === '' ) return false;
 180+ }
 181+
 182+ return true;
 183+ }
 184+
 185+ function showForm() {
 186+ global $wgOut, $wgUser, $wgContactRequireAll;
 187+
 188+ #TODO: show captcha
 189+
 190+ $wgOut->setPagetitle( wfMsg( "contactpage-title" ) );
 191+ $wgOut->addWikiText( wfMsg( "contactpage-pagetext" ) );
 192+
 193+ if ( $this->subject === "" ) {
 194+ $this->subject = wfMsgForContent( "contactpage-defsubject" );
 195+ }
 196+
 197+ $msgSuffix = $wgContactRequireAll ? '-required' : '';
 198+
 199+ $emt = wfMsg( "emailto" );
 200+ $rcpt = $this->target->getName();
 201+ $emr = wfMsg( "emailsubject" );
 202+ $emm = wfMsg( "emailmessage" );
 203+ $ems = wfMsg( "emailsend" );
 204+ $emc = wfMsg( "emailccme" );
 205+ $emfn = wfMsg( "contactpage-fromname$msgSuffix" );
 206+ $emfa = wfMsg( "contactpage-fromaddress$msgSuffix" );
 207+ $encSubject = htmlspecialchars( $this->subject );
 208+ $encFromName = htmlspecialchars( $this->fromname );
 209+ $encFromAddress = htmlspecialchars( $this->fromaddress );
 210+
 211+ $titleObj = SpecialPage::getTitleFor( "Contact" );
 212+ $action = $titleObj->escapeLocalURL( "action=submit" );
 213+ $token = $wgUser->isAnon() ? EDIT_TOKEN_SUFFIX : $wgUser->editToken(); //this kind of sucks, really...
 214+ $token = htmlspecialchars( $token );
 215+
 216+ $wgOut->addHTML( "
 217+<form id=\"emailuser\" method=\"post\" action=\"{$action}\">
 218+<table border='0' id='mailheader'>
 219+<tr>
 220+<td align='right'>{$emr}:</td>
 221+<td align='left'>
 222+<input type='text' size='60' maxlength='200' name=\"wpSubject\" value=\"{$encSubject}\" />
 223+</td>
 224+</tr><tr>
 225+<td align='right'>{$emfn}:</td>
 226+<td align='left'>
 227+<input type='text' size='60' maxlength='200' name=\"wpFromName\" value=\"{$encFromName}\" />
 228+</td>
 229+<tr>
 230+<td align='right'>{$emfa}:</td>
 231+<td align='left'>
 232+<input type='text' size='60' maxlength='200' name=\"wpFromAddress\" value=\"{$encFromAddress}\" />
 233+</td>
 234+</tr>
 235+<tr>
 236+<td></td>
 237+<td align='left'>
 238+<small>".wfMsg( "contactpage-formfootnotes$msgSuffix" )."</small>
 239+</td>
 240+</tr>
 241+</table>
 242+<span id='wpTextLabel'><label for=\"wpText\">{$emm}:</label><br /></span>
 243+<textarea name=\"wpText\" rows='20' cols='80' wrap='virtual' style=\"width: 100%;\">" . htmlspecialchars( $this->text ) .
 244+"</textarea>
 245+" . wfCheckLabel( $emc, 'wpCCMe', 'wpCCMe', $wgUser->getBoolOption( 'ccmeonemails' ) ) . "<br />
 246+" . $this->getCaptcha() . "
 247+<input type='submit' name=\"wpSend\" value=\"{$ems}\" />
 248+<input type='hidden' name='wpEditToken' value=\"$token\" />
 249+</form>\n" );
 250+
 251+ }
 252+
 253+ function useCaptcha() {
 254+ global $wgCaptchaClass, $wgCaptchaTriggers, $wgUser;
 255+ if ( !$wgCaptchaClass ) return false; //no captcha installed
 256+ if ( !@$wgCaptchaTriggers['contactpage'] ) return false; //don't trigger on contact form
 257+
 258+ if( $wgUser->isAllowed( 'skipcaptcha' ) ) {
 259+ wfDebug( "EmailContactForm::useCaptcha: user group allows skipping captcha\n" );
 260+ return false;
 261+ }
 262+
 263+ return true;
 264+ }
 265+
 266+ function getCaptcha() {
 267+ global $wgCaptcha;
 268+ if ( !$this->useCaptcha() ) return "";
 269+
 270+ wfSetupSession(); #NOTE: make sure we have a session. May be required for captchas to work.
 271+
 272+ return "<div class='captcha'>" .
 273+ $wgCaptcha->getForm() .
 274+ wfMsgWikiHtml( 'contactpage-captcha' ) .
 275+ "</div>\n";
 276+ }
 277+
 278+ function passCaptcha() {
 279+ global $wgCaptcha;
 280+ if ( !$this->useCaptcha() ) return true;
 281+
 282+ return $wgCaptcha->passCaptcha();
 283+ }
 284+
 285+ function doSubmit( ) {
 286+ global $wgOut, $wgRequest;
 287+ global $wgEnableEmail, $wgUserEmailUseReplyTo, $wgEmergencyContact;
 288+ global $wgContactUser, $wgContactSender, $wgContactSenderName;
 289+
 290+ $csender = $wgContactSender ? $wgContactSender : $wgEmergencyContact;
 291+ $cname = $wgContactSenderName;
 292+
 293+ $fname = 'EmailContactForm::doSubmit';
 294+
 295+ wfDebug( "$fname: start\n" );
 296+
 297+ $to = new MailAddress( $this->target );
 298+ $replyto = NULL;
 299+
 300+ if ( !$this->fromaddress ) {
 301+ $from = new MailAddress( $csender, $cname );
 302+ }
 303+ else if ( $wgUserEmailUseReplyTo ) {
 304+ $from = new MailAddress( $csender, $cname );
 305+ $replyto = new MailAddress( $this->fromaddress, $this->fromname );
 306+ }
 307+ else {
 308+ $from = new MailAddress( $this->fromaddress, $this->fromname );
 309+ }
 310+
 311+ $subject = trim( $this->subject );
 312+
 313+ if ( $subject === "" ) {
 314+ $subject = wfMsgForContent( "contactpage-defsubject" );
 315+ }
 316+
 317+ if ( $this->fromname !== "" ) {
 318+ $subject = wfMsgForContent( "contactpage-subject-and-sender", $subject, $this->fromname );
 319+ }
 320+ else if ( $this->fromaddress !== "" ) {
 321+ $subject = wfMsgForContent( "contactpage-subject-and-sender", $subject, $this->fromaddress );
 322+ }
 323+
 324+ if( wfRunHooks( 'ContactForm', array( &$to, &$replyto, &$subject, &$this->text ) ) ) {
 325+
 326+ wfDebug( "$fname: sending mail from ".$from->toString()." to ".$to->toString()." replyto ".($replyto==null?'-/-':$replyto->toString())."\n" );
 327+
 328+ #HACK: in MW 1.9, replyto must be a string, in MW 1.10 it must be an object!
 329+ $ver = preg_replace( '![^\d._+]!', '', $GLOBALS['wgVersion'] );
 330+ $replyaddr = $replyto == null
 331+ ? NULL : version_compare( $ver, '1.10', '<' )
 332+ ? $replyto->toString() : $replyto;
 333+
 334+ $mailResult = userMailer( $to, $from, $subject, $this->text, $replyaddr );
 335+
 336+ if( WikiError::isError( $mailResult ) ) {
 337+ $wgOut->addWikiText( wfMsg( "usermailererror" ) . $mailResult->getMessage());
 338+ } else {
 339+
 340+ // if the user requested a copy of this mail, do this now,
 341+ // unless they are emailing themselves, in which case one copy of the message is sufficient.
 342+ if ($this->cc_me && $replyto) {
 343+ $cc_subject = wfMsg('emailccsubject', $this->target->getName(), $subject);
 344+ if( wfRunHooks( 'ContactForm', array( &$from, &$replyto, &$cc_subject, &$this->text ) ) ) {
 345+ wfDebug( "$fname: sending cc mail from ".$from->toString()." to ".$replyto->toString()."\n" );
 346+ $ccResult = userMailer( $replyto, $from, $cc_subject, $this->text );
 347+ if( WikiError::isError( $ccResult ) ) {
 348+ // At this stage, the user's CC mail has failed, but their
 349+ // original mail has succeeded. It's unlikely, but still, what to do?
 350+ // We can either show them an error, or we can say everything was fine,
 351+ // or we can say we sort of failed AND sort of succeeded. Of these options,
 352+ // simply saying there was an error is probably best.
 353+ $wgOut->addWikiText( wfMsg( "usermailererror" ) . $ccResult);
 354+ return;
 355+ }
 356+ }
 357+ }
 358+
 359+ wfDebug( "$fname: success\n" );
 360+
 361+ $returnto = Title::newFromText( $wgRequest->getVal( 'returnto' ) );
 362+ if( is_null( $returnto ) || !$returnto->isLocal() ) {
 363+ $returnto = SpecialPage::getTitleFor( "Contact" );
 364+ }
 365+ $wgOut->redirect( $returnto->getFullUrl() );
 366+ wfRunHooks( 'ContactFromComplete', array( $to, $replyto, $subject, $this->text ) );
 367+ }
 368+ }
 369+
 370+ wfDebug( "$fname: end\n" );
 371+ }
 372+
 373+ function showSuccess( ) {
 374+ global $wgOut;
 375+
 376+ $wgOut->setPagetitle( wfMsg( "emailsent" ) );
 377+ $wgOut->addWikiText( wfMsg( "emailsenttext" ) );
 378+
 379+ $wgOut->returnToMain( false );
 380+ }
 381+}
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/SpecialContact.php
___________________________________________________________________
Added: svn:eol-style
1382 + native
Added: eol-style:native
2383 + properties
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/install.settings
@@ -0,0 +1,5 @@
 2+require_once( "{{path}}/ContactPage.php" );
 3+
 4+$wgContactUser = 'WikiAdmin';
 5+$wgContactSender = 'apache@' . $wgServerName;
 6+$wgContactSenderName = 'Contact Form on ' . $wgSitename;
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/install.settings
___________________________________________________________________
Added: svn:eol-style
17 + native
Added: eol-style:native
28 + properties
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.alias.php
@@ -0,0 +1,154 @@
 2+<?php
 3+/**
 4+ * Aliases for Special:Contact
 5+ *
 6+ * @addtogroup Extensions
 7+ */
 8+
 9+$aliases = array();
 10+
 11+/** English
 12+ * @author Jon Harald Søby
 13+ */
 14+$aliases['en'] = array(
 15+ 'Contact' => array( 'Contact' ),
 16+);
 17+
 18+/** Arabic (العربية)
 19+ * @author Meno25
 20+ */
 21+$aliases['ar'] = array(
 22+ 'Contact' => array( 'اتصال' ),
 23+);
 24+
 25+/** Egyptian Spoken Arabic (مصرى)
 26+ * @author Meno25
 27+ */
 28+$aliases['arz'] = array(
 29+ 'Contact' => array( 'اتصال' ),
 30+);
 31+
 32+/** Assamese (অসমীয়া) */
 33+$aliases['as'] = array(
 34+ 'Contact' => array( 'যোগাযোগ' ),
 35+);
 36+
 37+/** German (Deutsch) */
 38+$aliases['de'] = array(
 39+ 'Contact' => array( 'Kontakt' ),
 40+);
 41+
 42+/** Finnish (Suomi) */
 43+$aliases['fi'] = array(
 44+ 'Contact' => array( 'Yhteystiedot' ),
 45+);
 46+
 47+/** Galician (Galego) */
 48+$aliases['gl'] = array(
 49+ 'Contact' => array( 'Contactar' ),
 50+);
 51+
 52+/** Hebrew (עברית)
 53+ * @author Rotem Liss
 54+ */
 55+$aliases['he'] = array(
 56+ 'Contact' => array( 'יצירת_קשר' ),
 57+);
 58+
 59+/** Croatian (Hrvatski) */
 60+$aliases['hr'] = array(
 61+ 'Contact' => array( 'Kontakt' ),
 62+);
 63+
 64+/** Upper Sorbian (Hornjoserbsce) */
 65+$aliases['hsb'] = array(
 66+ 'Contact' => array( 'Kontakt' ),
 67+);
 68+
 69+/** Haitian (Kreyòl ayisyen) */
 70+$aliases['ht'] = array(
 71+ 'Contact' => array( 'Kontak' ),
 72+);
 73+
 74+/** Hungarian (Magyar) */
 75+$aliases['hu'] = array(
 76+ 'Contact' => array( 'Kapcsolat' ),
 77+);
 78+
 79+/** Indonesian (Bahasa Indonesia) */
 80+$aliases['id'] = array(
 81+ 'Contact' => array( 'Kontak' ),
 82+);
 83+
 84+/** Khmer (ភាសាខ្មែរ) */
 85+$aliases['km'] = array(
 86+ 'Contact' => array( 'ទំនាក់ទំនង' ),
 87+);
 88+
 89+/** Luxembourgish (Lëtzebuergesch) */
 90+$aliases['lb'] = array(
 91+ 'Contact' => array( 'Kontakt' ),
 92+);
 93+
 94+/** Macedonian (Македонски) */
 95+$aliases['mk'] = array(
 96+ 'Contact' => array( 'Контакт' ),
 97+);
 98+
 99+/** Low German (Plattdüütsch) */
 100+$aliases['nds'] = array(
 101+ 'Contact' => array( 'Kuntakt' ),
 102+);
 103+
 104+/** Nedersaksisch (Nedersaksisch) */
 105+$aliases['nds-nl'] = array(
 106+ 'Contact' => array( 'Kontak' ),
 107+);
 108+
 109+/** Dutch (Nederlands) */
 110+$aliases['nl'] = array(
 111+ 'Contact' => array( 'Contactpagina' ),
 112+);
 113+
 114+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 115+ * @author Jon Harald Søby
 116+ */
 117+$aliases['no'] = array(
 118+ 'Contact' => array( 'Kontakt', 'Kontaktside' ),
 119+);
 120+
 121+/** Polish (Polski) */
 122+$aliases['pl'] = array(
 123+ 'Contact' => array( 'Kontakt' ),
 124+);
 125+
 126+/** Pashto (پښتو) */
 127+$aliases['ps'] = array(
 128+ 'Contact' => array( 'اړيکه، د اړيکو مخ' ),
 129+);
 130+
 131+/** Portuguese (Português) */
 132+$aliases['pt'] = array(
 133+ 'Contact' => array( 'Contactar', 'Contatar' ),
 134+);
 135+
 136+/** Brazilian Portuguese (Português do Brasil) */
 137+$aliases['pt-br'] = array(
 138+ 'Contact' => array( 'Contactar', 'Contatar' ),
 139+);
 140+
 141+/** Swedish (Svenska) */
 142+$aliases['sv'] = array(
 143+ 'Contact' => array( 'Kontakt' ),
 144+);
 145+
 146+/** Tetum (Tetun) */
 147+$aliases['tet'] = array(
 148+ 'Contact' => array( 'Kontaktu' ),
 149+);
 150+
 151+/** Thai (ไทย) */
 152+$aliases['th'] = array(
 153+ 'Contact' => array( 'ติดต่อ' ),
 154+);
 155+
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.alias.php
___________________________________________________________________
Added: svn:eol-style
1156 + native
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.i18n.php
@@ -0,0 +1,1139 @@
 2+<?php
 3+/**
 4+ * Internationalisation file for extension ContactPage.
 5+ *
 6+ * @addtogroup Extensions
 7+ * @author Daniel Kinzler, brightbyte.de
 8+ * @copyright © 2007 Daniel Kinzler
 9+ * @license GNU General Public Licence 2.0 or later
 10+ */
 11+
 12+$messages = array();
 13+
 14+$messages['en'] = array(
 15+ 'contact' => 'Contact page',
 16+ 'contactpage' => 'Contact page',
 17+ 'contactpage-desc' => '[[Special:Contact|Contact form for visitors]]',
 18+ 'contactpage-title' => 'Contact',
 19+ 'contactpage-pagetext' => 'Please use the form below to contact us.',
 20+ 'contactpage-defsubject' => 'Contact Message',
 21+ 'contactpage-subject-and-sender' => '$1 (from $2)',
 22+ 'contactpage-fromname' => 'your name *',
 23+ 'contactpage-fromaddress' => 'your e-mail **',
 24+ 'contactpage-formfootnotes' => '* optional<br />
 25+** optional but needed if you want an answer',
 26+ 'contactpage-fromname-required' => 'your name',
 27+ 'contactpage-fromaddress-required' => 'your e-mail',
 28+ 'contactpage-formfootnotes-required' => 'All fields are required.',
 29+ 'contactpage-captcha' => 'To send the message, please solve the captcha ([[Special:Captcha/help|more info]])',
 30+ 'contactpage-captcha-failed' => 'Captcha test failed! ([[Special:Captcha/help|more info]])',
 31+);
 32+
 33+/** Message documentation (Message documentation)
 34+ * @author Jon Harald Søby
 35+ * @author Purodha
 36+ */
 37+$messages['qqq'] = array(
 38+ 'contact' => '{{Identical|ContactPage}}',
 39+ 'contactpage' => '{{Identical|ContactPage}}',
 40+ 'contactpage-desc' => 'Extension description displayed on [[Special:Version]].',
 41+);
 42+
 43+/** Säggssch (Säggssch)
 44+ * @author Thogo
 45+ */
 46+$messages['sxu'] = array(
 47+ 'contact' => 'Gondagd',
 48+);
 49+
 50+/** Afrikaans (Afrikaans)
 51+ * @author Arnobarnard
 52+ * @author Naudefj
 53+ */
 54+$messages['af'] = array(
 55+ 'contact' => 'Kontak bladsy',
 56+ 'contactpage' => 'Kontak bladsy',
 57+ 'contactpage-desc' => '[[Special:Contact|Kontak vorm vir besoekers]]',
 58+ 'contactpage-title' => 'Kontak',
 59+ 'contactpage-defsubject' => 'Kontak boodskap',
 60+ 'contactpage-subject-and-sender' => '$1 (van $2)',
 61+ 'contactpage-fromname' => 'u naam *',
 62+ 'contactpage-fromaddress' => 'u e-posadres **',
 63+ 'contactpage-fromname-required' => 'u naam',
 64+ 'contactpage-fromaddress-required' => 'u e-posadres',
 65+ 'contactpage-formfootnotes-required' => 'Alle velde is verpligtend.',
 66+);
 67+
 68+/** Arabic (العربية)
 69+ * @author Meno25
 70+ */
 71+$messages['ar'] = array(
 72+ 'contact' => 'صفحة الاتصال',
 73+ 'contactpage' => 'صفحة الاتصال',
 74+ 'contactpage-desc' => '[[Special:Contact|استمارة اتصال للزائرين]]',
 75+ 'contactpage-title' => 'اتصل',
 76+ 'contactpage-pagetext' => 'من فضلك استخدم الاستمارة بالأسفل للاتصال بنا.',
 77+ 'contactpage-defsubject' => 'رسالة الاتصال',
 78+ 'contactpage-subject-and-sender' => '$1 (من $2)',
 79+ 'contactpage-fromname' => 'اسمك *',
 80+ 'contactpage-fromaddress' => 'بريدك الإلكتروني **',
 81+ 'contactpage-formfootnotes' => '* اختياري<br />
 82+** اختياري لكن ضروري لو أردت إجابة',
 83+ 'contactpage-fromname-required' => 'اسمك',
 84+ 'contactpage-fromaddress-required' => 'بريدك الإلكتروني',
 85+ 'contactpage-formfootnotes-required' => 'كل الحقول مطلوبة',
 86+ 'contactpage-captcha' => 'لإرسال الرسالة، من فضلك حل الكابتشا ([[Special:Captcha/help|معلومات إضافية]])',
 87+ 'contactpage-captcha-failed' => 'اختبار الكابتشا فشل! ([[Special:Captcha/help|معلومات إضافية]])',
 88+);
 89+
 90+/** Egyptian Spoken Arabic (مصرى)
 91+ * @author Meno25
 92+ */
 93+$messages['arz'] = array(
 94+ 'contact' => 'صفحة الاتصال',
 95+ 'contactpage' => 'صفحة الاتصال',
 96+ 'contactpage-desc' => '[[Special:Contact|استمارة اتصال للزائرين]]',
 97+ 'contactpage-title' => 'اتصل',
 98+ 'contactpage-pagetext' => 'من فضلك استخدم الاستمارة بالأسفل للاتصال بنا.',
 99+ 'contactpage-defsubject' => 'رسالة الاتصال',
 100+ 'contactpage-subject-and-sender' => '$1 (من $2)',
 101+ 'contactpage-fromname' => 'اسمك *',
 102+ 'contactpage-fromaddress' => 'بريدك الإلكترونى **',
 103+ 'contactpage-formfootnotes' => '* اختياري<br />
 104+** اختيارى لكن ضرورى لو أردت إجابة',
 105+ 'contactpage-fromname-required' => 'اسمك',
 106+ 'contactpage-fromaddress-required' => 'بريدك الإلكتروني',
 107+ 'contactpage-formfootnotes-required' => 'كل الحقول مطلوبة',
 108+ 'contactpage-captcha' => 'لإرسال الرسالة، من فضلك حل الكابتشا ([[Special:Captcha/help|معلومات إضافية]])',
 109+ 'contactpage-captcha-failed' => 'اختبار الكابتشا فشل! ([[Special:Captcha/help|معلومات إضافية]])',
 110+);
 111+
 112+/** Bikol Central (Bikol Central)
 113+ * @author Filipinayzd
 114+ */
 115+$messages['bcl'] = array(
 116+ 'contactpage-subject-and-sender' => '$1 (poon $2)',
 117+ 'contactpage-fromname' => 'pangaran mo *',
 118+ 'contactpage-fromaddress' => "''e''-surat mo **",
 119+);
 120+
 121+/** Bulgarian (Български)
 122+ * @author DCLXVI
 123+ */
 124+$messages['bg'] = array(
 125+ 'contactpage-desc' => '[[Special:Contact|Формуляр за връзка]]',
 126+ 'contactpage-pagetext' => 'Формулярът по-долу може да бъде използван за връзка с нас.',
 127+ 'contactpage-defsubject' => 'Съобщение',
 128+ 'contactpage-subject-and-sender' => '$1 (от $2)',
 129+ 'contactpage-fromname' => 'вашето име *',
 130+ 'contactpage-fromaddress' => 'вашата е-поща **',
 131+ 'contactpage-formfootnotes' => '* незадължително<br />
 132+** незадължително, но препоръчително ако желаете отговор',
 133+ 'contactpage-fromname-required' => 'вашето име',
 134+ 'contactpage-fromaddress-required' => 'вашата е-поща',
 135+ 'contactpage-formfootnotes-required' => 'Всички полета са задължителни.',
 136+ 'contactpage-captcha' => 'За изпращане на съобщение е необходимо да се реши задачата ([[Special:Captcha/help|повече информация]])',
 137+ 'contactpage-captcha-failed' => 'Captcha-тестът беше неуспешен! ([[Special:Captcha/help|повече информация]])',
 138+);
 139+
 140+/** Catalan (Català)
 141+ * @author SMP
 142+ */
 143+$messages['ca'] = array(
 144+ 'contactpage-title' => 'Contacte',
 145+);
 146+
 147+/** Czech (Česky)
 148+ * @author Matěj Grabovský
 149+ * @author לערי ריינהארט
 150+ */
 151+$messages['cs'] = array(
 152+ 'contact' => 'Kontakt',
 153+ 'contactpage' => 'Kontaktní stránka',
 154+ 'contactpage-desc' => '[[Special:Contact|Kontaktní formulář pro návštěvníky]]',
 155+ 'contactpage-title' => 'Kontakt',
 156+ 'contactpage-defsubject' => 'Zpráva',
 157+ 'contactpage-subject-and-sender' => '$1 (od $2)',
 158+ 'contactpage-fromname' => 'vaše jméno *',
 159+ 'contactpage-fromaddress' => 'váš email **',
 160+ 'contactpage-formfootnotes' => '&#042; volitelné<br />
 161+&#042;&#042; volitelné, ale potřebné pokud chcete odpověď',
 162+);
 163+
 164+/** Welsh (Cymraeg)
 165+ * @author Lloffiwr
 166+ */
 167+$messages['cy'] = array(
 168+ 'contactpage-captcha' => 'Er mwyn anfon y neges, byddwch gystal â datrys y pos gwrth-sbam ([[Special:Captcha/help|mwy o wybodaeth]])',
 169+ 'contactpage-captcha-failed' => 'Ni lwyddodd y prawf gwrth-sbam! ([[Special:Captcha/help|mwy o wybodaeth]])',
 170+);
 171+
 172+/** Danish (Dansk) */
 173+$messages['da'] = array(
 174+ 'contactpage-subject-and-sender' => '$1 (fra $2)',
 175+);
 176+
 177+/** German (Deutsch)
 178+ * @author Raimond Spekking
 179+ */
 180+$messages['de'] = array(
 181+ 'contact' => 'Kontaktseite',
 182+ 'contactpage' => 'Kontaktseite',
 183+ 'contactpage-desc' => '[[Special:Contact|Kontaktformular für Besucher]]',
 184+ 'contactpage-title' => 'Kontakt',
 185+ 'contactpage-pagetext' => 'Mit diesem Formular kannst du uns Nachrichten zukommen lassen.',
 186+ 'contactpage-defsubject' => 'Kontaktnachricht',
 187+ 'contactpage-subject-and-sender' => '$1 (von $2)',
 188+ 'contactpage-fromname' => 'Dein Name *',
 189+ 'contactpage-fromaddress' => 'Deine E-Mail-Adresse **',
 190+ 'contactpage-formfootnotes' => '* optional<br />
 191+** optional, wird aber benötigt, um dir antworten zu können',
 192+ 'contactpage-fromname-required' => 'Dein Name',
 193+ 'contactpage-fromaddress-required' => 'Deine E-Mail-Adresse',
 194+ 'contactpage-formfootnotes-required' => 'Alle Felder müssen ausgefüllt sein.',
 195+ 'contactpage-captcha' => 'Um die Nachricht senden zu können, löse bitte das Captcha ([[Special:Captcha/help|weitere Informationen]])',
 196+ 'contactpage-captcha-failed' => 'Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])',
 197+);
 198+
 199+/** German (formal address) (Deutsch (Sie-Form))
 200+ * @author Raimond Spekking
 201+ */
 202+$messages['de-formal'] = array(
 203+ 'contactpage-pagetext' => 'Mit diesem Formular können Sie uns Nachrichten zukommen lassen.',
 204+ 'contactpage-fromname' => 'Ihr Name *',
 205+ 'contactpage-fromaddress' => 'Ihre E-Mail-Adresse **',
 206+ 'contactpage-formfootnotes' => '* optional<br />
 207+** optional, wird aber benötigt, um Ihnen antworten zu können',
 208+ 'contactpage-fromname-required' => 'Ihr Name',
 209+ 'contactpage-fromaddress-required' => 'Ihre E-Mail-Adresse',
 210+ 'contactpage-captcha' => 'Um die Nachricht senden zu können, lösen Sie bitte das Captcha ([[Special:Captcha/help|weitere Informationen]])',
 211+);
 212+
 213+/** Lower Sorbian (Dolnoserbski)
 214+ * @author Michawiki
 215+ */
 216+$messages['dsb'] = array(
 217+ 'contact' => 'Kontaktowy bok',
 218+ 'contactpage' => 'Kontaktowy bok',
 219+ 'contactpage-desc' => '[[Special:Contact|Kontaktowy formular za wobglědowarjow]]',
 220+ 'contactpage-title' => 'Kontakt',
 221+ 'contactpage-pagetext' => 'Pšosym wužyj toś ten formular, aby se z nami do zwiska stajił.',
 222+ 'contactpage-defsubject' => 'Kontaktowa powěźenka',
 223+ 'contactpage-subject-and-sender' => '$1 (z $2)',
 224+ 'contactpage-fromname' => 'Twójo mě *',
 225+ 'contactpage-fromaddress' => 'Twója e-mailowa adresa **',
 226+ 'contactpage-formfootnotes' => '* opcionalny<br />
 227+** opcionalny, jo pak trěbne, aby śi wótegroniś mógli',
 228+ 'contactpage-fromname-required' => 'twójo mě',
 229+ 'contactpage-fromaddress-required' => 'twója e-mail',
 230+ 'contactpage-formfootnotes-required' => 'Wšykne póla muse wupołnjone byś.',
 231+ 'contactpage-captcha' => 'Aby powěźenku pósłał, rozwěž pšosym toś te captcha ([[Special:Captcha/help|dalšne informacije]])',
 232+ 'contactpage-captcha-failed' => 'Test captcha njebu wobstaty! ([[Special:Captcha/help|dalšne informacije]])',
 233+);
 234+
 235+/** Greek (Ελληνικά)
 236+ * @author Consta
 237+ */
 238+$messages['el'] = array(
 239+ 'contact' => 'Σελίδα επαφών',
 240+ 'contactpage' => 'Σελίδα επαφών',
 241+ 'contactpage-title' => 'Επαφή',
 242+ 'contactpage-subject-and-sender' => '$1 (από $2)',
 243+ 'contactpage-fromname' => 'το όνομα σας *',
 244+ 'contactpage-fromaddress' => 'το ηλεκτρονικό ταχυδρομείο σας **',
 245+ 'contactpage-fromname-required' => 'το όνομα σας',
 246+ 'contactpage-fromaddress-required' => 'το ηλεκτρονικό σας ταχυδρομείο',
 247+ 'contactpage-formfootnotes-required' => 'Όλα τα πεδία είναι υποχρεωτικά.',
 248+);
 249+
 250+/** Esperanto (Esperanto)
 251+ * @author Yekrats
 252+ */
 253+$messages['eo'] = array(
 254+ 'contact' => 'Kontaktpaĝo',
 255+ 'contactpage' => 'Kontaktpaĝo',
 256+ 'contactpage-desc' => '[[Special:Contact|Kontaktpaĝo por vizitantoj]]',
 257+ 'contactpage-title' => 'Kontakti',
 258+ 'contactpage-pagetext' => 'Bonvolu uzi la suban kamparon por kontakti nin.',
 259+ 'contactpage-defsubject' => 'Kontakta Mesaĝo',
 260+ 'contactpage-subject-and-sender' => '$1 (de $2)',
 261+ 'contactpage-fromname' => 'via nomo *',
 262+ 'contactpage-fromaddress' => 'via retadreso **',
 263+ 'contactpage-formfootnotes' => '* nedeviga<br />
 264+** nedeviga sed deviga se vi volas respondon',
 265+ 'contactpage-fromname-required' => 'via nomo',
 266+ 'contactpage-fromaddress-required' => 'via retadreso',
 267+ 'contactpage-formfootnotes-required' => 'Ĉiuj kampoj estas devigaj.',
 268+ 'contactpage-captcha' => "Sendi la mesaĝon, bonvolu solvi la enigmon de ''captcha'' ([[Special:Captcha/help|plua informo]])",
 269+);
 270+
 271+/** Spanish (Español)
 272+ * @author לערי ריינהארט
 273+ */
 274+$messages['es'] = array(
 275+ 'contact' => 'Para contactar',
 276+);
 277+
 278+/** Extremaduran (Estremeñu)
 279+ * @author Better
 280+ */
 281+$messages['ext'] = array(
 282+ 'contactpage-subject-and-sender' => '$1 (endi $2)',
 283+ 'contactpage-fromname' => 'el tu nombri *',
 284+ 'contactpage-fromaddress' => 'el tu email **',
 285+);
 286+
 287+/** Finnish (Suomi)
 288+ * @author Cimon Avaro
 289+ * @author Jaakonam
 290+ * @author Nike
 291+ */
 292+$messages['fi'] = array(
 293+ 'contact' => 'Yhteydenottosivu',
 294+ 'contactpage-title' => 'Ota yhteyttä',
 295+ 'contactpage-pagetext' => 'Voit ottaa yhteyttä meihin alla olevalla lomakkeella.',
 296+ 'contactpage-defsubject' => 'Viestisi',
 297+ 'contactpage-subject-and-sender' => '$1 (lähettäjä: $2)',
 298+ 'contactpage-fromname' => 'nimesi *',
 299+ 'contactpage-fromaddress' => 'sähköpostiosoitteesi **',
 300+ 'contactpage-formfootnotes' => '* vapaaehtoinen<br />
 301+** vapaaehtoinen mutta tarpeen, jos haluat vastauksen viestiisi',
 302+ 'contactpage-fromname-required' => 'nimesi',
 303+ 'contactpage-fromaddress-required' => 'sähköpostiosoitteesi',
 304+ 'contactpage-formfootnotes-required' => 'Kaikki kentät ovat pakollisia.',
 305+);
 306+
 307+/** French (Français)
 308+ * @author Grondin
 309+ * @author Sherbrooke
 310+ * @author Urhixidur
 311+ * @author לערי ריינהארט
 312+ */
 313+$messages['fr'] = array(
 314+ 'contact' => 'Pour nous contacter',
 315+ 'contactpage' => 'Contact',
 316+ 'contactpage-desc' => '[[Special:Contact|Formulaire de contact pour les visiteurs]]',
 317+ 'contactpage-title' => 'Contacter',
 318+ 'contactpage-pagetext' => 'Veuillez utiliser le formulaire ci-dessous pour nous contacter.',
 319+ 'contactpage-defsubject' => 'Message',
 320+ 'contactpage-subject-and-sender' => '$1 (de $2)',
 321+ 'contactpage-fromname' => 'Votre nom*',
 322+ 'contactpage-fromaddress' => 'Votre adresse courriel**',
 323+ 'contactpage-formfootnotes' => '* optionnel<br />
 324+** optionnel mais requis si vous désirez une réponse',
 325+ 'contactpage-fromname-required' => 'votre nom',
 326+ 'contactpage-fromaddress-required' => 'votre adresse courriel',
 327+ 'contactpage-formfootnotes-required' => 'Tous les champs sont requis.',
 328+ 'contactpage-captcha' => 'Pour envoyer le message, prière de résoudre le captcha ([[Special:Captcha/help|aide]])',
 329+ 'contactpage-captcha-failed' => "Vous n'avez pas décodé le captcha ! ([[Special:Captcha/help|aide]])",
 330+);
 331+
 332+/** Galician (Galego)
 333+ * @author Alma
 334+ * @author Toliño
 335+ * @author Xosé
 336+ */
 337+$messages['gl'] = array(
 338+ 'contact' => 'Páxina de Contacto',
 339+ 'contactpage' => 'Páxina de Contacto',
 340+ 'contactpage-desc' => '[[Special:Contact|Formulario de contacto para os visitantes]]',
 341+ 'contactpage-title' => 'Contacto',
 342+ 'contactpage-pagetext' => 'Use o formulario de embaixo para contactar con nós.',
 343+ 'contactpage-defsubject' => 'Mensaxe de Contacto',
 344+ 'contactpage-subject-and-sender' => '$1 (desde $2)',
 345+ 'contactpage-fromname' => 'o seu nome *',
 346+ 'contactpage-fromaddress' => 'o seu correo electrónico **',
 347+ 'contactpage-formfootnotes' => '* opcional<br />
 348+** opcional, pero necesario se quere unha resposta',
 349+ 'contactpage-fromname-required' => 'o seu nome',
 350+ 'contactpage-fromaddress-required' => 'o seu correo electrónico',
 351+ 'contactpage-formfootnotes-required' => 'Requírense todos os campos.',
 352+ 'contactpage-captcha' => 'Para enviar unha mensaxe, resolva o captcha ([[Special:Captcha/help|máis información]])',
 353+ 'contactpage-captcha-failed' => 'Fallou a proba Captcha ([[Special:Captcha/help|máis información]])',
 354+);
 355+
 356+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
 357+ * @author Omnipaedista
 358+ */
 359+$messages['grc'] = array(
 360+ 'contactpage-title' => 'Ἐπαφή',
 361+);
 362+
 363+/** Manx (Gaelg)
 364+ * @author MacTire02
 365+ */
 366+$messages['gv'] = array(
 367+ 'contactpage-fromname' => "dt'ennym *",
 368+ 'contactpage-fromaddress' => 'dty phost-L **',
 369+);
 370+
 371+/** Hebrew (עברית)
 372+ * @author Agbad
 373+ * @author Rotemliss
 374+ * @author YaronSh
 375+ */
 376+$messages['he'] = array(
 377+ 'contact' => 'דף יצירת קשר',
 378+ 'contactpage' => 'דף יצירת קשר',
 379+ 'contactpage-desc' => '[[Special:Contact|טופס יצירת קשר למבקרים]]',
 380+ 'contactpage-title' => 'יצירת קשר',
 381+ 'contactpage-pagetext' => 'אנא השתמשו בטופס שלהלן כדי ליצור עמנו קשר.',
 382+ 'contactpage-defsubject' => 'הודעת יצירת קשר',
 383+ 'contactpage-subject-and-sender' => '$1 (מתוך $2)',
 384+ 'contactpage-fromname' => 'שמכם *',
 385+ 'contactpage-fromaddress' => 'כתובת הדוא"ל שלכם **',
 386+ 'contactpage-formfootnotes' => '* אופציונאלי<br />
 387+** אופציונאלי אבל דרוש אם ברצונכם לקבל תשובה',
 388+ 'contactpage-fromname-required' => 'שמכם',
 389+ 'contactpage-fromaddress-required' => 'הדוא"ל שלכם',
 390+ 'contactpage-formfootnotes-required' => 'כל השדות נחוצים.',
 391+ 'contactpage-captcha' => 'כדי לשלוח את ההודעה, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]])',
 392+ 'contactpage-captcha-failed' => 'מבחן ה־Captcha נכשל! ([[Special:Captcha/help|מידע נוסף]])',
 393+);
 394+
 395+/** Hindi (हिन्दी)
 396+ * @author Kaustubh
 397+ */
 398+$messages['hi'] = array(
 399+ 'contact' => 'सम्पर्कपॄष्ठ',
 400+ 'contactpage' => 'सम्पर्क पॄष्ठ',
 401+ 'contactpage-desc' => '[[Special:Contact|भेंट देनेवालोंके लिये संपर्क फ़ार्म]]',
 402+ 'contactpage-title' => 'संपर्क',
 403+ 'contactpage-pagetext' => 'हमसे संपर्क करने के लिये नीचे दिये गये फ़ार्म का इस्तेमाल करें।',
 404+ 'contactpage-defsubject' => 'संपर्क संदेश',
 405+ 'contactpage-subject-and-sender' => '$1 ($2 से)',
 406+ 'contactpage-fromname' => 'आपका नाम *',
 407+ 'contactpage-fromaddress' => 'आपका इ-मेल **',
 408+ 'contactpage-formfootnotes' => '* वैकल्पिक<br />
 409+** वैकल्पिक पर जवाब चाहिये हो तो आवश्यक',
 410+ 'contactpage-captcha' => 'यह संदेश भेजनेके लिये, कृपया कॅपचा (captcha) सॉल्व करें ([[Special:Captcha/help|अधिक ज़ानकारी]])',
 411+ 'contactpage-captcha-failed' => 'कॅपचा परिक्षा पूरी नहीं हुई! ([[Special:Captcha/help|अधिक ज़ानकारी]])',
 412+);
 413+
 414+/** Croatian (Hrvatski)
 415+ * @author Dnik
 416+ */
 417+$messages['hr'] = array(
 418+ 'contactpage-title' => 'Kontakt',
 419+ 'contactpage-pagetext' => 'Molimo, koristite ovaj obrazac za kontakt s nama.',
 420+ 'contactpage-defsubject' => 'Poruka za kontakt',
 421+ 'contactpage-subject-and-sender' => '$1 (od $2)',
 422+ 'contactpage-fromname' => 'Vaše ime *',
 423+ 'contactpage-fromaddress' => 'Vaš e-mail **',
 424+ 'contactpage-formfootnotes' => '* neobavezno<br />
 425+** neobavezno, ali potrebno ako želite odgovor',
 426+ 'contactpage-captcha' => 'Da biste poslali poruku, molimo da u svrhu prevencije spama, prepišete simbole ([[Special:Captcha/help|više informacija]])',
 427+ 'contactpage-captcha-failed' => 'Antispam-test nije uspio! ([[Special:Captcha/help|više informacija]])',
 428+);
 429+
 430+/** Upper Sorbian (Hornjoserbsce)
 431+ * @author Michawiki
 432+ */
 433+$messages['hsb'] = array(
 434+ 'contact' => 'Kontaktna strona',
 435+ 'contactpage' => 'Kontaktna strona',
 436+ 'contactpage-desc' => '[[Special:Contact|Kontaktowy formular za wopytarjow]]',
 437+ 'contactpage-title' => 'Kontakt',
 438+ 'contactpage-pagetext' => 'Prošu wužij tutón formular, zo by nas skontaktował.',
 439+ 'contactpage-defsubject' => 'Kontaktna zdźělenka',
 440+ 'contactpage-subject-and-sender' => '$1 (z $2)',
 441+ 'contactpage-fromname' => 'twoje mjeno *',
 442+ 'contactpage-fromaddress' => 'twoja e-mejlowa adresa **',
 443+ 'contactpage-formfootnotes' => '* opcionalny<br />
 444+** opcionalny, je wšak trjeba, zo by so móhła wotmołwa pósłać',
 445+ 'contactpage-fromname-required' => 'twoje mjeno',
 446+ 'contactpage-fromaddress-required' => 'twoja e-mejl',
 447+ 'contactpage-formfootnotes-required' => 'Wšě poła dyrbja wupjelnjene być.',
 448+ 'contactpage-captcha' => 'Zo by powěsć pósłać móhł, rozrisaj prošu captchu ([[Special:Captcha/help|dalše informacije]])',
 449+ 'contactpage-captcha-failed' => 'Njejsy captchowy test wobstał! ([[Special:Captcha/help|dalše informacije]])',
 450+);
 451+
 452+/** Hungarian (Magyar)
 453+ * @author Dani
 454+ */
 455+$messages['hu'] = array(
 456+ 'contact' => 'Kapcsolatfelvétel',
 457+ 'contactpage-title' => 'Kapcsolatfelvétel',
 458+ 'contactpage-pagetext' => 'Az alábbi űrlap kitöltésével küldhetsz nekünk üzenetet.',
 459+ 'contactpage-defsubject' => 'Üzenet',
 460+ 'contactpage-fromname' => 'neved *',
 461+ 'contactpage-fromaddress' => 'e-mail címed **',
 462+ 'contactpage-formfootnotes' => '* nem kötelező<br />
 463+* nem kötelező, de add meg, ha választ szeretnél',
 464+ 'contactpage-captcha' => 'Az üzenet elküldéséhez írd be a képen megjelent szót ([[Special:Captcha/help|további segítség]])',
 465+ 'contactpage-captcha-failed' => 'Captcha teszt nem sikerült! ([[Special:Captcha/help|további segítség]])',
 466+);
 467+
 468+/** Interlingua (Interlingua)
 469+ * @author McDutchie
 470+ */
 471+$messages['ia'] = array(
 472+ 'contact' => 'Pagina de contacto',
 473+ 'contactpage' => 'Pagina de contacto',
 474+ 'contactpage-desc' => '[[Special:Contact|Formulario de contacto pro visitatores]]',
 475+ 'contactpage-title' => 'Contacto',
 476+ 'contactpage-pagetext' => 'Per favor usa le formulario infra pro contactar nos.',
 477+ 'contactpage-defsubject' => 'Message de contacto',
 478+ 'contactpage-subject-and-sender' => '$1 (de $2)',
 479+ 'contactpage-fromname' => 'tu nomine *',
 480+ 'contactpage-fromaddress' => 'tu e-mail **',
 481+ 'contactpage-formfootnotes' => '* optional<br />
 482+** optional sed necessari si tu vole reciper un responsa',
 483+ 'contactpage-fromname-required' => 'tu nomine',
 484+ 'contactpage-fromaddress-required' => 'tu e-mail',
 485+ 'contactpage-formfootnotes-required' => 'Tote le campos es obligatori.',
 486+ 'contactpage-captcha' => 'Pro inviar le message, per favor resolve le captcha ([[Special:Captcha/help|plus info]])',
 487+ 'contactpage-captcha-failed' => 'Le test captcha falleva! ([[Special:Captcha/help|plus info]])',
 488+);
 489+
 490+/** Icelandic (Íslenska)
 491+ * @author Jóna Þórunn
 492+ * @author S.Örvarr.S
 493+ */
 494+$messages['is'] = array(
 495+ 'contact' => 'Hafa samband',
 496+ 'contactpage-title' => 'Hafa samband',
 497+ 'contactpage-pagetext' => 'Gjörðu svo vel og notaðu eyðublaðið fyrir neðan til að hafa samband við okkur.',
 498+ 'contactpage-subject-and-sender' => '$1 (frá $2)',
 499+ 'contactpage-fromname' => 'nafnið þitt *',
 500+ 'contactpage-fromaddress' => 'netfangið þitt **',
 501+ 'contactpage-formfootnotes' => '* valfrjálst<br/>
 502+** valfrjálst en nauðsynlegt ef þú vilt fá svar',
 503+);
 504+
 505+/** Italian (Italiano)
 506+ * @author Darth Kule
 507+ */
 508+$messages['it'] = array(
 509+ 'contact' => 'Contatti',
 510+ 'contactpage' => 'Contatti',
 511+ 'contactpage-desc' => '[[Special:Contact|Modulo di contatto per gli ospiti]]',
 512+ 'contactpage-title' => 'Contatti',
 513+ 'contactpage-pagetext' => 'Il modulo riportato di seguito consente di mettersi in contatto con noi.',
 514+ 'contactpage-defsubject' => 'Messaggio',
 515+ 'contactpage-subject-and-sender' => '$1 (da $2)',
 516+ 'contactpage-fromname' => 'nome *',
 517+ 'contactpage-fromaddress' => 'indirizzo e-mail **',
 518+ 'contactpage-formfootnotes' => '* campo non obbligatorio<br />
 519+** campo obbligatorio se si richiede una risposta',
 520+ 'contactpage-fromname-required' => 'tuo nome',
 521+ 'contactpage-fromaddress-required' => 'tua e-mail',
 522+ 'contactpage-formfootnotes-required' => 'Tutti i campi sono obbligatori.',
 523+ 'contactpage-captcha' => 'Per inviare il messaggio, risolvi il captcha ([[Special:Captcha/help|maggiori informazioni]])',
 524+ 'contactpage-captcha-failed' => 'Test captcha fallito! ([[Special:Captcha/help|maggiori informazioni]])',
 525+);
 526+
 527+/** Japanese (日本語)
 528+ * @author JtFuruhata
 529+ * @author לערי ריינהארט
 530+ */
 531+$messages['ja'] = array(
 532+ 'contact' => '連絡先',
 533+ 'contactpage' => '連絡先',
 534+ 'contactpage-desc' => '[[Special:Contact|サイト来訪者向け連絡フォーム]]',
 535+ 'contactpage-title' => '連絡フォーム',
 536+ 'contactpage-pagetext' => '以下のフォームを利用すると、私たちにメッセージを送信することができます。',
 537+ 'contactpage-defsubject' => '連絡事項',
 538+ 'contactpage-subject-and-sender' => '$1 ($2 より)',
 539+ 'contactpage-fromname' => 'あなたのお名前 *',
 540+ 'contactpage-fromaddress' => 'あなたの電子メールアドレス **',
 541+ 'contactpage-formfootnotes' => '* 任意記入<br />
 542+** 任意記入ですが、返答が必要な場合は必ずご記入ください',
 543+ 'contactpage-captcha' => 'メッセージを送信するには、以下のCAPTCHA画像認証が必要です([[Special:Captcha/help|詳細はこちら]])',
 544+ 'contactpage-captcha-failed' => 'CAPTCHA画像認証に失敗しました!([[Special:Captcha/help|詳細はこちら]])',
 545+);
 546+
 547+/** Javanese (Basa Jawa)
 548+ * @author Meursault2004
 549+ */
 550+$messages['jv'] = array(
 551+ 'contactpage-title' => 'Kontak',
 552+ 'contactpage-pagetext' => 'Mangga nganggo formulir sing kapacak ing ngisor iki menawa arep kontak kita.',
 553+ 'contactpage-subject-and-sender' => '$1 (saka $2)',
 554+ 'contactpage-fromname' => 'asma panjenengan *',
 555+ 'contactpage-fromaddress' => 'e-mail panjenengan **',
 556+ 'contactpage-formfootnotes' => '* opsional<br />
 557+** opsional nanging diperlokaké yèn panjenengan perlu wangsulan',
 558+);
 559+
 560+/** Khmer (ភាសាខ្មែរ)
 561+ * @author Chhorran
 562+ * @author Lovekhmer
 563+ * @author គីមស៊្រុន
 564+ */
 565+$messages['km'] = array(
 566+ 'contact' => 'ទំព័រ​ទំនាក់ទំនង',
 567+ 'contactpage' => 'ទំព័រ​ទំនាក់ទំនង',
 568+ 'contactpage-desc' => '[[Special:Contact|សំនុំបែបបទទាក់ទង​សំរាប់អ្នកទស្សនា]]',
 569+ 'contactpage-title' => 'ទាក់ទង',
 570+ 'contactpage-pagetext' => 'សូម​ប្រើ​ប្រាស់​សំនុំបែបបទ​ខាងក្រោម​ ដើម្បី​ទាក់ទងមក​យើងខ្ញុំ។',
 571+ 'contactpage-defsubject' => 'សារទាក់ទង',
 572+ 'contactpage-subject-and-sender' => '$1 (ផ្ញើ​ពី $2)',
 573+ 'contactpage-fromname' => 'ឈ្មោះ​របស់អ្នក *',
 574+ 'contactpage-fromaddress' => 'អ៊ីមែល​របស់អ្នក **',
 575+ 'contactpage-fromname-required' => 'ឈ្មោះរបស់អ្នក',
 576+ 'contactpage-fromaddress-required' => 'អ៊ីមែលរបស់អ្នក',
 577+);
 578+
 579+/** Korean (한국어)
 580+ * @author WonRyong
 581+ */
 582+$messages['ko'] = array(
 583+ 'contact' => '관리자 연락',
 584+);
 585+
 586+/** Ripoarisch (Ripoarisch)
 587+ * @author Purodha
 588+ */
 589+$messages['ksh'] = array(
 590+ 'contact' => 'Kontak-Sigg',
 591+ 'contactpage' => 'Kontak-Sigg',
 592+ 'contactpage-desc' => '[[Special:Contact|Kontak-Sigg]] för Besöker.',
 593+ 'contactpage-title' => 'Kontak',
 594+ 'contactpage-pagetext' => 'Övver di Sigg hee kanns De dä Wiki-Maacher jet schrieve.',
 595+ 'contactpage-defsubject' => 'Kontak-Sigg fun de {{SITENAME}}',
 596+ 'contactpage-subject-and-sender' => '$1 (fun $2)',
 597+ 'contactpage-fromname' => 'Dinge Name <sup>*</sup>',
 598+ 'contactpage-fromaddress' => 'Ding <i lang="en">e-mail</i> Address <sup>**</sup>',
 599+ 'contactpage-formfootnotes' => '<sup>*</sup> kannze fott lohße
 600+<br />
 601+<sup>**</sup> kanze fott lohße, ußer wann De en Antwoot han wells',
 602+ 'contactpage-fromname-required' => 'Dinge Name',
 603+ 'contactpage-fromaddress-required' => 'Ding <i lang="en">e-mail</i> Address',
 604+ 'contactpage-formfootnotes-required' => 'Dat moß all ußjefollt wäde.',
 605+ 'contactpage-captcha' => 'Öm Ding Nohresch ze schecke, don dat Kaptscha endrare.
 606+([[Special:Captcha/help|Mieh Enfommazjuhne]])',
 607+ 'contactpage-captcha-failed' => 'De Pröfung fum Kaptscha jingk donevve.
 608+Eß ävver kei Problem.
 609+Don et einfach norr_ens versöke.
 610+([[Special:Captcha/help|Mieh Enfommazjuhne]])',
 611+);
 612+
 613+/** Latin (Latina)
 614+ * @author SPQRobin
 615+ */
 616+$messages['la'] = array(
 617+ 'contactpage-fromname' => 'Nomen tuum *',
 618+);
 619+
 620+/** Luxembourgish (Lëtzebuergesch)
 621+ * @author Robby
 622+ */
 623+$messages['lb'] = array(
 624+ 'contact' => 'Kontaktsäit',
 625+ 'contactpage' => 'Kontaktsäit',
 626+ 'contactpage-desc' => '[[Special:Contact|Kontakt-Formulair fir Visiteuren]]',
 627+ 'contactpage-title' => 'Kontakt',
 628+ 'contactpage-pagetext' => 'Mat dësem Formulär kënnt Dir eis kontaktéieren.',
 629+ 'contactpage-defsubject' => 'Kontakt Message',
 630+ 'contactpage-subject-and-sender' => '$1 (vum $2)',
 631+ 'contactpage-fromname' => 'Äre Numm *',
 632+ 'contactpage-fromaddress' => 'Är E-mail-Adress **',
 633+ 'contactpage-formfootnotes' => '* optional<br />
 634+** optional, gëtt awer gebraucht fir iech äntwerten ze kënnen',
 635+ 'contactpage-fromname-required' => 'Äre Numm',
 636+ 'contactpage-fromaddress-required' => 'Är E-Mailadress',
 637+ 'contactpage-formfootnotes-required' => 'All Felder mussen ausgefëllt ginn.',
 638+ 'contactpage-captcha' => 'Fir e Message ze schécke, léisst w.e.g. dëse Captcha ([[Special:Captcha/help|méi Informatiounen]])',
 639+ 'contactpage-captcha-failed' => 'Captcha-Test nicht bestan! ([[Special:Captcha/help|méi Informatiounen]])',
 640+);
 641+
 642+/** Macedonian (Македонски)
 643+ * @author Misos
 644+ */
 645+$messages['mk'] = array(
 646+ 'contact' => 'Контакт',
 647+);
 648+
 649+/** Malayalam (മലയാളം)
 650+ * @author Shijualex
 651+ */
 652+$messages['ml'] = array(
 653+ 'contactpage-title' => 'വിലാസം',
 654+ 'contactpage-defsubject' => 'ബന്ധപ്പെടാനുള്ള സന്ദേശം',
 655+ 'contactpage-subject-and-sender' => '$1 ($2 ല്‍ നിന്ന്)',
 656+ 'contactpage-fromname' => 'നിങ്ങളുടെ പേര്‌ *',
 657+ 'contactpage-fromaddress' => 'നിങ്ങളുടെ ഇമെയില്‍ വിലാസം **',
 658+ 'contactpage-formfootnotes' => '* നിര്‍‌ബന്ധമില്ല<br />
 659+** നിര്‍‌ബന്ധമില്ല, പക്ഷെ താങ്കള്‍ക്ക് മറുപടി വേണമെങ്കില്‍ ഇതു ആവശ്യമാണ്‌',
 660+ 'contactpage-captcha' => 'സന്ദേശം അയക്കാന്‍, ദയവായി Captcha നിര്‍ദ്ധാരണം ചെയ്യുക. [[Special:Captcha/help|കൂടുതല്‍ വിവരം]]',
 661+ 'contactpage-captcha-failed' => 'Captcha പരീക്ഷണം പരാജയപ്പെട്ടു! ([[Special:Captcha/help|കൂടുതല്‍ വിവരം]])',
 662+);
 663+
 664+/** Marathi (मराठी)
 665+ * @author Kaustubh
 666+ * @author Mahitgar
 667+ */
 668+$messages['mr'] = array(
 669+ 'contact' => 'संपर्कपान',
 670+ 'contactpage' => 'संपर्कपान',
 671+ 'contactpage-desc' => '[[Special:Contact|भेट देणार्‍यांसाठी संपर्क अर्ज]]',
 672+ 'contactpage-title' => 'संपर्क',
 673+ 'contactpage-pagetext' => 'कृपया आमच्याशी संपर्क साधण्यासाठी खालील अर्ज भरा.',
 674+ 'contactpage-defsubject' => 'संपर्क संदेश',
 675+ 'contactpage-subject-and-sender' => '$1 ($2 कडून)',
 676+ 'contactpage-fromname' => 'तुमचे नाव *',
 677+ 'contactpage-fromaddress' => 'तुमचा विपत्रपत्ता **',
 678+ 'contactpage-formfootnotes' => '* वैकल्पिक<br />
 679+** वैकल्पिक पण उत्तर हवे असल्यास आवश्यक',
 680+ 'contactpage-captcha' => 'हा संदेश पाठविण्यासाठी, कृपया कॅपचा (captcha) सोडवा ([[Special:Captcha/help|अधिक माहिती]])',
 681+ 'contactpage-captcha-failed' => 'कॅपचा परीक्षा पूर्ण झालेली नाही! ([[Special:Captcha/help|अधिक माहिती]])',
 682+);
 683+
 684+/** Erzya (Эрзянь)
 685+ * @author Botuzhaleny-sodamo
 686+ */
 687+$messages['myv'] = array(
 688+ 'contactpage-fromname-required' => 'эсеть леметь',
 689+ 'contactpage-formfootnotes-required' => 'Весе паксятне эрявикст.',
 690+);
 691+
 692+/** Neapolitan (Nnapulitano)
 693+ * @author Cryptex
 694+ */
 695+$messages['nap'] = array(
 696+ 'contact' => 'Scrìvece',
 697+);
 698+
 699+/** Low German (Plattdüütsch)
 700+ * @author Slomox
 701+ */
 702+$messages['nds'] = array(
 703+ 'contact' => 'Kontaktsied',
 704+ 'contactpage' => 'Kontaktsied',
 705+ 'contactpage-title' => 'Kontakt',
 706+ 'contactpage-defsubject' => 'Kontaktnaricht',
 707+ 'contactpage-subject-and-sender' => '$1 (vun $2)',
 708+ 'contactpage-fromname' => 'Dien Naam *',
 709+ 'contactpage-fromaddress' => 'Dien E-Mail-Adress **',
 710+);
 711+
 712+/** Dutch (Nederlands)
 713+ * @author SPQRobin
 714+ * @author Siebrand
 715+ */
 716+$messages['nl'] = array(
 717+ 'contact' => 'Contact met ons opnemen',
 718+ 'contactpage' => 'Contactpagina',
 719+ 'contactpage-desc' => '[[Special:Contact|Contactformulier voor bezoekers]]',
 720+ 'contactpage-title' => 'Contact',
 721+ 'contactpage-pagetext' => 'Gebruik het onderstaande formulier om contact met ons op te nemen.',
 722+ 'contactpage-defsubject' => 'Contactbericht',
 723+ 'contactpage-subject-and-sender' => '$1 (van $2)',
 724+ 'contactpage-fromname' => 'uw naam *',
 725+ 'contactpage-fromaddress' => 'uw e-mailadres **',
 726+ 'contactpage-formfootnotes' => '* optioneel<br />
 727+** optioneel, maar noodzakelijk als antwoord gewenst is',
 728+ 'contactpage-fromname-required' => 'uw naam',
 729+ 'contactpage-fromaddress-required' => 'uw e-mailadres',
 730+ 'contactpage-formfootnotes-required' => 'Alle velden zijn verplicht.',
 731+ 'contactpage-captcha' => 'Om het bericht te versturen, moet je eerst de captcha oplossen ([[Special:Captcha/help|meer informatie]])',
 732+ 'contactpage-captcha-failed' => 'Captcha-test is mislukt! ([[Special:Captcha/help|meer informatie]])',
 733+);
 734+
 735+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 736+ * @author Jon Harald Søby
 737+ */
 738+$messages['no'] = array(
 739+ 'contact' => 'Kontaktside',
 740+ 'contactpage' => 'Kontaktside',
 741+ 'contactpage-desc' => '[[Special:Contact|Kontaktskjema for besøkende]]',
 742+ 'contactpage-title' => 'Kontakt',
 743+ 'contactpage-pagetext' => 'Bruk skjemaet nedenunder for å kontakte oss.',
 744+ 'contactpage-defsubject' => 'Beskjed',
 745+ 'contactpage-subject-and-sender' => '$1 (fra $2)',
 746+ 'contactpage-fromname' => 'ditt navn *',
 747+ 'contactpage-fromaddress' => 'din e-post **',
 748+ 'contactpage-formfootnotes' => '* valgfri<br />
 749+** valgfri, men er nødvendig dersom du vil ha svar',
 750+ 'contactpage-fromname-required' => 'ditt navn',
 751+ 'contactpage-fromaddress-required' => 'din e-postadresse',
 752+ 'contactpage-formfootnotes-required' => 'Alle felt er obligatoriske.',
 753+ 'contactpage-captcha' => 'Løs captcha-oppgaven for å sende beskjeden ([[Special:Captcha/help|mer informasjon]])',
 754+ 'contactpage-captcha-failed' => 'Captcha-test mislyktes! ([[Special:Captcha/help|mer informasjon]])',
 755+);
 756+
 757+/** Northern Sotho (Sesotho sa Leboa)
 758+ * @author Mohau
 759+ */
 760+$messages['nso'] = array(
 761+ 'contactpage-fromname' => 'liena la gago*',
 762+ 'contactpage-fromaddress' => 'email ya gago **',
 763+);
 764+
 765+/** Occitan (Occitan)
 766+ * @author Cedric31
 767+ */
 768+$messages['oc'] = array(
 769+ 'contact' => 'Per nos contactar',
 770+ 'contactpage' => 'Contacte',
 771+ 'contactpage-desc' => '[[Special:Contact|Formulari de contact pels visitors]]',
 772+ 'contactpage-title' => 'Contacte',
 773+ 'contactpage-pagetext' => 'Utilizatz lo formulari çaijós per nos contactar.',
 774+ 'contactpage-defsubject' => 'Messatge',
 775+ 'contactpage-subject-and-sender' => '$1 (de $2)',
 776+ 'contactpage-fromname' => 'Vòstre nom*',
 777+ 'contactpage-fromaddress' => 'Vòstra adreça electronica**',
 778+ 'contactpage-formfootnotes' => '* opcional<br /> ** opcional mas requesit se desiratz una responsa',
 779+ 'contactpage-fromname-required' => 'vòstre nom',
 780+ 'contactpage-fromaddress-required' => 'vòstra adreça mail',
 781+ 'contactpage-formfootnotes-required' => 'Totes los camps son requesits.',
 782+ 'contactpage-captcha' => 'Per mandar lo messatge, mercés de resoudre lo captcha ([[Special:Captcha/help|ajuda]])',
 783+ 'contactpage-captcha-failed' => 'Avètz pas desencodat lo captcha ! ([[Special:Captcha/help|ajuda]])',
 784+);
 785+
 786+/** Polish (Polski)
 787+ * @author Derbeth
 788+ * @author Maikking
 789+ * @author Sp5uhe
 790+ * @author Wpedzich
 791+ */
 792+$messages['pl'] = array(
 793+ 'contact' => 'StronaKontaktowa',
 794+ 'contactpage' => 'StronaKontaktowa',
 795+ 'contactpage-desc' => '[[Special:Contact|Formularz kontaktowy dla czytelników serwisu]]',
 796+ 'contactpage-title' => 'Kontakt',
 797+ 'contactpage-pagetext' => 'Prosimy użyć poniższego formularza by skontaktować się z nami',
 798+ 'contactpage-defsubject' => 'Wiadomość',
 799+ 'contactpage-subject-and-sender' => '$1 (z $2)',
 800+ 'contactpage-fromname' => 'twoje imię i nazwisko *',
 801+ 'contactpage-fromaddress' => 'twój e-mail **',
 802+ 'contactpage-formfootnotes' => '* opcjonalne<br /> ** opcjonalne, ale wymagane, jeśli chcesz otrzymać odpowiedź',
 803+ 'contactpage-fromname-required' => 'Twoje imię',
 804+ 'contactpage-fromaddress-required' => 'Twój adres e-mail',
 805+ 'contactpage-formfootnotes-required' => 'Wypełnienie wszystkich pól jest obowiązkowe.',
 806+ 'contactpage-captcha' => 'Aby wysłać wiadomosć wypełnij podane tu zadanie ([[Special:Captcha/help|wyjaśnienie]])',
 807+ 'contactpage-captcha-failed' => 'Aby wysłać tę wiadomość, prosimy rozwiązać to zadanie ([[Special:Captcha/help|objaśnienie]])',
 808+);
 809+
 810+/** Piedmontese (Piemontèis)
 811+ * @author Bèrto 'd Sèra
 812+ */
 813+$messages['pms'] = array(
 814+ 'contact' => 'Pàgina ëd contat',
 815+ 'contactpage' => 'Pàgina ëd contat',
 816+ 'contactpage-title' => 'Contat',
 817+ 'contactpage-pagetext' => "Për piasì, për contatene ch'a dòvra ël mòdulo ambelessì sota.",
 818+ 'contactpage-defsubject' => 'Messagi',
 819+ 'contactpage-subject-and-sender' => '$1 (da $2)',
 820+ 'contactpage-fromname' => 'sò nòm *',
 821+ 'contactpage-fromaddress' => 'soa adrëssa ëd pòsta eletrònica **',
 822+ 'contactpage-formfootnotes' => "* opsional<br /> ** opsional, ma për podej avej d'arspòsta a venta butelo",
 823+ 'contactpage-captcha' => "Për mandé via ël messagi, për piasì ch'arzòlva ël test antirumenta ([[Special:Captcha/help|pì d'anformassion]])",
 824+ 'contactpage-captcha-failed' => "Test antirumenta falì! ([[Special:Captcha/help|pì d'anformassion]])",
 825+);
 826+
 827+/** Pashto (پښتو)
 828+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 829+ */
 830+$messages['ps'] = array(
 831+ 'contactpage-desc' => '[[Special:Contact|د کتونکو لپاره د اړيکو فورمه]]',
 832+ 'contactpage-title' => 'اړيکه ټينګول',
 833+ 'contactpage-pagetext' => 'زمونږ سره د اړيکو ټينګولو لپاره، لاندينۍ فورمه وکاروۍ.',
 834+ 'contactpage-subject-and-sender' => '$1 (د $2 لخوا )',
 835+ 'contactpage-fromname' => 'ستاسو نوم *',
 836+ 'contactpage-fromaddress' => 'ستاسو برېښليک **',
 837+ 'contactpage-formfootnotes' => '* ستاسو د خوښې کړنه<br />
 838+** دا ستاسو د خوښې کړنه ده خو که چېرته تاسو يو ځواب غواړی نو بيا پکار ده چې ډک شي',
 839+);
 840+
 841+/** Portuguese (Português)
 842+ * @author Malafaya
 843+ */
 844+$messages['pt'] = array(
 845+ 'contact' => 'Página de Contacto',
 846+ 'contactpage' => 'Página de Contacto',
 847+ 'contactpage-desc' => '[[Special:Contact|Formulário de contacto para visitantes]]',
 848+ 'contactpage-title' => 'Contacto',
 849+ 'contactpage-pagetext' => 'Por favor, use o formulário abaixo para nos contactar.',
 850+ 'contactpage-defsubject' => 'Mensagem de Contacto',
 851+ 'contactpage-subject-and-sender' => '$1 (de $2)',
 852+ 'contactpage-fromname' => 'o seu nome *',
 853+ 'contactpage-fromaddress' => 'o seu email **',
 854+ 'contactpage-formfootnotes' => '* opcional<br />
 855+** opcional mas necessário se quiser uma resposta',
 856+ 'contactpage-captcha' => "Para enviar a mensagem, por favor, resolva o ''captcha'' ([[Special:Captcha/help|mais informação]])",
 857+ 'contactpage-captcha-failed' => 'Teste captcha falhou! ([[Special:Captcha/help|mais informação]])',
 858+);
 859+
 860+/** Brazilian Portuguese (Português do Brasil)
 861+ * @author Carla404
 862+ */
 863+$messages['pt-br'] = array(
 864+ 'contact' => 'Página de contato',
 865+);
 866+
 867+/** Romani (Romani)
 868+ * @author Desiphral
 869+ */
 870+$messages['rmy'] = array(
 871+ 'contact' => 'Kontakto',
 872+);
 873+
 874+/** Romanian (Română)
 875+ * @author KlaudiuMihaila
 876+ * @author Mihai
 877+ */
 878+$messages['ro'] = array(
 879+ 'contact' => 'Pagină de contact',
 880+ 'contactpage' => 'Pagină de contact',
 881+ 'contactpage-title' => 'Contact',
 882+ 'contactpage-pagetext' => 'Foloseşte formularul de mai jos pentru a ne contacta.',
 883+ 'contactpage-defsubject' => 'Mesaj de contact',
 884+ 'contactpage-subject-and-sender' => '$1 (de la $2)',
 885+ 'contactpage-fromname' => 'numele dumneavoastră *',
 886+ 'contactpage-fromaddress' => 'adresa dumneavoastră de e-mail **',
 887+ 'contactpage-formfootnotes' => '* opţional<br />
 888+** opţională, dar necesară dacă doriţi un răspuns',
 889+ 'contactpage-fromname-required' => 'numele dumneavoastră',
 890+ 'contactpage-fromaddress-required' => 'adresa dumneavoastră de e-mail',
 891+ 'contactpage-formfootnotes-required' => 'Toate câmpurile sunt obligatorii.',
 892+ 'contactpage-captcha' => 'Pentru a trimite mesajul, rezolvă captcha ([[Special:Captcha/help|mai multe detalii]])',
 893+);
 894+
 895+/** Russian (Русский)
 896+ * @author Александр Сигачёв
 897+ */
 898+$messages['ru'] = array(
 899+ 'contact' => 'Страница контакта',
 900+ 'contactpage' => 'Страница контакта',
 901+ 'contactpage-desc' => '[[Special:Contact|Форма для посетителей]]',
 902+ 'contactpage-title' => 'Контакт',
 903+ 'contactpage-pagetext' => 'Пожалуйста, используйте данную форму, чтобы связаться с нами.',
 904+ 'contactpage-defsubject' => 'Сообщение',
 905+ 'contactpage-subject-and-sender' => '$1 (от $2)',
 906+ 'contactpage-fromname' => 'ваше имя *',
 907+ 'contactpage-fromaddress' => 'ваш эл. адрес **',
 908+ 'contactpage-formfootnotes' => '* необязательно<br />
 909+** необязательно, но требуется для получения ответа',
 910+ 'contactpage-captcha' => 'Чтобы отправить сообщение, пожалуйста, пройдите проверку CAPTCHA ([[Special:Captcha/help|что это?]])',
 911+ 'contactpage-captcha-failed' => 'Проверка CAPTCHA не пройдена! ([[Special:Captcha/help|что это?]])',
 912+);
 913+
 914+/** Slovak (Slovenčina)
 915+ * @author Helix84
 916+ */
 917+$messages['sk'] = array(
 918+ 'contact' => 'Kontaktná stránka',
 919+ 'contactpage' => 'Kontaktná stránka',
 920+ 'contactpage-desc' => '[[Special:Contact|Kontaktný formulár pre návštevníkov]]',
 921+ 'contactpage-title' => 'Kontakt',
 922+ 'contactpage-pagetext' => 'Prosím, použite tento formulár, aby ste nás kontaktovali.',
 923+ 'contactpage-defsubject' => 'Správa',
 924+ 'contactpage-subject-and-sender' => '$1 (od $2)',
 925+ 'contactpage-fromname' => 'vaše meno *',
 926+ 'contactpage-fromaddress' => 'váš email **',
 927+ 'contactpage-formfootnotes' => '
 928+* voliteľné<br />
 929+** voliteľné, ale potrebné ak chcete odpoveď',
 930+ 'contactpage-fromname-required' => 'vaše meno',
 931+ 'contactpage-fromaddress-required' => 'váš email',
 932+ 'contactpage-formfootnotes-required' => 'Je povinné vyplniť všetky polia.',
 933+ 'contactpage-captcha' => 'Aby ste mohli poslať správu, vyriešte prosím captcha ([[Special:Captcha/help|podrobnosti]])',
 934+ 'contactpage-captcha-failed' => 'Test captcha bol neúspešný! ([[Special:Captcha/help|podrobnosti]])',
 935+);
 936+
 937+/** Albanian (Shqip)
 938+ * @author Dori
 939+ */
 940+$messages['sq'] = array(
 941+ 'contact' => 'Kumtime',
 942+);
 943+
 944+/** Seeltersk (Seeltersk)
 945+ * @author Pyt
 946+ */
 947+$messages['stq'] = array(
 948+ 'contact' => 'Kontaktsiede',
 949+ 'contactpage' => 'Kontaktsiede',
 950+ 'contactpage-title' => 'Kontakt',
 951+ 'contactpage-pagetext' => 'Mäd dit Formular koast du uus Ättergjuchte toukuume läite.',
 952+ 'contactpage-defsubject' => 'Kontakt-Ättergjucht',
 953+ 'contactpage-subject-and-sender' => '$1 (fon $2)',
 954+ 'contactpage-fromname' => 'Din Noome *',
 955+ 'contactpage-fromaddress' => 'Dien E-Mail Adresse **',
 956+ 'contactpage-formfootnotes' => '* optional<br />
 957+** optional, is oawers nöödich, uum die oantwoudje tou konnen',
 958+ 'contactpage-captcha' => 'Uum ju Ättergjucht seende tou konnen, löös dät Captcha ([[Special:Captcha/help|wiedere Informatione]])',
 959+ 'contactpage-captcha-failed' => 'Captcha-Test nit besteen! ([[Special:Captcha/help|wiedere Informatione]])',
 960+);
 961+
 962+/** Sundanese (Basa Sunda)
 963+ * @author Irwangatot
 964+ * @author Kandar
 965+ */
 966+$messages['su'] = array(
 967+ 'contactpage-pagetext' => 'Mangga eusian formulir di handap pikeun ngontak ka kami.',
 968+ 'contactpage-subject-and-sender' => '$1 (ti $2)',
 969+ 'contactpage-fromname' => 'ngaran anjeun *',
 970+ 'contactpage-fromaddress' => 'surélék anjeun **',
 971+);
 972+
 973+/** Swedish (Svenska)
 974+ * @author Boivie
 975+ * @author Lejonel
 976+ * @author M.M.S.
 977+ * @author לערי ריינהארט
 978+ */
 979+$messages['sv'] = array(
 980+ 'contact' => 'Kontaktsida',
 981+ 'contactpage' => 'Kontaktsida',
 982+ 'contactpage-desc' => '[[Special:Contact|Kontaktformulär för besökare]]',
 983+ 'contactpage-title' => 'Kontakt',
 984+ 'contactpage-pagetext' => 'Använd formuläret härunder för att kontakta oss.',
 985+ 'contactpage-defsubject' => 'Kontaktmeddelande',
 986+ 'contactpage-subject-and-sender' => '$1 (från $2)',
 987+ 'contactpage-fromname' => 'Ditt namn *',
 988+ 'contactpage-fromaddress' => 'Din e-postadress **',
 989+ 'contactpage-formfootnotes' => '* kan utelämnas<br />
 990+** kan utelämnas, men behövs om du vill få svar',
 991+ 'contactpage-fromname-required' => 'ditt namn',
 992+ 'contactpage-fromaddress-required' => 'din e-postadress',
 993+ 'contactpage-formfootnotes-required' => 'Alla fält är obligatoriska.',
 994+ 'contactpage-captcha' => 'För att få skicka meddelandet måste du först lösa följande captcha-test ([[Special:Captcha/help|mer information]])',
 995+ 'contactpage-captcha-failed' => 'Captcha-testet misslyckades! ([[Special:Captcha/help|mer information]])',
 996+);
 997+
 998+/** Telugu (తెలుగు)
 999+ * @author Veeven
 1000+ */
 1001+$messages['te'] = array(
 1002+ 'contact' => 'సంప్రదింపుపేజీ',
 1003+ 'contactpage' => 'సంప్రదింపుపేజీ',
 1004+ 'contactpage-desc' => '[[Special:Contact|సందర్శకుల సంప్రదింపు ఫారం]]',
 1005+ 'contactpage-title' => 'సంప్రదించండి',
 1006+ 'contactpage-pagetext' => 'మమ్మల్ని సంప్రదించడానికి క్రిందనిచ్చిన ఫారం ఉపయోగించండి.',
 1007+ 'contactpage-defsubject' => 'సంప్రదింపు సందేశం',
 1008+ 'contactpage-subject-and-sender' => '$1 ($2 నుండి)',
 1009+ 'contactpage-fromname' => 'మీ పేరు *',
 1010+ 'contactpage-fromaddress' => 'మీ ఈ-మెయిల్ **',
 1011+ 'contactpage-formfootnotes' => '* ఐచ్చికం<br />
 1012+** ఐచ్చికం కానీ మీకు జవాబు కావాలంటే మాత్రం తప్పనిసరి',
 1013+ 'contactpage-fromname-required' => 'మీ పేరు',
 1014+ 'contactpage-fromaddress-required' => 'మీ ఈ-మెయిల్',
 1015+ 'contactpage-formfootnotes-required' => 'అన్ని ఖాళీలు తప్పనిసరి.',
 1016+ 'contactpage-captcha' => 'సందేశాన్ని పంపిచడానికి, ఆమకవేపని పరిష్కరించండి ([[Special:Captcha/help|మరింత సమాచారం]])',
 1017+ 'contactpage-captcha-failed' => 'అమకవేప పరీక్ష విఫలమైంది! ([[Special:Captcha/help|మరింత సమాచారం]])',
 1018+);
 1019+
 1020+/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
 1021+ * @author Ibrahim
 1022+ */
 1023+$messages['tg-cyrl'] = array(
 1024+ 'contact' => 'СаҳифаиТамос',
 1025+ 'contactpage' => 'СаҳифаиТамос',
 1026+ 'contactpage-title' => 'Алоқа',
 1027+ 'contactpage-pagetext' => 'Лутфан барои дар алоқа будан бо мо аз форми зер истифода кунед.',
 1028+ 'contactpage-defsubject' => 'Паёми Алоқа',
 1029+ 'contactpage-subject-and-sender' => '$1 (аз $2)',
 1030+ 'contactpage-fromname' => 'номи шумо *',
 1031+ 'contactpage-fromaddress' => 'почтаи электронии шумо **',
 1032+);
 1033+
 1034+/** Turkish (Türkçe)
 1035+ * @author Karduelis
 1036+ * @author Mach
 1037+ */
 1038+$messages['tr'] = array(
 1039+ 'contactpage-fromname' => 'isminiz *',
 1040+ 'contactpage-fromaddress' => 'e-postanız *',
 1041+ 'contactpage-fromname-required' => 'adınız',
 1042+ 'contactpage-fromaddress-required' => 'e-mail adresiniz',
 1043+);
 1044+
 1045+/** Vèneto (Vèneto)
 1046+ * @author Candalua
 1047+ */
 1048+$messages['vec'] = array(
 1049+ 'contactpage-desc' => '[[Special:Contact|Modulo de contatto par i visitadori]]',
 1050+);
 1051+
 1052+/** Vietnamese (Tiếng Việt)
 1053+ * @author Minh Nguyen
 1054+ * @author Vinhtantran
 1055+ * @author לערי ריינהארט
 1056+ */
 1057+$messages['vi'] = array(
 1058+ 'contact' => 'Liên lạc',
 1059+ 'contactpage' => 'Liên hệ',
 1060+ 'contactpage-desc' => '[[Special:Contact|Mẫu liên hệ cho khách ghé thăm]]',
 1061+ 'contactpage-title' => 'Liên lạc',
 1062+ 'contactpage-pagetext' => 'Xin hãy sử dụng biểu mẫu ở dưới để liên lạc với chúng tôi.',
 1063+ 'contactpage-defsubject' => 'Tin nhắn liên hệ',
 1064+ 'contactpage-subject-and-sender' => '$1 (gửi từ $2)',
 1065+ 'contactpage-fromname' => 'tên bạn *',
 1066+ 'contactpage-fromaddress' => 'địa chỉ thư điện tử của bạn **',
 1067+ 'contactpage-formfootnotes' => '* tùy chọn<br />
 1068+** tùy chọn nhưng cần thiết nêys bạn muốn có câu trả lời',
 1069+ 'contactpage-captcha' => 'Để gửi tin nhắn, xin hãy ghi lại captcha ([[Special:Captcha/help|thông tin thêm]])',
 1070+ 'contactpage-captcha-failed' => 'Kiểm tra captcha thất bại! ([[Special:Captcha/help|thông tin thêm]])',
 1071+);
 1072+
 1073+/** Volapük (Volapük)
 1074+ * @author Malafaya
 1075+ */
 1076+$messages['vo'] = array(
 1077+ 'contactpage-fromname' => 'nem olik *',
 1078+);
 1079+
 1080+/** Walloon (Walon)
 1081+ * @author Srtxg
 1082+ */
 1083+$messages['wa'] = array(
 1084+ 'contact' => 'Contak',
 1085+);
 1086+
 1087+/** Yue (粵語)
 1088+ * @author Shinjiman
 1089+ */
 1090+$messages['yue'] = array(
 1091+ 'contact' => '聯絡頁',
 1092+ 'contactpage' => '聯絡頁',
 1093+ 'contactpage-title' => '聯絡',
 1094+ 'contactpage-pagetext' => '請用下面嘅表格去聯絡我哋。',
 1095+ 'contactpage-defsubject' => '聯絡訊息',
 1096+ 'contactpage-subject-and-sender' => '$1 (自$2)',
 1097+ 'contactpage-fromname' => '你嘅名 *',
 1098+ 'contactpage-fromaddress' => '你嘅電郵 **',
 1099+ 'contactpage-formfootnotes' => '* 可選<br />
 1100+** 可選,如果你想答嘅話',
 1101+ 'contactpage-captcha' => '要傳呢個訊息,請先解決 captcha ([[Special:Captcha/help|更多資料]])',
 1102+ 'contactpage-captcha-failed' => 'Captcha 測試失敗! ([[Special:Captcha/help|更多資訊]])',
 1103+);
 1104+
 1105+/** Simplified Chinese (‪中文(简体)‬)
 1106+ * @author Shinjiman
 1107+ */
 1108+$messages['zh-hans'] = array(
 1109+ 'contact' => '联络页面',
 1110+ 'contactpage' => '联络页面',
 1111+ 'contactpage-title' => '联络',
 1112+ 'contactpage-pagetext' => '请用以下的表格去联络我们。',
 1113+ 'contactpage-defsubject' => '联络信息',
 1114+ 'contactpage-subject-and-sender' => '$1 (自$2)',
 1115+ 'contactpage-fromname' => '您的名字 *',
 1116+ 'contactpage-fromaddress' => '您的电邮 **',
 1117+ 'contactpage-formfootnotes' => '* 可选<br />
 1118+** 可选,如果您想回答的话',
 1119+ 'contactpage-captcha' => '要传送这个信息,请先解决这个 captcha ([[Special:Captcha/help|更多信息]])',
 1120+ 'contactpage-captcha-failed' => 'Captcha 测试失败! ([[Special:Captcha/help|更多信息]])',
 1121+);
 1122+
 1123+/** Traditional Chinese (‪中文(繁體)‬)
 1124+ * @author Shinjiman
 1125+ */
 1126+$messages['zh-hant'] = array(
 1127+ 'contact' => '聯絡頁面',
 1128+ 'contactpage' => '聯絡頁面',
 1129+ 'contactpage-title' => '聯絡',
 1130+ 'contactpage-pagetext' => '請用以下的表格去聯絡我們。',
 1131+ 'contactpage-defsubject' => '聯絡訊息',
 1132+ 'contactpage-subject-and-sender' => '$1 (自$2)',
 1133+ 'contactpage-fromname' => '您的名字 *',
 1134+ 'contactpage-fromaddress' => '您的電郵 **',
 1135+ 'contactpage-formfootnotes' => '* 可選<br />
 1136+** 可選,如果您想回答的話',
 1137+ 'contactpage-captcha' => '要傳送這個訊息,請先解決這個 captcha ([[Special:Captcha/help|更多資訊]])',
 1138+ 'contactpage-captcha-failed' => 'Captcha 測試失敗! ([[Special:Captcha/help|更多資訊]])',
 1139+);
 1140+
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.i18n.php
___________________________________________________________________
Added: svn:eol-style
11141 + native
Added: eol-style:native
21142 + properties
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/README
@@ -0,0 +1,53 @@
 2+--------------------------------------------------------------------------
 3+README for the ContactPage extension
 4+Copyright © 2006 Daniel Kinzler
 5+Licenses: GNU General Public Licence (GPL)
 6+ GNU Free Documentation License (GFDL)
 7+--------------------------------------------------------------------------
 8+
 9+The ContactPage extension implements a contact form for visitors. It
 10+creates a special page Special:Contact, which is similar to
 11+Special:Emailuser, but it has a fixed recipient, and can be used
 12+anonymously.
 13+
 14+<http://mediawiki.org/wiki/Extension:ContactPage>
 15+
 16+The ContactPage extension was originally written by Daniel Kinzler in 2007
 17+and is released under the GNU General Public Licence (GPL). It is based on
 18+the code in SpecialEmailuser.php in the MediaWiki core.
 19+The internationalization files contain contributions by several people;
 20+they are mentioned in each file individually.
 21+
 22+
 23+== Installing ==
 24+
 25+Copy the ContactPage directory into the extensions folder of your
 26+MediaWiki installation. Then add the following lines to your
 27+LocalSettings.php file (near the end):
 28+
 29+ require_once( "$IP/extensions/ContactPage/ContactPage.php" );
 30+
 31+ $wgContactUser = 'WikiAdmin';
 32+ $wgContactSender = 'apache@' . $wgServerName;
 33+ $wgContactSenderName = 'Contact Form on ' . $wgSitename;
 34+
 35+
 36+== Configuration ==
 37+
 38+$wgContactUser must be the name of a registered wiki user, who has
 39+supplied an email address, has user-to-user email enabled, and has
 40+confirmed his/her email address if that is required on this wiki
 41+(see $wgEmailAuthentication).
 42+
 43+$wgContactSender must be the email address used as the sender of the
 44+contact email. Depending on the setup of your web host, this may have to
 45+be an existing mail account.
 46+
 47+$wgContactSenderName is the name associated with the contact sender.
 48+This will be shown in the recipient's email program.
 49+
 50+If you are using the ConfirmEdit extension (captchas), you can require
 51+a captcha test for sending contact messages by using the following:
 52+
 53+ $wgCaptchaTriggers['contactpage'] = true;
 54+
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/README
___________________________________________________________________
Added: svn:eol-style
155 + native
Added: eol-style:native
256 + properties
Index: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.php
@@ -0,0 +1,39 @@
 2+<?php
 3+/**
 4+ * Setup for ContactPage extension, a special page that implements a contact form
 5+ * for use by anonymous visitors.
 6+ *
 7+ * @package MediaWiki
 8+ * @subpackage Extensions
 9+ * @author Daniel Kinzler, brightbyte.de
 10+ * @copyright © 2007 Daniel Kinzler
 11+ * @licence GNU General Public Licence 2.0 or later
 12+ */
 13+
 14+if( !defined( 'MEDIAWIKI' ) ) {
 15+ echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );
 16+ die( 1 );
 17+}
 18+
 19+$wgExtensionCredits['specialpage'][] = array(
 20+ 'name' => 'ContactPage',
 21+ 'svn-date' => '$LastChangedDate$',
 22+ 'svn-revision' => '$LastChangedRevision$',
 23+ 'author' => 'Daniel Kinzler',
 24+ 'url' => 'http://www.mediawiki.org/wiki/Extension:ContactPage',
 25+ 'description' => 'Contact form for visitors',
 26+ 'descriptionmsg' => 'contactpage-desc',
 27+);
 28+
 29+$dir = dirname(__FILE__) . '/';
 30+$wgExtensionMessagesFiles['ContactPage'] = $dir . 'ContactPage.i18n.php';
 31+$wgExtensionAliasesFiles['ContactPage'] = $dir . 'ContactPage.alias.php';
 32+
 33+$wgAutoloadClasses['SpecialContact'] = $dir . 'SpecialContact.php';
 34+$wgSpecialPages['Contact'] = 'SpecialContact';
 35+
 36+$wgContactUser = 'Stories';
 37+$wgContactSender = 'stories@wikimedia.org';
 38+$wgContactSenderName = 'Contact Form on ' . $wgSitename;
 39+
 40+$wgContactRequireAll = false;
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser/ContactPage.php
___________________________________________________________________
Added: svn:keywords
141 + LastChangedDate LastChangedRevision
Added: svn:eol-style
242 + native
Property changes on: branches/wmf-deployment-work/extensions/ContactPageFundraiser
___________________________________________________________________
Added: svn:mergeinfo
343 Merged /trunk/phase3/extensions/ContactPageFundraiser:r52290,52402,52404,52718,52737,52759,52776,52791,52800,52808,52812-52813,52815-52819,52822,52846,52850,52852-52853,52855-52857,52859,52924,52986,53128-53129,53190,53197,53199,53203-53204,53210-53211,53247,53249,53252,53267,53270,53293,53305,53344,53369,53427,53502-53504,53506,53777,54384,54494,54592,54599-54602,54604,54613,54764,54793,54806,55178,55626,56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
444 Merged /trunk/phase3/ContactPageFundraiser:r52859,53272
545 Merged /branches/REL1_15/phase3/extensions/ContactPageFundraiser:r51646
646 Merged /trunk/extensions/ContactPageFundraiser:r52859,52871-52872,52876,53191,53205-53206,53272,54715,54758,54762,54778,54781,54786,54810-54811,55178,56209,56333
Added: eol-style:native
747 + properties
Property changes on: branches/wmf-deployment-work/extensions/FundraiserPortal
___________________________________________________________________
Modified: svn:mergeinfo
848 Merged /trunk/extensions/FundraiserPortal:r56207,56209,56333
Property changes on: branches/wmf-deployment-work/extensions/LocalisationUpdate
___________________________________________________________________
Modified: svn:mergeinfo
949 Merged /trunk/extensions/LocalisationUpdate:r56207,56209,56333
1050 Merged /trunk/phase3/extensions/LocalisationUpdate:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Property changes on: branches/wmf-deployment-work/extensions/HoneypotIntegration/HoneypotIntegration.class.php
___________________________________________________________________
Modified: svn:mergeinfo
1151 Merged /trunk/extensions/HoneypotIntegration/HoneypotIntegration.class.php:r56207,56209,56333
Property changes on: branches/wmf-deployment-work/extensions
___________________________________________________________________
Added: svn:mergeinfo
1252 Merged /trunk/extensions:r56207,56209,56333
1353 Merged /trunk/phase3/extensions:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
1454 Merged /branches/REL1_15/phase3/extensions:r51646
Index: branches/wmf-deployment-work/includes/DefaultSettings.php
@@ -1861,6 +1861,19 @@
18621862 /** Location of the texvc binary */
18631863 $wgTexvc = './math/texvc';
18641864
 1865+/**
 1866+ * Normally when generating math images, we double-check that the
 1867+ * directories we want to write to exist, and that files that have
 1868+ * been generated still exist when we need to bring them up again.
 1869+ *
 1870+ * This lets us give useful error messages in case of permission
 1871+ * problems, and automatically rebuild images that have been lost.
 1872+ *
 1873+ * On a big site with heavy NFS traffic this can be slow and flaky,
 1874+ * so sometimes we want to short-circuit it by setting this to false.
 1875+ */
 1876+$wgMathCheckFiles = true;
 1877+
18651878 #
18661879 # Profiling / debugging
18671880 #
@@ -4219,3 +4232,6 @@
42204233 * Note that this requires JS2 and the script loader.
42214234 */
42224235 $wgUseAJAXCategories = false;
 4236+
 4237+// to disable image delete/restore temporarily
 4238+$wgUploadMaintenance = false;
Index: branches/wmf-deployment-work/includes/ImagePage.php
@@ -720,6 +720,13 @@
721721 * Delete the file, or an earlier version of it
722722 */
723723 public function delete() {
 724+ global $wgUploadMaintenance;
 725+ if( $wgUploadMaintenance && $this->mTitle && $this->mTitle->getNamespace() == NS_FILE ) {
 726+ global $wgOut;
 727+ $wgOut->addWikiText('Deletion and restoration of images temporarily disabled during maintenance.' );
 728+ return;
 729+ }
 730+
724731 $this->loadFile();
725732 if( !$this->img->exists() || !$this->img->isLocal() || $this->img->getRedirected() ) {
726733 // Standard article deletion
Index: branches/wmf-deployment-work/includes/User.php
@@ -1663,6 +1663,9 @@
16641664 * for reload on the next hit.
16651665 */
16661666 function invalidateCache() {
 1667+ if( wfReadOnly() ) {
 1668+ return;
 1669+ }
16671670 $this->load();
16681671 if( $this->mId ) {
16691672 $this->mTouched = self::newTouchedTimestamp();
Property changes on: branches/wmf-deployment-work/includes/json/Services_JSON.php
___________________________________________________________________
Modified: svn:mergeinfo
16701673 Merged /trunk/phase3/includes/json/Services_JSON.php:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Property changes on: branches/wmf-deployment-work/includes/ConfEditor.php
___________________________________________________________________
Modified: svn:mergeinfo
16711674 Merged /trunk/phase3/includes/ConfEditor.php:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Index: branches/wmf-deployment-work/includes/Title.php
@@ -1009,7 +1009,8 @@
10101010
10111011 /**
10121012 * Can $wgUser perform $action on this page?
1013 - * This skips potentially expensive cascading permission checks.
 1013+ * This skips potentially expensive cascading permission checks
 1014+ * as well as avoids expensive error formatting
10141015 *
10151016 * Suitable for use for nonessential UI controls in common cases, but
10161017 * _not_ for functional access control.
@@ -1208,8 +1209,14 @@
12091210 }
12101211 } elseif( !$user->isAllowed( $action ) ) {
12111212 $return = null;
1212 - $groups = array_map( array( 'User', 'makeGroupLinkWiki' ),
1213 - User::getGroupsWithPermission( $action ) );
 1213+
 1214+ // We avoid expensive display logic for quickUserCan's and such
 1215+ $groups = false;
 1216+ if (!$short) {
 1217+ $groups = array_map( array( 'User', 'makeGroupLinkWiki' ),
 1218+ User::getGroupsWithPermission( $action ) );
 1219+ }
 1220+
12141221 if( $groups ) {
12151222 $return = array( 'badaccess-groups',
12161223 array( implode( ', ', $groups ), count( $groups ) ) );
Property changes on: branches/wmf-deployment-work/includes/HistoryPage.php
___________________________________________________________________
Modified: svn:mergeinfo
12171224 Merged /trunk/phase3/includes/HistoryPage.php:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Index: branches/wmf-deployment-work/includes/specials/SpecialUndelete.php
@@ -646,6 +646,11 @@
647647 }
648648 }
649649 if( $this->mRestore && $this->mAction == "submit" ) {
 650+ global $wgUploadMaintenance;
 651+ if( $wgUploadMaintenance && $this->mTargetObj && $this->mTargetObj->getNamespace() == NS_FILE ) {
 652+ $wgOut->addWikiText('Deletion and restoration of images temporarily disabled during maintenance.' );
 653+ return;
 654+ }
650655 return $this->undelete();
651656 }
652657 if( $this->mInvert && $this->mAction == "submit" ) {
Index: branches/wmf-deployment-work/includes/specials/SpecialRecentchanges.php
@@ -55,7 +55,7 @@
5656 $this->parseParameters( $parameters, $opts );
5757 }
5858
59 - $opts->validateIntBounds( 'limit', 0, 500 );
 59+ $opts->validateIntBounds( 'limit', 0, 5000 );
6060 return $opts;
6161 }
6262
Index: branches/wmf-deployment-work/includes/Math.php
@@ -33,7 +33,7 @@
3434
3535 function render() {
3636 global $wgTmpDirectory, $wgInputEncoding;
37 - global $wgTexvc;
 37+ global $wgTexvc, $wgMathCheckFiles;
3838 $fname = 'MathRenderer::render';
3939
4040 if( $this->mode == MW_MATH_SOURCE ) {
@@ -45,13 +45,15 @@
4646 }
4747
4848 if( !$this->_recall() ) {
49 - # Ensure that the temp and output directories are available before continuing...
50 - if( !file_exists( $wgTmpDirectory ) ) {
51 - if( !wfMkdirParents( $wgTmpDirectory ) ) {
 49+ if( $wgMathCheckFiles ) {
 50+ # Ensure that the temp and output directories are available before continuing...
 51+ if( !file_exists( $wgTmpDirectory ) ) {
 52+ if( !wfMkdirParents( $wgTmpDirectory ) ) {
 53+ return $this->_error( 'math_bad_tmpdir' );
 54+ }
 55+ } elseif( !is_dir( $wgTmpDirectory ) || !is_writable( $wgTmpDirectory ) ) {
5256 return $this->_error( 'math_bad_tmpdir' );
5357 }
54 - } elseif( !is_dir( $wgTmpDirectory ) || !is_writable( $wgTmpDirectory ) ) {
55 - return $this->_error( 'math_bad_tmpdir' );
5658 }
5759
5860 if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
@@ -200,7 +202,7 @@
201203 }
202204
203205 function _recall() {
204 - global $wgMathDirectory;
 206+ global $wgMathDirectory, $wgMathCheckFiles;
205207 $fname = 'MathRenderer::_recall';
206208
207209 $this->md5 = md5( $this->tex );
@@ -221,6 +223,12 @@
222224 $this->mathml = $rpage->math_mathml;
223225
224226 $filename = $this->_getHashPath() . "/{$this->hash}.png";
 227+
 228+ if( !$wgMathCheckFiles ) {
 229+ // Short-circuit the file existence & migration checks
 230+ return true;
 231+ }
 232+
225233 if( file_exists( $filename ) ) {
226234 if( filesize( $filename ) == 0 ) {
227235 // Some horrible error corrupted stuff :(
Property changes on: branches/wmf-deployment-work/includes
___________________________________________________________________
Modified: svn:mergeinfo
228236 Merged /trunk/phase3/includes:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350
Property changes on: branches/wmf-deployment-work
___________________________________________________________________
Modified: svn:mergeinfo
229237 Merged /trunk/phase3:r56213,56215-56216,56218,56334-56336,56338,56340,56343,56345,56347,56350

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r56207Merge r53263 from wmf-deployment: Rearranging some paths so the output file g...brion21:01, 11 September 2009
r56209Equiv of r53269; copy ContactPageFundraiser from wmf-deployment branch to tru...brion21:06, 11 September 2009
r56213Forward-port r53264 from wmf-deployment branch: "Adjust paths in the Wikimedi...brion23:18, 11 September 2009
r56215Forward-port image manipulation disabling hack from wmf-deployment r53386....brion23:36, 11 September 2009
r56216Merge deleteSelfExternals.php handy pruning script from wmf-deployment r53856brion00:02, 12 September 2009
r56218cleanup r56216 deleteSelfExternals a little - fix short PHP tag, use escaping...brion00:05, 12 September 2009
r56333Merge remaining unmerged line of live hacks from r53208 on AbuseFilterbrion21:17, 14 September 2009
r56334Increase limit from 500 to 5000 per live hack committed to wmf-deployment in ...brion21:26, 14 September 2009
r56335Commit live hack from wmf-deployment r53208: skip user cache invalidation if ...brion21:28, 14 September 2009
r56336Merge live hack from wmf-deployment r53208: profiling for LanguageGetMagic ho...brion21:30, 14 September 2009
r56338Apply live hack from wmf-deployment r53208: allows passing alt table namebrion21:35, 14 September 2009
r56340Merge live hack from wmf-deployment r53208: skip calculation of display names...brion21:42, 14 September 2009
r56343Clean up a live hack from wmf-deployment r53208: option to short-circuit math...brion21:58, 14 September 2009
r56345Merge and clean up memory_limit hacks from wmf-deployment r53208....brion22:10, 14 September 2009
r56347Cleanup live hack from wmf-deployment r53208 a bit: DB selection using load b...brion22:32, 14 September 2009
r56350De-Wikimedified lag.php script and merged to trunk. Still not 100% sure what ...brion00:24, 15 September 2009

Status & tagging log