Merge "(bug 40384) Move width/height from button to img"
authorNikerabbit <niklas.laxstrom@gmail.com>
Sun, 30 Sep 2012 16:11:08 +0000 (16:11 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 30 Sep 2012 16:11:08 +0000 (16:11 +0000)
61 files changed:
CREDITS
HISTORY
RELEASE-NOTES-1.20
RELEASE-NOTES-1.21 [new file with mode: 0644]
includes/DefaultSettings.php
includes/Linker.php
includes/OutputPage.php
includes/SkinTemplate.php
includes/Title.php
includes/User.php
includes/WebResponse.php
includes/WebStart.php
includes/Wiki.php
includes/db/LoadBalancer.php
includes/installer/Ibm_db2Updater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/SqliteUpdater.php
includes/specials/SpecialUserlogin.php
includes/upload/UploadFromUrl.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageIu.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/classes/LanguageUz.php
languages/messages/MessagesAm.php
languages/messages/MessagesBcl.php
languages/messages/MessagesFa.php
languages/messages/MessagesHe.php
languages/messages/MessagesIs.php
languages/messages/MessagesJa.php
languages/messages/MessagesJv.php
languages/messages/MessagesKo.php
languages/messages/MessagesPms.php
languages/messages/MessagesSl.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/archives/patch-drop-ss_admins.sql [new file with mode: 0644]
maintenance/archives/upgradeLogging.php
maintenance/generateSitemap.php
maintenance/importDump.php
maintenance/jsparse.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerData.php
maintenance/minify.php
maintenance/preprocessorFuzzTest.php
maintenance/purgeParserCache.php
maintenance/sqlite/archives/patch-drop-ss_admins.sql [new file with mode: 0644]
maintenance/storage/checkStorage.php
maintenance/storage/fixBug20757.php
maintenance/storage/recompressTracked.php
maintenance/storage/trackBlobs.php
maintenance/tables.sql
maintenance/updateCollation.php
resources/mediawiki/mediawiki.Title.js
tests/parser/parserTests.txt
tests/phpunit/includes/GlobalFunctions/wfExpandUrlTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js

diff --git a/CREDITS b/CREDITS
index 5ceccc5..68c945c 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,4 +1,4 @@
-MediaWiki 1.20 is a collaborative project released under the
+MediaWiki 1.21 is a collaborative project released under the
 GNU General Public License v2. We would like to recognize the
 following names for their contribution to the product.
 
diff --git a/HISTORY b/HISTORY
index 408ae38..ab56b37 100644 (file)
--- a/HISTORY
+++ b/HISTORY
-Change notes from older releases. For current info see RELEASE-NOTES-1.20.
+Change notes from older releases. For current info see RELEASE-NOTES-1.21.
+
+== MediaWiki 1.19 ==
+
+== MediaWiki 1.19.2 ==
+
+This is a security release of the MediaWiki 1.19 branch
+
+=== Changes since 1.19.1 ===
+* (bug 39700) File: link to non-existing file can inject html
+* (bug 39823) Hidden block text leaking to admins
+* (bug 39184) LDAP password leakage
+* (bug 39180) Disallow framing of api results
+* (bug 37587) Enforce language codes to be html safe
+* (bug 39824) Check global blocks on account creation
+
+== MediaWiki 1.19 ==
+
+MediaWiki 1.19 is a large release that contains many new features and bug
+fixes. This is a summary of the major changes of interest to users.
+You can consult the RELEASE-NOTES-1.19 file for the full list of changes in
+this version.
+
+Our thanks go to everyone who helped to improve MediaWiki by testing the beta
+release and submitting bug reports.
+
+=== Changes since 1.19.1 ===
+* (bug 38406) Properly quote table names in DatabaseBase::tableName()
+* (bug 38249) Parser will throw an exception instead of outputting gibberish if
+  PCRE is compiled without support for unicode properties.
+
+=== Changes since 1.19.0 ===
+* (bug 36568) Fixed "Illegal string offset 'LIMIT'" warnings in updater
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+=== Changes since 1.19 beta 2 ===
+* Special:Watchlist no longer sets links to feed when the user is anonymous.
+* (bug 35961) Hash comparison should always be strict.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+* (bug 36042) 'show' causes a fatal in blocks API.
+
+=== Changes since 1.19 beta 1 ===
+* (bug 35014) Including a special page no longer sets the page's title to the
+  included page
+* (bug 35019) Edit summaries are no longer transformed in notification e-mails
+* (bug 35152) Help message for e-mail is shown again in user preferences
+* (bug 34887) $3 and $4 parameters are now substituted correctly in message
+  "movepage-moved"
+* (bug 34841) Edit links are no longer displayed when display old page versions
+* (bug 34889) User name should be normalized on Special:Contributions
+* (bug 35051) If heading has a trailing space after == then its name is not
+  preloaded into edit summary on section edit
+* (bug 31417) New ID mw-content-text around the actual page text, without categories,
+  contentSub, ... The same div often also contains the class mw-content-ltr/rtl.
+* (bug 35303) Proxy and DNS blacklist blocking works again
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in
+  core parser functions which operate on strings, such as padleft.
+* (bug 18295) Don't expose strip markers when a tag appears inside a link
+  inside a heading.
+* (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token
+  parameter present.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
+
+=== Configuration changes in 1.19 ===
+* Removed SkinTemplateSetupPageCss hook; use BeforePageDisplay instead.
+* (bug 27132) movefile right granted by default to registered users.
+* Default cookie lifetime ($wgCookieExpiration) is increased to 180 days.
+* (bug 31204) Removed old user.user_options.
+* $wgMaxImageArea now applies to jpeg files if they are not scaled with
+  ImageMagick.
+* Introduced $wgQueryPageDefaultLimit (defaults to 50) for the number of
+  items to show by default on query pages (special pages such as Whatlinkshere).
+* (bug 32470) Increase the length of ug_group.
+* (bug 32239) Removed $wgEnableTooltipsAndAccesskeys.
+* Removed $wgVectorShowVariantName.
+* Removed $wgExtensionAliasesFiles. Use $wgExtensionMessagesFiles.
+* Removed $wgResourceLoaderInlinePrivateModules , now always enabled.
+
+=== New features in 1.19 ===
+* (bug 19838) Add ability to get all interwiki prefixes also if the interwiki
+  cache is used.
+* $wgDnsBlacklistUrls now accepts an array with url and key as the
+  elements to work with DNSBLs that require keys, such as
+  Project Honeypot.
+* (bug 30022) Add support for custom loadScript sources to ResourceLoader.
+* (bug 19052) Unicode space separator characters (Zs) now terminates external
+  links and images links.
+* (bug 30160) Add public method to mw.loader to get module names from registry.
+* (bug 15558) Parameters to special pages included in wikitext can now be passed
+  as with templates.
+* Installer now issues a warning if mod_security is present.
+* (bug 29455) Add support for a filter callback function in jQuery byteLimit
+  plugin.
+* Added two new GetLocalURL hooks to better serve extensions working on a
+  limited type of titles.
+* Added a --no-updates flag to importDump.php that skips updating the links
+  tables.
+* Most presentational html attributes like valign are now converted to inline
+  css style rules. These attributes were removed from html5 and so we clean
+  them up when $wgHtml5 is enabled. This can be disabled using
+  $wgCleanupPresentationalAttributes.
+* Magic words (time and number-formatting ones, plus DIRECTIONMARK, but not
+  NAMESPACE) now depend on the page content language instead of the site
+  language. In theory this sets the right magic words in system messages,
+  although they are not used there.
+* (bug 30451) Add page_props to RefreshLinks::deleteLinksFromNonexistent.
+* (bug 30450) Clear page_props table on page deletion.
+* Hook added to check for exempt from account creation throttle.
+* (bug 30344) Add configuration variable for setting custom priorities when
+  generating sitemaps.
+* (bug 96170) Add array support for space-separated list attributes (like
+  'class') in the Html helper class.
+* (bug 26470) Add checkered background image on hover on files pages.
+* (bug 30774) mediawiki.html: Add support for numbers and booleans in the
+  attribute values and element contents.
+* Conversion script between Tifinagh and Latin for the Tachelhit language.
+* (bug 16755) Add options 'noreplace' and 'noerror' to {{DEFAULTSORT:...}}
+  to stop it from replace an already existing default sort, and suppress error.
+* (bug 18578) Rewrote revision delete related messages to allow better
+  localisation.
+* (bug 30364) LanguageConverter now depends on the page content language
+  instead of the wiki content language.
+* Jump links will now be usable in CSS-capable browsers instead of only
+  in outdated text browsers.
+* New common*.css files usable by skins instead of having to copy piles
+  of generic styles from MonoBook or Vector's css.
+* Some deprecated presentational html attributes will now be automatically
+  converted to css.
+* (bug 31297) Add support for namespaces in Special:RecentChanges subpage filter
+  syntax.
+* The default user signature now contains a talk link in addition to the user link.
+* (bug 25306) Add link of old page title to MediaWiki:Delete_and_move_reason.
+* Added hook BitmapHandlerCheckImageArea.
+* (bug 30062) Add $wgDBprefix option to cli installer.
+* getUserPermissionsErrors and getUserPermissionsErrorsExpensive hooks are now
+  also called when checking for 'read' permission.
+* Introduce $wgEnableSearchContributorsByIP which controls whether searching
+  for an IP address redirects to the contributions list for that IP.
+* (bug 8859) Database::update should take array of tables too.
+* (bug 19698) Add "Inverse namespaces" option to Special:Contributions.
+* (bug 24037) Add byte length of revision to Special:Contributions.
+* (bug 1672) Added $wgDisableUploadScriptChecks to allow uploading of files
+  containing HTML or JS. DISABLING THESE CHECKS IS VERY DANGEROUS.
+* New path mappings can be added using the WebRequestPathInfoRouter hook
+  and adding paths to the PathRouter.
+* (bug 32666) Special:ActiveUsers now allows a subpage to be used as value for the
+  "target" query parameter (eg. Special:ActiveUsers/Username).
+* New JavaScript variable wgPageContentLanguage.
+* Added new debugging toolbar, enabled with $wgDebugToolbar.
+* Differences in the history page now uses slightly better colors for people
+  perceiving colors differently.
+* (bug 32879) Upgrade jQuery to 1.7.1.
+* jQuery UI upgraded to 1.8.17.
+* Extensions can use the 'Language::getMessagesFileName' hook to define new
+  languages using messages files outside of core.
+* (bug 32512) Add 'Associated namespace' checkbox to Special:Contributions.
+* Added $wgSend404Code, true by default, which can be set to false to send a
+  200 status code instead of 404 for nonexistent articles.
+* (bug 33447) Link to the broken image tracking category from Special:Wantedfiles.
+* (bug 27724) Add timestamp to job queue.
+* (bug 30339) Implement SpecialPage for running javascript tests. Disabled by default, due to
+  tests potentially being harmful, not to be run on a production wiki.
+  Enable by setting $wgEnableJavaScriptTest to true.
+* Extensions can use the RequestContextCreateSkin hook to override what skin is
+  loaded in some contexts.
+* (bug 33456) Show $wgQueryCacheLimit on cached query pages.
+* (bug 10574) Add an option to allow all pages to be exported by Special:Export.
+* mediawiki.js Message object constructor is now publicly available as mw.Message.
+* (bug 29309) Allow CSS class per tooltip (tipsy).
+* (bug 33565) Add accesskey/tooltip to submit buttons on Special:EditWatchlist.
+* (bug 17959) Inline rendering/thumbnailing for Gimp XCF images.
+* (bug 27775) Namespace has it's own XML tag in the XML dump file.
+* (bug 30513) Redirect tag is now resolved in XML dump file.
+* sha1 xml tag added to XML dump file.
+* (bug 33646) Badtitle error page now emits a 400 HTTP status.
+* Special:MovePage now has a dropdown menu for namespaces.
+* (bug 34420) Special:Version now shows git HEAD sha1 when available.
+* (bug 33952) Refactor mw.toolbar to allow dynamic additions at any time.
+
+=== Bug fixes in 1.19 ===
+* $wgUploadNavigationUrl should be used for file redlinks if.
+  $wgUploadMissingFileUrl is not set. The first was used for this
+  until the second was introduced in 1.17.
+* BREAKING CHANGE:  Style rules for wikitable are now more specific and prevent
+  inheritance to nested tables which caused various issues (bug 30485 and bug
+  33434). If your wiki has overriden rules for ".wikitable", please revise them and
+  adjust where neccecary. For comparison, use the "table.wikitable" section in
+  skins/common/shared.css as base.
+* $wgUploadNavigationUrl is now used for file redlinks if
+  $wgUploadMissingFileUrl is not set. The former was used for this until the
+  second was introduced in 1.17.
+* (bug 27894) Move 'editondblclick' event listener down from body to
+  div#bodyContent.
+* (bug 30172) The check for posix_isatty() in maintenance scripts did not detect
+  when the function exists but is disabled. Introduced
+  Maintenance::posix_isatty().
+* (bug 30264) Changed installer-generated LocalSettings.php to use
+  require_once() instead require() for included extensions.
+* Do not convert text in the user interface language to another script.
+* (bug 26283) Previewing user JS/CSS pages didn't load other user JS/CSS pages.
+* (bug 26486) ResourceLoader modules with paths to nonexistent files cause PHP
+  warnings/notices to be thrown.
+* (bug 30335) Fix for HTMLForms using GET that were breaking when non-friendly
+  URLs are used.
+* (bug 28649) Preventing half truncated multi-byte unicode characters when
+  truncating log comments.
+* Show --batch-size option in help of maintenance scripts that support it.
+* (bug 4381) Magic quotes cleaning was not comprehensive, key strings were not
+  unescaped.
+* (bug 23057) Importers no longer can 'edit' or 'create' a fully-protected page by
+  importing a new revision into it.
+* Allow moving the associated talk pages of subpages even if the base page
+  has no subpage.
+* Per page edit-notices now work in namespaces without subpages enabled.
+* (bug 31081) $wgEnotifUseJobQ is no longer unconditionally enqueueing jobs.
+* (bug 30202) File names are now restricted on upload to 240 bytes, because of
+  restrictions on some of the database fields.
+* Timezones are now recognised in user preferences when offset is different
+  due to DST.
+* (bug 31692) "summary" parameter now also works when undoing revisions.
+* (bug 18823) "move succeeded" text displayed bluelinks even when redirect was
+  suppressed.
+* (bug 19186) Special:UserLogin's title on Special:SpecialPages now says
+  "create account" when the user cannot create an account.
+* (bug 31818) 'usercreated' message now supports GENDER.
+* (bug 32022) Our phpunit.php script can now be executed from another directory.
+* (bug 26020) Setting $wgEmailConfirmToEdit to true no longer removes diffs.
+  from recent changes feeds.
+* (bug 30232) add current time to message wlnote on Special:Watchlist.
+* (bug 29110) $wgFeedDiffCutoff did not affect new pages.
+* (bug 32168) Add wfRemoveDotSegments for use in wfExpandUrl.
+* (bug 32358) Do not display "No higher resolution available" for dimensionless
+  files (like audio files).
+* (bug 32168) Add wfAssembleUrl for use in wfExpandUrl.
+* (bug 32168) fixed - wfExpandUrl expands dot segments now.
+* (bug 31535) Upload comments now truncated properly, and don't have brackets.
+* (bug 32086) Special:PermanentLink now show an error message when no subpage
+  was specified.
+* (bug 30368) Special:Newpages now shows the new page name for moved pages.
+* (bug 1697) The way to search blocked usernames in block log should be clearer.
+* (bug 29747) eAccelerator shared memory caching has been removed since it is
+  now disabled by default and is buggy. APC, XCache and WinCache are not affected.
+* Installer now refuses to install if php was not compiled with Ctype support.
+* (bug 29475) Remove "trackback" feature entirely from core.
+* (bug 32665) Special:BlockList prefills the username in the input field if
+  using the Special:BlockList/username URL.
+* (bug 27721) Make JavaScript variables wgSeparatorTransformTable and
+  wgDigitTransformTable depend on page content language so the sort script
+  sorts correctly more often.
+* (bug 32230) Expose wgRedirectedFrom in JavaScript.
+* (bug 31212) History tab not collapsed when the screen is narrow.
+* (bug 15521) Use new section summary when the action of adding a new section
+  also happens to create the page.
+* (bug 32960) Remove EmailAuthenticationTimestamp from database when a
+  email address is removed.
+* (bug 32414) Empty page get a empty bytes attribute in Export/Dump.
+* (bug 33101) Viewing a User or User talk of username resembling IP ending
+  with .xxx causes Internal error.
+* Warning about undefined index in certain situations when $wgLogRestrictions
+  causes the first log type requested to be removed but not the others.
+* Use separate message ('prefixindex-namespace') for title of
+  Special:PrefixIndex rather then re-using Special:AllPages's allinnamespace.
+* (bug 33156) Special:Block now allows you to confirm you want to block yourself
+  when using non-normalized username.
+* (bug 33246) News icon shown for news:// URLs but not for news: URLs.
+* (bug 33305) Make mw.util.addCSS resistant to IE's @font-face bug by setting
+  cssText after DOM insertion.
+* (bug 30711) When adding a new section to a page with section=new, the text is
+  now always added to the current version of the page.
+* (bug 31719) Fix uploads of SVGs exported by Adobe Illustrator by expanding
+  XML entities correctly.
+* (bug 30914) Embeddable ResourceLoader modules (user.options, user.tokens)
+  should be loaded in <head> for proper dependency resolution.
+* (bug 32702) Removed method Skin::makeGlobalVariablesScript() has been readded
+  for backward compatibility.
+* (bug 31469) Make sure tracking category messages expand variables like
+  {{NAMESPACE}} relative to correct title.
+* (bug 33454) ISO-8601 week-based year number (format character 'o') is now
+  calculated correctly with respect to timezone.
+* (bug 32219) InstantCommons now fetches content from Wikimedia Commons using
+  HTTPS when the local wiki is served over HTTPS.
+* (bug 33525) clearTagHooks doesn't clear function hooks.
+* (bug 33523) Function tag hooks don't appear on Special:Version.
+* Files with IPTC blocks we can't read no longer prevent extraction of exif
+  or other metadata.
+* (bug 33587) Remove action "historysubmit" from history pages.
+* (bug 25800) mw.config wgAction should contain the actually performed action instead
+  of whatever the query value contains.
+* (bug 4438) Add CSS hook for current WikiPage action.
+* (bug 33703) Common border-bottom color for <abbr> should inherit default (text) color.
+* (bug 33819) Display file sizes in appropriate units.
+* (bug 32948) {{REVISIONID}} and related variables are no longer blank after doing
+  a null edit.
+* (bug 33880) $wgUsersNotifiedOnAllChanges should not send e-mail to user who made
+  the edit.
+* (bug 33902) Decoding %2B with mw.Uri.decode results in ' ' instead of +.
+* (bug 33762) QueryPage-based special pages no longer misses *-summary message.
+* Other sizes links are no longer generated for wikis without a 404 thumbnail handler.
+* (bug 29454) Enforce byteLimit for page title input on Special:MovePage.
+* (bug 34114) CSSMin::remap() doesn't respect its $embed parameter.
+* Special:Contributions/newbies now shows the contributions for the user "newbies".
+  New user contributions are obtained using the form or using ?contribs=newbie in URL.
+* It is now possible to delete images that have no corresponding description pages.
+* (bug 33165) GlobalFunctions.php line 1312: Call to a member function
+  getText() on a non-object.
+* (bug 31676) Group dynamically inserted CSS into a single <style> tag, to work
+  around a bug where not all styles were applied in Internet Explorer.
+* (bug 28936, bug 5280) Broken or invalid titles can't be removed from watchlist.
+* (bug 34600) Older skins using useHeadElement=false were broken in 1.18.
+* (bug 34604) [mw.config] wgActionPaths should be an object instead of a numeral
+  array.* (bug 12262) Indents and lists are now aligned
+* (bug 29753) mw.util.tooltipAccessKeyPrefix should be alt-shift for Chrome
+   on Windows
+* (bug 25095) Special:Categories should also include the first relevant item
+   when "from" is filled.
+* (bug 34972) An error occurred while changing your watchlist settings for
+  [[Special:WhatLinksHere/Example]]
+
+=== API changes in 1.19 ===
+* Made action=edit less likely to return "unknownerror", by returning the actual error
+  message (which may have come from a hook call or similar).
+* (bug 19838) siprop=interwikimap can now use the interwiki cache.
+* (bug 29748) Add API search prefix support.
+* (bug 29684) Set forgotten parameter types in ApiQueryIWLinks.
+* (bug 29685) do not output NULL parentid with list=deletedrevs&drprop=parentid.
+* siprop=interwikimap and siprop=languages can use silanguagecode to have
+  a best effort language name translation. Use CLDR extension for best result.
+* (bug 30230) action=expandtemplates should not silently override invalid title
+  inputs.
+* (bug 18634) Create API to fetch MediaWiki's language fallback tree structure.
+* (bug 26885) Allow show/hide of account blocks, temporary blocks and single IP
+  address blocks for list=blocks.
+* (bug 30591) Add support to only return keys in ApiAllMessages.
+* The API now respects $wgShowHostnames and won't share the hostname in
+  severedby if it's set to false.
+* wlexcludeuser parameter added to ApiFeedWatchlist.
+* (bug 7304) Links on redirect pages no longer cause the redirect page to show
+  up as a redirect to the linked page on Special:Whatlinkshere.
+* (bug 32609) API: Move captchaid/captchaword of action=edit from core
+  to Captcha extension(s).
+* Added 'APIGetDescription' hook.
+* (bug 32688) Paraminfo for parameter "generator" of the query module shows too
+  many types.
+* (bug 32415) Empty page get no size attribute in API output.
+* (bug 31759) Undefined property notice in querypages API.
+* (bug 32495) API should allow purge by pageids.
+* (bug 33147) API examples should explain what they do.
+* (bug 33482) Api incorrectly calls ApiBase::parseMultiValue if allowed
+  values is given as an array.
+* (bug 32948) {{REVISIONID}} and related variables are no longer blank after
+  calling action=purge&forcelinkupdate.
+* (bug 34377) action=watch now parses messages using the correct title instead
+  of "API".
+* (bug 35036) WikiLove messages were not automatically updated in JavaScript
+  after having been changed on-wiki due to a bug in core
+
+=== Languages updated in 1.19 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+* Canadian English (en-ca) (new).
+* Norwegian (bokmål) (nb) (renamed from no).
+* Uighur (Latin) (ug-latn) was incorrectly marked as right-to-left language.
+* (bug 30217) Make pt-br a fallback of pt.
+* (bug 31193) Set fallback language of Assamese from Bengali to English.
+* Update date format for dsb and hsb: month names need the genitive.
+* (bug 28643) Serbian variant conversion improvements (Nikola Smolenski).
+* (bug 29405, bug 30809) Lower diacritics are invisible in titles in Indic
+  languages Assamese, Bengali, Hindi, Malyalam and Odiya.
+* (bug 32826) Titles in indic languages are partially cut.
+* (bug 33367) Gendered namespaces for Czech.
+* (bug 33014) Language::formatSize()/formatBitrate() should be able to deal
+  with larger numbers (tera-yotta).
+
+=== Other changes in 1.19 ===
+* BREAKING CHANGE: Legacy global array 'ta' and global function 'akeytt' have
+  been removed from wikibits.js.
+* jquery.mwPrototypes module was renamed to jquery.mwExtension.
+* The maintenance script populateSha1.php was renamed to the more concise
+  populateImageSha1.php.
+* The Client-IP header is no longer checked for when trying to resolve a client's
+  real IP address.
+* (bug 22096) Although IE5.x and below was already unsupported officially, stylesheets
+  existing exclusively for IE5.0 and IE5.5 have now been removed (which were in skins
+  'chick' and 'monobook').
+* The constructor for CategoryView has changed, the second parameter is now a
+  Context source and is required.
+* The Title::escape{Local,Full,Canonical}URL methods are deprecated, please use
+  proper html building methods to escape the normal get{...}URL methods instead.
+* The $variant arguments in the Title::get{Local,Full,Link,Canonical}URL methods
+  have been replaced with a secondary query argument.
+* The $variant argument in the hooks for the Title::get{Local,Full,Link,Canonical}URL
+  methods have been removed, the variant is now part of the $query argument.
+* Removed Title::isValidCssJsSubpage(), deprecated since 1.17 in favor of
+  using Title::isCssJsSubpage() or checking Title::isWrongCaseCssJsPage().
+* Support for the deprecated hook MagicWordMagicWords was removed.
+* The Xml::namespaceSelector method has been deprecated, please use
+  Html::namespaceSelector instead (note that the parameters have changed also).
+* (bug 33746) Preload popular ResourceLoader modules (mediawiki.util) as stop-gap
+  for scripts missing dependencies.
+  New configuration variable $wgPreloadJavaScriptMwUtil has been introduced for this
+  (set to false by default for new installations). Set to true if your wiki has a large
+  amount of user/site scripts that are lacking dependency information. In the short to
+  medium term these user/site scripts should be fixed by adding the used modules to the
+  dependencies in the module registry and/or wrapping them in a callback to mw.loader.using.
 
 == MediaWiki 1.18 ==
+
+== MediaWiki 1.18.5 ==
+2012-08-30
+
+This is a security release of the MediaWiki 1.18 branch
+
+=== Changes since 1.18.4 ===
+* (bug 39700) File: link to non-existing file can inject html
+* (bug 39823) Hidden block text leaking to admins
+* (bug 39184) LDAP password leakage
+* (bug 39180) Disallow framing of api results
+* (bug 37587) Enforce language codes to be html safe
+* (bug 39824) Check global blocks on account creation
+
+== MediaWiki 1.18.4 ==
+2012-06-12
+
+This is a security release of the MediaWiki 1.18 branch.
+
+=== Changes since 1.18.3 ===
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+== MediaWiki 1.18.3 ==
+2012-04-25
+
+This is a maintenance release of the MediaWiki 1.18 branch.
+
 === Changes since 1.18.2 ===
 * (bug 35446) Using "{{nse:}}" with an invalid namespace name no longer throws
   a PHP warning.
 * (bug 35567) The whole password reminder e-mail is now sent in the same language.
+* (bug 35961) Hash comparison should always be strict.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
 
 == MediaWiki 1.18.2 ==
 2012-03-21
@@ -793,97 +1236,219 @@ changes to languages because of Bugzilla reports.
 
 == MediaWiki 1.17 ==
 
-=== PHP 5.2 now required ==
-Since 1.17, the lowest supported version of MediaWiki is now 5.2.3. Please
-upgrade PHP if you have not done so prior to upgrading MediaWiki.
+== MediaWiki 1.17.5 ==
+2012-06-12
+
+This is a security release of the MediaWiki 1.17 branch.
+
+=== Summary of selected changes in 1.17 ===
+
+Selected changes since MediaWiki 1.16 that may be of interest:
+
+* A new installer has been introduced. It has a wizard-style interface which is
+  translated into many languages. Many shortcomings in the old installer were
+  addressed with this rewrite. Note that it is no longer required for the config
+  directory to be made writable by the webserver. Instead the generated
+  LocalSettings.php file is offered as a download, which you must then upload
+  to the wiki's base directory.
+
+* ResourceLoader, a new framework for delivering client-side resources such as
+  JavaScript and CSS, has been introduced. These resources are now delivered
+  through the new entry point script "load.php", instead of as static files
+  served directly by the web server. This allows minification, compression and
+  client-side caching to be used more effectively, which should provide a net
+  performance improvement for most users.
+
+* Category sorting has been improved.
+** Sorting is now case insensitive.
+** Sub-categories, pages and files can now be paged separately.
+** When several pages are given the same sort key, they sort by their
+   names instead of randomly.
+
+* The lowest supported version of PHP is now 5.2.3. If necessary, please
+  upgrade PHP prior to upgrading MediaWiki.
+
+=== Changes since 1.17.4 ===
+
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+=== Changes since 1.17.3 ===
+
+* (bug 35961) Hash comparison should always be strict.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+
+=== Changes since 1.17.2 ===
+
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in
+  core parser functions which operate on strings, such as padleft.
+* (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token
+  parameter present.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
 
-=== New installer in 1.17 ===
-MediaWiki 1.17 is shipping with a completely redesigned installer to fix
-a lot of outstanding bugs, cleanup the code quality, and make it easier to
-use. Notably, you can now run upgrades from the web without having to move
-LocalSettings.php. Also, configuration script directory has been renamed
-from config/ to mw-config/. The specific bugs are listed below in the
-general notes.
+=== Changes since 1.17.1 ===
+* (bug 33117) prop=revisions allows deleted text to be exposed through cache pollution.
+* (bug 32709) Private Wiki users were always taken to Special:Badtitle on login.
 
-=== New ResourceLoader in 1.17 ===
-MediaWiki 1.17 ships with a ResourceLoader which combines and minifies css and
-javascript attached to the page. They are served from the new entry point load.php
-If the page is served with the &debug=true parameter, the non-minified files
-are used instead.
+=== Changes since 1.17.0 ===
+
+* (bug 29535) Added missing Creative Commons CC0 icon.
+* (bug 29726) Fixed failure to load internationalization messages in
+  client-side scripts on WebKit-based browsers.
+* Fixed a bug in message transformation where the previous language could leak
+  into later transformations in the UI language.
+* (bug 29091) Fixed form of native name for Ossetic language (Иронау -> Ирон)
+* Fixed maintenance scripts upgrade1_5.php and rebuildImages.php, they did not
+  work at all since 1.17 beta 1.
+* (bug 29531) Fixed img_auth.php for thumbnails and other filenames with
+  multiple dots, was broken by the fix for bug 28840.
+* In the maintenance script purgeList.php, fixed a fatal error when a page
+  title is given, instead of a URL.
+* (bug 19514) Unordered list list-style-image should be IE6-compatible (8-bit).
+* Installer checked for magic_quotes_runtime instead of register_globals.
+* $wgSVGMaxSize is now applied to the smaller of width or height, making very
+  wide pano/timeline/diagram SVGs renderable at saner sizes.
+* (bug 29959) Installer fatal when cURL and allow_url_fopen is disabled and user
+  tries to subsribe to mediawiki-announce.
+* Installer checked for magic_quotes_runtime instead of register_globals
+* (bug 30131) XCache with variable caching disabled no longer used for variable
+  caching (CACHE_ACCEL)
+* (bug 30264) Changed installer-generated LocalSettings.php to use require_once()
+  instead require() for included extensions.
+* (bug 26486) ResourceLoader modules with paths to nonexistent files cause PHP
+  warnings/notices to be thrown
+* (bug 30907) Special:Unusedcategories should sort ascendingly.
+* (bug 30219) The page shown when LocalSettings.php does not exist was broken on
+  Windows servers.
+* Hardcoded NLS_NUMERIC_CHARACTERS for Oracle DB to prevent type conversion errors.
+* Fixed recentchanges FK violation on page delete and cache purge error in updater
+  for Oracle DB.
+* (bug 32276) Skins were generating output using the internal page title which
+  would allow anonymous users to determine wheter a page exists, potentially
+  leaking private data. In fact, the curid and oldid request parameters would
+  allow page titles to be enumerated even when they are not guessable.
+* (bug 32616) action=ajax requests were dispatched to the relevant internal
+  functions without any read permission checks being done. This could lead to
+  data leakage on private wikis.
+
+=== Changes since 1.17.0rc1 ===
+
+* Fixed syntax error in generated LocalSettings.php when a non-default user
+  rights profile is chosen.
+* (bug 29399) Fixed PostgreSQL installation when the DB user for installation
+  is the same as the one for web access.
+* (bug 29233) Fixed failover for DB slave servers. When a DB slave went down,
+  an error was immediately shown to the user, instead of trying another slave.
+  Was broken since 1.17 beta 1.
+* (bug 29278) Fixed PHP fatal error when attempting to add text to a page via a
+  redirect.
+* (bug 29408) Fixed uploads of files with MIME types that aren't detected by
+  MediaWiki.
+* Removed DEFAULT '' NOT NULL field definitions from Oracle DB schema because
+  using the DEFAULT value ('') in DML broke Oracle backend as it treats an
+  empty VARCHAR2 value as NULL. Indexes on Oracle do not require NOT NULL
+  fields.
+
+=== Changes since 1.17 beta 1 ===
+
+* Fixed warning about missing file "password.js".
+* When installing on MySQL, don't attempt to create a new database user if the
+  same user is used for installation and web access.
+* Fixed SQL query errors in queries with table aliases.
+* (bug 27891) Fixed the "chronology protector", broken since 1.17beta1, which
+  ensures that when database replication is used, the new version is seen by
+  the user immediately after they create or edit an article.
+* (bug 28845) Allow PostgreSQL installation using a non-root user account which
+  has role creation abilities.
+* When installing on PostgreSQL and the install account is the same as the web
+  account, check to make sure that the account has suitable privileges in the
+  mediawiki schema.
+* (bug 28172) Fixed error in PostgreSQL installation when creating the wiki
+  sysop account.
+* Fixed an issue with the Oracle installer in cases where the user is different
+  to the database name.
+* Added "unblockself" to the list of available rights.
+* In the installer, fixed the "user rights profile" option, it never worked.
+* (bug 29117) Fixed Hebrew localisation of the installer.
+* (bug 28840) Reduce the collateral damage caused by the fix for bug 28235 (XSS
+  on Internet Explorer 6 due to a file extension in the query string) by
+  reducing the number of URLs that are blocked, and by redirecting the request
+  to a safer URL where possible instead of blocking it.
+* (bug 28812) Fixed documentation of API action=parse.
+* (bug 28979) Fixed styling of <abbr> and <acronym>.
+* Fixed the error message displayed when you try to create an account by email,
+  but an email address is not given.
+* Fixed JS error due to missing dependency for jquery.suggestions.
+* Exposed $wgExtensionAssetsPath in JavaScript.
+* (bug 28738) Made ResourceLoader support environments with small URL length
+  limits. The length limit can be configured via $wgResourceLoaderMaxQueryLength,
+  and this is set automatically in the generated LocalSettings.php when the
+  php.ini variable "suhosin.get.max_value_length" is set. When a URL exceeds
+  this limit, the request is split up. Also, reduced the average length of
+  load.php URLs by using a more compact parameter format.
+* (bug 25262) Fix for minification of hardcoded data: URIs in CSS.
+* (bug 25124) Respect $wgStyleDirectory in ResourceLoader.
+* Allow installation when no HTTP client is available, don't throw an exception.
+* (bug 27465) Fix metadata extraction for SVG files using unusual namespace
+  names.
+* (bug 29174) Fix regression in upload-by-URL: uploading files larger than the
+  PHP memory limit should work again.
+* Fixed the display of comments in the new user log.
+* (bug 28237) When installing extensions using the web-based installer, create
+  any necessary database tables.
+* (bug 28983) Fixed automated installation of extensions that overwrite $path.
+* Fixed error caused by missing magic words.
+* Fixed breakage of article editing in PostgreSQL due to text search
+  configuration errors.
+* Fixed the HTTPS client used when Curl is not available. This avoids an error
+  during install about failure of the mediawiki-announce subscription.
+* (bug 28162) When installing to PostgreSQL, respect the "database port" input,
+  it was ignored.
 
 === Configuration changes in 1.17 ===
-* DatabaseFunctions.php that was needed for compatibility with pre-1.3
-  extensions has been removed.
-* $wgAllowImageTag can be set to true to whitelist the <img> tag in wikitext.
-* (bug 12797) Add $wgGalleryOptions for adjusting of default gallery display
-  options.
-* $wgAllowUserCssPrefs option allows disabling CSS-based preferences; which can
-  improve page loading speed.
+
+* $wgLogAutocreatedAccounts controls whether autocreation of accounts is logged
+  to new users log.
 * (bug 22858) $wgLocalStylePath is by default set to the same value as
   $wgStylePath but should never point to a different domain than the site is
   on, allowing skins to use .htc files which are not cross-domain friendly.
-* (bug 20193) Added $wgVectorShowVariantName global configuration variable
-  which causes Vector to render the variants drop-down menu with a label
-  showing the current variant name. This is off by default, pending further
-  research into its user experience implications.
-* XmlFunctions.php has been removed. Use the Xml or Html classes as appropriate.
-* Added $wgSQLMode for setting database SQL modes - either performance (null)
-  or other reasons (such as enabling stricter checks)
 * $wgFileStore has been deprecated. The only usage $wgFileStore['deleted'] has
   been turned into $wgDeletedDirectory.
 * $wgDeletedDirectory has been added to specify what directory to place deleted
   uploads in.
 * IBM DB2 database no longer uses the db specific $wgDBport_db2 variable but the
   normal $wgDBport.
-* The upload link for missing files can now be set separately from the
-  navigation link with $wgUploadMissingFileUrl.
 * $wgCategoryPrefixedDefaultSortkey was removed and is now always false.  This
   provides more sensible sorting behavior for categories.
 * Removed unused globals: $wgEnableSerializedMessages, $wgCheckSerialized,
-  $wgUseMemCached, $wgDisableSearchContext, $wgColorErrors,
-  $wgUseZhdaemon, $wgZhdaemonHost and $wgZhdaemonPort.
+  $wgUseMemCached, $wgDisableSearchContext, $wgColorErrors, $wgUseZhdaemon,
+  $wgZhdaemonHost and $wgZhdaemonPort.
 * (bug 24408) The include_path is not modified in the default LocalSettings.php
 * $wgVectorExtraStyles was removed, and is no longer in use.
-* $wgLoadScript was added to specify alternative locations for ResourceLoader
-  requests.
-* $wgResourceLoaderMaxage was added to specify maxage and smaxage times for
-  responses from ResourceLoader based on whether the request's URL contained a
-  version parameter or not.
-* $wgResourceLoaderDebug was added to specify the default state of debug mode;
-  this will still be overridden with the debug URL parameter a la
-  $wgLanguageCode.
-* $wgResourceLoaderInlinePrivateModules was added to specify whether private
-  modules such as user.options should be embedded in the HTML output or
-  delivered through a resource loader request, which bypasses server cache (like
-  squid) and checks the user parameter against $wgUser. The former adds more
-  data to all pages, while the latter adds a request which cannot be cached
-  server side.
-* Removed $wgUpdates for database updates; extension should use
-  DatabaseUpdater::addExtensionUpdate().
+* Removed $wgUpdates for database updates; extensions should use
+  DatabaseUpdater::addExtensionUpdate() via the LoadExtensionSchemaUpdates hook.
 * Removed $wgServerName. It doesn't need to be set anymore and is no longer
   available as input for other configuration items, either.
-* Remove $wgRemoteUploads. It was not well supported and superseded by
-  $wgUploadNavigationUrl.
-* (bug 198) $wgUpgradeKey allows unlocking the web installer for upgrades
-  without having to move LocalSettings.php
-* The FailFunction "error handling" method has now been removed
-* $wgAdditionalMailParams added to allow setting extra options to mail() calls.
-* $wgSecureLogin to optionaly login using HTTPS
-* (bug 25728) Added $wgPasswordSenderName to allow customise the name associed
-  with $wgPasswordSender
-* Sysops now have the "suppressredirect" right by default
-* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in
-  the footers of skins.
-* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy
-  used for the file cache. Default value is 2, which matches former behavior
 * It's no longer necessary for LocalSettings.php to include DefaultSettings.php.
 * It's no longer necessary to set $wgCacheEpoch to the file modification time
   of LocalSettings.php, in LocalSettings.php itself. Instead, this is done
   automatically if $wgInvalidateCacheOnLocalSettingsChange is true (which is
   the default).
-* (bug 26253) $wgPostCommitUpdateList has been removed
+* $wgCopyrightIcon is deprecated and $wgFooterIcons['copyright']['copyright']
+  should be used instead.
+* $wgSysopUserBans is deprecated, and will be made permanently true in 1.18.
+  If you need this functionality, you should use the BlockIp hook to filter and
+  reject such blocks.
+* $wgSysopRangeBans is deprecated, you should set $wgBlockCIDRLimit to maximum
+  (32 for IPv4, 128 for IPv6), equivalent to allowing rangeblocks of only 1
+  address at a time.
 
 === New features in 1.17 ===
+
 * (bug 10183) Users can now add personal styles and scripts to all skins via
   User:<name>/common.css and /common.js (if user css/js is enabled).
 * (bug 22748) Add anchors on Special:ListGroupRights.
@@ -898,7 +1463,7 @@ are used instead.
   changes list.
 * (bug 22925) "sp-contributions-blocked-notice-anon" message now displayed when
   viewing contributions of a blocked IP address.
-* (bug 22474) {{urlencode:}} now takes an optional second paramter for type of
+* (bug 22474) {{urlencode:}} now takes an optional second parameter for type of
   escaping.
 * Special:Listfiles now supports a username parameter.
 * Special:Random carries over query string parameters.
@@ -915,16 +1480,13 @@ are used instead.
 * (bug 20976) "searchmenu-new-nocreate" message now displayed when when there
   is no title match in search and the user has no rights to create pages.
 * (bug 23429) Added new hook WatchlistEditorBuildRemoveLine.
-* (bug 22844) Added support for WinCache object caching.
-* (bug 23580) Add two new events to LivePreview so that scripts can be
-  notified about the beginning and finishing of LivePreview actions.
+* (bug 22844) Added support for WinCache object caching (for IIS).
+* (bug 23580) Add two new events to LivePreview so that scripts can be notified
+  about the beginning and finishing of LivePreview actions.
 * (bug 21278) Now the sidebar allows inclusion of wiki markup.
-* (bug 23733) Add IDs to messages used on CSS/JS pages
-* (bug 21312) RevisionMove allows moving individual revisions of a page to
-  another page. Introducing 'revisionmove' user right; disabled by default;
-  experimental feature.
+* (bug 23733) Add IDs to messages used on CSS/JS pages.
 * Show validity period of the login cookie in Special:UserLogin and
-  Special:Preferences
+  Special:Preferences.
 * Interlanguage links display the page title in their tooltip.
 * (bug 23621) New Special:ComparePages to compare (diff) two articles.
 * (bug 4597) Provide support in Special:Contributions to show only "current"
@@ -935,12 +1497,12 @@ are used instead.
 * (bug 21475) \mathtt and \textsf can now be used in <math>
 * texvc is now run via ulimit4.sh, to limit execution time.
 * SQLite now supports $wgSharedDB.
-* (bug 8507) Group file links by namespace:title on image pages
+* (bug 8507) Group file links by namespace:title on image pages.
 * Stop emitting named entities, so we can use <!DOCTYPE html> while still being
-  well-formed XML
+  well-formed XML.
 * texvc now supports \bcancel and \xcancel in addition to \cancel and \cancelto
-* Added scriptExtension setting to $wgForeignFileRepos
-* ForeignApiRepo uses scriptDirUrl if apiBase not set
+* Added scriptExtension setting to $wgForeignFileRepos.
+* ForeignApiRepo uses scriptDirUrl if apiBase not set.
 * (bug 24212) Added MediaWiki:Filepage.css which is also included on foreign
   client wikis.
 * (bug 14685) Double underscore magic word usage is now tracked in the
@@ -950,71 +1512,100 @@ are used instead.
   "mw-ipb-needreblock"
 * Non-file pages can no longer be moved to the file namespace, nor vice versa.
 * (bug 671) The <dfn>, <kbd> and <samp> elements have been whitelisted in user
-  input
-* (bug 24563) Entries on Special:WhatLinksHere now have a link to their history
-* (bug 21503) There's now a "reason" field when creating account for other users
-* (bug 24418) action=markpatrolled now requires a token
+  input.
+* (bug 21503) There's now a "reason" field when creating account for other users.
+* (bug 24418) action=markpatrolled now requires a token.
 * A variety of category sort-related fixes, including:
 ** (bug 164) In English, lowercase and uppercase letters now sort the same.
-   (This should be expanded to proper sorting for other languages before the
-   1.17 release.)
 ** (bug 1211) Subcategories, ordinary pages, and files now page separately.
 ** When several pages are given the same sort key, they sort by their names
    instead of randomly.
 * (bug 23848) Add {{ARTICLEPATH}} Magic Word.
-* JavaScript-based password complexity checker on account creation and
-  password change.
-* (bug 8140) Add dedicated CSS classes to Special:Newpages elements
-* (bug 11005) Add CSS class to empty pages in Special:Newpages
+* (bug 8140) Add dedicated CSS classes to Special:Newpages elements.
+* (bug 11005) Add CSS class to empty pages in Special:Newpages.
 * The parser cache is now shared amongst users whose different settings aren't
   used in the page.
 * Any attribute beginning with "data-" can now be used in wikitext, per HTML5.
 * (bug 24007) Diff pages now mention the number of users having edited
-  intermediate revisions
-* Added new hook GetIP
+  intermediate revisions.
+* Added new hook GetIP.
 * Special:Version now displays whether a SQLite database supports full-text
   search.
 * TS_ISO_8691_BASIC was added as a time format, which is used by ResourceLoader
-  for versioning
+  for versioning.
 * Maintenance scripts get a --memory-limit option to override defaults (which
-  is usually to set it to -1 to disable the limit)
+  is usually to set it to -1 to disable the limit).
 * (bug 25397) Allow uploading (not displaying) of WebP images, disabled
-  by default
-* (bug 23194) Special:ListFiles now has thumbnails
+  by default.
+* (bug 23194) Special:ListFiles now has thumbnails.
 * Use hreflang to specify canonical and alternate links, search engine friendly
   when a wiki has multiple variant languages.
-* (bug 19593) Specifying --server in now works for all maintenance scripts
+* (bug 19593) Specifying --server in now works for all maintenance scripts.
 * Now rebuildtextindex.php warns if SQLite doesn't support full-text search.
-* (bug 10541) Front/backend separation of installation/upgrade code
-* (bug 10596) Allow installer to enable extensions already in extensions folder
-* (bug 17394) Make installer check for latest version against MediaWiki.org
-* (bug 20627) Installer should be in languages other than English
+* (bug 10541) Front/backend separation of installation/upgrade code.
+* (bug 10596) Allow installer to enable extensions already in extensions folder.
+* (bug 20627) Installer should be in languages other than English.
 * Support for metadata in SVG files (title, description).
-* Special:Search: Add CSS classes to 'none found' and 'create link' messages
+* Special:Search: Add CSS classes to 'none found' and 'create link' messages.
 * Add CSS classes (including namespace and pagename) to the enhanced recent
-  changes/watchlist entries
+  changes/watchlist entries.
 * (bug 22463) Add hook 'SkinGetPoweredBy' to make 'powered by' icon/text
-  customizable
-* Added CSS print pagination to the print stylesheets
+  customizable.
+* Added CSS print pagination to the print stylesheets.
 * (bug 25960) Add <link rel=canonical"> for File pages of shared/foreign
   file repositories.
 * When viewing a redirect, the redirect arrow and redirection target are both
   wrapped in a div that has the class "redirectMsg" so that the redirection
-  arrow can be customized with CSS
+  arrow can be customized with CSS.
 * (bug 21911) Hard coded limit for long page warning removed. New message
   [[MediaWiki:Longpage-hint]] (empty per default) can be used instead.
   Parameters: $1 shows the formatted textsize in Byte/KB/MB, $2 is the raw
-  number of the textsize in Byte
-* (bug 3276) Give image <gallery>s fluid width
-* Added uploads link to page subtitle in Special:Contributions
-* Added Special:Myuploads special page that redirects to Special:Listfiles
+  number of the textsize in Byte.
+* (bug 3276) Give image <gallery>s fluid width.
+* Added uploads link to page subtitle in Special:Contributions.
+* Added Special:Myuploads special page that redirects to Special:Listfiles.
 * The footerlinks used in Monobook/Vector/Modern are now part of common skin
   code, SkinTemplateOutputPageBeforeExec can be used to customize the list.
 * Special wrapping setups can now define MW_CONFIG_FILE to load a config file
   other than LocalSettings.php. This is like MW_CONFIG_CALLBACK but works in
   some cases where MW_CONFIG_CALLBACK will not work.
+* (bug 26574) Added 'upload' to $wgRestrictionTypes, allowing upload protected
+  pages to be queried via the API and Special:ProtectedPages, and allowing
+  disabling upload protection by removing it from $wgRestrictionTypes.
+* The name attribute of HTMLForm fields can now be overridden by passing a
+  'name' key in the descriptor array.  Hidden field names are now treated
+  consistently with other fields and, by default, prefixed with 'wp'.
+* (bug 27402) Add support for disabling MWSuggest.
+* (bug 26563) Add bytes changed per revision for stub and full article dumps.
+* (bug 27508) Add $wgSVGMetadataCutoff to limit the maximum amount of an svg we
+  look at when finding metadata to prevent excessive resource usage.
+* (bug 198) $wgUpgradeKey allows unlocking the web installer for upgrades
+  without having to move LocalSettings.php
+* Added $wgAllowImageTag, which can be set to true to whitelist the <img> tag
+  in wikitext.
+* (bug 12797) Add $wgGalleryOptions for adjusting of default gallery display
+  options.
+* Added the $wgAllowUserCssPrefs option which allows disabling CSS-based
+  preferences; which can improve page loading speed.
+* Added $wgSQLMode for setting database SQL modes - either performance (null)
+  or other reasons (such as enabling stricter checks).
+* (bug 20193) Added $wgVectorShowVariantName global configuration variable
+  which causes Vector to render the variants drop-down menu with a label
+  showing the current variant name. This is off by default, pending further
+  research into its user experience implications.
+* The upload link for missing files can now be set separately from the
+  navigation link with $wgUploadMissingFileUrl.
+* $wgAdditionalMailParams added to allow setting extra options to mail() calls.
+* Added $wgSecureLogin to optionally login using HTTPS.
+* (bug 25728) Added $wgPasswordSenderName to make the name associated
+  with $wgPasswordSender configurable.
+* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in
+  the footers of skins.
+* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy.
+  used for the file cache. Default value is 2, which matches former behavior.
 
 === Bug fixes in 1.17 ===
+
 * (bug 17560) Half-broken deletion moved image files to deletion archive
   without updating database.
 * (bug 22666) Submitting user block form with an invalid user name no longer
@@ -1061,7 +1652,7 @@ are used instead.
 * (bug 20049) Fixed PHP notice in search highlighter that occurs in some cases.
 * (bug 23017) Special:Disambiguations now list pages in content namespaces
   rather than only main namespace.
-* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all
+* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all.
   frames, and $wgMaxImageArea against the size of the first frame, rather than
   the other way around.  Both now default to 12.5 megapixels.  Also, images
   exceeding $wgMaxImageArea can still be embedded at original size.
@@ -1091,12 +1682,12 @@ are used instead.
   correct link.
 * (bug 23284) Times are now rounded correctly.
 * (bug 23375) Added ogv, oga, spx as extensions for ogg files.
-* (bug 18408) All required permissions for uploading (upload, edit, create)
+* (bug 18408) All required permissions for uploading (upload, edit, create).
   are now checked when loading Special:Upload. Toolbar link for Special:Upload
   is no longer shown if the user does not have the required permissions.
-* (Bug 23397) texvc in html mode renders \sim as &tilde; not &sim;
-* (Bug 23241) Remove License selector, because it is not used when uploading a
-  new version.
+* (bug 23397) texvc in html mode renders \sim as &tilde; not &sim;
+* (bug 23241) License selector should be disabled during upload of a new
+  version.
 * (bug 23240) Add ID to namespace selector form on Special:Watchlist.
 * The pipe | character in urls is now escaped.
 * (bug 23422) mp3 files can now be moved.
@@ -1116,145 +1707,240 @@ are used instead.
 * (bug 16573) Render \epsilon in math using images, in order to create
   consistent and correct render results.
 * (bug 22541) Support image redirects when using ForeignAPIRepo.
-* (bug 22967) Make edit summary length cut-off behave correctly for
-  multibyte characters.
-* (bug 8689) Long numeric lines no longer  kill the parser.
+* (bug 22967) Make edit summary length cut-off behave correctly for multibyte
+  characters.
+* (bug 8689) Long numeric lines no longer kill the parser.
 * (bug 23740) Article::doRedirect() now use $extraQuery parameter correctly if
-  the $noRedir parameter is set to true
+  the $noRedir parameter is set to true.
 * (bug 23688) Correct mime types for Office 2007 OpenXML documents.
-* (bug 23787) Corrected $wgDefaultSkin's comment in DefaultSettings.php
-* (bug 23797) Xml::input() now allows '0' for the value parameter
+* (bug 23787) Corrected $wgDefaultSkin's comment in DefaultSettings.php.
+* (bug 23797) Xml::input() now allows '0' for the value parameter.
 * (bug 23747) Make sure that on History pages, the RevDel button is not
-  accidently activated when hitting enter.
-* (bug 23845) Special:ListFiles now uses correct file names without underscores
-* Ask for permanent login in Special:Preferences only if $wgCookieExpiration > 0
+  accidentally activated when hitting enter.
+* (bug 23845) Special:ListFiles now uses correct file names without underscores.
+* Ask for permanent login in Special:Preferences only if $wgCookieExpiration > 0.
 * (bug 16356) Repair dumpInterwiki.inc to use proper normalization.
 * (bug 24006) deleteArchivedRevisions.php maintenance script now longer throws
-  a fatal error
+  a fatal error.
 * (bug 23465) Don't ignore the predefined destination filename on
-  Special:Upload after following a red link
+  Special:Upload after following a red link.
 * (bug 23642) Recognize mime types of MS OpenXML documents.
 * (bug 22784) Normalise underscores and spaces in autocomments.
-* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings
+* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings.
 * (bug 24022) Only check file extensions on the uploadpage when needed.
-* (bug 24076) Recognize Office 2003 files with OpenXML trailers
-* (bug 24244) Updated comments in DefaultSettings.php to reflect
+* (bug 24076) Recognize Office 2003 files with OpenXML trailers.
+* (bug 24244) Updated comments in DefaultSettings.php to reflect.
   Image: --> File: namespace rename.
 * Make wfTimestamp recognize negative unix timestamp values.
 * (bug 24401) SimpleSearch: No button/text indicating 'Search' if image is
-  disabled
-* (bug 23293) Do not show change tags when special:recentchanges(linked)
-  or special:newpages is transcluded into another page as it messes up the
-  page.
+  disabled.
+* (bug 23293) Do not show change tags when Special:RecentChanges(linked) or
+  Special:Newpages is transcluded into another page as it messes up the page.
 * (bug 24517) LocalFile::newFromKey() and OldLocalFile::newFromKey() no longer
-  throw fatal errors
+  throw fatal errors.
 * (bug 23380) Uploaded files that are larger than allowed by PHP now show a
   useful error message.
 * Uploading to a protected title will allow the user to choose a new name
-  instead of showing an error page
+  instead of showing an error page.
 * (bug 24425) Use Database::replace instead of delete/insert in
   SqlBagOStuff::set to avoid query errors about duplicate keynames.
 * (bug 15470) First letters of filenames are always capitalized by upload JS.
-* (bug 21215) NoLocalSettings.php doesn't tolerate rewrite rules
-* (bug 21052) Fix link color for stubs in NewPages
+* (bug 21215) NoLocalSettings.php doesn't tolerate rewrite rules.
+* (bug 21052) Fix link color for stubs in NewPages.
 * (bug 24714) Usage of {{#dateformat: }} in wikis without $wgUseDynamicDates no
   longer pollutes the parser cache.
 * (bug 17031) Correct which characters the parser allows in tag attributes (a
   letter, colon or underscore followed by 0 or more letters, numbers, colons,
   underscores, hyphens, and/or periods).
-* Save 200 useless queries on each category page view
-* Shell commands will now work on Linux in filesystems mounted noexec
-* (bug 24804) Corrected commafying in Polish and Ukrainian
+* Save 200 useless queries on each category page view.
+* Shell commands will now work on Linux in filesystems mounted noexec.
+* (bug 24804) Corrected commafying in Polish and Ukrainian.
 * "Difference between pages" is now displayed instead of "Difference between
-   revisions" on diffs when appropriate.
+  revisions" on diffs when appropriate.
 * (bug 23703) ForeignAPIRepo fails on findBySha1() when using a 1.14 install as
-  a repository due to missing 'name' attribute from the API list=allimages
+  a repository due to missing 'name' attribute from the API list=allimages.
 * (bug 24898) MediaWiki uses /tmp even if a vHost-specific tempdir is set, also
-  make wfTempDir() return a sane value for Windows on worst-case
+  make wfTempDir() return a sane value for Windows on worst-case.
 * (bug 24824) Support ImageMagick 6.5.6-2+ JPEG decoder size hint, to reduce
   memory usage when such an ImageMagick is used for scaling.
 * Disable multithreaded behaviour in recent ImageMagick, to avoid a deadlock
   when a resource limit such as $wgMaxShellMemory is hit.
-* (bug 24981) Allow extensions to access SpecialUpload variables again
-* (bug 20744) Wiki forgets about an uploaded file
-* (bug 17913) Don't show "older edit" when no older edit available
-* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel
-* (bug 24977) The accesskey in history page now lead directly to the diff
-  instead of alterning focus between the two buttons.
-* (bug 24987) Special:ListUsers does not take external groups into account
-* (bug 20633) update.php has mixed language output
+* (bug 24981) Allow extensions to access SpecialUpload variables again.
+* (bug 20744) Wiki forgets about an uploaded file.
+* (bug 17913) Don't show "older edit" when no older edit available.
+* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel.
+* (bug 24977) The accesskey in history page now lead directly to the diff.
+  instead of alternating focus between the two buttons.
+* (bug 24987) Special:ListUsers does not take external groups into account.
+* (bug 20633) update.php has mixed language output.
 * SQLite system table names are now never prefixed.
 * (bug 25292) SkinSubPageSubtitle hook now passes the Skin object as second
-  parameter
-* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16)
+  parameter.
+* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16).
 * (bug 25367) wfShellExec() is more explicit when failing due to disabled
-  passthru()
-* (bug 25462) Fix double-escaping for section edit link tooltips
+  passthru().
+* (bug 25462) Fix double-escaping for section edit link tooltips.
 * action=raw was removed for Special:Statistics. This information is still
-  available via the API
+  available via the API.
 * (bug 23934) Groups defined in $wgRevokePermissions but not in
-  $wgGroupPermissions now appear on Special:ListGroupRights
+  $wgGroupPermissions now appear on Special:ListGroupRights.
 * (bug 23923) Special:Prefixindex no longer shows results if nothing was
   requested.
-* (bug 22308) Search now finds text in default main page immediately after setup
+* (bug 22308) Search now finds text in default main page immediately after setup.
 * (bug 25697) Make sure empty lines render in diff view.
 * Use an actual minus sign in diff views, instead of a hyphen.
-* (bug 23732) Clarified "n links" message on Special:MostLinkedFiles
-* (bug 23731) Clarified "n links" message on Special:MostLinkedTemplates
+* (bug 23732) Clarified "n links" message on Special:MostLinkedFiles.
+* (bug 23731) Clarified "n links" message on Special:MostLinkedTemplates.
 * (bug 25642) A exception is now thrown instead of a fatal error when using
-  $wgSMTP without PEAR mail package
+  $wgSMTP without PEAR mail package.
 * (bug 19633) When possible, Upscale small SVGs when creating thumbnails.
-* (bug 11013) Database driver detection needs rewriting for robustness
-* (bug 13409) Installer prompts could use clarification--now has help boxes
-* (bug 16902) Installer spews warnings when exec() and dl() are not available
-* (bug 19129) Only show MyISAM/InnoDB when supported
-* (bug 17762) Only show other e-mail options when e-mail is globally enabled
-* Cache multiple sizes of InstantCommons thumbnails
+* (bug 11013) Database driver detection needs rewriting for robustness.
+* (bug 13409) Installer prompts could use clarification--now has help boxes.
+* (bug 16902) Installer spews warnings when exec() and dl() are not available.
+* (bug 19129) Only show MyISAM/InnoDB when supported.
+* (bug 17762) Only show other e-mail options when e-mail is globally enabled.
+* Cache multiple sizes of InstantCommons thumbnails.
 * (bug 25488) Disallowing anonymous users to read pages no longer throws error
-  on discussion pages with vector as default skin
-* (bug 24833) Files name in includes/diff/ are now less confusing
-* (bug 25713) SpecialPage::resolveAlias() now normalise spaces to underscores
+  on discussion pages with vector as default skin.
+* (bug 24833) Files name in includes/diff/ are now less confusing.
+* (bug 25713) SpecialPage::resolveAlias() now normalise spaces to underscores.
 * (bug 25829) Special:Mypage and Special:Mytalk now forward oldid, diff and dir
-  parameters
+  parameters.
 * (bug 25175) HTML file cache now honor $wgCacheDirectory if
-  $wgFileCacheDirectory is not set
-* (bug 13353) Diff3 version checks were too strict, did not detect working diff3
-* (bug 25843) Links to special pages using link= attribute on images are now
-  normalised like normal links to special pages
+  $wgFileCacheDirectory is not set.
+* (bug 13353) Diff3 version checks were too strict, did not detect working diff3.
+* (bug 25843) Links to special pages using link= attribute on images are now.
+  normalised like normal links to special pages.
 * (bug 21364) External links using link= attribute on images now respect
-  $wgExternalLinkTarget
+  $wgExternalLinkTarget.
 * (bug 17789) Added a note to the total views on Special:Statistics saying that
-  is doesn't count non-existing pages and special pages
-* (bug 17996) HTTP redirects are now combined when requesting a special page
+  is doesn't count non-existing pages and special pages.
+* (bug 17996) HTTP redirects are now combined when requesting a special page.
 * (bug 19944) Link on image thumbnails no longer link to "Media:" namespace in
-  some cases
+  some cases.
 * (bug 25670) wfFindFile() now checks the namespace of the given title, only
-  "File" and "Media" are allowed now
+  "File" and "Media" are allowed now.
 * (bug 25872) Rename the HttpRequest class to MWHttpRequest to avoid conflict
   with php extension that defines same class.
 * (bug 20591) There's now a different message on Special:MovePage when
   $wgFixDoubleRedirects is set to false.
 * Fixed PHP warnings when updating a broken MySQL database.
-* (bug 26023) Corrected deleteBacth.php's documentation
+* (bug 26023) Corrected deleteBacth.php's documentation.
 * (bug 25451) Improved datetime representation in 32 bit php >= 5.2.
 * Show "skin does not exist error" only when the skin is inputted in the wrong
   case.
-* (bug 26164) Potential html injection when the database server isn't available
-* (bug 26160) Upload description set by extensions are not propagated
+* (bug 26164) Potential html injection when the database server isn't available.
+* (bug 26160) Upload description set by extensions are not propagated.
 * (bug 9675) generateSitemap.php now takes an --urlpath parameter to allow
-  absolute URLs in the sitemap index (as required e.g. by Google)
+  absolute URLs in the sitemap index (as required e.g. by Google).
 * Partial workaround for bug 6220: at least make files on shared repositories
-  show up as (struck-out) bluelinks instead of redlinks on Special:WantedFiles
-* rebuildFileCache.php no longer creates inappropriate cache files for redirects
-* (bug 18372) $wgFileExtensions will now override $wgFileBlacklist
+  show up as (struck-out) bluelinks instead of redlinks on Special:WantedFiles.
+* rebuildFileCache.php no longer creates inappropriate cache files for redirects.
 * (bug 25512) Subcategory list should not include category prefix for members.
-* (bug 20244) Installer does not validate SQLite database directory for stable path
+* (bug 10871) Javascript and CSS pages in MediaWiki namespace are no longer
+  treated as wikitext on preview.
+* Page existence is now not revealed (in the colour of the tabs) to users who
+  cannot read the page in question.
+* (bug 22753) Output from update.php is more clear when things changed, entries
+  indicating nothing changed are now all prefixed by "..."
+* (bug 16019) $wgArticlePath = "/$1" no longer breaks API edit/watch actions.
+* (bug 18372) File types blacklisted by $wgFileBlacklist will no longer be shown as
+  "Permitted file types" on the upload form.
+* (bug 26540) Fixed wrong call to applyPatch in MysqlUpdater.
+* (bug 26034) Make the "View / Read" tab in content_navigation style tabs remain
+  selected when the action is "purge".
+* (bug 26733) Wrap initial table creation in transaction.
+* (bug 26208) Mark directionality of some interlanguage links.
+* (bug 26716) Provide link to instructions for external editor related preferences.
+* (bug 26961) Hide anon edits in watchlist preference now actually works.
 * (bug 1379) Installer directory conflicts with some hosts' configuration panel.
-* (bug 12070) After Installation MySQL was blocked
-* Fix XML well-formedness on a few pages when $wgHtml5 is true (the default)
-* (bug 28568) Entries in the iwlinks table are now removed on page deletion
+* (bug 27781) Installer does not warn about 5.1.x. Added a compatibility function
+  for array_key_exists().
+* Fix XML well-formedness on a few pages when $wgHtml5 is true (the default).
+* (bug 28069) MediaWiki fails streaming files when mod_deflate and ob_gzhandler
+  are also set.
+* (bug 26223) Concurrently moving an article to different titles leaks a
+  redirect revision with no page.
+* (bug 15641) Fixed permissions checks in Special:Import which allowed users
+  without the 'import' permission to import pages from configured import sources.
+* (bug 26449) Keep underlines from headings outside of tables and thumbs by
+  adding overflow:hidden to h1,h2,h3,h4,h5,h6 (also fixes editsection bunching).
+* (bug 26708) Remove background-color:white from tables in Monobook and Vector.
+* (bug 26781) {{PAGENAME}} and related parser functions escape their output better.
+* (bug 26716) Provide link to instructions for external editor related preferences
+  and add a comment to the ini control file explaining what is going on.
+* (bug 28422) Remove color:black from tables in Monobook and Vector. And add it
+  to table.wikitable instead.
+* (bug 27560) Search queries no longer fail in walloon language.
+* (bug 27700) The upload protection can now also be set for files that do not
+  exist.
+* (bug 28034) uploading file to local wiki when file exists on shared repository
+  (commons) gives spurious info in the warning message.
+* Usernames get lost when selecting different sorts on Special:listfiles.
+* (bug 28166) UploadBase assumes that 'edit' and 'upload' rights are not per
+  page restrictions.
+* (bug 28242) Make redirects generated by urls containing a local interwiki
+  prefix be a 301 instead of a 302.
+* (bug 28568) Entries in the iwlinks table are now removed on page deletion.
+* (bug 28306) Fix exposure of suppressed usernames in ForeignDBRepo.
+* (bug 28444) Fix regression: edit-on-doubleclick retains revision id again.
+* UtfNormal::cleanUp on an invalid utf-8 sequence no longer returns false if
+  intl installed.
+* (bug 26729) Category pages should return 404 if they do not exist and have no
+  members.
+* (bug 28214) When page not found, sends malformed HTTP/1.x instead of HTTP/1.1
+  in header of response.
+* (bug 27634) TOC title appears in wrong language.
+* (bug 27761) Fix regression: pages with Esperanto titles containing convertible
+  character sequences became unreachable.
+* (bug 27508) SVGMetadataExtractor takes too much resources on huge svgs.
+* (bug 27465) SVG thumbnail generation.
+* (bug 27467) preload can leave UNIQ.
+* (bug 27539) Allow attributes beginning with a digit in wiktext tag parameters.
+* (bug 27328) using relative paths in CSS imports in MediaWiki:Common.css broken
+  in 1.17.
+* (bug 27333) Fix repetitive last-seen time queries on page history.
+* (bug 26250, bug 23817) Fix wfObjectToArray() to descend into arrays; fixes
+  processing of JSON return values for ForeignAPIRepo when native json module
+  not present.
+* (bug 25675) Fix search suggestions for Special: pages with spaces.
+* (bug 25571) Xml::encodeJsVar now passes floats natively instead of converting
+  to strings.
+* (bug 27338) Gallery in 1.17 breaks for audio/video + ogghandler.
+* (bug 27302) Don't append the current timestamp for user/site modules when no
+  user/site JS/CSS is present.
+* (bug 27016) dumpTextPass.php now consider the "output" parameter.
+* (bug 22606) don't send the "someone registred an account" message when setting
+  email address (i.e. old one empty) in user preferences.
+* (bug 26458) Section edit links appear on pages that user does not have right
+  to edit.
+* (bug 28611) Don't die in SqlBagOStuff::incr() if there's a race condition.
+* (bug 16886) Sister projects box moves down the extract of the first result
+  in IE 7.
+* (bug 17398) Fixed "link" parameter in image links with "thumb" or "frame"
+  parameter.
 
 === API changes in 1.17 ===
+
+* BREAKING CHANGE: action=patrol now requires POST.
+* BREAKING CHANGE: patrol token is no longer the same as edit token.
+* BREAKING CHANGE: Session keys returned by ApiUpload are now strings instead
+  of integers.
+* BREAKING CHANGE: (bug 25303) Fix API parameter integer validation to actually
+  enforce validation on the input values in addition to giving a warning.
+  Also add flag to enforce (die) if integer out of range.
+* (bug 24650) Fix API to work with categorylinks changes.
+* action=parse now correctly returns an error for nonexistent pages.
+* (bug 27201) Special:WhatLinksHere output no longer contains duplicate IDs.
+* (bug 26560) On allusers if limit < total number of users, last user gets
+  duplicated.
+* (bug 27715) imageinfo didn't respect revdelete.
+* (bug 27479) API error when using both prop=pageprops and
+  prop=info&inprop=displaytitle.
+* (bug 27862) Useremail module didn't properly return success on success.
+* (bug 27590) prop=imageinfo now allows querying the media type.
+* (bug 27587) list=filearchive now outputs full title info.
+* (bug 27897) list=allusers and list=users list hidden users.
 * (bug 22738) Allow filtering by action type on query=logevent.
 * (bug 22764) uselang parameter for action=parse.
 * (bug 22944) API: watchlist options are inconsistent.
@@ -1272,106 +1958,106 @@ are used instead.
 * (bug 23524) Api Modules as followup to bug 14473 (Add iwlinks table to
   track inline interwiki link usage).
 * Add pltitles and tltemplates to prop=links and prop=templates respectively,
-  similar to prop=categories's clcategorie
+  similar to prop=categories's clcategorie.
 * (bug 23834) Invalid "thumbwidth" and "thumbheight" in "imageinfo" query when
-  thumbnailing larger than original image
-* (bug 23835) Need "thumbmime" result in "imageinfo" query
-* (bug 23851) Repair diff for file redirect pages
-* (bug 24009) Include implicit groups in action=query&list=users&usprop=groups
+  thumbnailing larger than original image.
+* (bug 23835) Need "thumbmime" result in "imageinfo" query.
+* (bug 23851) Repair diff for file redirect pages.
+* (bug 24009) Include implicit groups in action=query&list=users&usprop=groups.
 * (bug 24016) API: Handle parameters specified in simple string syntax
-  ( 'paramname' => 'defaultval' ) correctly when outputting help
-* (bug 24089) Logevents causes PHP Notice if leprop=title isn't supplied
-* (bug 23473) Give description of properties on all modules
+  ( 'paramname' => 'defaultval' ) correctly when outputting help.
+* (bug 24089) Logevents causes PHP Notice if leprop=title isn't supplied.
+* (bug 23473) Give description of properties on all modules.
 * (bug 24136) unknownerror when adding new section without summary, but
-  forceditsummary
-* (bug 16886) Sister projects box moves down the extract of the first result
-  in IE 7.
-* (bug 22339) Added srwhat=nearmatch to list=search to get a "go" result
+  forceditsummary.
+* (bug 22339) Added srwhat=nearmatch to list=search to get a "go" result.
 * (bug 24303) Added new &servedby parameter to all actions which adds the
   hostname that served the request to the result. It is also added
-  unconditionally on error
+  unconditionally on error.
 * (bug 24185) Titles in the Media and Special namespace are now supported for
   title normalization in action=query. Special pages have their name resolved
   to the local alias.
 * (bug 24296) Added converttitles parameter to convert titles to their
   canonical language variant.
-* (bug 17398) Fixed "link" parameter in image links with "thumb" or "frame"
-  parameter.
-* (bug 23936) Add "displaytitle" to query/info API
+* (bug 23936) Add "displaytitle" to query/info API.
 * (bug 24485) Make iwbacklinks a generator, optionally display iwprefix and
-  iwtitle
+  iwtitle.
 * (bug 24564) Fix fatal errors when using list=deletedrevs, prop=revisions or
   one of the backlinks generators with limit=max.
-* (bug 24656) API's parse module needs option to disable PP report
+* (bug 24656) API's parse module needs option to disable PP report.
 * PARAM_REQUIRED parameter flag added. If this flag is set, and the end user
   does not set the parameter, the API will automatically throw an error.
 * (bug 24665) When starttimestamp is not specified, fake it by setting it to
-  NOW, not to the timestamp of the last edit
+  NOW, not to the timestamp of the last edit.
 * (bug 24677) axto= parameters added to allcategories, allimages, alllinks,
-  allmessages, allpages, and allusers
+  allmessages, allpages, and allusers.
 * (bug 24236) Add add, remove, add-self, remove-self tags to
-  meta=siteinfo&siprop=usergroups
-* (bug 24484) Add prop=pageprops module
-* (bug 24330) Add &redirect parameter to ?action=edit
+  meta=siteinfo&siprop=usergroups.
+* (bug 24484) Add prop=pageprops module.
+* (bug 24330) Add &redirect parameter to ?action=edit.
 * (bug 24722) For list=allusers&auprop=blockinfo, only show blockedby and
   blockreason if the user is actually blocked.
-* Add format=dump and format=dumpfm, outputs results in PHP's var_dump() format
+* Add format=dump and format=dumpfm, outputs results in PHP's var_dump() format.
 * For required string parameters, if '' is provided, this is now classed as
-  missing
-* (bug 24724) list=allusers is out by 1 (shows total users - 1)
-* (bug 24166) API error when using rvprop=tags
+  missing.
+* (bug 24724) list=allusers is out by 1 (shows total users - 1).
+* (bug 24166) API error when using rvprop=tags.
 * Introduced "asynchronous download" mode for upload-by-url. Requires
   $wgAllowAsyncCopyUploads to be true.
 * sinumberingroup correctly gives size of 'user' group, and omits size of
   implicit groups rather than showing 0.
-* (bug 25248) API: paraminfo errors with certain modules
-* (bug 25303) Fix API parameter integer validation to actually enforce
-  validation on the input values in addition to giving a warning. Also add flag
-  to enforce (die) if integer out of range (breaking change!)
+* (bug 25248) API: paraminfo errors with certain modules.
 * (bug 24792) API help for action=purge sometimes wrongly stated whether a
-  POST request was needed due to cache pollution
-* Added iiprop=parsedcomment to prop=imageinfo, similar to prop=revisions
+  POST request was needed due to cache pollution.
+* Added iiprop=parsedcomment to prop=imageinfo, similar to prop=revisions.
 * Added rvparse to parse revisions. For performance reasons if this option is
   used, rvlimit is enforced to 1.
 * (bug 25748) If a action=parse request provides an oldid that is actually the
-  current revision id, try the parser cache, and save it to it if necessary
+  current revision id, try the parser cache, and save it to it if necessary.
 * (bug 25463) Export header should not be shown if no pages were requested, to
-  reduce confusion
-* (bug 25648) API discovery information has been added as RSD link in page
+  reduce confusion.
+* (bug 25648) API discovery information has been added as RSD link in page.
   <head> and by providing an API module action=rsd. Added hook
   ApiRsdServiceApis for extensions to add their own service to the services
   list.
 * The HTML of diff output markers has changed. Hyphens are now minus signs,
-  empty markers are now filled with non-breaking-space characters
-* (bug 25741) Add more data to list=search's srprop
+  empty markers are now filled with non-breaking-space characters.
+* (bug 25741) Add more data to list=search's srprop.
 * (bug 25760) counter property still reported by the API when
-  $wgDisableCounters enabled
-* (bug 25987) prop=info&inprop=watched now also works for missing pages
-* (bug 26006) prop=langlinks now allows obtaining full URL
-* (bug 26075) ApiDelete.php now calls correctly ArticleDelete hook
-* (bug 26089) add block expiration to blockinfo
+  $wgDisableCounters enabled.
+* (bug 25987) prop=info&inprop=watched now also works for missing pages.
+* (bug 26006) prop=langlinks now allows obtaining full URL.
+* (bug 26075) ApiDelete.php now calls correctly ArticleDelete hook.
+* (bug 26089) add block expiration to blockinfo.
 * (bug 26125) prop=imageinfo&iiprop=size now returns the page count if the
-  file is a multi-page file
-* (bug 10268) Added linktodiffs parameter on action=feedwatchlist
-* (bug 26219) Show API limits for multi values in description
+  file is a multi-page file.
+* (bug 10268) Added linktodiffs parameter on action=feedwatchlist.
+* (bug 26219) Show API limits for multi values in description.
+* (bug 28070) Fix watchlist RSS for databases that store timestamps in a
+  real timestamp field.
+* (bug 27722) list=filearchive now supports revdel.
 
-=== Languages updated in 1.17 ===
+=== Language support changes in 1.17 ===
 
-MediaWiki supports over 330 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
+MediaWiki supports over 330 languages. Many localizations are updated regularly.
+
+The following languages were added:
+
+* Moroccan Spoken Arabic (ary)
+* Banjar (bjn)
+* Kabardian (kdb)
+* Kabardian (Cyrillic) (kbd-cyrl)
+* Latgalian (ltg)
+* Minangkabau (min)
+* Dutch (informal) (nl-informal)
+* Rusyn (rue)
 
-* Moroccan Spoken Arabic (ary) (new)
-* Banjar (bjn) (new)
-* Danish (dk) (removed deprecated language code)
-* Fiji Hindi (Devangari script) (removed)
-* Kabardian (kdb) (new, dummy)
-* Kabardian (Cyrillic) (kbd-cyrl) (new)
-* Latgalian (ltg) (new)
-* Minangkabau (min) (new)
-* Dutch (informal) (nl-informal) (new)
-* Rusyn (rue) (new)
+Other significant changes to MediaWiki's language support:
 
+* Fiji Hindi (Devangari script) was removed.
+* Removed deprecated language code "dk" (Danish), use "da" instead.
+* Link trail added for sl and sh.
+* (bug 27633) Add characters to linkTrail for Portuguese (pt and pt-br).
 * (bug 23156) Commafy and search normalization updated for Belarusian
   (Taraškievica).
 * (bug 23283) Native name for Old English -> Ænglisc.
@@ -1381,6 +2067,27 @@ changes to languages because of Bugzilla reports.
 * (bug 24917) Polish as fallback for Kashubia.
 * (bug 24794) Tatar link trail updated.
 * Esperanto date format corrected.
+* (bug 28159) Change interwiki name of language kbd to Къэбэрдеибзэ /
+  Qabardjajəbza.
+* (bug 28184) Namespaces for the Latgalian Wikipedia.
+* (bug 25010) Bashkir-language interwikis: linktext change from Башҡорт
+  to Башҡортса.
+* (bug 26395) Change name of Cornish language to Kernowek.
+
+=== Other changes in 1.17 ===
+
+* DatabaseFunctions.php that was needed for compatibility with pre-1.3
+  extensions has been removed.
+* XmlFunctions.php has been removed. Use the Xml or Html classes as appropriate.
+* The FailFunction "error handling" method has now been removed
+* Sysops now have the "suppressredirect" right by default
+* Removed $wgRemoteUploads. It was not well supported and superseded by
+  $wgUploadNavigationUrl.
+* (bug 26253) $wgPostCommitUpdateList has been removed
+* The PHPUnit test suite has been removed from this release due to serious issues
+  which should be resolved by the 1.18 release.
+* Oracle DB now uses the __destruct fuction to commit/close connection as it
+  doesn't commit on close if transation is triggered in OCI.
 
 == MediaWiki 1.16 ==
 
index 9c4d5b2..3e68abd 100644 (file)
@@ -29,7 +29,6 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   connections, if either are available for the selected DB type.
 * $wgUseCombinedLoginLink now defaults to false, making MediaWiki output separate
   login and create account links by default.
-* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
 
 === New features in 1.20 ===
 * Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
@@ -148,6 +147,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   been removed.
 * (bug 34939) Made link parsing insensitive ([HttP://]).
 * (bug 40072) Add CSS classes to items in output of ChangesList pages.
+* Added $wgCopyUploadProxy global to define which proxy to use for copy
+  uploads.
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -247,9 +248,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 40214) Category pages no longer use deprecated "width" HTML attribute.
 * (bug 39941) Add missing stylesheets to the installer pages
 * In HTML5 mode, allow new input element types values (such as color, range..)
-* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
-* (bug 40352) fixDoubleRedirects.php should support interwiki redirects.
-* (bug 9237) SpecialBrokenRedirect should not list interwiki redirects.
+* (bug 36151) mw.Title: Don't limit extension in title parsing.
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -288,7 +287,6 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 11142) Improve file extension blacklist error reporting in API upload.
 * (bug 39665) Cache AllowedGenerator array so it doesn't autoload all query classes
   on every request.
-* (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
 
 === Languages updated in 1.20 ===
 
@@ -325,9 +323,6 @@ changes to languages because of Bugzilla reports.
 * Use of __DIR__ instead of dirname( __FILE__ ).
 * OutputPage::wrapWikiMsg() no longer supports the 'options' parameter. It was
   not used and complicated migration to Message class.
-* Live preview functionality has been improved and moved into the
- 'mediawiki.action.edit.preview' module. The old 'mediawiki.legacy.preview' module
-  has been removed.
 
 == Compatibility ==
 
diff --git a/RELEASE-NOTES-1.21 b/RELEASE-NOTES-1.21
new file mode 100644 (file)
index 0000000..53e3fd5
--- /dev/null
@@ -0,0 +1,95 @@
+= MediaWiki release notes =
+
+Security reminder: MediaWiki does not require PHP's register_globals
+setting since version 1.2.0. If you have it on, turn it '''off''' if you can.
+
+== MediaWiki 1.21 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.21 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.21 ===
+* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
+
+=== New features in 1.21 ===
+
+=== Bug fixes in 1.21 ===
+* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
+* (bug 40352) fixDoubleRedirects.php should support interwiki redirects.
+* (bug 9237) SpecialBrokenRedirect should not list interwiki redirects.
+
+=== API changes in 1.21 ===
+* (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
+
+=== Languages updated in 1.21 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+=== Other changes in 1.21 ===
+* Live preview functionality has been improved and moved into the
+ 'mediawiki.action.edit.preview' module. The old 'mediawiki.legacy.preview' module
+  has been removed.
+
+== Compatibility ==
+
+MediaWiki 1.21 requires PHP 5.3.2. PHP 4 is no longer supported.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for IBM
+DB2 and Oracle.
+
+The supported versions are:
+
+* MySQL 5.0.2 or later
+* PostgreSQL 8.3 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+
+== Upgrading ==
+
+1.21 has several database changes since 1.20, and will not work without schema
+updates.
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, some major database
+changes are made, and there is a slightly higher chance that things could
+break. Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+For notes on 1.19.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
index 6d67428..c2574dd 100644 (file)
@@ -59,7 +59,7 @@ if( !defined( 'MEDIAWIKI' ) ) {
 $wgConf = new SiteConfiguration;
 
 /** MediaWiki version number */
-$wgVersion = '1.20alpha';
+$wgVersion = '1.21alpha';
 
 /** Name of the site. It must be changed in LocalSettings.php */
 $wgSitename = 'MediaWiki';
index 8e31a1c..97b03be 100644 (file)
@@ -188,6 +188,8 @@ class Linker {
         *       cons.
         *     'forcearticlepath': Use the article path always, even with a querystring.
         *       Has compatibility issues on some setups, so avoid wherever possible.
+        *     'http': Force a full URL with http:// as the scheme.
+        *     'https': Force a full URL with https:// as the scheme.
         * @return string HTML <a> attribute
         */
        public static function link(
@@ -294,7 +296,16 @@ class Linker {
                        $query['action'] = 'edit';
                        $query['redlink'] = '1';
                }
-               $ret = $target->getLinkURL( $query );
+
+               if ( in_array( 'http', $options ) ) {
+                       $proto = PROTO_HTTP;
+               } elseif ( in_array( 'https', $options ) ) {
+                       $proto = PROTO_HTTPS;
+               } else {
+                       $proto = PROTO_RELATIVE;
+               }
+
+               $ret = $target->getLinkURL( $query, false, $proto );
                wfProfileOut( __METHOD__ );
                return $ret;
        }
index b69069b..981637c 100644 (file)
@@ -2342,11 +2342,20 @@ $templates
         * @param $title Title to link
         * @param $query Array query string parameters
         * @param $text String text of the link (input is not escaped)
+        * @param $options Options array to pass to Linker
         */
-       public function addReturnTo( $title, $query = array(), $text = null ) {
-               $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL() ) );
+       public function addReturnTo( $title, $query = array(), $text = null, $options = array() ) {
+               if( in_array( 'http', $options ) ) {
+                       $proto = PROTO_HTTP;
+               } elseif( in_array( 'https', $options ) ) {
+                       $proto = PROTO_HTTPS;
+               } else {
+                       $proto = PROTO_RELATIVE;
+               }
+
+               $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL( '', false, $proto ) ) );
                $link = $this->msg( 'returnto' )->rawParams(
-                       Linker::link( $title, $text, array(), $query ) )->escaped();
+                       Linker::link( $title, $text, array(), $query, $options ) )->escaped();
                $this->addHTML( "<p id=\"mw-returnto\">{$link}</p>\n" );
        }
 
index 5c8ffa6..54cc5a9 100644 (file)
@@ -529,6 +529,8 @@ class SkinTemplate extends Skin {
         * @return array
         */
        protected function buildPersonalUrls() {
+               global $wgSecureLogin;
+
                $title = $this->getTitle();
                $request = $this->getRequest();
                $pageurl = $title->getLocalURL();
@@ -551,6 +553,11 @@ class SkinTemplate extends Skin {
                                $a['returntoquery'] = $query;
                        }
                }
+
+               if ( $wgSecureLogin && $request->detectProtocol() == 'https' ) {
+                       $a['wpStickHTTPS'] = true;
+               }
+
                $returnto = wfArrayToCGI( $a );
                if( $this->loggedin ) {
                        $personal_urls['userpage'] = array(
index 1b5e21d..1e16c75 100644 (file)
@@ -1396,13 +1396,14 @@ class Title {
         *
         * See getLocalURL for the arguments.
         *
+        * @param $proto Protocol to use; setting this will cause a full URL to be used
         * @see self::getLocalURL
         * @return String the URL
         */
-       public function getLinkURL( $query = '', $query2 = false ) {
+       public function getLinkURL( $query = '', $query2 = false, $proto = PROTO_RELATIVE ) {
                wfProfileIn( __METHOD__ );
-               if ( $this->isExternal() ) {
-                       $ret = $this->getFullURL( $query, $query2 );
+               if ( $this->isExternal() || $proto != PROTO_RELATIVE ) {
+                       $ret = $this->getFullURL( $query, $query2, $proto );
                } elseif ( $this->getPrefixedText() === '' && $this->getFragment() !== '' ) {
                        $ret = $this->getFragmentForURL();
                } else {
index 0a3db4c..8216914 100644 (file)
@@ -286,7 +286,10 @@ class User {
                                $this->loadFromId();
                                break;
                        case 'session':
-                               $this->loadFromSession();
+                               if( !$this->loadFromSession() ) {
+                                       // Loading from session failed. Load defaults.
+                                       $this->loadDefaults();
+                               }
                                wfRunHooks( 'UserLoadAfterLoadFromSession', array( $this ) );
                                break;
                        default:
@@ -933,8 +936,7 @@ class User {
        }
 
        /**
-        * Load user data from the session or login cookie. If there are no valid
-        * credentials, initialises the user as an anonymous user.
+        * Load user data from the session or login cookie.
         * @return Bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
@@ -962,7 +964,6 @@ class User {
                if ( $cookieId !== null ) {
                        $sId = intval( $cookieId );
                        if( $sessId !== null && $cookieId != $sessId ) {
-                               $this->loadDefaults(); // Possible collision!
                                wfDebugLog( 'loginSessions', "Session user ID ($sessId) and
                                        cookie user ID ($sId) don't match!" );
                                return false;
@@ -971,7 +972,6 @@ class User {
                } elseif ( $sessId !== null && $sessId != 0 ) {
                        $sId = $sessId;
                } else {
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -981,21 +981,18 @@ class User {
                        $sName = $request->getCookie( 'UserName' );
                        $request->setSessionData( 'wsUserName', $sName );
                } else {
-                       $this->loadDefaults();
                        return false;
                }
 
                $proposedUser = User::newFromId( $sId );
                if ( !$proposedUser->isLoggedIn() ) {
                        # Not a valid ID
-                       $this->loadDefaults();
                        return false;
                }
 
                global $wgBlockDisablesLogin;
                if( $wgBlockDisablesLogin && $proposedUser->isBlocked() ) {
                        # User blocked and we've disabled blocked user logins
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -1007,7 +1004,6 @@ class User {
                        $from = 'cookie';
                } else {
                        # No session or persistent login cookie
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -1019,7 +1015,6 @@ class User {
                } else {
                        # Invalid credentials
                        wfDebug( "User: can't log in from $from, invalid credentials\n" );
-                       $this->loadDefaults();
                        return false;
                }
        }
@@ -2798,9 +2793,13 @@ class User {
         * @param $value String Value to set
         * @param $exp Int Expiration time, as a UNIX time value;
         *                   if 0 or not specified, use the default $wgCookieExpiration
+        * @param $secure Bool
+        *  true: Force setting the secure attribute when setting the cookie
+        *  false: Force NOT setting the secure attribute when setting the cookie
+        *  null (default): Use the default ($wgCookieSecure) to set the secure attribute
         */
-       protected function setCookie( $name, $value, $exp = 0 ) {
-               $this->getRequest()->response()->setcookie( $name, $value, $exp );
+       protected function setCookie( $name, $value, $exp = 0, $secure = null ) {
+               $this->getRequest()->response()->setcookie( $name, $value, $exp, null, null, $secure );
        }
 
        /**
@@ -2816,8 +2815,9 @@ class User {
         *
         * @param $request WebRequest object to use; $wgRequest will be used if null
         *        is passed.
+        * @param $secure Whether to force secure/insecure cookies or use default
         */
-       public function setCookies( $request = null ) {
+       public function setCookies( $request = null, $secure = null ) {
                if ( $request === null ) {
                        $request = $this->getRequest();
                }
@@ -2856,9 +2856,18 @@ class User {
                        if ( $value === false ) {
                                $this->clearCookie( $name );
                        } else {
-                               $this->setCookie( $name, $value );
+                               $this->setCookie( $name, $value, 0, $secure );
                        }
                }
+
+               /**
+                * If wpStickHTTPS was selected, also set an insecure cookie that
+                * will cause the site to redirect the user to HTTPS, if they access
+                * it over HTTP. Bug 29898.
+                */
+               if ( $request->getCheck( 'wpStickHTTPS' ) ) {
+                       $this->setCookie( 'forceHTTPS', 'true', time() + 2592000, false ); //30 days
+               }
        }
 
        /**
@@ -2881,6 +2890,7 @@ class User {
 
                $this->clearCookie( 'UserID' );
                $this->clearCookie( 'Token' );
+               $this->clearCookie( 'forceHTTPS' );
 
                # Remember when user logged out, to prevent seeing cached pages
                $this->setCookie( 'LoggedOut', wfTimestampNow(), time() + 86400 );
index 193101b..9c613a9 100644 (file)
@@ -45,8 +45,12 @@ class WebResponse {
         * @param $expire Int: number of seconds til cookie expires
         * @param $prefix String: Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
         * @param @domain String: Cookie domain to use, if not $wgCookieDomain
+        * @param $forceSecure Bool:
+        *   true: force the cookie to be set with the secure attribute
+        *   false: force the cookie to be set without the secure attribute
+        *   null: use the value from $wgCookieSecure
         */
-       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null ) {
+       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain;
                global $wgCookieSecure,$wgCookieExpiration, $wgCookieHttpOnly;
                if ( $expire == 0 ) {
@@ -58,6 +62,13 @@ class WebResponse {
                if( $domain === null ) {
                        $domain = $wgCookieDomain;
                }
+
+               if ( is_null( $forceSecure ) ) {
+                       $secureCookie = $wgCookieSecure;
+               } else {
+                       $secureCookie = $forceSecure;
+               }
+
                $httpOnlySafe = wfHttpOnlySafe() && $wgCookieHttpOnly;
                wfDebugLog( 'cookie',
                        'setcookie: "' . implode( '", "',
@@ -67,14 +78,14 @@ class WebResponse {
                                        $expire,
                                        $wgCookiePath,
                                        $domain,
-                                       $wgCookieSecure,
+                                       $secureCookie,
                                        $httpOnlySafe ) ) . '"' );
                setcookie( $prefix . $name,
                        $value,
                        $expire,
                        $wgCookiePath,
                        $domain,
-                       $wgCookieSecure,
+                       $secureCookie,
                        $httpOnlySafe );
        }
 }
@@ -140,7 +151,7 @@ class FauxResponse extends WebResponse {
         * @param $domain TODO DOCUMENT (Default: null)
         *
         */
-       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null ) {
+       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                $this->cookies[$name] = $value;
        }
 
index 01c5eea..247f810 100644 (file)
@@ -156,4 +156,3 @@ wfProfileOut( 'WebStart.php-ob_start' );
 if ( !defined( 'MW_NO_SETUP' ) ) {
        require_once( MWInit::compiledPath( "includes/Setup.php" ) );
 }
-
index a4a8903..e1d84d4 100644 (file)
@@ -490,6 +490,23 @@ class MediaWiki {
 
                $request = $this->context->getRequest();
 
+               if ( $request->getCookie( 'forceHTTPS' )
+                       && $request->detectProtocol() == 'http'
+                       && $request->getMethod() == 'GET'
+               ) {
+                       $redirUrl = $request->getFullRequestURL();
+                       $redirUrl = str_replace( 'http://' , 'https://' , $redirUrl );
+
+                       // Setup dummy Title, otherwise OutputPage::redirect will fail
+                       $title = Title::newFromText( NS_MAIN, 'REDIR' );
+                       $this->context->setTitle( $title );
+                       $output = $this->context->getOutput();
+                       $output->redirect( $redirUrl );
+                       $output->output();
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
                // Send Ajax requests to the Ajax dispatcher.
                if ( $wgUseAjax && $request->getVal( 'action', 'view' ) == 'ajax' ) {
 
index d635645..195d4ec 100644 (file)
@@ -497,8 +497,8 @@ class LoadBalancer {
                        # Couldn't find a working server in getReaderIndex()?
                        if ( $i === false ) {
                                $this->mLastError = 'No working slave server: ' . $this->mLastError;
-                               $this->reportConnectionError( $this->mErrorConnection );
                                wfProfileOut( __METHOD__ );
+                               $this->reportConnectionError( $this->mErrorConnection );
                                return false;
                        }
                }
@@ -506,6 +506,7 @@ class LoadBalancer {
                # Now we have an explicit index into the servers array
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
+                       wfProfileOut( __METHOD__ );
                        $this->reportConnectionError( $this->mErrorConnection );
                }
 
@@ -730,8 +731,6 @@ class LoadBalancer {
         * @throws DBConnectionError
         */
        function reportConnectionError( &$conn ) {
-               wfProfileIn( __METHOD__ );
-
                if ( !is_object( $conn ) ) {
                        // No last connection, probably due to all servers being too busy
                        wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}\n" );
@@ -743,7 +742,6 @@ class LoadBalancer {
                        wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
                        $conn->reportConnectionError( "{$this->mLastError} ({$server})" );
                }
-               wfProfileOut( __METHOD__ );
        }
 
        /**
index f812ac2..f7d5a1e 100644 (file)
@@ -87,6 +87,8 @@ class Ibm_db2Updater extends DatabaseUpdater {
 
                        // 1.20
                        array( 'addTable', 'config',                            'patch-config.sql' ),
+
+                       // 1.21
                );
        }
 }
index bd55cb4..037af7b 100644 (file)
@@ -214,6 +214,9 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id-index.sql' ),
                        array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
+
+                       // 1.21
+                       array( 'dropField', 'site_stats',   'ss_admins',        'patch-drop-ss_admins.sql' ),
                );
        }
 
index a741f26..d81cf06 100644 (file)
@@ -71,6 +71,8 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
                        array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
 
+                       // 1.21
+
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
 
index bc5fcac..8813b85 100644 (file)
@@ -93,6 +93,9 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id-index.sql' ),
                        array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
+
+                       // 1.21
+                       array( 'dropField', 'site_stats',   'ss_admins',        'patch-drop-ss_admins.sql' ),
                );
        }
 
index ef6af80..039f569 100644 (file)
@@ -149,6 +149,23 @@ class LoginForm extends SpecialPage {
                $this->load();
                $this->setHeaders();
 
+               global $wgSecureLogin;
+               if (
+                       $this->mType != 'signup' &&
+                       $wgSecureLogin &&
+                       WebRequest::detectProtocol() !== 'https'
+               ) {
+                       $title = $this->getFullTitle();
+                       $query = array(
+                               'returnto' => $this->mReturnTo,
+                               'returntoquery' => $this->mReturnToQuery,
+                               'wpStickHTTPS' => $this->mStickHTTPS
+                       );
+                       $url = $title->getFullURL( $query, false, PROTO_HTTPS );
+                       $this->getOutput()->redirect( $url );
+                       return;
+               }
+
                if ( $par == 'signup' ) { # Check for [[Special:Userlogin/signup]]
                        $this->mType = 'signup';
                }
@@ -721,6 +738,7 @@ class LoginForm extends SpecialPage {
 
                switch ( $this->authenticateUserData() ) {
                        case self::SUCCESS:
+                               global $wgSecureLogin;
                                # We've verified now, update the real record
                                $user = $this->getUser();
                                if( (bool)$this->mRemember != (bool)$user->getOption( 'rememberpassword' ) ) {
@@ -729,7 +747,7 @@ class LoginForm extends SpecialPage {
                                } else {
                                        $user->invalidateCache();
                                }
-                               $user->setCookies();
+                               $user->setCookies( null, $wgSecureLogin && !$this->mStickHTTPS ? false : null );
                                self::clearLoginToken();
 
                                // Reset the throttle
@@ -962,14 +980,19 @@ class LoginForm extends SpecialPage {
                        $returnToTitle = Title::newMainPage();
                }
 
+               if( $wgSecureLogin && !$this->mStickHTTPS ) {
+                       $options = array( 'http' );
+                       $proto = PROTO_HTTP;
+               } else {
+                       $options = array( 'https' );
+                       $proto = PROTO_HTTPS;
+               }
+
                if ( $type == 'successredirect' ) {
-                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery );
-                       if( $wgSecureLogin && !$this->mStickHTTPS ) {
-                               $redirectUrl = preg_replace( '/^https:/', 'http:', $redirectUrl );
-                       }
+                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery, false, $proto );
                        $this->getOutput()->redirect( $redirectUrl );
                } else {
-                       $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery );
+                       $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery, $options );
                }
        }
 
index 927c3cd..7f430c5 100644 (file)
@@ -61,6 +61,8 @@ class UploadFromUrl extends UploadBase {
 
        /**
         * Checks whether the URL is for an allowed host
+        * The domains in the whitelist can include wildcard characters (*) in place
+        * of any of the domain levels, e.g. '*.flickr.com' or 'upload.*.gov.uk'.
         *
         * @param $url string
         * @return bool
@@ -76,10 +78,28 @@ class UploadFromUrl extends UploadBase {
                }
                $valid = false;
                foreach( $wgCopyUploadsDomains as $domain ) {
+                       // See if the domain for the upload matches this whitelisted domain
+                       $whitelistedDomainPieces = explode( '.', $domain );
+                       $uploadDomainPieces = explode( '.', $parsedUrl['host'] );
+                       if ( count( $whitelistedDomainPieces ) === count( $uploadDomainPieces ) ) {
+                               $valid = true;
+                               // See if all the pieces match or not (excluding wildcards)
+                               foreach ( $whitelistedDomainPieces as $index => $piece ) {
+                                       if ( $piece !== '*' && $piece !== $uploadDomainPieces[$index] ) {
+                                               $valid = false;
+                                       }
+                               }
+                               if ( $valid ) {
+                                       // We found a match, so quit comparing against the list
+                                       break;
+                               }
+                       }
+                       /* Non-wildcard test
                        if ( $parsedUrl['host'] === $domain ) {
                                $valid = true;
                                break;
                        }
+                       */
                }
                return $valid;
        }
index 40d1f36..e118e72 100644 (file)
@@ -48,7 +48,7 @@ class FakeConverter {
        /**
         * @var Language
         */
-       var $mLang;
+       public $mLang;
        function __construct( $langobj ) { $this->mLang = $langobj; }
        function autoConvertToAllVariants( $text ) { return array( $this->mLang->getCode() => $text ); }
        function convert( $t ) { return $t; }
@@ -77,21 +77,21 @@ class Language {
        /**
         * @var LanguageConverter
         */
-       var $mConverter;
+       public $mConverter;
 
-       var $mVariants, $mCode, $mLoaded = false;
-       var $mMagicExtensions = array(), $mMagicHookDone = false;
+       public $mVariants, $mCode, $mLoaded = false;
+       public $mMagicExtensions = array(), $mMagicHookDone = false;
        private $mHtmlCode = null;
 
-       var $dateFormatStrings = array();
-       var $mExtendedSpecialPageAliases;
+       public $dateFormatStrings = array();
+       public $mExtendedSpecialPageAliases;
 
        protected $namespaceNames, $mNamespaceIds, $namespaceAliases;
 
        /**
         * ReplacementArray object caches
         */
-       var $transformData = array();
+       public $transformData = array();
 
        /**
         * @var LocalisationCache
index 8b7d6cb..56b885f 100644 (file)
@@ -47,28 +47,28 @@ class LanguageConverter {
                'zh',
        );
 
-       var $mMainLanguageCode;
-       var $mVariants, $mVariantFallbacks, $mVariantNames;
-       var $mTablesLoaded = false;
-       var $mTables;
+       public $mMainLanguageCode;
+       public $mVariants, $mVariantFallbacks, $mVariantNames;
+       public $mTablesLoaded = false;
+       public $mTables;
        // 'bidirectional' 'unidirectional' 'disable' for each variant
-       var $mManualLevel;
+       public $mManualLevel;
 
        /**
         * @var String: memcached key name
         */
-       var $mCacheKey;
-
-       var $mLangObj;
-       var $mFlags;
-       var $mDescCodeSep = ':', $mDescVarSep = ';';
-       var $mUcfirst = false;
-       var $mConvRuleTitle = false;
-       var $mURLVariant;
-       var $mUserVariant;
-       var $mHeaderVariant;
-       var $mMaxDepth = 10;
-       var $mVarSeparatorPattern;
+       public $mCacheKey;
+
+       public $mLangObj;
+       public $mFlags;
+       public $mDescCodeSep = ':', $mDescVarSep = ';';
+       public $mUcfirst = false;
+       public $mConvRuleTitle = false;
+       public $mURLVariant;
+       public $mUserVariant;
+       public $mHeaderVariant;
+       public $mMaxDepth = 10;
+       public $mVarSeparatorPattern;
 
        const CACHE_VERSION_KEY = 'VERSION 6';
 
@@ -1113,17 +1113,17 @@ class LanguageConverter {
  * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
  */
 class ConverterRule {
-       var $mText; // original text in -{text}-
-       var $mConverter; // LanguageConverter object
-       var $mRuleDisplay = '';
-       var $mRuleTitle = false;
-       var $mRules = '';// string : the text of the rules
-       var $mRulesAction = 'none';
-       var $mFlags = array();
-       var $mVariantFlags = array();
-       var $mConvTable = array();
-       var $mBidtable = array();// array of the translation in each variant
-       var $mUnidtable = array();// array of the translation in each variant
+       public $mText; // original text in -{text}-
+       public $mConverter; // LanguageConverter object
+       public $mRuleDisplay = '';
+       public $mRuleTitle = false;
+       public $mRules = '';// string : the text of the rules
+       public $mRulesAction = 'none';
+       public $mFlags = array();
+       public $mVariantFlags = array();
+       public $mConvTable = array();
+       public $mBidtable = array();// array of the translation in each variant
+       public $mUnidtable = array();// array of the translation in each variant
 
        /**
         * Constructor
index 9bac5d7..7402b08 100644 (file)
@@ -38,7 +38,7 @@ require_once( __DIR__ . '/../LanguageConverter.php' );
 class IuConverter extends LanguageConverter {
 
        protected $mDoContentConvert;
-       var $mToLatin = array(
+       public $mToLatin = array(
                'ᐦ' => 'h',   'ᐃ' => 'i',    'ᐄ' => 'ii',    'ᐅ' => 'u',    'ᐆ' => 'uu',    'ᐊ' => 'a',    'ᐋ' => 'aa',
                'ᑉ' => 'p',   'ᐱ' => 'pi',   'ᐲ' => 'pii',   'ᐳ' => 'pu',   'ᐴ' => 'puu',   'ᐸ' => 'pa',   'ᐹ' => 'paa',
                'ᑦ' => 't',   'ᑎ' => 'ti',   'ᑏ' => 'tii',   'ᑐ' => 'tu',   'ᑑ' => 'tuu',   'ᑕ' => 'ta',   'ᑖ' => 'taa',
@@ -58,7 +58,7 @@ class IuConverter extends LanguageConverter {
                'ᖦ' => 'ɫ',   'ᖠ' => 'ɫi',    'ᖡ' => 'ɫii',   'ᖢ' => 'ɫu',    'ᖣ' => 'ɫuu',   'ᖤ' => 'ɫa',    'ᖥ' => 'ɫaa',
        );
 
-       var $mUpperToLowerCaseLatin = array(
+       public $mUpperToLowerCaseLatin = array(
                'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
                'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
                'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
@@ -67,7 +67,7 @@ class IuConverter extends LanguageConverter {
                'Z' => 'z',
        );
 
-       var $mToSyllabics = array(
+       public $mToSyllabics = array(
                'h' => 'ᐦ',   'i' => 'ᐃ',    'ii' => 'ᐄ',    'u' => 'ᐅ',    'uu' => 'ᐆ',    'a' => 'ᐊ',    'aa' => 'ᐋ',
                'p' => 'ᑉ',   'pi' => 'ᐱ',   'pii' => 'ᐲ',   'pu' => 'ᐳ',   'puu' => 'ᐴ',   'pa' => 'ᐸ',   'paa' => 'ᐹ',
                't' => 'ᑦ',   'ti' => 'ᑎ',   'tii' => 'ᑏ',   'tu' => 'ᑐ',   'tuu' => 'ᑑ',   'ta' => 'ᑕ',   'taa' => 'ᑖ',
index 02ec648..d60f083 100644 (file)
@@ -30,7 +30,7 @@ require_once( __DIR__ . '/LanguageKu_ku.php' );
  * @ingroup Language
  */
 class KuConverter extends LanguageConverter {
-       var $mArabicToLatin = array(
+       public $mArabicToLatin = array(
                'ب' => 'b', 'ج' => 'c', 'چ' => 'ç', 'د' => 'd', 'ف' => 'f', 'گ' => 'g', 'ھ' => 'h',
                'ہ' => 'h', 'ه' => 'h', 'ح' => 'h', 'ژ' => 'j', 'ك' => 'k', 'ک' => 'k', 'ل' => 'l',
                'م' => 'm', 'ن' => 'n', 'پ' => 'p', 'ق' => 'q', 'ر' => 'r', 'س' => 's', 'ش' => 'ş',
@@ -72,7 +72,7 @@ class KuConverter extends LanguageConverter {
                '٩' => '9', # &#x0669;
        );
 
-       var $mLatinToArabic = array(
+       public $mLatinToArabic = array(
                'b' => 'ب', 'c' => 'ج', 'ç' => 'چ', 'd' => 'د', 'f' => 'ف', 'g' => 'گ',
                'h' => 'ه', 'j' => 'ژ', 'k' => 'ک', 'l' => 'ل',
                'm' => 'م', 'n' => 'ن', 'p' => 'پ', 'q' => 'ق', 'r' => 'ر', 's' => 'س', 'ş' => 'ش',
index 27c5d64..36f3407 100644 (file)
@@ -39,7 +39,7 @@ class ShiConverter extends LanguageConverter {
 
        protected $mDoContentConvert;
 
-       var $mToLatin = array(
+       public $mToLatin = array(
                'ⴰ' => 'a', 'ⴱ' => 'b', 'ⴳ' => 'g', 'ⴷ' => 'd', 'ⴹ' => 'ḍ', 'ⴻ' => 'e',
                'ⴼ' => 'f', 'ⴽ' => 'k', 'ⵀ' => 'h', 'ⵃ' => 'ḥ', 'ⵄ' => 'ε', 'ⵅ' => 'x',
                'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j',  'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
@@ -48,7 +48,7 @@ class ShiConverter extends LanguageConverter {
                'ⵥ' => 'ẓ', 'ⵯ' => 'ʷ', 'ⵖ' => 'ɣ', 'ⵠ' => 'v', 'ⵒ' => 'p',
        );
 
-       var $mUpperToLowerCaseLatin = array(
+       public $mUpperToLowerCaseLatin = array(
                'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
                'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
                'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
@@ -57,7 +57,7 @@ class ShiConverter extends LanguageConverter {
                'Z' => 'z', 'Ɣ' => 'ɣ',
        );
 
-       var $mToTifinagh = array(
+       public $mToTifinagh = array(
                'a' => 'ⴰ', 'b' => 'ⴱ', 'g' => 'ⴳ', 'd' => 'ⴷ', 'ḍ' => 'ⴹ', 'e' => 'ⴻ',
                'f' => 'ⴼ', 'k' => 'ⴽ', 'h' => 'ⵀ', 'ḥ' => 'ⵃ', 'ε' => 'ⵄ', 'x' => 'ⵅ',
                'q' => 'ⵇ', 'i' => 'ⵉ', 'j' => 'ⵊ',  'l' => 'ⵍ', 'm' => 'ⵎ', 'n' => 'ⵏ',
index 4b799f2..5f1110d 100644 (file)
@@ -35,7 +35,7 @@ require_once( __DIR__ . '/LanguageSr_el.php' );
  * @ingroup Language
  */
 class SrConverter extends LanguageConverter {
-       var $mToLatin = array(
+       public $mToLatin = array(
                'а' => 'a', 'б' => 'b',  'в' => 'v', 'г' => 'g',  'д' => 'd',
                'ђ' => 'đ', 'е' => 'e',  'ж' => 'ž', 'з' => 'z',  'и' => 'i',
                'ј' => 'j', 'к' => 'k',  'л' => 'l', 'љ' => 'lj', 'м' => 'm',
@@ -51,7 +51,7 @@ class SrConverter extends LanguageConverter {
                'Х' => 'H', 'Ц' => 'C',  'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
        );
 
-       var $mToCyrillics = array(
+       public $mToCyrillics = array(
                'a' => 'а', 'b'  => 'б', 'c' => 'ц', 'č' => 'ч', 'ć'  => 'ћ',
                'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f'  => 'ф',
                'g' => 'г', 'h'  => 'х', 'i' => 'и', 'j' => 'ј', 'k'  => 'к',
index bd69e30..d6ddf10 100644 (file)
@@ -27,7 +27,7 @@ require_once( __DIR__ . '/../LanguageConverter.php' );
  * @ingroup Language
  */
 class UzConverter extends LanguageConverter {
-       var $toLatin = array(
+       public $toLatin = array(
                'а' => 'a', 'А' => 'A',
                'б' => 'b', 'Б' => 'B',
                'д' => 'd', 'Д' => 'D',
@@ -65,7 +65,7 @@ class UzConverter extends LanguageConverter {
                'ъ' => 'ʼ',
        );
 
-       var $toCyrillic = array(
+       public $toCyrillic = array(
                'a' => 'а', 'A' => 'А',
                'b' => 'б', 'B' => 'Б',
                'd' => 'д', 'D' => 'Д',
index 22468f8..6f6f598 100644 (file)
@@ -197,7 +197,7 @@ $messages = array(
 'vector-action-unprotect' => 'አለመቆለፍ',
 'vector-view-create' => 'አዲስ ፍጠር',
 'vector-view-edit' => 'አርም',
-'vector-view-history' => ' ታሪኩን አሳይ',
+'vector-view-history' => 'ታሪኩን አሳይ',
 'vector-view-view' => 'ለማንበብ',
 'vector-view-viewsource' => 'ጥሬ ኮድ ለመመልከት',
 
@@ -946,6 +946,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'recentchanges-legend' => 'የቅርብ ለውጥ አማራጮች፦',
 'recentchanges-summary' => 'በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።',
 'recentchanges-feed-description' => 'በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ',
+'recentchanges-label-minor' => 'ይህ ለውጥ ጥቃቅን ነው።',
 'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
 'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
 'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
index f106772..300f137 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Filipinayzd
  * @author Geopoet
+ * @author Hoo
  * @author Kaganer
  * @author Steven*fung
  * @author Urhixidur
@@ -3373,7 +3374,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'version-version' => '(Bersyon na $1)',
 'version-license' => 'Lisensiya',
 'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS mga iba pa]',
+'version-poweredby-others' => 'mga iba pa',
 'version-license-info' => 'An MediaWiki sarong libreng kasungatan; puwede mong ipanao ini asin/o baguhon ini sa irarom kan termino nin HNU (Heneral na Pampublikong Lisensiya) bilang publisado kan Free Software Foundation; maski sa arin na bersyon 2 kan lisensiya, o (saimong pansadireng pagpipilian) arinman na huring bersyon.
 
 An MediaWiki ipinagpanao sa paglaom na ini magigin kapakinabangan, pero MAYO NIN ANUMAN NA WARANTIYA; mayo dawa ngani nin pinaghuhurot na warantiya kan MERKANTIBILIDAD o KAUYUGAN PARA SA SARONG PARTIKULAR NA KATUYUHAN. Hilngon an HNU (Heneral na Pampublikong Lisensiya) para sa kadagdagang mga detalye.
index b0641c0..ce86ec4 100644 (file)
@@ -673,15 +673,15 @@ $1',
 'disclaimers' => 'تکذیب‌نامه‌ها',
 'disclaimerpage' => 'Project:تکذیب‌نامهٔ عمومی',
 'edithelp' => 'راهنمای ویرایش‌کردن',
-'edithelppage' => 'Help:چگونه صفحه‌ها را ویرایش کنیم',
+'edithelppage' => 'Help:ویرایش',
 'helppage' => 'Help:محتویات',
 'mainpage' => 'صفحهٔ اصلی',
 'mainpage-description' => 'صفحهٔ اصلی',
 'policy-url' => 'Project:سیاست‌ها',
 'portal' => 'ورودی کاربران',
 'portal-url' => 'Project:ورودی کاربران',
-'privacy' => 'سیاست حفظ اسرار',
-'privacypage' => 'Project:سیاست حفظ اسرار',
+'privacy' => 'سیاست محرمانگی',
+'privacypage' => 'Project:سیاست محرمانگی',
 
 'badaccess' => 'خطای دسترسی',
 'badaccess-group0' => 'شما اجازهٔ اجرای عملی را که درخواست کرده‌اید ندارید.',
@@ -697,9 +697,9 @@ $1',
 'youhavenewmessages' => '$1 دارید ($2).',
 'newmessageslink' => 'پیام‌های جدید',
 'newmessagesdifflink' => 'آخرین تغییر',
-'youhavenewmessagesfromusers' => 'شما  $1  از  {{PLURAL:$3| کاربر دیگر| $3  کاربر}} دارید ( $2 ).',
-'youhavenewmessagesmanyusers' => 'شما  $1  از تعدادی کاربر دارید ( $2 ).',
-'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید |پیام جدید}}',
+'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3| کاربر دیگر| $3  کاربر}} $1 دارید ($2).',
+'youhavenewmessagesmanyusers' => 'شما از تعدادی کاربر $1 دارید ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید|پیام جدید}}',
 'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییرات}} اخیر',
 'youhavenewmessagesmulti' => 'پیام‌های جدیدی در $1 دارید.',
 'editsection' => 'ویرایش',
@@ -818,10 +818,11 @@ $1',
 'protectedpagetext' => 'این صفحه برای جلوگیری از ویرایش محافظت شده‌است.',
 'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:',
 'viewyourtext' => "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
-'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.',
-'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
+'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.
+برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.',
+'editinginterface' => "'''هشدار:''' صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
 تغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.
-براÛ\8c ØªØ±Ø¬Ù\85Ù\87 Ù\84Ø·Ù\81اÙ\8b Ø§Ø² [//translatewiki.net/ translatewiki.net] (پرÙ\88Ú\98Ù\87Ù\94 ØªØ±Ø¬Ù\85Ù\87Ù\94 Ù\85دÛ\8cاÙ\88Û\8cÚ©Û\8c) استفاده کنید.",
+براÛ\8c Ø§Ù\81زÙ\88دÙ\86 Û\8cا ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\86 ØªØ±Ø¬Ù\85Ù\87 Ø¨Ø±Ø§Û\8c Ù\87Ù\85Ù\87Ù\94 Ù\88Û\8cÚ©Û\8câ\80\8cÙ\87اØ\8c Ù\84Ø·Ù\81اÙ\8b Ø§Ø² [//translatewiki.net/ translatewiki.net]Ø\8c Ù¾Ø±Ù\88Ú\98Ù\87Ù\94 Ù\85Ø­Ù\84Û\8câ\80\8cسازÛ\8c Ù\85دÛ\8cاÙ\88Û\8cÚ©Û\8cØ\8c استفاده کنید.",
 'sqlhidden' => '(دستور اس‌کیوال پنهان شده)',
 'cascadeprotected' => 'این صفحه در مقابل ویرایش محافظت شده‌است چون در {{PLURAL:$1|صفحهٔ|صفحه‌های}} محافظت‌شدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آن‌ها}} انتخاب شده قرار گرفته‌است:
 $2',
@@ -854,7 +855,7 @@ $2',
 فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] را برای خود تغییر دهید.',
 'yourname' => 'نام کاربری:',
 'yourpassword' => 'گذرواژه:',
-'yourpasswordagain' => 'گذرواژه را دوباره وارد کنید',
+'yourpasswordagain' => 'تکرار گذرواژه:',
 'remembermypassword' => 'گذرواژه را (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) در این رایانه به خاطر بسپار',
 'securelogin-stick-https' => 'پس از ورود به سامانه به HTTPS متصل بمان',
 'yourdomainname' => 'دامنهٔ شما:',
@@ -871,8 +872,8 @@ $2',
 'nologin' => 'حساب کاربری ندارید؟ $1.',
 'nologinlink' => 'یک حساب کاربری جدید بسازید',
 'createaccount' => 'ایجاد حساب کاربری',
-'gotaccount' => "حساب کاربری دارید؟ '''$1'''.",
-'gotaccountlink' => 'وارد شوید',
+'gotaccount' => 'حساب کاربری دارید؟ $1.',
+'gotaccountlink' => 'به سامانه وارد شوید',
 'userlogin-resetlink' => 'جزئیات ورود را فراموش کرده‌اید؟',
 'createaccountmail' => 'با رایانامه',
 'createaccountreason' => 'دلیل:',
@@ -904,7 +905,7 @@ $2',
 لطفاً دوباره امتحان کنید.',
 'wrongpasswordempty' => 'گذرواژه‌ای که وارد کرده‌اید، خالی است.
 لطفاً دوباره تلاش کنید.',
-'passwordtooshort' => 'گذرواژه باید دست‌کم {{PLURAL:$1|$1 حرف|$1 حرف}} داشته باشد.',
+'passwordtooshort' => 'گذرواژه باید دست‌کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته باشد.',
 'password-name-match' => 'گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.',
 'password-login-forbidden' => 'استفاده از این نام کاربری و گذرواژه ممنوع است.',
 'mailmypassword' => 'گذرواژهٔ جدید با رایانامه فرستاده شود',
@@ -923,7 +924,7 @@ $2',
 'eauthentsent' => 'یک نامه برای تأیید نشانی رایانامه به نشانی موردنظر ارسال شد.
 قبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهایی که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.',
 'throttled-mailpassword' => 'یک یادآور گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته برای شما فرستاده شده‌است.
-برای جلوگیری از سوءاستفاده هر  $1 ساعت تنها یک یادآوری فرستاده می‌شود.',
+برای جلوگیری از سوءاستفاده هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک یادآوری فرستاده می‌شود.',
 'mailerror' => 'خطا در فرستادن رایانامه: $1',
 'acct_creation_throttle_hit' => 'بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.
 به همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.',
@@ -1006,8 +1007,8 @@ $2
 'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'تغییر آدرس پست رایانامه',
-'changeemail-header' => 'تغییر آدرس ایمیل حساب کاربری',
+'changeemail' => 'تغییر نشانی رایانامه',
+'changeemail-header' => 'تغییر نشانی رایانامهٔ حساب کاربری',
 'changeemail-text' => 'این فرم را تکمیل کنید تا آدرس رایانامه‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.',
 'changeemail-no-info' => 'برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.',
 'changeemail-oldemail' => 'نشانی رایانامهٔ کنونی:',
@@ -1249,7 +1250,7 @@ $2
 'expansion-depth-exceeded-warning' => 'صفحه حداکثر عمق بسط دادن تجاوز کرد',
 'parser-unstrip-loop-warning' => 'حلقه در دستور unstrip پیدا شد',
 'parser-unstrip-recursion-limit' => 'از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)',
-'converter-manual-rule-error' => 'خطا در ساختار کتابچهٔ مبدل زبان',
+'converter-manual-rule-error' => 'خطا در قوانین مبدل دستی زبان',
 
 # "Undo" feature
 'undo-success' => 'این ویرایش را می‌توان خنثی کرد.
@@ -1270,7 +1271,7 @@ $2
 'currentrev' => 'نسخهٔ فعلی',
 'currentrev-asof' => 'نسخهٔ کنونی تا $1',
 'revisionasof' => 'نسخهٔ $1',
-'revision-info' => 'Ù\88Û\8cراÛ\8cØ´ Ø¯Ø± تاریخ $1 توسط $2',
+'revision-info' => 'Ù\86سخÙ\87Ù\94 تاریخ $1 توسط $2',
 'previousrevision' => '→ نسخهٔ قدیمی‌تر',
 'nextrevision' => 'نسخهٔ جدیدتر ←',
 'currentrevisionlink' => 'نمایش نسخهٔ فعلی',
@@ -1279,8 +1280,8 @@ $2
 'last' => 'قبلی',
 'page_first' => 'نخست',
 'page_last' => 'واپسین',
-'histlegend' => 'شرح: (فعلی) = تفاوت با نسخهٔ فعلی،
-(قبلی) = تفاوت با نسخهٔ قبلی، جز = ویرایش جزئی',
+'histlegend' => "انتخاب تفاوت: دکمه‌های گرد کنار ویرایش‌هایی که می‌خواهید با هم مقایسه کنید را علامت بزنید و دکمهٔ Enter را بزنید یا دکمهٔ پایین را فشار دهید.<br />
+اختصارات: '''({{int:cur}})''' = تفاوت با نسخهٔ فعلی، '''({{int:last}})''' = تفاوت با نسخهٔ قبلی، '''({{int:minoreditletter}})''' = ویرایش جزئی.",
 'history-fieldset-title' => 'مرور تاریخچه',
 'history-show-deleted' => 'فقط حذف‌شده',
 'histfirst' => 'قدیمی‌ترین',
@@ -1290,7 +1291,7 @@ $2
 
 # Revision feed
 'history-feed-title' => 'تاریخچهٔ ویرایش‌ها',
-'history-feed-description' => 'تاریخچهٔ ویرایشهای صفحه در ویکی',
+'history-feed-description' => 'تاریخچهٔ ویرایش‌های این صفحه در ویکی',
 'history-feed-item-nocomment' => '$1 در $2',
 'history-feed-empty' => 'صفحهٔ درخواست شده وجود ندارد.
 ممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.
@@ -1299,20 +1300,20 @@ $2
 # Revision deletion
 'rev-deleted-comment' => '(خلاصه ویرایش حذف شد)',
 'rev-deleted-user' => '(نام کاربری حذف شد)',
-'rev-deleted-event' => '(مورد پاک شد)',
+'rev-deleted-event' => '(مورد از سیاهه پاک شده)',
 'rev-deleted-user-contribs' => '[نام کاربری یا نشانی آی‌پی حذف شده - ویرایش مخفی شده در مشارکت‌ها]',
 'rev-deleted-text-permission' => "این ویرایش از این صفحه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-deleted-text-unhide' => "این ویرایش از این صفحه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
 'rev-suppressed-text-unhide' => "این ویرایش از این صفحه '''فرونشانده شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
 'rev-deleted-text-view' => "این ویرایش از این صفحه '''حذف شده‌است'''.
-شما به عنوان یک مدیر می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
+شما می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-text-view' => "این ویرایش از این صفحه '''فرونشانی شده‌است'''.
-شما به عنوان یک مدیر می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
+شما می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
 'rev-deleted-no-diff' => "شما نمی‌توانید این تفاوت را مشاهده کنید زیرا یکی از دو نسخه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-no-diff' => "شما نمی‌توانید این تفاوت را مشاهده کنید زیرا یکی از نسخه‌ها '''حذف شده‌است'''.",
@@ -1321,11 +1322,11 @@ $2
 شما کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
 'rev-suppressed-unhide-diff' => "یکی از نسخه‌های این تفاوت '''فرونشانی شده‌است'''.
 ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page=سیاههٔ فرونشانی{{FULLPAGENAMEE}}}}] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
 'rev-deleted-diff-view' => "یکی از نسخه‌های این تفاوت '''حذف شده‌است'''.
-شما به عنوان یک مدیر کماکان می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
+شما می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-diff-view' => "یکی از نسخه‌های این تفاوت '''فرونشانی شده‌است'''.
-شما به عنوان یک مدیر کماکان می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
+شما می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
 'rev-delundel' => 'نمایش/نهفتن',
 'rev-showdeleted' => 'نمایش',
 'revisiondelete' => 'حذف/احیای نسخه‌ها',
@@ -1333,7 +1334,7 @@ $2
 'revdelete-nooldid-text' => 'شما نسخه‌های هدف را برای انجام این عمل مشخص نکرده‌اید یا این نسخه‌ها وجود ندارند، یا این که شما می‌خواهید آخرین نسخه را پنهان کنید.',
 'revdelete-nologtype-title' => 'نوع سیاهه مشخص نشده‌است',
 'revdelete-nologtype-text' => 'شما هیچ نوع سیاهه‌ای را برای این کار مشخص نکردید.',
-'revdelete-nologid-title' => 'مدخل غیرمجاز در سیاهه',
+'revdelete-nologid-title' => 'مورد غیرمجاز در سیاهه',
 'revdelete-nologid-text' => 'شما یا رویدادی را در سیاههٔ هدف مشخص نکردید یا موردی را مشخص کردید که وجود ندارد.',
 'revdelete-no-file' => 'پروندهٔ مشخص شده وجود ندارد.',
 'revdelete-show-file-confirm' => 'آیا مطمئن هستید که می‌خواهید یک نسخهٔ حذف شده از پروندهٔ «<nowiki>$1</nowiki>» مورخ $2 ساعت $3 را ببینید؟',
index d8882df..e83a84e 100644 (file)
@@ -10,6 +10,7 @@
  * @author Agbad
  * @author Amire80
  * @author Drorsnir
+ * @author Hoo
  * @author Ijon
  * @author Ofekalef
  * @author Ofrahod
@@ -3949,7 +3950,7 @@ $5
 'version-version' => '(גרסה $1)',
 'version-license' => 'רישיון',
 'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[//www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS אחרים]',
+'version-poweredby-others' => 'אחרים',
 'version-license-info' => "מדיה־ויקי היא תוכנה חופשית; באפשרותכם להפיץ אותה מחדש ו/או לשנות אותה לפי תנאי הרישיון הציבורי הכללי של גנו המפורסם על ידי המוסד לתוכנה חופשית: גרסה 2 של רישיון זה, או (לפי בחירתכם) כל גרסה מאוחרת יותר.
 
 מדיה־ויקי מופצת בתקווה שהיא תהיה שימושית, אך '''ללא כל הבטחה לאחריות'''; אפילו לא אחריות משתמעת של '''יכולת להיסחר''' או '''התאמה למטרה מסוימת'''. ראו את הרישיון הציבורי הכללי של גנו לפרטים נוספים.
index 3d8d8f7..d8ceb6f 100644 (file)
@@ -2193,7 +2193,7 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'enotif_anon_editor' => 'ónefndur notandi $1',
 'enotif_body' => 'Kæri $WATCHINGUSERNAME,
 
-Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} $PAGETITLE.
+Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} síðunni $PAGETITLE.
 Hún hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
 $PAGEEDITOR. Breytingarágripið var:
 
@@ -2205,7 +2205,7 @@ $PAGEEDITOR. Breytingarágripið var:
 
 $NEWPAGE
 
-Til þess að hafa samband við $PAGEEDITOR, heimsóttu:
+Til þess að hafa samband við $PAGEEDITOR, smelltu á:
 
    $PAGEEDITOR_WIKI
 
@@ -2217,12 +2217,12 @@ Kveðja,
 
 --
 
-Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, heimsóttu:
+Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smelltu á:
 
 {{canonicalurl:{{#special:Preferences}}}}
 
 
-Til þess að hætta að fylgjast með $PAGETITLE, heimsóttu:
+Til þess að hætta að fylgjast með $PAGETITLE, smelltu á:
 
 $UNWATCHURL',
 
index b4a6c57..7c04397 100644 (file)
@@ -579,11 +579,11 @@ $messages = array(
 'viewtalkpage' => '議論を表示',
 'otherlanguages' => '他言語版',
 'redirectedfrom' => '($1から転送)',
-'redirectpagesub' => 'リダイレクトページ',
+'redirectpagesub' => '転送ページ',
 'lastmodifiedat' => 'このページが最後に更新されたのは $1 $2 です。',
 'viewcount' => 'このページは {{PLURAL:$1|$1 回}}アクセスされました。',
 'protectedpage' => '保護されたページ',
-'jumpto' => '移動',
+'jumpto' => '移動:',
 'jumptonavigation' => '案内',
 'jumptosearch' => '検索',
 'view-pool-error' => '申し訳ありませんが、現在サーバーに過大な負荷がかかっています。
@@ -654,6 +654,8 @@ $1',
 'site-atom-feed' => '$1のAtomフィード',
 'page-rss-feed' => '「$1」のRSSフィード',
 'page-atom-feed' => '「$1」のAtomフィード',
+'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1(存在しないページ)',
 'sort-descending' => '降順に並べ替え',
 'sort-ascending' => '昇順に並べ替え',
@@ -1224,7 +1226,7 @@ $3が示した理由:''$2''",
 'histfirst' => '最古',
 'histlast' => '最新',
 'historysize' => '({{PLURAL:$1|$1バイト}})',
-'historyempty' => '(空)',
+'historyempty' => '(空)',
 
 # Revision feed
 'history-feed-title' => '変更履歴',
@@ -1278,9 +1280,9 @@ $3が示した理由:''$2''",
 'revdelete-show-file-submit' => 'はい',
 'revdelete-selected' => "'''[[:$1]] の{{PLURAL:$2|選択された版}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|選択された記録の項目}}:'''",
-'revdelete-text' => "'''削除された版や記録はページの履歴や記録に表示され続けますが、一般の利用者はその内容にアクセスできなくなります。'''
-追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\82\82ã\81\93ã\82\8cã\81¨å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\82\92使ç\94¨ã\81\97ã\81¦é\9a ã\81\95ã\82\8cã\81\9få\86\85容ã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\97ã\81\9fã\82\8aã\80\81復å\85\83ã\81\97ã\81\9fã\82\8aできます。",
-'revdelete-confirm' => 'この操作を意図して行っていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に沿って行っていることを確認してください。',
+'revdelete-text' => "'''削除された版や記録は引き続きページの履歴や記録に表示されますが、一般利用者はその内容の一部を取得できなくなります。'''
+追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\81¯å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\82\92使ã\81£ã\81¦é\9d\9e表示ã\81®å\86\85容ã\81®å\8f\96å¾\97ã\82\84復å\85\83ã\81\8cできます。",
+'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
 'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損の恐れのある記述
 * 非公開個人情報
@@ -1399,7 +1401,7 @@ $1",
 'prevn-title' => '前の{{PLURAL:$1|$1結果}}',
 'nextn-title' => '次の{{PLURAL:$1|$1結果}}',
 'shown-title' => 'ページあたり{{PLURAL:$1|$1件の結果}}を表示',
-'viewprevnext' => '($1{{int:pipe-separator}}$2)($3)を表示',
+'viewprevnext' => '($1{{int:pipe-separator}}$2) ($3 件) を表示',
 'searchmenu-legend' => '検索オプション',
 'searchmenu-exists' => "'''このウィキには「[[:$1]]」という名前のページがあります'''",
 'searchmenu-new' => "'''このウィキでページ「[[:$1]]」を新規作成する'''",
@@ -1540,7 +1542,9 @@ $1",
 'username' => '利用者名:',
 'uid' => '利用者 ID:',
 'prefs-memberingroups' => '所属{{PLURAL:$1|グループ}}:',
+'prefs-memberingroups-type' => '$1',
 'prefs-registration' => '登録日時:',
+'prefs-registration-date-time' => '$1',
 'yourrealname' => '本名:',
 'yourlanguage' => '使用言語:',
 'yourvariant' => 'コンテンツ言語変種:',
@@ -1604,6 +1608,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'userrights-notallowed' => 'あなたのアカウントには利用者権限を追加または除去する権限がありません。',
 'userrights-changeable-col' => '変更できるグループ',
 'userrights-unchangeable-col' => '変更できないグループ',
+'userrights-irreversible-marker' => '$1*',
 
 # Groups
 'group' => 'グループ:',
@@ -1766,6 +1771,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|$1 人の利用者}}がウォッチしています]',
 'rc_categories' => 'カテゴリを限定(「|」で区切る)',
 'rc_categories_any' => 'すべて',
+'rc-change-size' => '$1',
 'rc-change-size-new' => '変更後は $1 {{PLURAL:$1|バイト}}',
 'newsectionsummary' => '/* $1 */ 新しい節',
 'rc-enhanced-expand' => '詳細を表示(JavaScript が必要)',
@@ -2189,9 +2195,9 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 [[MediaWiki:Disambiguationspage]] にリンクがあるテンプレートを使用しているページを、曖昧さ回避ページと見なします。",
 
 'doubleredirects' => '二重転送',
-'doubleredirectstext' => 'ã\81\93ã\82\8cã\81¯ä»\96ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ä¸\80覧ã\81§す。
-各行には、最初のリダイレクト、その転送先のリダイレクト、さらにその転送先、それぞれへのリンクが表示されています。多くの場合、最終の転送先が正しい転送先であり、最初のリダイレクトは直接最後の転送先に向けるべきです。
-<del>打ち消し線</del>が入った項目は既に解決しています。',
+'doubleredirectstext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81§ã\81¯ã\80\81転é\80\81ã\83\9aã\83¼ã\82¸ã\81¸ã\81®è»¢é\80\81ã\83\9aã\83¼ã\82¸ã\82\92å\88\97æ\8c\99ã\81\97ã\81¾す。
+最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。
+<del>取り消し線</del>が入った項目は解決済みです。',
 'double-redirect-fixed-move' => '[[$1]]を移動しました。
 今後は[[$2]]に転送されます。',
 'double-redirect-fixed-maintenance' => '[[$1]]から[[$2]]への二重転送を修正します。',
@@ -2303,8 +2309,8 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'alphaindexline' => '$1から$2まで',
 'nextpage' => '次のページ ($1)',
 'prevpage' => '前のページ ($1)',
-'allpagesfrom' => '最初に表示するページ',
-'allpagesto' => '最後に表示するページ',
+'allpagesfrom' => '最初に表示するページ:',
+'allpagesto' => '最後に表示するページ:',
 'allarticles' => '全ページ',
 'allinnamespace' => '全ページ ($1名前空間)',
 'allnotinnamespace' => '全ページ ($1名前空間以外)',
@@ -3252,6 +3258,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'pageinfo-views' => '閲覧回数',
 'pageinfo-watchers' => 'ページをウォッチリストに入れている人数',
 'pageinfo-redirects-name' => 'このページへのリダイレクト',
+'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'このページの下位ページ数',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|リダイレクト}}、$3 {{PLURAL:$3|非リダイレクト}})',
 'pageinfo-firstuser' => 'ページ作成者',
@@ -3933,9 +3940,9 @@ $5
 'confirm-unwatch-top' => 'このページをウォッチリストから除去しますか?',
 
 # Separators for various lists, etc.
-'semicolon-separator' => '',
+'semicolon-separator' => ';&#32;',
 'comma-separator' => '、',
-'colon-separator' => '',
+'colon-separator' => ':&#32;',
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '&#32;',
 'parentheses' => '($1)',
index 62ae858..245e315 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Anggoro
  * @author Helix84
+ * @author Hoo
  * @author Kaganer
  * @author Meursault2004
  * @author NoiX180
@@ -3340,7 +3341,7 @@ Panjenengan uga bisa [[Special:EditWatchlist|nganggo éditor standar panjenengan
 'version-version' => '(Vèrsi $1)',
 'version-license' => 'Lisènsi',
 'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/KRÈDIT liyané]',
+'version-poweredby-others' => 'liyané',
 'version-software' => "''Software'' wis diinstalasi",
 'version-software-product' => 'Prodhuk',
 'version-software-version' => 'Vèrsi',
index 2306640..4194055 100644 (file)
@@ -18,6 +18,7 @@
  * @author Gapo
  * @author Gjue
  * @author Ha98574
+ * @author Hoo
  * @author IRTC1015
  * @author ITurtle
  * @author Idh0854
@@ -653,7 +654,7 @@ $1',
 # Main script and global functions
 'nosuchaction' => '해당하는 동작이 없습니다.',
 'nosuchactiontext' => 'URL로 요청한 동작이 잘못되었습니다.
-당신은 URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
+URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
 이것은 {{SITENAME}}의 버그일 수도 있습니다.',
 'nosuchspecialpage' => '해당하는 특수 문서가 없습니다.',
 'nospecialpagetext' => '<strong>요청한 특수 문서가 존재하지 않습니다.</strong>
@@ -723,7 +724,7 @@ $1',
 제한을 넘었으니 몇 분 뒤에 새로 시도하세요.',
 'protectedpagetext' => '이 문서는 편집할 수 없도록 보호되어 있습니다.',
 'viewsourcetext' => '문서의 원본을 보거나 복사할 수 있습니다:',
-'viewyourtext' => "당신은 이 문서에 남긴 '''당신의 편집''' 내용을 보거나 복사할 수 있습니다:",
+'viewyourtext' => "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
 'protectedinterface' => '이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
 모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.',
 'editinginterface' => "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.
@@ -733,8 +734,8 @@ $1',
 'cascadeprotected' => '이 문서는 연쇄 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
 $2',
 'namespaceprotected' => "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
-'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 CSS 문서를 편집할 수 없습니다.',
-'customjsprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 자바스크립트 문서를 편집할 수 없습니다.',
+'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.',
+'customjsprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 자바스크립트 문서를 편집할 수 없습니다.',
 'ns-specialprotected' => '특수 문서는 편집할 수 없습니다.',
 'titleprotected' => '[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.
 이유는 다음과 같습니다. "$2"',
@@ -793,10 +794,10 @@ $2',
 지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.
 로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.',
 'nocookieslogin' => '{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.
-당신의 웹 브라우저에서 쿠키가 비활성되어 있습니다.
-ì¿ í\82¤ ì\82¬ì\9a©ì\9d\84 í\99\9cì\84±í\99\94í\95\9c ë\8b¤ì\9d\8c ë¡\9cê·¸ì\9d¸í\95´ ì£¼세요.',
+쿠키가 비활성되어 있습니다.
+ì¿ í\82¤ ì\82¬ì\9a©ì\9d\84 í\99\9cì\84±í\99\94í\95\9c ë\8b¤ì\9d\8c ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'nocookiesfornew' => '요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.
-쿠키를 허용한 것을 확인한 후에 다시 시도해 보십시오.',
+쿠키를 허용한 것을 확인한 후에 이 문서를 새로 고치고 나서 다시 시도하세요.',
 'noname' => '사용자 이름이 올바르지 않습니다.',
 'loginsuccesstitle' => '로그인 성공',
 'loginsuccess' => "'''{{SITENAME}}에 \"\$1\" 계정으로 로그인했습니다.'''",
@@ -1821,8 +1822,8 @@ $2 형식만 사용할 수 있습니다.',
 'fileexists' => '같은 이름의 파일이 이미 있습니다. 파일을 바꾸고 싶지 않다면 <strong>[[:$1]]</strong> 파일을 확인해 주세요.
 [[$1|thumb]]',
 'filepageexists' => '이 파일의 설명 문서가 <strong>[[:$1]]</strong>에 존재하지만, 이 이름을 가진 파일이 존재하지 않습니다.
-당신이 입력한 설명은 설명 문서에 반영되지 않을 것입니다.
-당신의 설명을 반영시키려면, 직접 편집하셔야 합니다.
+입력한 설명은 설명 문서에 반영되지 않을 것입니다.
+설명을 반영시키려면, 직접 편집하셔야 합니다.
 [[$1|thumb]]',
 'fileexists-extension' => '비슷한 이름의 파일이 존재합니다: [[$2|thumb]]
 * 올리려는 파일 이름: <strong>[[:$1]]</strong>
@@ -2871,10 +2872,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 [[Special:DoubleRedirects|이중 넘겨주기]]나 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
 당신은 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-참고로 새 제목을 가진 문서가 이미 있다면 다음 경우에 해당하지 않으면 이 문서는 옮겨지지 '''않을''' 것입니다.
-* 비어 있거나,
-* 넘겨주기 문서이며,
-* 과거에 편집 내력이 없는 경우
+참고로 새 제목을 가진 문서가 이미 있다면 비어 있거나 넘겨주기 문서이며, 과거에 편집 내역이 없으면 이 문서는 옮겨지지 '''않을''' 것입니다.
 이는 당신이 실수로 문서를 옮겼을 때 되돌릴 수 있으며 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
@@ -3941,7 +3939,7 @@ $5
 'version-version' => '(버전 $1)',
 'version-license' => '라이선스',
 'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS 그 외 다른 개발자]',
+'version-poweredby-others' => '그 외 다른 개발자',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
index 6fbe61f..c9dba69 100644 (file)
@@ -2998,11 +2998,11 @@ J'àutri a saran stërmà coma stàndard.
 'exif-aperturevalue' => "Diaframa ëd l'APEX",
 'exif-brightnessvalue' => 'Luminosità APEX',
 'exif-exposurebiasvalue' => "Coression dl'esposission",
-'exif-maxaperturevalue' => 'Apertura màssima',
+'exif-maxaperturevalue' => 'Duvertura màssima',
 'exif-subjectdistance' => 'Distansa dël soget',
 'exif-meteringmode' => "Càlcol dl'espossision",
 'exif-lightsource' => "Sorgiss d'anluminassion",
-'exif-flash' => 'Flash',
+'exif-flash' => 'Lòsna',
 'exif-focallength' => 'Lunghëssa focal dle lent',
 'exif-subjectarea' => "Spassi d'anquadratura dël soget",
 'exif-flashenergy' => 'Potensa dël flash',
index 673edfe..d133e47 100644 (file)
@@ -1854,7 +1854,7 @@ Ko so rezultati filtrirani po uporabniku, so prikazane samo datoteke, pri kateri
 # File description page
 'file-anchor-link' => 'Datoteka',
 'filehist' => 'Zgodovina datoteke',
-'filehist-help' => 'Klikni na datum in čas za ogled datoteke, ki je bila takrat naložena.',
+'filehist-help' => 'Kliknite na datum in čas za ogled datoteke, ki je bila takrat naložena.',
 'filehist-deleteall' => 'izbriši vse',
 'filehist-deleteone' => 'izbriši to',
 'filehist-revert' => 'vrni',
@@ -1872,7 +1872,7 @@ Ko so rezultati filtrirani po uporabniku, so prikazane samo datoteke, pri kateri
 'linkstoimage' => 'Datoteka je del {{PLURAL:$1|naslednje $1 strani|naslednjih $1 strani}} {{GRAMMAR:rodilnik|{{SITENAME}}}}:',
 'linkstoimage-more' => 'Na to datoteko se {{PLURAL:$1|povezuje več kot $1 stran|povezujeta več kot $1 strani|povezujejo več kot $1 strani|povezuje več kot $1 strani}}.
 Naslednji seznam obsega samo {{PLURAL:$1|prvo stran, ki se povezuje|prvi $1 strani, ki se povezujeta|prve $1 strani, ki se povezujejo|prvih $1 strani, ki se povezujejo}} na to datoteko.
-Na voljo je tudi [[Special:WhatLinksHere/$2|celotni seznam]].',
+Na razpolago je tudi [[Special:WhatLinksHere/$2|celotni seznam]].',
 'nolinkstoimage' => 'Z datoteko se ne povezuje nobena stran.',
 'morelinkstoimage' => 'Preglejte [[Special:WhatLinksHere/$1|več povezav]] na to datoteko.',
 'linkstoimage-redirect' => '$1 (preusmeritev datoteke) $2',
index 0ba3397..048ca39 100644 (file)
@@ -276,8 +276,8 @@ $1',
 'edithelp' => 'معاونت براۓ ترمیم',
 'edithelppage' => 'Help:ترمیم',
 'helppage' => 'Help:فہرست',
-'mainpage' => 'سرÙ\88رÙ\82',
-'mainpage-description' => 'سرÙ\88رÙ\82',
+'mainpage' => 'صÙ\81Ø­Û\81 Ø§Ù\88Ù\84',
+'mainpage-description' => 'صÙ\81Ø­Û\81 Ø§Ù\88Ù\84',
 'policy-url' => 'Project:حکمتِ عملی',
 'portal' => 'دیوان عام',
 'portal-url' => 'Project:دیوان عام',
@@ -900,13 +900,22 @@ HTML tags جانچئے.',
 'prefs-i18n' => 'بین الاقوامیت',
 'prefs-signature' => 'دستخط',
 'prefs-dateformat' => 'شکلبندِ تاریخ',
+'prefs-diffs' => 'فروق',
 
 # User rights
 'userrights' => 'حقوقِ صارف کی نظامت',
 'userrights-lookup-user' => 'گروہائے صارف کا انتظام',
 'userrights-user-editname' => 'کوئی اسم‌صارف داخل کیجئے:',
+'editusergroup' => 'ترمیم گروہائے صارف',
 'editinguser' => "تبدیلئ حقوق برائے صارف '''[[صارف:$1|$1]]''' $2",
+'userrights-editusergroup' => 'ترمیم گروہائے صارف',
+'saveusergroups' => 'گروہائے صارف محفوظ',
 'userrights-groupsmember' => 'رکنِ:',
+'userrights-groupsmember-auto' => 'اعتباری صارف در',
+'userrights-groups-help' => 'آپ ان گروہان میں تبدیلی کرسکتے ہیں جن سے صارف متعلق ہے: 
+* نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے ہے۔ 
+* غیر نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے نہیں ہے۔ 
+* یہ * علامت اس بات کا اشارہ ہے کہ آپ اس گروہ کو نہیں ہٹا سکتے جسے ایک مرتبہ آپ نے شامل کردیا ہو، یا اس کے بر عکس۔',
 'userrights-reason' => 'وجہ:',
 'userrights-no-interwiki' => 'دوسرے ویکیوں پر حقوقِ صارف میں ترمیم کی آپ کو اجازت نہیں ہے.',
 'userrights-changeable-col' => 'مجموعات جو آپ تبدیل کرسکتے ہیں',
@@ -915,17 +924,31 @@ HTML tags جانچئے.',
 # Groups
 'group' => 'گروہ:',
 'group-user' => 'صارفین',
+'group-autoconfirmed' => 'خود توثیق شدہ صارفین',
 'group-bot' => 'روبالات',
 'group-sysop' => 'منتظمین',
+'group-bureaucrat' => 'مامورین اداری',
+'group-suppress' => 'نگران',
 'group-all' => '(تمام)',
 
 'group-user-member' => 'صارف',
 'group-autoconfirmed-member' => 'خودتصدیق شدہ صارف',
 'group-bot-member' => 'خودکار صارف',
 'group-sysop-member' => 'منتظم',
+'group-bureaucrat-member' => '{{GENDER:$1|مامور اداری}}',
+'group-suppress-member' => '{{GENDER:$1|نگران}}',
 
+'grouppage-user' => '{{ns:project}}:صارفین',
+'grouppage-autoconfirmed' => '{{ns:project}}:خود توثیق شدہ صارف',
+'grouppage-bot' => '{{ns:project}}:روبہ جات',
 'grouppage-sysop' => '{{ns:project}}:منتظمین',
 
+# User rights log
+'rightslog' => 'نوشتہ صارفی اختیارات',
+'rightslogtext' => 'یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔',
+'rightslogentry' => 'گروہ رکنیت میں برائے $1 از $2 تا $3 تبدیلی ہوئی',
+'rightsnone' => '(کچھ نہیں)',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'اس صفحہ میں ترمیم کریں',
 
@@ -1194,10 +1217,17 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Undelete
 'undelete' => 'ضائع کردہ صفحات دیکھیں',
 'undeletepage' => 'معائنہ خذف شدہ صفحات',
+'undeletepagetitle' => "'''ذیل میں [[:$1|$1]] کے حذف شدہ ترامیم درج ہیں۔'''",
 'viewdeletedpage' => 'حذف شدہ صفحات دیکھیے',
+'undelete-fieldset-title' => 'ترامیم بحال کریں',
+'undeletehistory' => 'اگر آپ اس صفحہ کو بحال کرتے ہیں، تو اس صفحہ کے تاریخچہ میں تمام ترامیم بھی بحال ہوجائیگی۔
+اگر حذف شدگی کے بعد کوئی نیا صفحہ اسی نام سے تخلیق کیا گیا ہو، تو تمام بحال شدہ ترامیم گذشتہ تاریخچہ میں ظاہر ہوگی۔',
+'undeleterevdel' => 'بحالیٔ صفحہ کا اقدام مکمل نہیں ہوگا اگر اس کا تنیجہ صفحہ کے اوپر کے حصہ کی ترمیم یا ملف کا اعادہ جزوی طور پر حذف کیا جارہا ہو۔
+ایسی صورت میں لازمی طور آپ حالیہ حذف شدہ اعادے کو ظاہر کریں۔',
 'undeletebtn' => 'بحال',
 'undeletelink' => 'دیکھو/بحال کرو',
 'undeleteviewlink' => 'دکھاؤ',
+'undeleteinvert' => 'انتخاب بالعکس',
 'undeletecomment' => 'وجہ:',
 
 # Namespace form on various pages
@@ -1254,6 +1284,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'proxyblocksuccess' => 'کردیا.',
 
 # Move page
+'move-page' => 'منتقلی',
 'move-page-legend' => 'منتقلئ صفحہ',
 'movepagetext' => "نیچے دیا گیا تشکیلہ (فـارم) استعمال کرکے اس صفحہ کا عنوان دوبارہ منتخب کیا جاسکتا ہے، ساتھ ہی اس سے منسلک تاریخچہ بھی نۓ نام پر منتقل ہوجاۓ گا۔ اسکے بعد سے اس صفحے کا پرانا نام ، نۓ نام کی جانب -- لوٹایا گیا صفحہ -- کی حیثیت اختیار کرلے گا۔ لیکن یادآوری کرلیجیۓ دیگر صفحات پر ، پرانے صفحہ کی جانب دیۓ گۓ روابط (لنکس) تبدیل نہیں ہونگے؛ اس بات کو یقینی بنانا ضروری ہے کہ کوئی دوہرا یا شکستہ -- پلٹایا گیا ربط -- نہ رہ جاۓ۔
 
@@ -1263,6 +1294,18 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 ''' انـتـبـاہ !'''
  کسی اہم اور مقبول صفحہ کی منتقلی ، غیرمتوقع اور پریشان کن بھی ہی ہوسکتی ہے اس لیۓ ؛ منتقلی سے قبل براہ کرم یقین کرلیجۓ کہ آپ اسکے منطقی نتائج سے باخبر ہیں۔",
+'movepagetext-noredirectfixer' => "درج ذیل ورقہ کے ذریعہ صفحہ کو نیا نام دیا جاسکتا ہے، اس کے ساتھ صفحہ کا تاریخچہ بھی منتقل ہوجائیگا۔
+نئے عنوان کے جانب قدیم عنوان کو رجوع مکرر کردیا جائیگا۔
+
+یقین کرلیں کہ [[Special:DoubleRedirects|مکرر]] یا [[Special:BrokenRedirects|شکستہ رجوع مکررات]] موجود نہیں ہیں۔
+آپ اس بات کو یقینی بنانے کے ذمہ دار ہیں کہ روابط انہیں جگہوں سے مربوط ہیں جن کو فرض کیا گیا ہے۔
+
+خیال رہے کہ یہ صفحہ منتقل '''نہیں''' ہوگا اگر نئے عنوان کے ساتھ صفحہ پہلے سے موجود ہو، سوائے اس کے کہ صفحہ خالی ہو اور اس کا گذشتہ ترمیمی تاریخچہ موجود نہ ہو۔
+اس کا مطلب ہے آپ سے اگر غلطی ہوجائے تو آپ صفحہ کو اسی جگہ لوٹا سکتے ہیں، تاہم موجود صفحہ پر برتحریر (overwrite) نہیں کرسکتے۔
+
+'''انتباہ!'''
+کسی اہم اور مقبول صفحہ کی منتقلی، غیرمتوقع اور پریشان کن بھی ہی ہوسکتی ہے اس لیۓ؛ 
+منتقلی سے قبل براہ کرم یقین کرلیجۓ کہ آپ اسکے منطقی نتائج سے باخبر ہیں۔",
 'movearticle' => 'مـنـتـقـل کـریں',
 'newtitle' => 'نـیــا عـنــوان',
 'move-watch' => 'صفحہ زیر نظر',
index 11bd4f0..98cddda 100644 (file)
@@ -1001,28 +1001,60 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # E-mail user
 'emailuser' => 'Bu foydalanuvchiga e-maktub joʻnat',
 'noemailtext' => "Bu foydalanuvchi e-mail manzil ko'rsatgani yo'q.",
+'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
+'emailusername' => 'Ishtirokchi nomi:',
+'emailusernamesubmit' => "Jo'natish",
+'email-legend' => "Boshqa {{SITENAME}} ishtirokchisiga xat jo'natish",
+'emailfrom' => 'Kimdan:',
+'emailto' => 'Kimga:',
+'emailsubject' => 'Sarlavha:',
+'emailmessage' => 'Xabar',
 'emailsend' => 'Joʻnatish',
+'emailsent' => "Xat jo'natildi",
+
+# User Messenger
+'usermessage-summary' => 'Tizimli xabar qoldirish.',
+'usermessage-editor' => 'Tizimli etkazish',
 
 # Watchlist
 'watchlist' => 'Kuzatuv roʻyxatim',
 'mywatchlist' => 'Kuzatuv roʻyxatim',
 'watchlistfor2' => '$1 $2 uchun',
 'nowatchlist' => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
+'watchnologin' => "Siz tizimda o'zingizni tanishtirmadingiz",
+'addwatch' => "Kuzatuv ro'yxatiga qo'shish",
 'addedwatchtext' => "\"[[:\$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv ro'yxatingizga]] qo'shildi. Bu sahifada va unga mos munozara sahifasida bo'ladigan kelajakdagi o'zgarishlar bu yerda ro'yxatga olinadi, hamda bu sahifa topish qulay bo'lishi uchun [[Special:RecentChanges|yangi o'zgarishlar ro'yxati]]da '''qalin''' harflar bilan ko'rsatiladi.
 
 Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmaslik\" yozuvini bosing.",
+'removewatch' => "Kuzatuv ro'yxatidan o'chirish",
 'removedwatchtext' => '"[[:$1]]" sahifasi kuzatuv ro\'yxatingizdan o\'chirildi.',
 'watch' => 'kuzatish',
 'watchthispage' => 'Sahifani kuzatish',
 'unwatch' => 'kuzatmaslik',
+'unwatchthispage' => "Kuzatuvni to'xtatish",
+'notanarticle' => 'Maqola emas',
 'watchlist-details' => "Sizning kuzatuv ro'yxatingizda $1 {{PLURAL:$1|ta sahifa}} (munozara sahifalarini hisobga olmaganda)",
 'wlnote' => "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
 'wlshowlast' => 'Oxirgi $1 soatdagi $2 kundagi tahrirlarni ko‘rsatish. $3 tahrirlarni ko‘rsatish',
 'watchlist-options' => "Kuzatuv ro'yxati moslamalari",
 
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'Kuzatish...',
+'unwatching' => "Kuzatuv ro'yxatidan o'chirish...",
+
+'enotif_mailer' => "{{SITENAME}} Pochta orqali e'lon qilish xizmati",
+'enotif_reset' => "Hamma sahifalarni ko'rib chiqilgan deb belgilash",
+'enotif_newpagetext' => 'Bu yangi sahifa',
+'enotif_impersonal_salutation' => '{{SITENAME}} ishtirokchisi',
+'changed' => 'o‘zgartirildi',
+'created' => 'yaratildi',
+'enotif_subject' => '"{{SITENAME}}" loyihasining $PAGETITLE sahifasi $PAGEEDITOR tomonidan $CHANGEDORCREATED',
+'enotif_lastvisited' => "Oxirgi tashrifingizdan buyon sodir bo'lgan barcha o'zgarishlarni ko'rish uchun $1 ga qarang.",
+'enotif_lastdiff' => "O'zgarishlar bilan tanishish uchun $1 ga qarang.",
+'enotif_anon_editor' => 'anonim ishtirokchi $1',
 'enotif_body' => "Hurmatli \$WATCHINGUSERNAME,
 
-\$PAGEEDITDATE kuni \"{{SITENAME}}\" loyihasining \$PAGETITLE sahifasi foydalanuvchi \$PAGEEDITOR tomonidan \$CHANGEDORCREATED, joriy versiyani ko'rish uchun \$PAGETITLE_URL havolasi bo'yicha o'ting.
+\$PAGEEDITDATE kuni \"{{SITENAME}}\" loyihasining \$PAGETITLE sahifasi ishtirokchi \$PAGEEDITOR tomonidan \$CHANGEDORCREATED, joriy versiyani ko'rish uchun \$PAGETITLE_URL havolasi bo'yicha o'ting.
 
 \$NEWPAGE
 
@@ -1051,11 +1083,13 @@ Qayta aloqa va yordam
 {{canonicalurl:{{MediaWiki:Helppage}}}}",
 
 # Delete
+'deletepage' => "Sahifani o'chirish",
 'actioncomplete' => 'Bajarildi',
 'actionfailed' => 'Jarayon amalga oshmadi',
 'deletedtext' => '"$1" yoʻqotildi.
 Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'dellogpage' => 'Yoʻqotish qaydlari',
+'deletionlog' => 'yoʻqotish qaydlari',
 'deletecomment' => 'Sabab:',
 'deleteotherreason' => 'Boshqa/qoʻshimcha sabab:',
 'deletereasonotherlist' => 'Boshqa sabab',
@@ -1198,6 +1232,13 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 # Export
 'export' => 'Sahifalar eksporti',
+'export-submit' => 'Eksport',
+'export-addcattext' => "Shu turkumdan sahifalarni qo'shish:",
+'export-addcat' => "Qo'shish",
+'export-addnstext' => "Shu nomfazodan sahifalarni qo'shish:",
+'export-addns' => "Qo'shish",
+'export-download' => 'Fayl sifatida saqlash',
+'export-templates' => 'Andozalarni kiritish',
 
 # Namespace 8 related
 'allmessagesname' => 'Ism',
index 6b11704..1056ece 100644 (file)
@@ -131,7 +131,7 @@ class CLDRPluralRuleEvaluator {
  * Evaluator helper class representing a range list.
  */
 class CLDRPluralRuleEvaluator_Range {
-       var $parts = array();
+       public $parts = array();
 
        function __construct( $start, $end = false ) {
                if ( $end === false ) {
@@ -208,9 +208,9 @@ class CLDRPluralRuleEvaluator_Range {
  * Helper class for converting rules to reverse polish notation (RPN).
  */
 class CLDRPluralRuleConverter {
-       var $rule, $pos, $end;
-       var $operators = array();
-       var $operands = array();
+       public $rule, $pos, $end;
+       public $operators = array();
+       public $operands = array();
 
        /**
         * Precedence levels. Note that there's no need to worry about associativity
@@ -447,7 +447,7 @@ class CLDRPluralRuleConverter {
  * The base class for operators and expressions, describing a region of the input string.
  */
 class CLDRPluralRuleConverter_Fragment {
-       var $parser, $pos, $length, $end;
+       public $parser, $pos, $length, $end;
 
        function __construct( $parser, $pos, $length ) {
                $this->parser = $parser;
@@ -473,7 +473,7 @@ class CLDRPluralRuleConverter_Fragment {
  * validation.
  */
 class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragment {
-       var $type, $rpn;
+       public $type, $rpn;
 
        function __construct( $parser, $type, $rpn, $pos, $length ) {
                parent::__construct( $parser, $pos, $length );
@@ -498,7 +498,7 @@ class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragmen
  * messages), and the binary operator at that location.
  */
 class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
-       var $name;
+       public $name;
 
        /**
         * Each op type has three characters: left operand type, right operand type and result type
diff --git a/maintenance/archives/patch-drop-ss_admins.sql b/maintenance/archives/patch-drop-ss_admins.sql
new file mode 100644 (file)
index 0000000..13c3d3b
--- /dev/null
@@ -0,0 +1,2 @@
+-- field is deprecated and no longer updated as of 1.5
+ALTER TABLE /*_*/site_stats DROP COLUMN ss_admins;
\ No newline at end of file
index 2c28011..a957957 100644 (file)
@@ -34,9 +34,9 @@ class UpdateLogging {
        /**
         * @var DatabaseBase
         */
-       var $dbw;
-       var $batchSize = 1000;
-       var $minTs = false;
+       public $dbw;
+       public $batchSize = 1000;
+       public $minTs = false;
 
        function execute() {
                $this->dbw = wfGetDB( DB_MASTER );
index f3a5d87..adea97e 100644 (file)
@@ -44,7 +44,7 @@ class GenerateSitemap extends Maintenance {
         *
         * @var int
         */
-       var $url_limit;
+       public $url_limit;
 
        /**
         * The maximum size of a sitemap file
@@ -53,77 +53,77 @@ class GenerateSitemap extends Maintenance {
         *
         * @var int
         */
-       var $size_limit;
+       public $size_limit;
 
        /**
         * The path to prepend to the filename
         *
         * @var string
         */
-       var $fspath;
+       public $fspath;
 
        /**
         * The URL path to prepend to filenames in the index; should resolve to the same directory as $fspath
         *
         * @var string
         */
-       var $urlpath;
+       public $urlpath;
 
        /**
         * Whether or not to use compression
         *
         * @var bool
         */
-       var $compress;
+       public $compress;
 
        /**
         * Whether or not to include redirection pages
         *
         * @var bool
         */
-       var $skipRedirects;
+       public $skipRedirects;
 
        /**
         * The number of entries to save in each sitemap file
         *
         * @var array
         */
-       var $limit = array();
+       public $limit = array();
 
        /**
         * Key => value entries of namespaces and their priorities
         *
         * @var array
         */
-       var $priorities = array();
+       public $priorities = array();
 
        /**
         * A one-dimensional array of namespaces in the wiki
         *
         * @var array
         */
-       var $namespaces = array();
+       public $namespaces = array();
 
        /**
         * When this sitemap batch was generated
         *
         * @var string
         */
-       var $timestamp;
+       public $timestamp;
 
        /**
         * A database slave object
         *
         * @var object
         */
-       var $dbr;
+       public $dbr;
 
        /**
         * A resource pointing to the sitemap index file
         *
         * @var resource
         */
-       var $findex;
+       public $findex;
 
 
        /**
@@ -131,7 +131,7 @@ class GenerateSitemap extends Maintenance {
         *
         * @var resource
         */
-       var $file;
+       public $file;
 
        /**
         * Identifier to use in filenames, default $wgDBname
index f51d7ad..904b624 100644 (file)
@@ -32,13 +32,13 @@ require_once( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class BackupReader extends Maintenance {
-       var $reportingInterval = 100;
-       var $pageCount = 0;
-       var $revCount  = 0;
-       var $dryRun    = false;
-       var $uploads   = false;
-       var $imageBasePath = false;
-       var $nsFilter  = false;
+       public $reportingInterval = 100;
+       public $pageCount = 0;
+       public $revCount  = 0;
+       public $dryRun    = false;
+       public $uploads   = false;
+       public $imageBasePath = false;
+       public $nsFilter  = false;
 
        function __construct() {
                parent::__construct();
index ceafc39..1a2e121 100644 (file)
@@ -29,7 +29,7 @@ require_once( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class JSParseHelper extends Maintenance {
-       var $errs = 0;
+       public $errs = 0;
 
        public function __construct() {
                parent::__construct();
index e34d9a1..e2ad6a7 100644 (file)
@@ -30,19 +30,19 @@ require_once( __DIR__ .'/../Maintenance.php' );
  */
 class GenerateCollationData extends Maintenance {
        /** The directory with source data files in it */
-       var $dataDir;
+       public $dataDir;
 
        /** The primary weights, indexed by codepoint */
-       var $weights;
+       public $weights;
 
        /**
         * A hashtable keyed by codepoint, where presence indicates that a character
         * has a decomposition mapping. This makes it non-preferred for group header
         * selection.
         */
-       var $mappedChars;
+       public $mappedChars;
 
-       var $debugOutFile;
+       public $debugOutFile;
 
        /**
         * Important tertiary weights from UTS #10 section 7.2
@@ -285,12 +285,12 @@ class GenerateCollationData extends Maintenance {
 }
 
 class UcdXmlReader {
-       var $fileName;
-       var $callback;
-       var $groupAttrs;
-       var $xml;
-       var $blocks = array();
-       var $currentBlock;
+       public $fileName;
+       public $callback;
+       public $groupAttrs;
+       public $xml;
+       public $blocks = array();
+       public $currentBlock;
 
        function __construct( $fileName ) {
                $this->fileName = $fileName;
index 54dfa39..33163d4 100644 (file)
@@ -32,7 +32,7 @@ require_once( __DIR__ . '/../../includes/normal/UtfNormalUtil.php' );
  * @ingroup MaintenanceLanguage
  */
 class GenerateNormalizerData extends Maintenance {
-       var $dataFile;
+       public $dataFile;
 
        public function __construct() {
                parent::__construct();
index 9f5a909..0846a64 100644 (file)
@@ -29,7 +29,7 @@ require_once( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class MinifyScript extends Maintenance {
-       var $outDir;
+       public $outDir;
 
        public function __construct() {
                parent::__construct();
index a53bc88..49c7aee 100644 (file)
@@ -26,7 +26,7 @@ require_once( __DIR__ . '/commandLine.inc' );
 $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook';
 
 class PPFuzzTester {
-       var $hairs = array(
+       public $hairs = array(
                '[[', ']]', '{{', '{{', '}}', '}}', '{{{', '}}}',
                '<', '>', '<nowiki', '<gallery', '</nowiki>', '</gallery>', '<nOwIkI>', '</NoWiKi>',
                '<!--' , '-->',
@@ -39,12 +39,12 @@ class PPFuzzTester {
                // extensions
                // '<ref>', '</ref>', '<references/>',
        );
-       var $minLength = 0;
-       var $maxLength = 20;
-       var $maxTemplates = 5;
-       // var $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' );
-       var $entryPoints = array( 'testSrvus', 'testPst', 'testPreprocess' );
-       var $verbose = false;
+       public $minLength = 0;
+       public $maxLength = 20;
+       public $maxTemplates = 5;
+       // public $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' );
+       public $entryPoints = array( 'testSrvus', 'testPst', 'testPreprocess' );
+       public $verbose = false;
        static $currentTest = false;
 
        function execute() {
@@ -140,7 +140,7 @@ class PPFuzzTester {
 }
 
 class PPFuzzTest {
-       var $templates, $mainText, $title, $entryPoint, $output;
+       public $templates, $mainText, $title, $entryPoint, $output;
 
        function __construct( $tester ) {
                global $wgMaxSigChars;
@@ -219,7 +219,7 @@ class PPFuzzTest {
 }
 
 class PPFuzzUser extends User {
-       var $ppfz_test, $mDataLoaded;
+       public $ppfz_test, $mDataLoaded;
 
        function load() {
                if ( $this->mDataLoaded ) {
index 1c41798..f067dc6 100644 (file)
@@ -30,7 +30,7 @@ require( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class PurgeParserCache extends Maintenance {
-       var $lastProgress;
+       public $lastProgress;
 
        function __construct() {
                parent::__construct();
diff --git a/maintenance/sqlite/archives/patch-drop-ss_admins.sql b/maintenance/sqlite/archives/patch-drop-ss_admins.sql
new file mode 100644 (file)
index 0000000..9951e17
--- /dev/null
@@ -0,0 +1,22 @@
+-- field is deprecated and no longer updated as of 1.5
+CREATE TABLE /*_*/site_stats_tmp (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/site_stats_tmp
+       SELECT ss_row_id, ss_total_views, ss_total_edits, ss_good_articles,
+               ss_total_pages, ss_users, ss_active_users, ss_images
+               FROM /*_*/site_stats;
+
+DROP TABLE /*_*/site_stats;
+
+ALTER TABLE /*_*/site_stats_tmp RENAME TO /*_*/site_stats;
+
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
\ No newline at end of file
index 5797a6c..fd9393f 100644 (file)
@@ -44,10 +44,10 @@ if ( !defined( 'MEDIAWIKI' ) ) {
  */
 class CheckStorage {
        const CONCAT_HEADER = 'O:27:"concatenatedgziphistoryblob"';
-       var $oldIdMap, $errors;
-       var $dbStore = null;
+       public $oldIdMap, $errors;
+       public $dbStore = null;
 
-       var $errorDescriptions = array(
+       public $errorDescriptions = array(
                'restore text' => 'Damaged text, need to be restored from a backup',
                'restore revision' => 'Damaged revision row, need to be restored from a backup',
                'unfixable' => 'Unexpected errors with no automated fixing method',
index 21a4957..d394558 100644 (file)
@@ -29,10 +29,10 @@ require_once( __DIR__ . '/../Maintenance.php' );
  * @ingroup Maintenance ExternalStorage
  */
 class FixBug20757 extends Maintenance {
-       var $batchSize = 10000;
-       var $mapCache = array();
-       var $mapCacheSize = 0;
-       var $maxMapCacheSize = 1000000;
+       public $batchSize = 10000;
+       public $mapCache = array();
+       public $mapCacheSize = 0;
+       public $maxMapCacheSize = 1000000;
 
        function __construct() {
                parent::__construct();
index f770681..fe62ddf 100644 (file)
@@ -49,19 +49,19 @@ $job->execute();
  * @ingroup Maintenance ExternalStorage
  */
 class RecompressTracked {
-       var $destClusters;
-       var $batchSize = 1000;
-       var $orphanBatchSize = 1000;
-       var $reportingInterval = 10;
-       var $numProcs = 1;
-       var $useDiff, $pageBlobClass, $orphanBlobClass;
-       var $slavePipes, $slaveProcs, $prevSlaveId;
-       var $copyOnly = false;
-       var $isChild = false;
-       var $slaveId = false;
-       var $noCount = false;
-       var $debugLog, $infoLog, $criticalLog;
-       var $store;
+       public $destClusters;
+       public $batchSize = 1000;
+       public $orphanBatchSize = 1000;
+       public $reportingInterval = 10;
+       public $numProcs = 1;
+       public $useDiff, $pageBlobClass, $orphanBlobClass;
+       public $slavePipes, $slaveProcs, $prevSlaveId;
+       public $copyOnly = false;
+       public $isChild = false;
+       public $slaveId = false;
+       public $noCount = false;
+       public $debugLog, $infoLog, $criticalLog;
+       public $store;
 
        static $optionsWithArgs = array( 'procs', 'slave-id', 'debug-log', 'info-log', 'critical-log' );
        static $cmdLineOptionMap = array(
@@ -676,10 +676,10 @@ class RecompressTracked {
  * Class to represent a recompression operation for a single CGZ blob
  */
 class CgzCopyTransaction {
-       var $parent;
-       var $blobClass;
-       var $cgz;
-       var $referrers;
+       public $parent;
+       public $blobClass;
+       public $cgz;
+       public $referrers;
 
        /**
         * Create a transaction from a RecompressTracked object
index 214168a..2f3c8c6 100644 (file)
@@ -37,12 +37,12 @@ $tracker->run();
 echo "All done.\n";
 
 class TrackBlobs {
-       var $clusters, $textClause;
-       var $doBlobOrphans;
-       var $trackedBlobs = array();
+       public $clusters, $textClause;
+       public $doBlobOrphans;
+       public $trackedBlobs = array();
 
-       var $batchSize = 1000;
-       var $reportingInterval = 10;
+       public $batchSize = 1000;
+       public $reportingInterval = 10;
 
        function __construct( $clusters ) {
                $this->clusters = $clusters;
index 062052f..1ddc89d 100644 (file)
@@ -689,9 +689,6 @@ CREATE TABLE /*_*/site_stats (
   -- Number of users that still edit
   ss_active_users bigint default '-1',
 
-  -- Deprecated, no longer updated as of 1.5
-  ss_admins int default '-1',
-
   -- Number of images, equivalent to SELECT COUNT(*) FROM image
   ss_images int default 0
 ) /*$wgDBTableOptions*/;
index b732508..04a2d47 100644 (file)
@@ -38,7 +38,7 @@ class UpdateCollation extends Maintenance {
        const BATCH_SIZE = 50; // Number of rows to process in one batch
        const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
 
-       var $sizeHistogram = array();
+       public $sizeHistogram = array();
 
        public function __construct() {
                parent::__construct();
index 9e030fa..33cca58 100644 (file)
@@ -132,7 +132,7 @@ var
        setAll = function ( title, s ) {
                // In normal browsers the match-array contains null/undefined if there's no match,
                // IE returns an empty string.
-               var     matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w{1,5}))?$/ ),
+               var matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w+))?$/ ),
                        ns_match = getNsIdByName( matches[1] );
 
                // Namespace must be valid, and title must be a non-empty string.
@@ -160,7 +160,7 @@ var
        setNameAndExtension = function ( title, raw ) {
                // In normal browsers the match-array contains null/undefined if there's no match,
                // IE returns an empty string.
-               var matches = raw.match( /^(?:)?(.*?)(?:\.(\w{1,5}))?$/ );
+               var matches = raw.match( /^(?:)?(.*?)(?:\.(\w+))?$/ );
 
                // Title must be a non-empty string.
                if ( typeof matches[1] === 'string' && matches[1] !== '' ) {
index 0ba21d9..eb038db 100644 (file)
@@ -4168,7 +4168,7 @@ section=1
 !! article
 Template:quote
 !! text
-{{{quote|{{{1}}} }}}
+{{{quote|{{{1}}}}}}
 !! endarticle
 
 !!test
@@ -4176,7 +4176,7 @@ Templates: Template Name/Arg clash: 1. Use of positional param
 !!input
 {{quote|foo}}
 !!result
-<p>foo 
+<p>foo
 </p>
 !!end
 
@@ -4194,7 +4194,7 @@ Templates: Template Name/Arg clash: 3. Use of named param with empty input
 !!input
 {{quote|quote}}
 !!result
-<p>quote 
+<p>quote
 </p>
 !!end
 
index 192689f..8867cd5 100644 (file)
@@ -34,8 +34,18 @@ class wfExpandUrl extends MediaWikiTestCase {
         */
        public function provideExpandableUrls() {
                $modes = array( 'http', 'https' );
-               $servers = array( 'http' => 'http://example.com', 'https' => 'https://example.com', 'protocol-relative' => '//example.com' );
-               $defaultProtos = array( 'http' => PROTO_HTTP, 'https' => PROTO_HTTPS, 'protocol-relative' => PROTO_RELATIVE, 'current' => PROTO_CURRENT, 'canonical' => PROTO_CANONICAL );
+               $servers = array(
+                       'http' => 'http://example.com',
+                       'https' => 'https://example.com',
+                       'protocol-relative' => '//example.com'
+               );
+               $defaultProtos = array(
+                       'http' => PROTO_HTTP,
+                       'https' => PROTO_HTTPS,
+                       'protocol-relative' => PROTO_RELATIVE,
+                       'current' => PROTO_CURRENT,
+                       'canonical' => PROTO_CANONICAL
+               );
 
                $retval = array();
                foreach ( $modes as $mode ) {
@@ -44,13 +54,27 @@ class wfExpandUrl extends MediaWikiTestCase {
                                foreach ( $modes as $canServerMode  ) {
                                        $canServer = "$canServerMode://example2.com";
                                        foreach ( $defaultProtos as $protoDesc => $defaultProto ) {
-                                               $retval[] = array( 'http://example.com', 'http://example.com', $defaultProto, $server, $canServer, $httpsMode, "Testing fully qualified http URLs (no need to expand) (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
-                                               $retval[] = array( 'https://example.com', 'https://example.com', $defaultProto, $server, $canServer, $httpsMode, "Testing fully qualified https URLs (no need to expand) (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       'http://example.com', 'http://example.com',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing fully qualified http URLs (no need to expand) ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
+                                               $retval[] = array(
+                                                       'https://example.com', 'https://example.com',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing fully qualified https URLs (no need to expand) ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
                                                # Would be nice to support this, see fixme on wfExpandUrl()
-                                               $retval[] = array( "wiki/FooBar", 'wiki/FooBar', $defaultProto, $server, $canServer, $httpsMode, "Test non-expandable relative URLs (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       "wiki/FooBar", 'wiki/FooBar',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Test non-expandable relative URLs ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
 
                                                // Determine expected protocol
-                                               $p = $protoDesc . ':'; // default case
                                                if ( $protoDesc == 'protocol-relative' ) {
                                                        $p = '';
                                                } elseif ( $protoDesc == 'current' ) {
@@ -69,8 +93,18 @@ class wfExpandUrl extends MediaWikiTestCase {
                                                        $srv = $server;
                                                }
 
-                                               $retval[] = array( "$p//wikipedia.org", '//wikipedia.org', $defaultProto, $server, $canServer, $httpsMode, "Test protocol-relative URL (defaultProto: $protoDesc, wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
-                                               $retval[] = array( "$srv/wiki/FooBar", '/wiki/FooBar', $defaultProto, $server, $canServer, $httpsMode, "Testing expanding URL beginning with / (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       "$p//wikipedia.org", '//wikipedia.org',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Test protocol-relative URL ' .
+                                                       '(defaultProto: $protoDesc, wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
+                                               $retval[] = array(
+                                                       "$srv/wiki/FooBar", '/wiki/FooBar',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing expanding URL beginning with / ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
                                        }
                                }
                        }
index 6360925..a736e12 100644 (file)
@@ -146,7 +146,26 @@ QUnit.test( 'toString / toText', 2, function ( assert ) {
        assert.equal( title.toText(), title.getPrefixedText() );
 });
 
-QUnit.test( 'Exists', 3, function ( assert ) {
+QUnit.test( 'getExtension', 7, function ( assert ) {
+
+       function extTest( pagename, ext, description ) {
+               var title = new mw.Title( pagename );
+               assert.equal( title.getExtension(), ext, description || pagename );
+       }
+
+       extTest( 'MediaWiki:Vector.js', 'js' );
+       extTest( 'User:Example/common.css', 'css' );
+       extTest( 'File:Example.longextension', 'longextension', 'Extension parsing not limited (bug 36151)' );
+       extTest( 'Example/information.json', 'json', 'Extension parsing not restricted from any namespace' );
+       extTest( 'Foo.', null, 'Trailing dot is not an extension' );
+       extTest( 'Foo..', null, 'Trailing dots are not an extension' );
+       extTest( 'Foo.a.', null, 'Page name with dots and ending in a dot does not have an extension' );
+
+       // @broken: Throws an exception
+       // extTest( '.NET', null, 'Leading dot is (or is not?) an extension' );
+});
+
+QUnit.test( 'exists', 3, function ( assert ) {
        var title;
 
        // Empty registry, checks default to null
@@ -165,7 +184,7 @@ QUnit.test( 'Exists', 3, function ( assert ) {
 
 });
 
-QUnit.test( 'Url', 2, function ( assert ) {
+QUnit.test( 'getUrl', 2, function ( assert ) {
        var title;
 
        // Config