ApiQueryBase::keyPartToTitle() all removed (deprecated since 1.24).
* ApiQueryBase::checkRowCount() was removed (deprecated since 1.24).
* ApiQueryBase::getDirectionDescription() was removed (deprecated since 1.25).
+* ApiQuery::getModules() was removed (deprecated since 1.21).
+* ApiMain::getModules() was removed (deprecated since 1.21).
=== Languages updated in 1.27 ===
* The maintenance/backupTextPass.inc file was deleted. You should include
maintenance/dumpTextPass.php instead.
* WikiPage::getUsedTemplates() was removed (deprecated since 1.19).
+* wfEmptyMsg() was removed (deprecated since 1.18).
+* OutputPage::permissionRequired() was removed (deprecated since 1.18).
+* OutputPage::blockedPage() was removed (deprecated since 1.18).
+* User::getSkin() was removed (deprecated since 1.18).
+* OutputPage::includeJQuery() was removed (deprecated since 1.17).
+* WikiPage::updateRestrictions() was removed (deprecated since 1.19).
+* WikiPage::testPreSaveTransform() was removed (deprecated since 1.19).
+* LogPage::logName() was removed (deprecated since 1.19).
+* LogPage::logHeader() was removed (deprecated since 1.19).
+* wfCheckLimits() was removed (deprecated since 1.24).
+* Linker::makeKnownLinkObj() was removed (deprecated since 1.16).
+* Linker::makeLinkObj() was removed (deprecated since 1.16).
+* wfMsgForContentNoTrans() was removed (deprecated since 1.18).
+* ChangesList::usePatrol was removed (deprecated since 1.22).
+* wfMsgNoTrans() was removed (deprecated since 1.18).
+* Linker::makeImageLink2 was removed (deprecated since 1.20).
== Compatibility ==
'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
- 'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+ 'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchNearMatchResultSet.php',
'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
'SpecialWhatLinksHere' => __DIR__ . '/includes/specials/SpecialWhatlinkshere.php',
'SqlBagOStuff' => __DIR__ . '/includes/objectcache/SqlBagOStuff.php',
'SqlDataUpdate' => __DIR__ . '/includes/deferred/SqlDataUpdate.php',
- 'SqlSearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+ 'SqlSearchResultSet' => __DIR__ . '/includes/search/SqlSearchResultSet.php',
'Sqlite' => __DIR__ . '/maintenance/sqlite.inc',
'SqliteInstaller' => __DIR__ . '/includes/installer/SqliteInstaller.php',
'SqliteMaintenance' => __DIR__ . '/maintenance/sqlite.php',
"wikimedia/running-stat": "1.1.0",
"wikimedia/utfnormal": "1.0.3",
"wikimedia/wrappedstring": "2.0.0",
- "zordius/lightncandy": "0.21"
+ "zordius/lightncandy": "0.23"
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "0.9.2",
"type": "object",
"description": "Registry of factory functions to create Config objects"
},
+ "CentralIdLookupProviders": {
+ "type": "object",
+ "description": "Central ID lookup providers"
+ },
"namespaces": {
"type": "array",
"description": "Method to add extra namespaces",
"ValidSkinNames": {
"type": "object"
},
+ "FeedClasses": {
+ "type": "object",
+ "description": "Available feeds objects"
+ },
"SkinOOUIThemes": {
"type": "object"
},
return wfMsgReal( $key, $args );
}
-/**
- * Same as above except doesn't transform the message
- *
- * @deprecated since 1.18
- *
- * @param string $key
- * @return string
- */
-function wfMsgNoTrans( $key ) {
- wfDeprecated( __METHOD__, '1.21' );
-
- $args = func_get_args();
- array_shift( $args );
- return wfMsgReal( $key, $args, true, false, false );
-}
-
/**
* Get a message from anywhere, for the current global language
* set with $wgLanguageCode.
return wfMsgReal( $key, $args, true, $forcontent );
}
-/**
- * Same as above except doesn't transform the message
- *
- * @deprecated since 1.18
- *
- * @param string $key
- * @return string
- */
-function wfMsgForContentNoTrans( $key ) {
- wfDeprecated( __METHOD__, '1.21' );
-
- global $wgForceUIMsgAsContentMsg;
- $args = func_get_args();
- array_shift( $args );
- $forcontent = true;
- if ( is_array( $wgForceUIMsgAsContentMsg )
- && in_array( $key, $wgForceUIMsgAsContentMsg )
- ) {
- $forcontent = false;
- }
- return wfMsgReal( $key, $args, true, $forcontent, false );
-}
-
/**
* Really get a message
*
return $string;
}
-/**
- * Since wfMsg() and co suck, they don't return false if the message key they
- * looked up didn't exist but instead the key wrapped in <>'s, this function checks for the
- * nonexistence of messages by checking the MessageCache::get() result directly.
- *
- * @deprecated since 1.18. Use Message::isDisabled().
- *
- * @param string $key The message key looked up
- * @return bool True if the message *doesn't* exist.
- */
-function wfEmptyMsg( $key ) {
- wfDeprecated( __METHOD__, '1.21' );
-
- return MessageCache::singleton()->get( $key, /*useDB*/true, /*content*/false ) === false;
-}
-
/**
* Fetch server name for use in error reporting etc.
* Use real server name if available, so we know which machine
return $result;
}
-/**
- * Obtain the offset and limit values from the request string;
- * used in special pages
- *
- * @param int $deflimit Default limit if none supplied
- * @param string $optionname Name of a user preference to check against
- * @return array
- * @deprecated since 1.24, just call WebRequest::getLimitOffset() directly
- */
-function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
- global $wgRequest;
- wfDeprecated( __METHOD__, '1.24' );
- return $wgRequest->getLimitOffset( $deflimit, $optionname );
-}
-
/**
* Escapes the given text so that it may be output using addWikiText()
* without any linking, formatting, etc. making its way through. This
return str_replace( "\n", ' ', $prefix . $s . $postfix );
}
- /**
- * See makeImageLink()
- * When this function is removed, remove if( $parser instanceof Parser ) check there too
- * @deprecated since 1.20
- */
- public static function makeImageLink2( Title $title, $file, $frameParams = array(),
- $handlerParams = array(), $time = false, $query = "", $widthOption = null ) {
- return self::makeImageLink( null, $title, $file, $frameParams,
- $handlerParams, $time, $query, $widthOption );
- }
-
/**
* Get the link parameters for MediaTransformOutput::toHtml() from given
* frame parameters supplied by the Parser.
/* Deprecated methods */
- /**
- * @deprecated since 1.16 Use link(); warnings since 1.21
- *
- * Make a link for a title which may or may not be in the database. If you need to
- * call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each
- * call to this will result in a DB query.
- *
- * @param Title $nt The title object to make the link from, e.g. from Title::newFromText.
- * @param string $text Link text
- * @param string $query Optional query part
- * @param string $trail Optional trail. Alphabetic characters at the start of this string will
- * be included in the link text. Other characters will be appended after
- * the end of the link.
- * @param string $prefix Optional prefix. As trail, only before instead of after.
- * @return string
- */
- static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
- wfDeprecated( __METHOD__, '1.21' );
-
- $query = wfCgiToArray( $query );
- list( $inside, $trail ) = self::splitTrail( $trail );
- if ( $text === '' ) {
- $text = self::linkText( $nt );
- }
-
- $ret = self::link( $nt, "$prefix$text$inside", array(), $query ) . $trail;
-
- return $ret;
- }
-
- /**
- * @deprecated since 1.16 Use link(); warnings since 1.21
- *
- * Make a link for a title which definitely exists. This is faster than makeLinkObj because
- * it doesn't have to do a database query. It's also valid for interwiki titles and special
- * pages.
- *
- * @param Title $title Title object of target page
- * @param string $text Text to replace the title
- * @param string $query Link target
- * @param string $trail Text after link
- * @param string $prefix Text before link text
- * @param string $aprops Extra attributes to the a-element
- * @param string $style Style to apply - if empty, use getInternalLinkAttributesObj instead
- * @return string The a-element
- */
- static function makeKnownLinkObj(
- $title, $text = '', $query = '', $trail = '', $prefix = '', $aprops = '', $style = ''
- ) {
- wfDeprecated( __METHOD__, '1.21' );
-
- if ( $text == '' ) {
- $text = self::linkText( $title );
- }
- $attribs = Sanitizer::mergeAttributes(
- Sanitizer::decodeTagAttributes( $aprops ),
- Sanitizer::decodeTagAttributes( $style )
- );
- $query = wfCgiToArray( $query );
- list( $inside, $trail ) = self::splitTrail( $trail );
-
- $ret = self::link( $title, "$prefix$text$inside", $attribs, $query,
- array( 'known', 'noclasses' ) ) . $trail;
-
- return $ret;
- }
-
/**
* Returns the attributes for the tooltip and access key.
* @param string $name
/** @var string */
private $mPageTitleActionText = '';
- /** @var array */
- private $mParseWarnings = array();
-
/** @var int Cache stuff. Looks like mEnableClientCache */
protected $mCdnMaxage = 0;
/** @var int Upper limit on mCdnMaxage */
$this->mNewSectionLink = $parserOutput->getNewSection();
$this->mHideNewSectionLink = $parserOutput->getHideNewSection();
- $this->mParseWarnings = $parserOutput->getWarnings();
if ( !$parserOutput->isCacheable() ) {
$this->enableClientCache( false );
}
print $ins;
}
- /**
- * Produce a "user is blocked" page.
- * @deprecated since 1.18
- */
- function blockedPage() {
- wfDeprecated( __METHOD__, '1.18' );
- throw new UserBlockedError( $this->getUser()->mBlock );
- }
-
/**
* Prepare this object to display an error page; disable caching and
* indexing, clear the current text and redirect, set the page's title
$this->returnToMain();
}
- /**
- * Display an error page noting that a given permission bit is required.
- * @deprecated since 1.18, just throw the exception directly
- * @param string $permission Key required
- * @throws PermissionsError
- */
- public function permissionRequired( $permission ) {
- wfDeprecated( __METHOD__, '1.18' );
- throw new PermissionsError( $permission );
- }
-
/**
* Format a list of error messages
*
$this->addWikiText( $s );
}
- /**
- * Include jQuery core. Use this to avoid loading it multiple times
- * before we get a usable script loader.
- *
- * @param array $modules List of jQuery modules which should be loaded
- * @return array The list of modules which were not loaded.
- * @since 1.16
- * @deprecated since 1.17
- */
- public function includeJQuery( array $modules = array() ) {
- wfDeprecated( __METHOD__, '1.17' );
- return array();
- }
-
/**
* Enables/disables TOC, doesn't override __NOTOC__
* @param bool $flag
$this->getModuleManager()->addModule( $name, 'format', $class );
}
- /**
- * Get the array mapping module names to class names
- * @deprecated since 1.21, Use getModuleManager()'s methods instead.
- * @return array
- */
- function getModules() {
- return $this->getModuleManager()->getNamesWithClasses( 'action' );
- }
-
/**
* Returns the list of supported formats in form ( 'format' => 'ClassName' )
*
return $this->mPageSet;
}
- /**
- * Get the array mapping module names to class names
- * @deprecated since 1.21, use getModuleManager()'s methods instead
- * @return array Array(modulename => classname)
- */
- public function getModules() {
- wfDeprecated( __METHOD__, '1.21' );
-
- return $this->getModuleManager()->getNamesWithClasses();
- }
-
/**
* Get the generators array mapping module names to class names
* @deprecated since 1.21, list of generators is maintained by ApiPageSet
}
}
- /**
- * Check whether to enable recent changes patrol features
- *
- * @deprecated since 1.22
- * @return bool
- */
- public static function usePatrol() {
- global $wgUser;
-
- wfDeprecated( __METHOD__, '1.22' );
-
- return $wgUser->useRCPatrol();
- }
-
/**
* Returns the string which indicates the number of watching users
* @param int $count Number of user watching a page
return false;
}
+ /**
+ * Same as self::show with the difference, that the form will be
+ * added to the output, no matter, if the validation was good or not.
+ * @return bool|Status Whether submission was successful.
+ */
+ function showAlways() {
+ $this->prepareForm();
+
+ $result = $this->tryAuthorizedSubmit();
+
+ $this->displayForm( $result );
+
+ return $result;
+ }
+
/**
* Validate all the fields, and call the submission callback
* function if everything is kosher.
*/
public function setSubmitDestructive() {
$this->mSubmitFlags = array( 'destructive', 'primary' );
+
+ return $this;
}
/**
*/
public function setSubmitProgressive() {
$this->mSubmitFlags = array( 'progressive', 'primary' );
+
+ return $this;
}
/**
foreach ( $oldoptions as $text => $data ) {
$options[] = array(
- 'data' => $data,
- 'label' => $text,
+ 'data' => (string)$data,
+ 'label' => (string)$text,
);
}
$page = WikiPage::factory( $this->title );
$page->loadPageData( 'fromdbmaster' );
if ( !$page->exists() ) {
- # must create the page...
+ // must create the page...
$pageId = $page->insertOn( $dbw );
$created = true;
$oldcountable = null;
}
}
+ if ( !$pageId ) {
+ // This seems to happen if two clients simultaneously try to import the
+ // same page
+ wfDebug( __METHOD__ . ': got invalid $pageId when importing revision of [[' .
+ $this->title->getPrefixedText() . ']], timestamp ' . $this->timestamp . "\n" );
+ return false;
+ }
+
// Select previous version to make size diffs correct
+ // @todo This assumes that multiple revisions of the same page are imported
+ // in order from oldest to newest.
$prevId = $dbw->selectField( 'revision', 'rev_id',
array(
'rev_page' => $pageId,
wfDebug( __METHOD__ . ": Could not fetch remote file.\n" );
return false;
}
+ $sha1File = ltrim( sha1_file( $source ), '0' );
$sha1 = $this->getSha1();
- if ( $sha1 && ( $sha1 !== sha1_file( $source ) ) ) {
+ if ( $sha1 && ( $sha1 !== $sha1File ) ) {
if ( $flags & File::DELETE_SOURCE ) {
# Broken file; delete it if it is a temporary file
unlink( $source );
return in_array( $type, LogPage::validTypes() );
}
- /**
- * Get the name for the given log type
- *
- * @param string $type Log type
- * @return string Log name
- * @deprecated since 1.19, warnings in 1.21. Use getName()
- */
- public static function logName( $type ) {
- global $wgLogNames;
-
- wfDeprecated( __METHOD__, '1.21' );
-
- if ( isset( $wgLogNames[$type] ) ) {
- return str_replace( '_', ' ', wfMessage( $wgLogNames[$type] )->text() );
- } else {
- // Bogus log types? Perhaps an extension was removed.
- return $type;
- }
- }
-
- /**
- * Get the log header for the given log type
- *
- * @todo handle missing log types
- * @param string $type Logtype
- * @return string Header text of this logtype
- * @deprecated since 1.19, warnings in 1.21. Use getDescription()
- */
- public static function logHeader( $type ) {
- global $wgLogHeaders;
-
- wfDeprecated( __METHOD__, '1.21' );
-
- return wfMessage( $wgLogHeaders[$type] )->parse();
- }
-
/**
* Generate text for a log entry.
* Only LogFormatter should call this function.
}
}
- /**
- * This function is called right before saving the wikitext,
- * so we can do things like signatures and links-in-context.
- *
- * @deprecated since 1.19; use Parser::preSaveTransform() instead
- * @param string $text Article contents
- * @param User $user User doing the edit
- * @param ParserOptions $popts Parser options, default options for
- * the user loaded if null given
- * @return string Article contents with altered wikitext markup (signatures
- * converted, {{subst:}}, templates, etc.)
- */
- public function preSaveTransform( $text, User $user = null, ParserOptions $popts = null ) {
- global $wgParser, $wgUser;
-
- wfDeprecated( __METHOD__, '1.19' );
-
- $user = is_null( $user ) ? $wgUser : $user;
-
- if ( $popts === null ) {
- $popts = ParserOptions::newFromUser( $user );
- }
-
- return $wgParser->preSaveTransform( $text, $this->mTitle, $user, $popts );
- }
-
- /**
- * Update the article's restriction field, and leave a log entry.
- *
- * @deprecated since 1.19
- * @param array $limit Set of restriction keys
- * @param string $reason
- * @param int &$cascade Set to false if cascading protection isn't allowed.
- * @param array $expiry Per restriction type expiration
- * @param User $user The user updating the restrictions
- * @return bool True on success
- */
- public function updateRestrictions(
- $limit = array(), $reason = '', &$cascade = 0, $expiry = array(), User $user = null
- ) {
- global $wgUser;
-
- $user = is_null( $user ) ? $wgUser : $user;
-
- return $this->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user )->isOK();
- }
-
/**
* Returns a list of updates to be performed when this page is deleted. The
* updates should remove any information about this page from secondary data
}
/**
- * @todo FIXME: Update documentation. makeLinkObj() is deprecated.
* Replace "<!--LINK-->" link placeholders with actual links, in the buffer
- * Placeholders created in Skin::makeLinkObj()
+ * Placeholders created in Linker::link()
*
* @param string $text
* @param int $options
'AvailableRights',
'ContentHandlers',
'ConfigRegistry',
+ 'CentralIdLookupProviders',
'RateLimits',
'RecentChangesFlags',
'MediaHandlers',
'APIPropModules',
'APIListModules',
'ValidSkinNames',
+ 'FeedClasses',
);
/**
'wgGroupPermissions' => 'array_plus_2d',
'wgRevokePermissions' => 'array_plus_2d',
'wgHooks' => 'array_merge_recursive',
- // credits are handled in the ExtensionRegistry
- // 'wgExtensionCredits' => 'array_merge_recursive',
+ 'wgExtensionCredits' => 'array_merge_recursive',
'wgExtraGenderNamespaces' => 'array_plus',
'wgNamespacesWithSubpages' => 'array_plus',
'wgNamespaceContentModels' => 'array_plus',
}
$this->credits[$name] = $credits;
+ $this->globals['wgExtensionCredits'][$credits['type']][] = $credits;
}
/**
/**
* Bump whenever the registration cache needs resetting
*/
- const CACHE_VERSION = 2;
+ const CACHE_VERSION = 3;
/**
* Special key that defines the merge strategy
$data = $processor->getExtractedInfo();
// Need to set this so we can += to it later
$data['globals']['wgAutoloadClasses'] = array();
- foreach ( $data['credits'] as $credit ) {
- $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
- }
- $data['globals']['wgExtensionCredits'][self::MERGE_STRATEGY] = 'array_merge_recursive';
$data['autoload'] = $autoloadClasses;
$data['autoloaderPaths'] = $autoloaderPaths;
return $data;
--- /dev/null
+<?php
+/**
+ * A SearchResultSet wrapper for SearchEngine::getNearMatch
+ */
+class SearchNearMatchResultSet extends SearchResultSet {
+ private $fetched = false;
+
+ /**
+ * @param Title|null $match Title if matched, else null
+ */
+ public function __construct( $match ) {
+ $this->result = $match;
+ }
+
+ public function numRows() {
+ return $this->result ? 1 : 0;
+ }
+
+ public function next() {
+ if ( $this->fetched || !$this->result ) {
+ return false;
+ }
+ $this->fetched = true;
+ return SearchResult::newFromTitle( $this->result );
+ }
+}
return $this->containedSyntax;
}
}
-
-/**
- * This class is used for different SQL-based search engines shipped with MediaWiki
- * @ingroup Search
- */
-class SqlSearchResultSet extends SearchResultSet {
- protected $resultSet;
- protected $terms;
- protected $totalHits;
-
- function __construct( $resultSet, $terms, $total = null ) {
- $this->resultSet = $resultSet;
- $this->terms = $terms;
- $this->totalHits = $total;
- }
-
- function termMatches() {
- return $this->terms;
- }
-
- function numRows() {
- if ( $this->resultSet === false ) {
- return false;
- }
-
- return $this->resultSet->numRows();
- }
-
- function next() {
- if ( $this->resultSet === false ) {
- return false;
- }
-
- $row = $this->resultSet->fetchObject();
- if ( $row === false ) {
- return false;
- }
-
- return SearchResult::newFromTitle(
- Title::makeTitle( $row->page_namespace, $row->page_title )
- );
- }
-
- function free() {
- if ( $this->resultSet === false ) {
- return false;
- }
-
- $this->resultSet->free();
- }
-
- function getTotalHits() {
- if ( !is_null( $this->totalHits ) ) {
- return $this->totalHits;
- } else {
- // Special:Search expects a number here.
- return $this->numRows();
- }
- }
-}
-
-/**
- * A SearchResultSet wrapper for SearchEngine::getNearMatch
- */
-class SearchNearMatchResultSet extends SearchResultSet {
- private $fetched = false;
-
- /**
- * @param Title|null $match Title if matched, else null
- */
- public function __construct( $match ) {
- $this->result = $match;
- }
-
- public function numRows() {
- return $this->result ? 1 : 0;
- }
-
- public function next() {
- if ( $this->fetched || !$this->result ) {
- return false;
- }
- $this->fetched = true;
- return SearchResult::newFromTitle( $this->result );
- }
-}
--- /dev/null
+<?php
+/**
+ * This class is used for different SQL-based search engines shipped with MediaWiki
+ * @ingroup Search
+ */
+class SqlSearchResultSet extends SearchResultSet {
+ protected $resultSet;
+ protected $terms;
+ protected $totalHits;
+
+ function __construct( $resultSet, $terms, $total = null ) {
+ $this->resultSet = $resultSet;
+ $this->terms = $terms;
+ $this->totalHits = $total;
+ }
+
+ function termMatches() {
+ return $this->terms;
+ }
+
+ function numRows() {
+ if ( $this->resultSet === false ) {
+ return false;
+ }
+
+ return $this->resultSet->numRows();
+ }
+
+ function next() {
+ if ( $this->resultSet === false ) {
+ return false;
+ }
+
+ $row = $this->resultSet->fetchObject();
+ if ( $row === false ) {
+ return false;
+ }
+
+ return SearchResult::newFromTitle(
+ Title::makeTitle( $row->page_namespace, $row->page_title )
+ );
+ }
+
+ function free() {
+ if ( $this->resultSet === false ) {
+ return false;
+ }
+
+ $this->resultSet->free();
+ }
+
+ function getTotalHits() {
+ if ( !is_null( $this->totalHits ) ) {
+ return $this->totalHits;
+ } else {
+ // Special:Search expects a number here.
+ return $this->numRows();
+ }
+ }
+}
$out = $this->getOutput();
$lang = $this->getLanguage();
$out->setPageTitle( $this->msg( 'ipblocklist' ) );
- $out->addModuleStyles( 'mediawiki.special' );
- $out->addModules( 'mediawiki.userSuggest' );
+ $out->addModuleStyles( array( 'mediawiki.special', 'mediawiki.special.blocklist' ) );
$request = $this->getRequest();
$par = $request->getVal( 'ip', $par );
# Just show the block list
$fields = array(
'Target' => array(
- 'type' => 'text',
+ 'type' => 'user',
'label-message' => 'ipaddressorusername',
'tabindex' => '1',
'size' => '45',
'default' => $this->target,
- 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
),
'Options' => array(
'type' => 'multiselect',
);
$context = new DerivativeContext( $this->getContext() );
$context->setTitle( $this->getPageTitle() ); // Remove subpage
- $form = new HTMLForm( $fields, $context );
+ $form = HTMLForm::factory( 'ooui', $fields, $context );
$form->setMethod( 'get' );
$form->setWrapperLegendMsg( 'ipblocklist-legend' );
$form->setSubmitTextMsg( 'ipblocklist-submit' );
$this->outputHeader();
# Form (.mw-searchInput enables suggestions)
- $form = new HTMLForm( array(
+ $form = HTMLForm::factory( 'ooui', array(
'Page1' => array(
- 'type' => 'text',
+ 'type' => 'title',
'name' => 'page1',
- 'cssclass' => 'mw-searchInput',
'label-message' => 'compare-page1',
'size' => '40',
'section' => 'page1',
'validation-callback' => array( $this, 'checkExistingRevision' ),
),
'Page2' => array(
- 'type' => 'text',
+ 'type' => 'title',
'name' => 'page2',
- 'cssclass' => 'mw-searchInput',
'label-message' => 'compare-page2',
'size' => '40',
'section' => 'page2',
$user = $this->getUser();
$out = $this->getOutput();
- if ( $this->getRequest()->wasPosted() &&
- $user->matchEditToken( $this->getRequest()->getText( 'token' ) )
- ) {
- $status = $user->sendConfirmationMail();
- if ( $status->isGood() ) {
+ if ( !$user->isEmailConfirmed() ) {
+ $descriptor = array();
+ if ( $user->isEmailConfirmationPending() ) {
+ $descriptor += array(
+ 'pending' => array(
+ 'type' => 'info',
+ 'raw' => true,
+ 'default' => "<div class=\"error mw-confirmemail-pending\">\n" .
+ $this->msg( 'confirmemail_pending' )->escaped() .
+ "\n</div>",
+ ),
+ );
+ }
+
+ $out->addWikiMsg( 'confirmemail_text' );
+ $form = HTMLForm::factory( 'ooui', $descriptor, $this->getContext() );
+ $form
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle()->getLocalURL() )
+ ->setSubmitTextMsg( 'confirmemail_send' )
+ ->setSubmitCallback( array( $this, 'submitSend' ) );
+
+ $retval = $form->show();
+
+ if ( $retval === true ) {
+ // should never happen, but if so, don't let the user without any message
$out->addWikiMsg( 'confirmemail_sent' );
- } else {
- $out->addWikiText( $status->getWikiText( 'confirmemail_sendfailed' ) );
+ } elseif ( $retval instanceof Status && $retval->isGood() ) {
+ $out->addWikiText( $retval->getValue() );
}
- } elseif ( $user->isEmailConfirmed() ) {
+ } else {
// date and time are separate parameters to facilitate localisation.
// $time is kept for backward compat reasons.
// 'emailauthenticated' is also used in SpecialPreferences.php
$d = $lang->userDate( $emailAuthenticated, $user );
$t = $lang->userTime( $emailAuthenticated, $user );
$out->addWikiMsg( 'emailauthenticated', $time, $d, $t );
- } else {
- if ( $user->isEmailConfirmationPending() ) {
- $out->wrapWikiMsg(
- "<div class=\"error mw-confirmemail-pending\">\n$1\n</div>",
- 'confirmemail_pending'
- );
- }
+ }
+ }
- $out->addWikiMsg( 'confirmemail_text' );
- $form = Html::openElement(
- 'form',
- array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalURL() )
- ) . "\n";
- $form .= Html::hidden( 'token', $user->getEditToken() ) . "\n";
- $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() ) . "\n";
- $form .= Html::closeElement( 'form' ) . "\n";
- $out->addHTML( $form );
+ /**
+ * Callback for HTMLForm send confirmation mail.
+ *
+ * @return Status Status object with the result
+ */
+ public function submitSend() {
+ $status = $this->getUser()->sendConfirmationMail();
+ if ( $status->isGood() ) {
+ return Status::newGood( $this->msg( 'confirmemail_sent' )->text() );
+ } else {
+ return Status::newFatal( new RawMessage(
+ $status->getWikiText( 'confirmemail_sendfailed' )
+ ) );
}
}
'Text' => array(
'type' => 'textarea',
'rows' => 20,
- 'cols' => 80,
'label-message' => 'emailmessage',
'required' => true,
),
public function execute( $par ) {
$out = $this->getOutput();
+ $request = $this->getRequest();
$out->addModuleStyles( 'mediawiki.special' );
$this->mTarget = is_null( $par )
- ? $this->getRequest()->getVal( 'wpTarget', $this->getRequest()->getVal( 'target', '' ) )
+ ? $request->getVal( 'wpTarget', '' )
: $par;
+ // make sure, that HTMLForm uses the correct target
+ $request->setVal( 'wpTarget', $this->mTarget );
+
// This needs to be below assignment of $this->mTarget because
// getDescription() needs it to determine the correct page title.
$this->setHeaders();
list( $title, $msg, $params ) = $error;
throw new ErrorPageError( $title, $msg, $params );
}
- // Got a valid target user name? Else ask for one.
- $ret = self::getTarget( $this->mTarget );
- if ( !$ret instanceof User ) {
- if ( $this->mTarget != '' ) {
- // Messages used here: notargettext, noemailtext, nowikiemailtext
- $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
- $out->wrapWikiMsg( "<p class='error'>$1</p>", $ret );
- }
- $out->addHTML( $this->userForm( $this->mTarget ) );
-
- return;
- }
- $this->mTargetObj = $ret;
-
- $context = new DerivativeContext( $this->getContext() );
- $context->setTitle( $this->getPageTitle() ); // Remove subpage
- $form = new HTMLForm( $this->getFormFields(), $context );
- // By now we are supposed to be sure that $this->mTarget is a user name
- $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
- $form->setSubmitTextMsg( 'emailsend' );
- $form->setSubmitCallback( array( __CLASS__, 'uiSubmit' ) );
- $form->setWrapperLegendMsg( 'email-legend' );
- $form->loadData();
-
- if ( !Hooks::run( 'EmailUserForm', array( &$form ) ) ) {
- return;
- }
-
- $result = $form->show();
-
- if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
- $out->setPageTitle( $this->msg( 'emailsent' ) );
- $out->addWikiMsg( 'emailsenttext', $this->mTarget );
- $out->returnToMain( false, $this->mTargetObj->getUserPage() );
+ // a little hack: HTMLForm will check $this->mTarget only, if the form was posted, not
+ // if the user opens Special:EmailUser/Florian (e.g.). So check, if the user did that,
+ // and show the "Send email to user" form directly, if so. Show the "enter username"
+ // form, otherwise.
+ $this->mTargetObj = self::getTarget( $this->mTarget );
+ if ( !$this->mTargetObj instanceof User ) {
+ $this->userForm( $this->mTarget );
+ } else {
+ $this->sendEmailForm();
}
}
* @return string Form asking for user name.
*/
protected function userForm( $name ) {
- $this->getOutput()->addModules( 'mediawiki.userSuggest' );
- $string = Xml::openElement(
- 'form',
- array( 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' )
- ) .
- Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
- Xml::openElement( 'fieldset' ) .
- Html::rawElement( 'legend', null, $this->msg( 'emailtarget' )->parse() ) .
- Xml::inputLabel(
- $this->msg( 'emailusername' )->text(),
- 'target',
- 'emailusertarget',
- 30,
- $name,
- array(
- 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
- 'autofocus' => true,
- )
- ) .
- ' ' .
- Xml::submitButton( $this->msg( 'emailusernamesubmit' )->text() ) .
- Xml::closeElement( 'fieldset' ) .
- Xml::closeElement( 'form' ) . "\n";
-
- return $string;
+ $form = HTMLForm::factory( 'ooui', array(
+ 'Target' => array(
+ 'type' => 'user',
+ 'exists' => true,
+ 'label' => $this->msg( 'emailusername' )->text(),
+ 'id' => 'emailusertarget',
+ 'autofocus' => true,
+ 'value' => $name,
+ ),
+ ), $this->getContext() );
+
+ $form
+ ->setMethod( 'post' )
+ ->setSubmitCallback( array( $this, 'sendEmailForm' ) )
+ ->setSubmitProgressive()
+ ->setId( 'askusername' )
+ ->addHiddenField( 'title', $this->getPageTitle()->getPrefixedText() )
+ ->setWrapperLegendMsg( 'emailtarget' )
+ ->setSubmitTextMsg( 'emailusernamesubmit' )
+ ->show();
+ }
+
+ public function sendEmailForm() {
+ $out = $this->getOutput();
+
+ $ret = $this->mTargetObj;
+ if ( !$ret instanceof User ) {
+ if ( $this->mTarget != '' ) {
+ // Messages used here: notargettext, noemailtext, nowikiemailtext
+ $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
+ return Status::newFatal( $ret );
+ }
+ return false;
+ }
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+ $form = HTMLForm::factory( 'ooui', $this->getFormFields(), $context );
+ // By now we are supposed to be sure that $this->mTarget is a user name
+ $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
+ $form->setSubmitTextMsg( 'emailsend' );
+ $form->setSubmitCallback( array( __CLASS__, 'uiSubmit' ) );
+ $form->setWrapperLegendMsg( 'email-legend' );
+ $form->loadData();
+
+ if ( !Hooks::run( 'EmailUserForm', array( &$form ) ) ) {
+ return false;
+ }
+
+ $result = $form->show();
+
+ if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
+ $out->setPageTitle( $this->msg( 'emailsent' ) );
+ $out->addWikiMsg( 'emailsenttext', $this->mTarget );
+ $out->returnToMain( false, $ret->getUserPage() );
+ }
+ return true;
}
/**
}
$out = $this->getOutput();
- $out->addWikiMsg( 'expand_templates_intro' );
- $out->addHTML( $this->makeForm( $titleStr, $input ) );
+
+ $this->makeForm( $titleStr, $input );
if ( $output !== false ) {
if ( $this->generateXML && strlen( $output ) > 0 ) {
}
}
+ /**
+ * Callback for the HTMLForm used in self::makeForm.
+ * Checks, if the input was given, and if not, returns a fatal Status
+ * object with an error message.
+ *
+ * @param array $values The values submitted to the HTMLForm
+ * @return Status
+ */
+ public function onSubmitInput( array $values ) {
+ $status = Status::newGood();
+ if ( !strlen( $values['input'] ) ) {
+ $status = Status::newFatal( 'expand_templates_input_missing' );
+ }
+ return $status;
+ }
+
/**
* Generate a form allowing users to enter information
*
* @return string
*/
private function makeForm( $title, $input ) {
- $self = $this->getPageTitle();
- $request = $this->getRequest();
- $user = $this->getUser();
-
- $form = Xml::openElement(
- 'form',
- array( 'method' => 'post', 'action' => $self->getLocalUrl() )
- );
- $form .= "<fieldset><legend>" . $this->msg( 'expandtemplates' )->escaped() . "</legend>\n";
-
- $form .= '<p>' . Xml::inputLabel(
- $this->msg( 'expand_templates_title' )->plain(),
- 'wpContextTitle',
- 'contexttitle',
- 60,
- $title,
- array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
- ) . '</p>';
- $form .= '<p>' . Xml::label(
- $this->msg( 'expand_templates_input' )->text(),
- 'input'
- ) . '</p>';
- $form .= Xml::textarea(
- 'wpInput',
- $input,
- 10,
- 10,
- array( 'id' => 'input' )
+ $fields = array(
+ 'contexttitle' => array(
+ 'type' => 'text',
+ 'label' => $this->msg( 'expand_templates_title' )->plain(),
+ 'name' => 'wpContextTitle',
+ 'id' => 'contexttitle',
+ 'size' => 60,
+ 'default' => $title,
+ 'autofocus' => true,
+ 'cssclass' => 'mw-ui-input-inline',
+ ),
+ 'input' => array(
+ 'type' => 'textarea',
+ 'name' => 'wpInput',
+ 'label-message' => 'expand_templates_input',
+ 'rows' => 10,
+ 'default' => $input,
+ 'id' => 'input',
+ ),
+ 'removecomments' => array(
+ 'type' => 'check',
+ 'label-message' => 'expand_templates_remove_comments',
+ 'name' => 'wpRemoveComments',
+ 'id' => 'removecomments',
+ 'default' => $this->removeComments,
+ ),
+ 'removenowiki' => array(
+ 'type' => 'check',
+ 'label-message' => 'expand_templates_remove_nowiki',
+ 'name' => 'wpRemoveNowiki',
+ 'id' => 'removenowiki',
+ 'default' => $this->removeNowiki,
+ ),
+ 'generate_xml' => array(
+ 'type' => 'check',
+ 'label-message' => 'expand_templates_generate_xml',
+ 'name' => 'wpGenerateXml',
+ 'id' => 'generate_xml',
+ 'default' => $this->generateXML,
+ ),
+ 'generate_rawhtml' => array(
+ 'type' => 'check',
+ 'label-message' => 'expand_templates_generate_rawhtml',
+ 'name' => 'wpGenerateRawHtml',
+ 'id' => 'generate_rawhtml',
+ 'default' => $this->generateRawHtml,
+ ),
);
- $form .= '<p>' . Xml::checkLabel(
- $this->msg( 'expand_templates_remove_comments' )->text(),
- 'wpRemoveComments',
- 'removecomments',
- $this->removeComments
- ) . '</p>';
- $form .= '<p>' . Xml::checkLabel(
- $this->msg( 'expand_templates_remove_nowiki' )->text(),
- 'wpRemoveNowiki',
- 'removenowiki',
- $this->removeNowiki
- ) . '</p>';
- $form .= '<p>' . Xml::checkLabel(
- $this->msg( 'expand_templates_generate_xml' )->text(),
- 'wpGenerateXml',
- 'generate_xml',
- $this->generateXML
- ) . '</p>';
- $form .= '<p>' . Xml::checkLabel(
- $this->msg( 'expand_templates_generate_rawhtml' )->text(),
- 'wpGenerateRawHtml',
- 'generate_rawhtml',
- $this->generateRawHtml
- ) . '</p>';
- $form .= '<p>' . Xml::submitButton(
- $this->msg( 'expand_templates_ok' )->text(),
- array( 'accesskey' => 's' )
- ) . '</p>';
- $form .= "</fieldset>\n";
- $form .= Html::hidden( 'wpEditToken', $user->getEditToken( '', $request ) );
- $form .= Xml::closeElement( 'form' );
-
- return $form;
+ $form = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
+ $form
+ ->setSubmitTextMsg( 'expand_templates_ok' )
+ ->setWrapperLegendMsg( 'expandtemplates' )
+ ->setHeaderText( $this->msg( 'expand_templates_intro' )->text() )
+ ->setSubmitCallback( array( $this, 'onSubmitInput' ) )
+ ->showAlways();
}
/**
'textarea' => array(
'class' => 'HTMLTextAreaField',
'name' => 'pages',
+ 'label-message' => 'export-manual',
'nodata' => true,
- 'cols' => 40,
'rows' => 10,
'default' => $page,
),
);
}
- $htmlForm = HTMLForm::factory( 'div', $formDescriptor, $this->getContext() );
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
$htmlForm->setSubmitTextMsg( 'export-submit' );
$htmlForm->prepareForm()->displayForm( false );
$this->addHelpLink( 'Help:Export' );
}
}
- /**
- * Get the current skin, loading it if required
- * @return Skin The current skin
- * @todo FIXME: Need to check the old failback system [AV]
- * @deprecated since 1.18 Use ->getSkin() in the most relevant outputting context you have
- */
- public function getSkin() {
- wfDeprecated( __METHOD__, '1.18' );
- return RequestContext::getMain()->getSkin();
- }
-
/**
* Get a WatchedItem for this user and $title.
*
"wlshowlast": "Паказаць за апошнія $1 гадзінаў, $2 дзён",
"watchlistall2": "усё",
"watchlist-hide": "Схаваць",
+ "watchlist-submit": "Паказаць",
"wlshowtime": "Пэрыяд часу для паказу:",
"wlshowhideminor": "дробныя праўкі",
"wlshowhidebots": "робатаў",
"wlshowhideanons": "ананімных удзельнікаў",
"wlshowhidepatr": "патруляваныя праўкі",
"wlshowhidemine": "мае праўкі",
+ "wlshowhidecategorization": "катэгарызацыю старонак",
"watchlist-options": "Налады сьпісу назіраньня",
"watching": "Дадаецца ў сьпіс назіраньня…",
"unwatching": "Выдаляецца са сьпісу назіраньня…",
"createacct-benefit-body3": "{{PLURAL:$1|декъашхо|декъашхой}} тӀаьхьарчу хенахь",
"badretype": "Ахьа язъен паролаш цхьатерра яц",
"userexists": "Ахьа язъен декъашхочун цӀе йолуш ю, дехар до кхин цӀе харжар.",
- "loginerror": "Ð\93Ó\80алаÑ\82 дÑ\83 декÑ\8aаÑ\88Ñ\85о вовзаÑ\80еÑ\85Ñ\8c/йовзаÑ\80еÑ\85Ñ\8c",
+ "loginerror": "ЦÓ\80е Ñ\8f паÑ\80олÑ\8c нийÑ\81а Ñ\8fÑ\86",
"createacct-error": "ДӀаяздар кхуллуш гӀалат ду",
"createaccounterror": "Декъашхочун дӀаяздар кхолла йиш яц: $1",
"nocookiesnew": "Декъашхочун дӀаяздар ду амма системин чохь вац/яц. Декъашхой чу гӀош {{SITENAME}} «cookies» лелош ю. Хьа «cookies» лелаян магийна дац дехар до и магийтина керлачу цӀарца а паролаца а системин чугӀо.",
"nocookieslogin": "{{SITENAME}} лелош ю «cookies» декъашхой системин чуболучу хенахь. Ахьа иш дӀайаьйина.",
"nocookiesfornew": "Хьост хьажа йиш цахиларна декъашхочун дӀаяздар цакхоьллина. Хьажа «cookies» латина юьй такха агӀо карлаяьккхина юху гӀорта.",
"nocookiesforlogin": "{{int:nocookieslogin}}",
- "noname": "Ð\90Ñ\85Ñ\8cа магийÑ\82ина йолÑ\83 декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е билгал йина яц.",
+ "noname": "Ð\90Ñ\85Ñ\8cа декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е лаÑ\80Ñ\82Ó\80аÑ\85Ñ\8c Ñ\8fзйина яц.",
"loginsuccesstitle": "Хьан пароль тӀеэца, марша догӀила Википеди чу!",
"loginsuccess": "Хlинца ахьа болх бó оцу цlарца $1.",
"nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀерш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
"nosuchusershort": "Ишта «$1» цӀе йолу декъашхо вац/яц. Хьажа цӀе нийса язйина юй.",
- "nouserspecified": "Ахьа декъашхочун цӀе билгал ян езаш ю.",
+ "nouserspecified": "Ахьа декъашхочун цӀе язъян езаш ю.",
"login-userblocked": "ХӀара декъашхо блоктоьхна ву/ю. Системин чувала/яла магийна дац.",
"wrongpassword": "Ахьа язйина йолу пароль нийса яц. Хьажа юху цхьаъз.",
"wrongpasswordempty": "Дехар до, язъе еса йоцу пароль.",
"sp-contributions-newbies": "Гайта бекъ къинхьегам, керла дlабазбиначара бина болу",
"sp-contributions-newbies-sub": "Керла декъашхойн дӀаяздаршкара",
"sp-contributions-newbies-title": "Дукху хан йоцуш кхоьллинчу декъашхойн дӀаяздарийн къинхьегам",
- "sp-contributions-blocklog": "блоктоьхарш",
+ "sp-contributions-blocklog": "блокÑ\82оÑ\8cÑ\85наÑ\80Ñ\88",
"sp-contributions-suppresslog": "Декъашхочун дӀабаьккхина къинхьегам",
"sp-contributions-deleted": "дӀадяхна нийсдарш",
"sp-contributions-uploads": "Файлаш",
"change-blocklink": "хийцам бе блоктохарна",
"contribslink": "къинхьегам",
"emaillink": "дӀадахьийта кехат",
- "blocklogpage": "Блоктоьхарш болу тептар",
+ "blocklogpage": "Ð\91локÑ\82оÑ\8cÑ\85наÑ\80Ñ\88 болÑ\83 Ñ\82епÑ\82аÑ\80",
"blocklog-showlog": "{{GENDER:$1|ХӀокху декъашхочун хьалхо блоктоьхна хила}}.\nЛахахь гойту блоктохарш долу тептар:",
"blocklogentry": "блоктоьхна [[$1]] цхьана ханна $2 $3",
"reblock-logentry": "Хийцина блоктоьхна хан [[$1]] $2 $3",
- "blocklogtext": "Ð\91локÑ\82оÑ\85аÑ\80Ñ\88на а блокдÓ\80аÑ\8fкÑ\85аÑ\80Ñ\88на а Ñ\82епÑ\82аÑ\80. Ша блоккÑ\85еÑ\82аÑ\88 долÑ\83 IP-адÑ\80еÑ\81аÑ\88 кÑ\85Ñ\83заÑ\85Ñ\8c гойÑ\82Ñ\83Ñ\88 даÑ\86. Ð\9aÑ\85ин. [[Special:BlockList|Ñ\85Ó\80ийнÑ\86а блокÑ\82оÑ\8cÑ\85а берш]].",
+ "blocklogtext": "Ð\91локÑ\82оÑ\85аÑ\80Ñ\88на а блокдÓ\80аÑ\8fкÑ\85аÑ\80Ñ\88на а Ñ\82епÑ\82аÑ\80. Ша блоккÑ\85еÑ\82аÑ\88 долÑ\83 IP-адÑ\80еÑ\81аÑ\88 кÑ\85Ñ\83заÑ\85Ñ\8c гойÑ\82Ñ\83Ñ\88 даÑ\86. Ð\9aÑ\85ин. [[Special:BlockList|Ñ\85Ó\80инÑ\86а блокÑ\82оÑ\8cÑ\85нарш]].",
"unblocklogentry": "дӀаяькхинаблок $1",
"block-log-flags-anononly": "Къайлаха берш",
"block-log-flags-nocreate": "цамагдо керла дӏаяздарш кхоллар",
"upload-form-label-select-file": "Datei auswählen",
"upload-form-label-infoform-title": "Einzelheiten",
"upload-form-label-infoform-name": "Name",
+ "upload-form-label-infoform-name-tooltip": "Ein eindeutiger erklärender Titel für die Datei, die als Dateiname angeboten wird. Du musst reine Sprache mit Leerzeichen verwenden. Nicht die Dateierweiterung einschließen.",
"upload-form-label-infoform-description": "Beschreibung",
+ "upload-form-label-infoform-description-tooltip": "Beschreibe kurz alles bedeutende über das Werk.\nErwähne für ein Foto die abgebildeten hauptsächlichen Dinge, das Ereignis oder den Ort.",
"upload-form-label-usage-title": "Verwendung",
"upload-form-label-usage-filename": "Dateiname",
"foreign-structured-upload-form-label-own-work": "Dies ist mein eigenes Werk",
"export-download": "Als XML-Datei speichern",
"export-templates": "Inklusive Vorlagen",
"export-pagelinks": "Verlinkte Seiten automatisch mit exportieren, bis zur Rekursionstiefe von:",
+ "export-manual": "Seiten manuell hinzufügen:",
"allmessages": "MediaWiki-Systemnachrichten",
"allmessagesname": "Name",
"allmessagesdefault": "Standardtext",
"expand_templates_preview": "Vorschau",
"expand_templates_preview_fail_html": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und es einen Verlust deiner Sitzungsdaten gab, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, versuche es bitte erneut.</strong>\nFalls dieses Problem weiterhin bestehen bleibt, versuche dich [[Special:UserLogout|abzumelden]] und erneut anzumelden.",
"expand_templates_preview_fail_html_anon": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und du nicht angemeldet bist, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, [[Special:UserLogin|melde dich bitte an]] und versuche es erneut.</strong>",
+ "expand_templates_input_missing": "Du musst mindestens einen Eingabetext angeben.",
"pagelanguage": "Seitensprachenauswahl",
"pagelang-name": "Seite",
"pagelang-language": "Sprache",
"disclaimers": "Redê mesuliyeti",
"disclaimerpage": "Project:Reddê mesuliyetê bıngey",
"edithelp": "Peştdariya vurnayışi",
- "helppage-top-gethelp": "Desteg",
+ "helppage-top-gethelp": "Peşti",
"mainpage": "Pela Seri",
"mainpage-description": "Pela seri",
"policy-url": "Project:Terzê hereketi",
"export-download": "Save as file",
"export-templates": "Include templates",
"export-pagelinks": "Include linked pages to a depth of:",
+ "export-manual": "Add pages manually:",
"allmessages": "System messages",
"allmessagesname": "Name",
"allmessagesdefault": "Default message text",
"expand_templates_preview": "Preview",
"expand_templates_preview_fail_html": "<em>Because {{SITENAME}} has raw HTML enabled and there was a loss of session data, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please try again.</strong>\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
"expand_templates_preview_fail_html_anon": "<em>Because {{SITENAME}} has raw HTML enabled and you are not logged in, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please [[Special:UserLogin|log in]] and try again.</strong>",
+ "expand_templates_input_missing": "You need to provide at least some input text.",
"pagelanguage": "Page language selector",
"pagelang-name": "Page",
"pagelang-language": "Language",
"upload-form-label-select-file": "یک فایل انتخاب کنید",
"upload-form-label-infoform-title": "جزئیات",
"upload-form-label-infoform-name": "نام",
+ "upload-form-label-infoform-name-tooltip": "یک عنوان توضیحی برای پرونده که به عنوان نام پرونده استفاده میشود. ممکن است از زبان ساده همرا با فاصله استفاده شود. شامل پسوند پرونده نباشد.",
"upload-form-label-infoform-description": "توضیحات",
+ "upload-form-label-infoform-description-tooltip": "به صورت خلاصه هرچیز سرشناسی که در مورد اثر باشد را توضیح دهید.\nبرای تصویر موارد اصلی مانند محل وقوع یا موقعیت را شرح دهید.",
"upload-form-label-usage-title": "کاربرد",
"upload-form-label-usage-filename": "نام پرونده",
"foreign-structured-upload-form-label-own-work": "این کار خودم است",
"export-download": "ذخیره به صورت پرونده",
"export-templates": "شامل شدن الگوها",
"export-pagelinks": "شامل شدن صفحههای پیوند شده تا این عمق:",
+ "export-manual": "افزودن صفحات به صورت دستی:",
"allmessages": "پیغامهای سامانه",
"allmessagesname": "نام",
"allmessagesdefault": "متن پیشفرض پیغام",
"expand_templates_preview": "پیشنمایش",
"expand_templates_preview_fail_html": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
"expand_templates_preview_fail_html_anon": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
+ "expand_templates_input_missing": "شما نیازمندید که حداقل متنهایی را برای وارد کردن تهیه کنید.",
"pagelanguage": "صفحه انتخاب زبان",
"pagelang-name": "صفحه",
"pagelang-language": "زبان",
"passwordreset-emailtext-ip": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou o restablecemento do seu\ncontrasinal de {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
"passwordreset-emailtext-user": "O usuario $1 solicitou o restablecemento do contrasinal de {{SITENAME}}\n($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
"passwordreset-emailelement": "Nome de usuario: \n$1\n\nContrasinal temporal: \n$2",
- "passwordreset-emailsentemail": "Se esta é unha dirección de correo electrónico rexistrada para a súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
- "passwordreset-emailsentusername": "Se hai unha dirección de correo electrónico rexistrada para esta conta, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
+ "passwordreset-emailsentemail": "Se esta é unha dirección de correo electrónico asociada á súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
+ "passwordreset-emailsentusername": "Se hai unha dirección de correo electrónico asociada con este nome de usuario, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
"passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
"passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
"changeemail": "Cambiar ou eliminar o enderezo de correo electrónico",
"mediastatistics": "Estatísticas do contido multimedia",
"mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións vellas ou borradas dos ficheiros quedan excluídas.",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
- "mediastatistics-bytespertype": "Tamaño total de ficheiro para esta sección: $1 bytes.",
- "mediastatistics-allbytes": "Tamaño total de ficheiro para todos os ficheiros: $1 bytes.",
+ "mediastatistics-bytespertype": "Tamaño total de ficheiro para esta sección: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
+ "mediastatistics-allbytes": "Tamaño total de ficheiro para todos os ficheiros: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
"mediastatistics-table-mimetype": "Tipo MIME",
"mediastatistics-table-extensions": "Extensións posibles",
"mediastatistics-table-count": "Número de ficheiros",
"upload-form-label-select-file": "בחירת קובץ",
"upload-form-label-infoform-title": "פרטים",
"upload-form-label-infoform-name": "שם",
+ "upload-form-label-infoform-name-tooltip": "כותרת המהווה תיאור ייחודי לקובץ, שתשמש כשם הקובץ. ניתן להשתמש בשפה טבעית עם רווחים. אין לכלול סיומת קובץ.",
"upload-form-label-infoform-description": "תיאור",
+ "upload-form-label-infoform-description-tooltip": "תיאור קצר של כל העובדות החשובות על הקובץ.\nאם הקובץ הוא תמונה, יש לציין את הדברים העיקריים המתוארים בתמונה, את האירוע, או את המיקום.",
"upload-form-label-usage-title": "שימושים",
"upload-form-label-usage-filename": "שם הקובץ",
"foreign-structured-upload-form-label-own-work": "אני יצרתי את הקובץ",
"export-download": "שמירה כקובץ",
"export-templates": "לכלול תבניות",
"export-pagelinks": "לכלול דפים מקושרים עד לעומק של:",
+ "export-manual": "הוספה ידנית של דפים:",
"allmessages": "הודעות המערכת",
"allmessagesname": "שם",
"allmessagesdefault": "טקסט ברירת המחדל של ההודעה",
"expand_templates_preview": "תצוגה מקדימה",
"expand_templates_preview_fail_html": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ואירע אבדן מידע כניסה, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש לנסות שוב.</strong>\nאם זה עדיין לא עובד, יש לנסות [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס שוב.",
"expand_templates_preview_fail_html_anon": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ולא נכנסת לחשבון, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש [[Special:UserLogin|להיכנס לחשבון]] ולנסות שוב.</strong>",
+ "expand_templates_input_missing": "יש לכתוב טקסט (לפחות טקסט קצר).",
"pagelanguage": "בורר שפת הדף",
"pagelang-name": "דף",
"pagelang-language": "שפה",
"filehist-filesize": "Veličina datoteke",
"filehist-comment": "Komentar",
"imagelinks": "Upotreba datoteke",
- "linkstoimage": "{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedećih stranice povezuju}} na ovu datoteku:",
+ "linkstoimage": "{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedeće stranice povezuju|$1 sljedećih stranica povezuje}} na ovu datoteku:",
"linkstoimage-more": "Više od $1 {{PLURAL:$1|stranice povezuje|stranica povezuje}} na ovu datoteku.\nSljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.\n[[Special:WhatLinksHere/$2|Ovdje se nalazi]] potpuni popis.",
"nolinkstoimage": "Nijedna stranica ne povezuje na ovu sliku.",
"morelinkstoimage": "Pogledaj [[Special:WhatLinksHere/$1|više poveznica]] za ovu datoteku.",
"permalink": "Hivatkozás erre a változatra",
"print": "Nyomtatás",
"view": "Olvasás",
- "view-foreign": "Megtekintés ezen: $1",
+ "view-foreign": "Megtekintés itt: $1",
"edit": "Szerkesztés",
"edit-local": "Helyi leírás szerkesztése",
"create": "Létrehozás",
"Ilham",
"Matma Rex",
"WongKentir",
- "Rachmat.Wahidi"
+ "Rachmat.Wahidi",
+ "Arief"
]
},
"tog-underline": "Garis bawahi pranala:",
"passwordreset-emailtext-ip": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat\ndetail akun untuk {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} berikut\nterkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
"passwordreset-emailtext-user": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat detail akun untuk {{SITENAME}} ($4).\n{{PLURAL:$3|Akun|Akun-akun}} berikut terkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
"passwordreset-emailelement": "Nama pengguna: \n$1\n\nSandi sementara: \n$2",
- "passwordreset-emailsent": "Surel setel ulang kata sandi telah dikirimkan.",
+ "passwordreset-emailsentemail": "Surel setel ulang kata sandi telah dikirimkan.",
"passwordreset-emailsent-capture": "Surel setel ulang kata sandi telah dikirim, yang ditampilkan di bawah.",
"passwordreset-emailerror-capture": "Surel setel ulang kata sandi telah dibuat, yang ditampilkan di bawah, namun pengiriman pada {{GENDER:$2|pengguna}} gagal: $1",
"changeemail": "Ubah alamat surel",
"prefs-help-prefershttps": "Preferensi ini akan diaktifkan kali berikutnya Anda masuk log.",
"prefswarning-warning": "Perubahan preferensi anda belum tersimpan. Apabila anda meninggalkan halaman ini tanpa men-klik \"$1\" preferensi anda tidak akan diperbarui.",
"prefs-tabs-navigation-hint": "Tip: Anda dapat menggunakan tombol panah kiri dan kanan untuk bernavigasi antartab di dalam daftar tab.",
- "email-address-validity-valid": "Alamat surel tampaknya sah",
- "email-address-validity-invalid": "Masukkan alamat surel yang sah",
"userrights": "Manajemen hak pengguna",
"userrights-lookup-user": "Mengatur kelompok pengguna",
"userrights-user-editname": "Masukkan nama pengguna:",
"upload-form-label-select-file": "Pilih berkas",
"upload-form-label-infoform-title": "Rincian",
"upload-form-label-infoform-name": "Nama",
+ "upload-form-label-infoform-name-tooltip": "Judul singkat yang unik untuk berkas, yang akan menjadi nama berkas. Anda dapat gunakan bahasa yang sederhana berikut spasi. Jangan menyertakan ekstensi berkas.",
"upload-form-label-infoform-description": "Deskripsi",
+ "upload-form-label-infoform-description-tooltip": "Jelaskan dengan singkat hal-hal penting tentang karya ini.\nUntuk foto, sebutkan hal-hal utama yang ditampilkan, kesempatan atau tempat yang ditampilkan di foto.",
"upload-form-label-usage-title": "Penggunaan",
"upload-form-label-usage-filename": "Nama berkas",
"foreign-structured-upload-form-label-own-work": "Ini adalah karya saya sendiri",
"movenosubpage": "Halaman ini tak memiliki subhalaman.",
"movereason": "Alasan:",
"revertmove": "batalkan",
- "delete_and_move": "Hapus dan pindahkan",
"delete_and_move_text": "==Penghapusan diperlukan==\nHalaman yang dituju, \"[[:$1]]\", telah mempunyai isi. Apakah Anda hendak menghapusnya untuk memberikan ruang bagi pemindahan?",
"delete_and_move_confirm": "Ya, hapus halaman tersebut",
"delete_and_move_reason": "Dihapus untuk mengantisipasikan pemindahan halaman dari \"[[$1]]\"",
"mediastatistics": "Statistik media",
"mediastatistics-summary": "Statistik mengenai jenis berkas yang diunggah. Hanya mencakup versi terbaru dari berkas. Berkas lama dan berkas yang sudah dihapus tidak termasuk.",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 bita}} ($2; $3%)",
+ "mediastatistics-bytespertype": "Total ukuran file untuk bagian ini: {{PLURAL: $ 1 | $ 1 byte | $ 1 byte}} ($ 2; $ 3%).",
+ "mediastatistics-allbytes": "Total ukuran untuk semua file: {{PLURAL: $ 1 | $ 1 byte | $ 1 byte}} ($ 2).",
"mediastatistics-table-mimetype": "Tipe MIME",
"mediastatistics-table-extensions": "Ekstensi",
"mediastatistics-table-count": "Jumlah file",
"upload-form-label-select-file": "ファイル選択",
"upload-form-label-infoform-title": "詳細",
"upload-form-label-infoform-name": "名前",
+ "upload-form-label-infoform-name-tooltip": "ファイル固有の説明的な表題。ファイル名として使われます。平易な言葉を使い、空白を入れることができます。拡張子は含めないでください。",
"upload-form-label-infoform-description": "説明",
+ "upload-form-label-infoform-description-tooltip": "この作品に対して特筆すべきことをすべて説明します。\n写真であれば、主に何が写っているのか、いつ、どこで撮ったものなのかについて述べてください。",
"upload-form-label-usage-title": "使用法",
"upload-form-label-usage-filename": "ファイル名",
"foreign-structured-upload-form-label-own-work": "これはあなた自身による作業です",
"expand_templates_preview": "プレビュー",
"expand_templates_preview_fail_html": "<em>{{SITENAME}} ではHTMLソースが有効になっており、セッションデータの損失が生じているので、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、もう一度試してください。</strong>\nそれでも動作しない場合は、[[Special:UserLogout|ログアウト]]して再度ログインしてみてください。",
"expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} ではHTMLソースが有効になっており、ログインしていないため、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、[[Special:UserLogin|ログイン]]してもう一度試してください。</strong>",
+ "expand_templates_input_missing": "文章を入力してください。",
"pagelanguage": "ページ言語選択",
"pagelang-name": "ページ",
"pagelang-language": "言語",
"session_fail_preview_html": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\n\n<em>Сондықтан {{SITENAME}} жобасында қам HTML қосылған, JavaScript шабуылдардан қорғану үшін алдын ала қарап шығу жасырылған.</em>\n\n<strong>Егер бұл өңдеме адал ниетті әрекет болса қайта байқап көріңіз.</strong> \nЕгер бұл әлі істемесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
"token_suffix_mismatch": "<strong>Өңдемеңіз тайдырылды, себебі тұтынғышыңыз өңдеме деректер бумасындағы тыныс белгілерін бүлдіртті.\nБет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.</strong>\nБұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.",
"edit_form_incomplete": "<strong>Өңдеу пішінінің кейбір бөліктері серверге жетпеді; өңдемелеріңіздің бұзылмағандығына екі рет бақылау жүргізіңіз және қайта байқап көріңіз.</strong>",
- "editing": "$1 бетін өңдеп жатырсыз",
+ "editing": "Өңдеп жатырсыз: $1",
"creating": "Жаңадан бастау: $1",
- "editingsection": "$1 бетінің бөлімін өңдеп жатырсыз",
- "editingcomment": "$1 бетін өңдеп жатырсыз (жаңа бөлім)",
+ "editingsection": "Өңдеп жатырсыз: $1 бетінің бөлімі",
+ "editingcomment": "Өңдеп жатырсыз: $1 (жаңа бөлім)",
"editconflict": "Өңдемелер қақтығысы: $1",
"explainconflict": "Осы бетті сіз өңдей бастағанда басқа біреу бетті өзгерткен.\nЖоғарғы мәтін аумағында қазіргі уақытта бар бет мәтінінен тұрады.\nТөменгі мәтін аумағында сіздің өзгертулеріңіз көрсетіледі.\nӨзгертуіңізді бар мәтінге біріктіруге тура келеді.\n«{{int:savearticle}}» батырмасын басқанда </strong>тек</strong> жоғарғы мәтін аумағы сақталады.",
"yourtext": "Мәтініңіз",
"listusers-editsonly": "Тек қатысушы өңдемелерін көрсету",
"listusers-creationsort": "Басталған уақытына қарай іріктеу",
"listusers-desc": "Кемуі бойынша ретке келтіру",
- "usereditcount": "$1 {{PLURAL:$1|өңдеме|өңдемелер}}",
+ "usereditcount": "$1 {{PLURAL:$1|өңдеме|өңдеме}}",
"usercreated": "$1 $2-та {{GENDER:$3|басталған}}",
"newpages": "Ең жаңа беттер",
"newpages-submit": "Көрсету",
"tog-minordefault": "Notare omnes recensiones quasi minores",
"tog-previewontop": "Monstrare praevisum ante capsam recensiti, non post ipsam",
"tog-previewonfirst": "Praevisum monstrare recensione incipiente",
- "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me observata vel fasciculus a me observatus mutatur",
- "tog-enotifusertalkpages": "Mittere mihi litteras electronicas si mea disputatio mutatur",
- "tog-enotifminoredits": "Mittere mihi litteras electronicas etiam pro recensionibus minoribus",
- "tog-enotifrevealaddr": "Monstrare inscriptio mea electronica in nuntiis notificantibus",
+ "tog-enotifwatchlistpages": "Mutata vel pagina vel fasciculo observando, certior fiam",
+ "tog-enotifusertalkpages": "De mutata disputationis pagina mea certior fiam",
+ "tog-enotifminoredits": "Etiam de minoribus recensionibus certior fiam.",
+ "tog-enotifrevealaddr": "Ostendatur inscriptio mea electronica in nuntiis notificantibus",
"tog-shownumberswatching": "Numerum usorum observantium monstrare",
"tog-oldsig": "Subscriptio, qua nunc uteris:",
"tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
"tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum observatarum indice",
"tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum observatarum indice",
"tog-watchlisthidepatrolled": "Recensiones vigilatae paginas custoditas celare",
- "tog-ccmeonemails": "Mitte mihi transcriptiones litterarum quas ad alios usores mitto",
+ "tog-ccmeonemails": "Transcriptiones earum, quas ad alios usores mitto litteras, mihi ipsi mittantur",
"tog-diffonly": "Nihil nisi differentiam in pagina factam ostendatur",
"tog-showhiddencats": "Categorias celatas monstrare",
"tog-norollbackdiff": "Post reversionem paginae differentia neglegatur",
"noemail": "Nulla inscriptio electronica invenitur per usorem \"$1\".",
"mailerror": "Error in litteras electronicas inmittendas: $1",
"acct_creation_throttle_hit": "His superioribus 24 horis ex isto loco IP iam {{PLURAL:$1|nomen impositum est|$1 nomina imposita sunt}}.\nNon autem licet plura sibi imponere. Igitur hodie ex hoc loco IP cetera nomina tibi non imponi possunt.",
- "emailauthenticated": "Tua inscriptio electronica recognita est $3, $2.",
+ "emailauthenticated": "Inscriptio tua electronica recognita est $3, $2.",
"emailconfirmlink": "Inscriptionem tuam electronicam adfirmare",
"emaildisabled": "Huic paginae litteras electronicas mittere non licet.",
"accountcreated": "Nomen impositum",
"skin-preview": "Praevisum",
"datedefault": "Nullum praeferentiae",
"prefs-user-pages": "Paginae usoris",
- "prefs-personal": "Minutiae rationis",
+ "prefs-personal": "Proprietates",
"prefs-rc": "Nuper mutata",
"prefs-watchlist": "Paginae observatae",
"prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis observatis:",
"prefs-watchlist-edits-max": "Numerus maximus: 1000",
"prefs-misc": "Misc",
"prefs-resetpass": "Tesseram mutare",
- "prefs-email": "Optiones inscriptionis electronicae",
+ "prefs-email": "Modi de inscriptione electronica servandi",
"prefs-rendering": "Conspectus",
"saveprefs": "Servare praeferentias",
"prefs-editing": "Mensura capsae verbi",
"timezoneregion-europe": "Europa",
"timezoneregion-indian": "Oceanus Indicus",
"timezoneregion-pacific": "Oceanus Pacificus",
- "allowemail": "Sinere litteras electronicas inscriptioni electronicae meae mittere",
+ "allowemail": "Aliis usoribus concedere, ut litteras electronicas mittant",
"prefs-searchoptions": "Quaerere",
"prefs-namespaces": "Spatia nominalia",
"default": "praedeterminatum",
"prefs-emailconfirm-label": "Adfirmatio inscriptionis electronicae:",
"youremail": "Inscriptio electronica:",
"username": "Nomen usoris:",
+ "prefs-memberingroups": "{{PLURAL:$1|Categoria, cui|Categoriae, quibus}} $2 attribuitur",
"prefs-registration": "Tempus, quo nomen impositum est:",
"yourrealname": "Nomen verum:",
"yourlanguage": "Lingua:",
"yourvariant": "Differentia linguae contentorum:",
"yournick": "Subscriptio nova:",
- "prefs-help-signature": "Cum in paginis disputationum scribas, \"<nowiki>~~~~</nowiki>\" conscribe, quod in subscriptionem tuam et indicationem temporis convertetur.",
+ "prefs-help-signature": "Commentationibus ad quanque disputationem factis ne subscribe nisi quater undulam (<nowiki>~</nowiki>) ponens! Quae quatuor undulae (<nowiki>~~~~</nowiki>) automatice in subscriptionem tuam et tempus subscribendi convertentur.",
"badsig": "Subscriptio cruda non est valida; scrutina affixa HTML.",
"badsiglength": "Subscriptio tua nimis longa est.\n{{PLURAL:$1|Una littera est|$1 litterae sunt}} longitudo maxima.",
"yourgender": "Sexus:",
"gender-unknown": "Indefinitus",
"gender-male": "masculinus",
"gender-female": "femininus",
+ "prefs-help-gender": "Liber vel libera es istum delectum habere.\nQuodsi feceris, programma eo utetur ad te rite iuxta genus tuum aut appellandum aut appellandam.\nQuod datum ab omnibus videbitur.",
"email": "Litterae electronicae",
"prefs-help-realname": "Nomen verum non necesse est.\nSi vis id dare, opera tua tibi ascribentur.",
- "prefs-help-email": "Non necesse est inscriptionem electronicam dare. Qua tamen data licebit tibi tesseram novam tribuere, si eius oblitus eris.",
+ "prefs-help-email": "Non necesse est inscriptionem electronicam dare. Qua tamen data tessera tibi tribui poterit nova, si prioris oblitus eris.",
"prefs-help-email-others": "Si vis, sinit etiam aliis tecum loqui per tuam paginam usoris vel disputationis, nisi te reveles.",
"prefs-help-email-required": "Inscriptio electronica necesse est.",
"prefs-info": "Generalia",
"userrights-unchangeable-col": "Greges quos tibi non oportet mutare",
"group": "Grex:",
"group-user": "Usores",
- "group-autoconfirmed": "Usores adfirmati automaticale",
+ "group-autoconfirmed": "Usores automatice confirmati",
"group-bot": "Automata",
"group-sysop": "Magistratus",
"group-bureaucrat": "Grapheocrates",
"group-suppress": "Censurae",
"group-all": "(omnes)",
"group-user-member": "{{GENDER:$1|Usor}}",
- "group-autoconfirmed-member": "{{GENDER:$1|Usor adfirmatus automaticale}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|Usor automatice confirmatus}}",
"group-bot-member": "{{GENDER:$1|Automaton}}",
"group-sysop-member": "{{GENDER:$1|Magistratus}}",
"group-bureaucrat-member": "{{GENDER:$1|Grapheocrates}}",
"group-suppress-member": "{{GENDER:$1|Censura}}",
"grouppage-user": "{{ns:project}}:Usores",
- "grouppage-autoconfirmed": "{{ns:project}}:Usores adfirmati automaticale",
+ "grouppage-autoconfirmed": "{{ns:project}}:Usores automatice confirmati",
"grouppage-bot": "{{ns:project}}:Automata",
"grouppage-sysop": "{{ns:project}}:Magistratus",
"grouppage-bureaucrat": "{{ns:project}}:Grapheocrates",
"mypreferencesprotected": "Dir hutt net d'Recht fir Är Astellungen z'änneren.",
"ns-specialprotected": "Spezialsäite kënnen net verännert ginn.",
"titleprotected": "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
- "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme geliest däerf ginn.\n\nDen Administrateur den d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
+ "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme geliest däerf ginn.\n\nDe System-Administrateur den d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
"invalidtitle-knownnamespace": "Net valabelen Titel mam Nummraum \"$2\" a mam Text \"$3\"",
"invalidtitle-unknownnamespace": "Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text \"$2\"",
"exception-nologin": "Net ageloggt",
"foreign-structured-upload-form-label-own-work": "Dëst ass mäin eegent Wierk",
"foreign-structured-upload-form-label-infoform-categories": "Kategorien",
"foreign-structured-upload-form-label-infoform-date": "Datum",
+ "foreign-structured-upload-form-3-label-question-website": "Hutt Dir dëst Bild vun engem Internetsite erofgelueden, oder beim Sichen no engem Bild fonnt?",
+ "foreign-structured-upload-form-3-label-question-ownwork": "Hutt Dir dëst Bild (Foto, Zeechnung, asw.) selwer gemaacht?",
"foreign-structured-upload-form-3-label-yes": "Jo",
"foreign-structured-upload-form-3-label-no": "Neen",
"backend-fail-stream": "De Fichier $1 konnt net iwwerdroe ginn.",
"export-download": "Als XML-Datei späicheren",
"export-templates": "Inklusiv Schablounen",
"export-pagelinks": "Verlinkte Säiten mat exportéieren, bis zu enger Déift vun:",
+ "export-manual": "Säite manuell derbäisetzen:",
"allmessages": "All Systemmessagen",
"allmessagesname": "Numm",
"allmessagesdefault": "Standardtext",
"laggedslavemode": "Uwaga! Ta strona może nie zawierać najnowszych aktualizacji.",
"readonly": "Baza danych jest zablokowana",
"enterlockreason": "Podaj powód zablokowania bazy oraz szacunkowy termin jej odblokowania",
- "readonlytext": "Baza danych jest obecnie zablokowana – nie można wprowadzać nowych informacji ani modyfikować istniejących. Powodem są prawdopodobnie czynności administracyjne. Po ich zakończeniu przywrócona zostanie pełna funkcjonalność bazy.\n\nAdministrator, który zablokował bazę, podał następujące wyjaśnienie: $1",
+ "readonlytext": "Baza danych jest obecnie zablokowana – nie można wprowadzać nowych informacji ani modyfikować istniejących. Powodem są prawdopodobnie czynności administracyjne. Po ich zakończeniu przywrócona zostanie pełna funkcjonalność bazy.\n\nAdministrator systemu, który zablokował bazę, podał następujące wyjaśnienie: $1",
"missing-article": "W bazie danych nie odnaleziono treści strony „$1” $2.\n\nZazwyczaj jest to spowodowane odwołaniem do nieaktualnego linku prowadzącego do różnicy pomiędzy dwoma wersjami strony lub do wersji z historii usuniętej strony.\n\nJeśli tak nie jest, możliwe, że problem został wywołany przez błąd w oprogramowaniu.\nMożna zgłosić ten fakt [[Special:ListUsers/sysop|administratorowi]], podając adres URL.",
"missingarticle-rev": "(wersja $1)",
"missingarticle-diff": "(różnica: $1, $2)",
"upload-form-label-select-file": "Wybierz plik",
"upload-form-label-infoform-title": "Szczegóły",
"upload-form-label-infoform-name": "Nazwa",
+ "upload-form-label-infoform-name-tooltip": "Podaj krótką, opisującą i unikalną nazwę, która będzie służyła jako nazwa pliku. Możesz używać prostego języka i spacji. Nie dodawaj rozszerzenia pliku.",
"upload-form-label-infoform-description": "Opis",
+ "upload-form-label-infoform-description-tooltip": "Krótko opisz wszystko istotne, co dotyczy tej pracy.\nW przypadku zdjęcia wymień najważniejsze ujęte obiekty, sytuację lub miejsce.",
"upload-form-label-usage-title": "Korzystanie",
"upload-form-label-usage-filename": "Nazwa pliku",
"foreign-structured-upload-form-label-own-work": "To moja własna praca",
"wlshowhideanons": "anonimowych",
"wlshowhidepatr": "sprawdzone edycje",
"wlshowhidemine": "moje edycje",
+ "wlshowhidecategorization": "kategoryzację stron",
"watchlist-options": "Opcje obserwowanych",
"watching": "Dodaję do obserwowanych...",
"unwatching": "Przestaję obserwować...",
"upload-form-label-select-file": "Label for the select file widget\n{{Identical|Select file}}",
"upload-form-label-infoform-title": "Title for the information form\n{{Identical|Detail}}",
"upload-form-label-infoform-name": "Label for the file name input\n{{Identical|Name}}",
- "upload-form-label-infoform-name-tooltip": "The tooltip documenting the title field for the file - used as the filename on-wiki.",
+ "upload-form-label-infoform-name-tooltip": "The tooltip documenting the title field for the file - used as the filename on-wiki.\n\nIdentical to {{msg-mw|mwe-upwiz-tooltip-title}}.",
"upload-form-label-infoform-description": "Label for the file description input\n{{Identical|Description}}",
- "upload-form-label-infoform-description-tooltip": "The tooltip documenting the description fields on the details page.",
+ "upload-form-label-infoform-description-tooltip": "The tooltip documenting the description fields on the details page.\n\nIdentical to {{msg-mw|mwe-upwiz-tooltip-description}}.",
"upload-form-label-usage-title": "Title for the insert form showing how to use the uploaded item.\n{{Identical|Usage}}",
"upload-form-label-usage-filename": "Label for the file name input\n{{Identical|Filename}}",
"foreign-structured-upload-form-label-own-work": "[[File:Cross-wiki media upload dialog, December 2015 AB test option 1.png|thumb]] Label for own work confirmation checkbox",
"export-download": "A label of checkbox option in [[Special:Export]]\n\nSee also:\n* {{msg-mw|Exportlistauthors}}",
"export-templates": "A label of checkbox option in [[Special:Export]]",
"export-pagelinks": "This is an input in [[Special:Export]]",
+ "export-manual": "The label for the textarea input on [[Special:Export]]",
"allmessages": "The title of the special page [[Special:AllMessages]].",
"allmessagesname": "Used on [[Special:Allmessages]] meaning \"the name of the message\".\n{{Identical|Name}}",
"allmessagesdefault": "The header for the lower row of each column in the table of [[Special:AllMessages]].",
"expand_templates_preview": "{{Identical|Preview}}",
"expand_templates_preview_fail_html": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
"expand_templates_preview_fail_html_anon": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
+ "expand_templates_input_missing": "Used on [[Special:ExpandTemplates]] as an error message, if no input text was provided.",
"pagelanguage": "Title for page Special:PageLanguage",
"pagelang-name": "Input label for page name on Special:PageLanguage\n{{Identical|Page}}",
"pagelang-language": "Language selector label for Special:PageLanguage\n{{Identical|Language}}",
"passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
"passwordreset-emailtext-user": "Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль.\nЕсли вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
"passwordreset-emailelement": "Имя участника: \n$1\n\nВременный пароль: \n$2",
- "passwordreset-emailsentemail": "Если это адрес электронной почты, на которую зарегистрирована ваша учётная запись, вам будет отправлено письмо для сброса пароля.",
- "passwordreset-emailsentusername": "Если есть соответствующий зарегистрированный адрес электронной почты, будет отправлено письмо для восстановления пароля.",
+ "passwordreset-emailsentemail": "Если это адрес электронной почты связан с вашей учётной записью, вам будет отправлено письмо для сброса пароля.",
+ "passwordreset-emailsentusername": "Если есть адрес электронной почты, связанный с этим именем участника, то будет отправлено письмо для восстановления пароля.",
"passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
"passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
"changeemail": "Изменить или удалить адрес электронной почты",
"export-download": "Предложить сохранить как файл",
"export-templates": "Включить шаблоны",
"export-pagelinks": "Включить связанные страницы глубиной:",
+ "export-manual": "Добавить страницы вручную:",
"allmessages": "Системные сообщения",
"allmessagesname": "Сообщение",
"allmessagesdefault": "Текст по умолчанию",
"mediastatistics": "Медиа-статистика",
"mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
"mediastatistics-nbytes": "$1 байт{{PLURAL:$1||а|ов}} ($2; $3%)",
- "mediastatistics-bytespertype": "Общий размер файла для этого раздела: $1 байт{{PLURAL:$1||ов|а}}.",
- "mediastatistics-allbytes": "Общий размер всех файлов: $1 байт{{PLURAL:$1||ов|а}}.",
+ "mediastatistics-bytespertype": "Общий размер файла для этого раздела: $1 байт{{PLURAL:$1||ов|а}} ($2; $3%).",
+ "mediastatistics-allbytes": "Общий размер всех файлов: $1 байт{{PLURAL:$1||ов|а}} ($2).",
"mediastatistics-table-mimetype": "MIME-тип",
"mediastatistics-table-extensions": "Возможные расширения",
"mediastatistics-table-count": "Количество файлов",
"nstab-template": "Шаблон",
"nstab-help": "Кӯмак",
"nstab-category": "Гурӯҳ",
+ "mainpage-nstab": "Саҳифаи аслӣ",
"nosuchaction": "Чунин амале вуҷуд надорад",
"nosuchactiontext": "Амали дар URL мушаххасшуда номӯътабар аст.\nШумо шояд хато пайванди URL-ро ворид намудед, ё пайванди нодурустро пайгирӣ кардед.\nШояд ин як хатогие дар нармафзоре бошад, ки аз тарафи {{SITENAME}} истифода мешавад.",
"nosuchspecialpage": "Чунин саҳифаи вижа вуҷуд надорад",
"createaccountreason": "Сабаб:",
"createacct-reason": "Сабаб",
"createacct-reason-ph": "Барои чӣ ҳисоби дигареро эҷод карда истодаед",
- "createacct-captcha": "Бозрасии амниятӣ",
- "createacct-imgcaptcha-ph": "Матни болоро ворид кунед",
"createacct-submit": "Ҳисоби худро созед",
"createacct-another-submit": "Ҳисоби дигаре созед",
"createacct-benefit-heading": "{{SITENAME}} тавассути одамони мисли шумо сохта шудааст.",
"number_of_watching_users_pageview": "[$1 пайгирикунанда {{PLURAL:$1|корбар|корбарон}}]",
"rc_categories": "Маҳдудият ба гурӯҳҳо (бо аломати \"|\" ҷудо кунед)",
"rc_categories_any": "Ҳар кадом",
+ "rc-change-size-new": "$1 {{PLURAL:$1|байт}} пас аз тағйир",
"newsectionsummary": "/* $1 */ бахши ҷадид",
"rc-enhanced-expand": "Намоиши ҷузъиёт",
"rc-enhanced-hide": "Пинҳони ҷузъиёт",
"suppress": "Назорат",
"booksources": "Манбаҳои китобҳо",
"booksources-search-legend": "Ҷустуҷӯи сарчашмаҳои китоб",
+ "booksources-search": "Ҷустуҷӯ",
"booksources-text": "Дер зер феҳристи пайвандҳо ба сомонаҳое, ки китобҳои нав ва кӯҳна мефурӯшанд, оварда шудааст. Мумкин аст, иттилооти бештарро дар бораи китобҳои ҷустуҷӯ кардаатон дошта бошанд:",
"specialloguserlabel": "Иҷрокунанда:",
"speciallogtitlelabel": "Ҳадаф (унвон ё корбар):",
"wlheader-showupdated": "Саҳифаҳое, ки пас аз охирин сар заданатон ба онҳо тағйир кардаанд '''пурранг''' нишон дода шудаанд",
"wlnote": "Дар зер {{PLURAL:$1|охирин тағйир|'''$1''' охирин тағйирот}} дар $2 соати охир {{PLURAL:омадааст|омадаанд}}.",
"wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо",
+ "watchlistall2": "ҳама",
"watchlist-options": "Ихтиёроти феҳристи пайгириҳо",
"watching": "Пайгири...",
"unwatching": "Тавқифи пайгири...",
"contributions": "Ҳиссагузориҳои {{GENDER:$1|корбар}}",
"contributions-title": "Ҳиссагузориҳои корбар барои $1",
"mycontris": "Ҳиссагузориҳо",
+ "anoncontribs": "Саҳмгузориҳо",
"contribsub2": "Барои {{GENDER:$3|$1}} ($2)",
"nocontribs": "Ҳеҷ тағйире бо ин мушаххасот пайдо нашуд.",
"uctop": "(кунунӣ)",
"movesubpage": "{{PLURAL:$1|Зерсаҳифа|Зерсаҳифаҳо}}",
"movereason": "Сабаб:",
"revertmove": "вогардонӣ",
- "delete_and_move": "Ҳазф ва кӯчонидан",
"delete_and_move_text": "==Ниёз ба ҳазф==\n\nМақолаи мақсад \"[[:$1]]\" вуҷуд дорад. Оё мехоҳед онро ҳазф кунед то интиқол мумкин шавад?",
"delete_and_move_confirm": "Бале, саҳифа ҳазф шавад",
"delete_and_move_reason": "Ҳазф шуд барои мумкин шудани кӯчонидан",
"tooltip-ca-nstab-main": "Дидани саҳифаи мӯҳтавиёт",
"tooltip-ca-nstab-user": "Намоиши саҳифаи корбар",
"tooltip-ca-nstab-media": "Дидани саҳифаи расона",
- "tooltip-ca-nstab-special": "Ð\98н Ñ\81аҳиÑ\84аи маÑ\85Ñ\81Ñ\83Ñ\81 мебоÑ\88ад, ШÑ\83мо онÑ\80о виÑ\80оиÑ\88 каÑ\80да намеÑ\82авонед",
+ "tooltip-ca-nstab-special": "Ð\98н Ñ\82аÑ\80Ò·Ñ\83ма Ñ\88оÑ\8fд ниÑ\91з ба баÑ\80ӯзÑ\88ави доÑ\88Ñ\82а боÑ\88ад.",
"tooltip-ca-nstab-project": "Намоиши саҳифаи лоиҳа",
"tooltip-ca-nstab-image": "Дидани саҳифаи парванда",
"tooltip-ca-nstab-mediawiki": "Дидани пайғоми системавӣ",
"spambot_username": "Спамтозакуни МедиаВики",
"spam_reverting": "Вогардони ба охирин нусхае, ки пайванде ба $1 надорад",
"spam_blanking": "Ҳамаи нусхаҳои пайвандҳо $1 доштан, дар ҳоли холӣ кардан",
+ "pageinfo-toolboxlink": "Иттилооти саҳифа",
"pageinfo-contentpage-yes": "Бале",
"pageinfo-protect-cascading-yes": "Бале",
"markaspatrolleddiff": "Ба унвони баррасишуда аломат бизан",
"feedback-message": "Пайём:",
"feedback-subject": "Мавзӯъ:",
"feedback-submit": "Ирсол",
+ "searchsuggest-search": "Ҷустуҷӯ",
"expandtemplates": "Бастдодани шаблонҳо",
"expand_templates_intro": "Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ\n<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун\n<nowiki>{{</nowiki>CURRENTDAY}}—ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.\nИн кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.",
"expand_templates_title": "Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:",
"tog-hideminor": "ซ่อนการแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด",
"tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วในหน้าปรับปรุงล่าสุด",
"tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจสอบแล้วในรายการหน้าใหม่",
+ "tog-hidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
"tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
"tog-usenewrc": "จัดกลุ่มการเปลี่ยนแปลงแบ่งตามหน้าในรายการปรับปรุงล่าสุดและรายการเฝ้าดู",
"tog-numberheadings": "กำหนดเลขหัวเรื่องอัตโนมัติ",
"tog-watchlistreloadautomatically": "โหลดรายการเฝ้าดูใหม่อัตโนมัติเมื่อใดที่มีการเปลี่ยนตัวกรอง (ต้องการจาวาสคริปต์)",
"tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
"tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วจากรายการเฝ้าดู",
+ "tog-watchlisthidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
"tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
"tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ผลต่าง",
"tog-showhiddencats": "แสดงหมวดหมู่ที่ซ่อนอยู่",
"passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
"passwordreset-emailtext-user": "ผู้ใช้ $1 บน {{SITENAME}} ขอตั้งรหัสผ่านของคุณใหม่สำหรับ {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
"passwordreset-emailelement": "ชื่อผู้ใช้: \n$1\n\nรหัสผ่านชั่วคราว: \n$2",
- "passwordreset-emailsentemail": "หาà¸\81à¸\99ีà¹\88à¸\84à¸à¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¸à¸µà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99สำหรับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
- "passwordreset-emailsentusername": "หาà¸\81à¸\99ีà¹\88à¸\84ืà¸à¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¸à¸µà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\94à¹\89วยà¸\81ัà¸\99 เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
+ "passwordreset-emailsentemail": "หาà¸\81à¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¸à¸µà¹\80มลà¸\99ีà¹\89สัมà¸\9eัà¸\99à¸\98à¹\8cà¸\81ับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
+ "passwordreset-emailsentusername": "หาà¸\81มีà¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¸à¸µà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\94à¹\89วยà¸\81ัà¸\9aà¸\8aืà¹\88à¸à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89 เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
"passwordreset-emailsent-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง",
"passwordreset-emailerror-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกสร้างขึ้นแล้ว ซึ่งแสดงด้านล่าง แต่ไม่สามารถส่งไปยัง{{GENDER:$2|ผู้ใช้}}: $1",
"changeemail": "เปลี่ยนหรือลบที่อยู่อีเมล",
"copyrightwarning": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} ถือว่าเผยแพร่ภายใต้ $2 (ดูรายละเอียดทาง $1)\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไขและกระจายได้ตามใจ ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
"copyrightwarning2": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} อาจถูกผู้เขียนอื่นแก้ไข เปลี่ยนแปลงหรือนำออก\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไข ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน (ดูรายละเอียดที่ $1)\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
"longpageerror": "<strong>ข้อผิดพลาด: ข้อความที่คุณส่งมีขนาด $1 กิโลไบต์\nซึ่งเกินสูงสุด $2 กิโลไบต์</strong>\nไม่สามารถบันทึกได้",
- "readonlywarning": "<strong>à¸\84ำà¹\80à¸\95ืà¸à¸\99: à¸\90าà¸\99à¸\82à¹\89à¸à¸¡à¸¹à¸¥à¸\96ูà¸\81ลà¹\87à¸à¸\81à¹\80à¸\9eืà¹\88à¸à¸\9aำรุà¸\87รัà¸\81ษา à¸\84ุà¸\93à¸\88ึà¸\87à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
+ "readonlywarning": "<strong>à¸\84ำà¹\80à¸\95ืà¸à¸\99: à¸\90าà¸\99à¸\82à¹\89à¸à¸¡à¸¹à¸¥à¸\96ูà¸\81ลà¹\87à¸à¸\81à¹\80à¸\9eืà¹\88à¸à¸\9aำรุà¸\87รัà¸\81ษา à¸\84ุà¸\93à¸\88ึà¸\87à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
"protectedpagewarning": "<strong>คำเตือน: หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบแก้ไขได้เท่านั้น</strong>\nรายการปูมล่าสุดจัดไว้ด้านล่างเพื่อการอ้างอิง:",
"semiprotectedpagewarning": "<strong>หมายเหตุ:</strong> หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ลงทะเบียนสามารถแก้ไขเท่านั้น\nรายการปูมล่าสุดได้จัดไว้ด้านล่างนี้เพื่อการอ้างอิง",
"cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบ เนื่องจากหน้านี้รวมอยู่ใน{{PLURAL:$1|หน้า}}ที่ถูกล็อกแบบต่อเรียงต่อไปนี้:",
"rcshowhidemine": "$1การแก้ไขของฉัน",
"rcshowhidemine-show": "แสดง",
"rcshowhidemine-hide": "ซ่อน",
+ "rcshowhidecategorization": "$1การจัดหมวดหมู่หน้า",
"rcshowhidecategorization-show": "แสดง",
"rcshowhidecategorization-hide": "ซ่อน",
"rclinks": "แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3",
"mostrevisions": "หน้าที่มีรุ่นปรับปรุงมากสุด",
"prefixindex": "หน้าทั้งหมดพร้อมคำขึ้นต้น",
"prefixindex-namespace": "หน้าทั้งหมดพร้อมคำขึ้นต้น (เนมสเปซ $1)",
+ "prefixindex-submit": "แสดง",
"prefixindex-strip": "ลบคำขึ้นต้นในรายการออก",
"shortpages": "หน้าสั้น",
"longpages": "หน้ายาว",
"whatlinkshere-hidelinks": "$1 ลิงก์",
"whatlinkshere-hideimages": "$1ลิงก์ไฟล์",
"whatlinkshere-filters": "ตัวกรอง",
+ "whatlinkshere-submit": "ไป",
"autoblockid": "บล็อกอัตโนมัติ #$1",
"block": "บล็อกผู้ใช้",
"unblock": "ปลดบล็อกผู้ใช้",
"tags-actions-header": "ปฏิบัติการ",
"tags-active-yes": "ใช่",
"tags-active-no": "ไม่",
+ "tags-source-extension": "นิยามโดยส่วนขยาย",
+ "tags-source-manual": "ใช้ด้วยมือโดยผู้ใช้และบอต",
+ "tags-source-none": "เลิกใช้แล้ว",
"tags-edit": "แก้ไข",
+ "tags-delete": "ลบ",
+ "tags-activate": "เปิดใช้งาน",
+ "tags-deactivate": "ปิดใช้งาน",
"tags-hitcount": "$1 การเปลี่ยนแปลง",
"comparepages": "เปรียบเทียบหน้า",
"compare-page1": "หน้า 1",
"htmlform-no": "ไม่",
"htmlform-yes": "ใช่",
"htmlform-chosen-placeholder": "เลือกตัวเลือก",
+ "htmlform-cloner-required": "ต้องการอย่างน้อยหนึ่งค่า",
+ "htmlform-title-badnamespace": "[[:$1]] ไม่อยู่ในเนมสเปซ \"{{ns:$2}}\"",
+ "htmlform-title-not-creatable": "\"$1\" มิใช่ชื่อเรื่องหน้าที่สร้างได้",
+ "htmlform-title-not-exists": "ไม่มี $1",
+ "htmlform-user-not-exists": "ไม่มี <strong>$1</strong>",
+ "htmlform-user-not-valid": "<strong>$1</strong> มิใช่ชื่อผู้ใช้ที่สมเหตุสมผล",
"sqlite-has-fts": "รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม",
"sqlite-no-fts": "รุ่น $1 โดยไม่มีการสนับสนุนการค้นหาข้อความแบบเต็ม",
"logentry-delete-delete": "$1 ลบหน้า $3",
"red-link-title": "$1 (мондый бит юк)",
"sort-descending": "Кимү буенча урнаштыру",
"sort-ascending": "Арту буенча урнаштыру",
- "nstab-main": "Ð\91иÑ\82",
+ "nstab-main": "Ð\9cÓ\99калÓ\99",
"nstab-user": "Кулланучы",
"nstab-media": "Мультимедиа",
"nstab-special": "Махсус бит",
"upload-form-label-select-file": "Обрати файл",
"upload-form-label-infoform-title": "Деталі",
"upload-form-label-infoform-name": "Назва",
+ "upload-form-label-infoform-name-tooltip": "Унікальна описова назва файлу. Ви можете використовувати простий текст з пробілами. Не вказуйте розширення файла.",
"upload-form-label-infoform-description": "Опис",
+ "upload-form-label-infoform-description-tooltip": "Коротко напишіть усе основне та цікаве про цю роботу.\nНаприклад, для фото опишіть, що сфотографовано, місце та нагоду знімка.",
"upload-form-label-usage-title": "Використання",
"upload-form-label-usage-filename": "Назва файлу",
"foreign-structured-upload-form-label-own-work": "Це моя власна робота",
"export-download": "Зберегти як файл",
"export-templates": "Включити шаблони",
"export-pagelinks": "Включити пов'язані сторінки з глибиною:",
+ "export-manual": "Додати сторінки вручну:",
"allmessages": "Системні повідомлення",
"allmessagesname": "Назва",
"allmessagesdefault": "Стандартний текст",
"expand_templates_preview": "Попередній перегляд",
"expand_templates_preview_fail_html": "<em>Оскільки {{SITENAME}} має ввімкненим сирий HTML і відбулась втрата даних сесії, попередній перегляд прихований як захід безпеки від JavaScript-атак.</em>\n\n<strong>Якщо це правомірна спроба попереднього перегляду, будь ласка, спробуйте знову.</strong>\nЯкщо це досі не працює, спробуйте [[Special:UserLogout|вийти із системи]] та знову ввійти до неї.",
"expand_templates_preview_fail_html_anon": "<em>Оскільки {{SITENAME}} має ввімкненим сирий HTML, а Ви не ввійшли до системи, попередній перегляд прихований як захід безпеки від JavaScript-атак.</em>\n\n<strong>Якщо це правомірна спроба попереднього перегляду, будь ласка, [[Special:UserLogin|увійдіть до системи]] та спробуйте знову.</strong>",
+ "expand_templates_input_missing": "Ви повинні надати принаймні деякий вхідний текст.",
"pagelanguage": "Вибір мови сторінки",
"pagelang-name": "Сторінка",
"pagelang-language": "Мова",
"upload-form-label-select-file": "选择文件",
"upload-form-label-infoform-title": "详细信息",
"upload-form-label-infoform-name": "名称",
+ "upload-form-label-infoform-name-tooltip": "用于文件的唯一描述性标题,它将用作文件名。您可以使用带空格的普通语言。不要包含文件扩展名。",
"upload-form-label-infoform-description": "说明",
+ "upload-form-label-infoform-description-tooltip": "简单描述有关作品的任何显著信息。\n对于照片,可提及描述的主要事物、场景或地点。",
"upload-form-label-usage-title": "用法",
"upload-form-label-usage-filename": "文件名",
"foreign-structured-upload-form-label-own-work": "这是我的作品",
"export-download": "另存为文件",
"export-templates": "包含模板",
"export-pagelinks": "包含链接页面的搜索深度:",
+ "export-manual": "手动添加页面:",
"allmessages": "系统消息",
"allmessagesname": "名称",
"allmessagesdefault": "默认信息文字",
"expand_templates_preview": "预览",
"expand_templates_preview_fail_html": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请再次重试。</strong>\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录。",
"expand_templates_preview_fail_html_anon": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请尝试[[Special:UserLogin|登录]]并重试。</strong>",
+ "expand_templates_input_missing": "您需要提供至少一些输入文本。",
"pagelanguage": "页面语言选择器",
"pagelang-name": "页面",
"pagelang-language": "语言",
public $minTs = false;
function execute() {
- $this->dbw = wfGetDB( DB_MASTER );
+ $this->dbw = $this->getDB( DB_MASTER );
$logging = $this->dbw->tableName( 'logging' );
$logging_1_10 = $this->dbw->tableName( 'logging_1_10' );
$logging_pre_1_10 = $this->dbw->tableName( 'logging_pre_1_10' );
public function execute() {
$this->output( "Looking for pages with page_latest set to 0...\n" );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$conds = array( 'page_latest' => 0 );
if ( $this->hasOption( 'regenerate-all' ) ) {
$conds = '';
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$test = $dbw->tableName( 'test' );
$dbw->query( "CREATE TABLE IF NOT EXISTS /*_*/$test (
* @return bool|string Revision ID, or false if not found or error
*/
function getRevIdForTime( Title $title, $timestamp ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$id = $dbr->selectField(
array( 'revision', 'page' ),
public function execute() {
$this->output( "Fetching redirects...\n" );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$result = $dbr->select(
array( 'page' ),
array( 'page_namespace', 'page_title', 'page_latest' ),
public function execute() {
$start = '';
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$numImages = 0;
$numGood = 0;
}
function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$maxUserId = 0;
do {
);
}
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
$ancientTables = array(
'blobs', // 1.4
'brokenlinks', // 1.4
}
public function execute() {
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
$max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
$this->output( "DRY RUN: would delete bogus row '$name'\n" );
} else {
$this->output( "deleting bogus row '$name'\n" );
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
$db->delete( 'image',
array( 'img_name' => $name ),
__METHOD__ );
return;
}
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
/*
* To prevent key collisions in the update() statements below,
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$rl = new ResourceLoader( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
$moduleNames = $rl->getModuleNames();
$moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
$this->output( "Finding spam on " . count( $wgLocalDatabases ) . " wikis\n" );
$found = false;
foreach ( $wgLocalDatabases as $wikiID ) {
- $dbr = wfGetDB( DB_SLAVE, array(), $wikiID );
+ $dbr = $this->getDB( DB_SLAVE, array(), $wikiID );
$count = $dbr->selectField( 'externallinks', 'COUNT(*)',
array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ );
} else {
// Clean up spam on this wiki
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$res = $dbr->select( 'externallinks', array( 'DISTINCT el_from' ),
array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ );
$count = $dbr->numRows( $res );
// This happens e.g. when a link comes from a template rather than the page itself
$this->output( "False match\n" );
} else {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
$page = WikiPage::factory( $title );
if ( $rev ) {
* @throws MWException
*/
public function runTable( $params ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
if ( array_diff( array_keys( $params ),
array( 'table', 'conds', 'index', 'callback' ) )
protected function fileExists( $name ) {
// XXX: Doesn't actually check for file existence, just presence of image record.
// This is reasonable, since cleanupImages.php only iterates over the image table.
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$row = $dbr->selectRow( 'image', array( 'img_name' ), array( 'img_name' => $name ), __METHOD__ );
return $row !== false;
} else {
$this->output( "renaming $row->page_id ($row->page_namespace," .
"'$row->page_title') to ($row->page_namespace,'$dest')\n" );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->update( 'page',
array( 'page_title' => $dest ),
array( 'page_id' => $row->page_id ),
} else {
$this->output( "renaming $row->page_id ($row->page_namespace," .
"'$row->page_title') to ($ns,'$dest')\n" );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->update( 'page',
array(
'page_namespace' => $ns,
private function removeWatch( $row ) {
if ( !$this->dryrun && $this->hasOption( 'fix' ) ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->delete(
'watchlist', array(
'wl_user' => $row->wl_user,
public function execute() {
global $wgLocalDatabases, $wgMemc;
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$res = $dbr->select( 'interwiki', array( 'iw_prefix' ), false );
$prefixes = array();
foreach ( $res as $row ) {
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$type = $dbw->getType();
if ( $type != 'mysql' ) {
}
private function createTempTable() {
- $dbConn = wfGetDB( DB_MASTER );
+ $dbConn = $this->getDB( DB_MASTER );
if ( !( $dbConn->isOpen() ) ) {
$this->output( "Opening connection to database failed.\n" );
public function execute() {
$this->output( "...batch conversion of user_options: " );
$id = 0;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( !$dbw->fieldExists( 'user', 'user_options', __METHOD__ ) ) {
$this->output( "nothing to migrate. " );
$this->error( "Unable to read file, exiting", true );
}
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
# Handle each entry
// @codingStandardsIgnoreStart Ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
global $wgUser;
$this->output( "Checking existence of old default messages..." );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$res = $dbr->select( array( 'page', 'revision' ),
array( 'page_namespace', 'page_title' ),
array(
# Handle deletion
$this->output( "\n...deleting old default messages (this may take a long time!)...", 'msg' );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
foreach ( $res as $row ) {
wfWaitForSlaves();
// Handle deletion
$this->output( "\n...deleting equal messages (this may take a long time!)..." );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
foreach ( $messageInfo['results'] as $result ) {
wfWaitForSlaves();
$dbw->ping();
function doDelete( $delete = false, $args = array() ) {
# Data should come off the master, wrapped in a transaction
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
$pageConds = array();
$report = $this->hasOption( 'report' );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
list( $page, $revision ) = $dbw->tableNamesN( 'page', 'revision' );
$this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) .
" from " . wfWikiID() . "...\n" );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$affected = 0;
foreach ( $this->mArgs as $revID ) {
public function execute() {
global $wgServer;
$this->output( "Deleting self externals from $wgServer\n" );
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
while ( 1 ) {
wfWaitForSlaves();
$this->commitTransaction( $db, __METHOD__ );
}
public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$result = $dbr->select( array( 'pagelinks', 'page' ),
array(
'page_id',
* @param bool $shared True to pass shared-dir settings to hash func
*/
function fetchUsed( $shared ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$image = $dbr->tableName( 'image' );
$imagelinks = $dbr->tableName( 'imagelinks' );
* @param bool $shared True to pass shared-dir settings to hash func
*/
function fetchLocal( $shared ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$result = $dbr->select( 'image',
array( 'img_name' ),
'',
}
$afile = false;
} else { // specified version
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$row = $dbw->selectRow( 'filearchive', '*',
array( 'fa_storage_group' => 'deleted', 'fa_storage_key' => $filekey ),
__METHOD__ );
}
protected function scrubAllVersions( $name ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$res = $dbw->select( 'filearchive', '*',
array( 'fa_name' => $name, 'fa_storage_group' => 'deleted' ),
__METHOD__ );
* note that the text string itself is *not* followed by newline
*/
public function execute() {
- $db = wfGetDB( DB_SLAVE );
+ $db = $this->getDB( DB_SLAVE );
$stdin = $this->getStdin();
while ( !feof( $stdin ) ) {
$line = fgets( $stdin );
return true;
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$namespaces = array(
NS_MEDIAWIKI => $dbr->buildLike( $dbr->anyString(), '.json' ),
NS_USER => $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString(), '.json' ),
$this->output( "Processing {$title} ({$row->page_id})...\n" );
$rev = Revision::newFromTitle( $title );
$content = $rev->getContent( Revision::RAW );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( $content instanceof JsonContent ) {
if ( $content->isValid() ) {
// Yay, actually JSON. We need to just change the
$title = null;
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
// See also SpecialDoubleRedirects
$tables = array(
}
protected function doDBUpdates() {
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
if ( !$db->tableExists( 'externallinks' ) ) {
$this->error( "externallinks table does not exist" );
$grace = 60; // maximum normal clock offset
# Find bounding revision IDs
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$revisionTable = $dbw->tableName( 'revision' );
$res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " .
"WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", __METHOD__ );
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$lastId = 0;
do {
$this->identifier = $this->getOption( 'identifier', wfWikiID() );
$this->compress = $this->getOption( 'compress', 'yes' ) !== 'no';
$this->skipRedirects = $this->getOption( 'skip-redirects', false ) !== false;
- $this->dbr = wfGetDB( DB_SLAVE );
+ $this->dbr = $this->getDB( DB_SLAVE );
$this->generateNamespaces();
$this->timestamp = wfTimestamp( TS_ISO_8601, wfTimestampNow() );
$this->findex = fopen( "{$this->fspath}sitemap-index-{$this->identifier}.xml", 'wb' );
if ( $wgAllDBsAreLocalhost ) {
$host = 'localhost';
} elseif ( $this->hasOption( 'group' ) ) {
- $db = wfGetDB( DB_SLAVE, $this->getOption( 'group' ) );
+ $db = $this->getDB( DB_SLAVE, $this->getOption( 'group' ) );
$host = $db->getServer();
} else {
$lb = wfGetLB();
}
public function execute() {
- $this->db = wfGetDB( DB_SLAVE );
-
$titleText = $this->getArg( 0 );
$title = Title::newFromText( $titleText );
if ( !$title ) {
if ( !$this->dryRun ) {
// bluuuh hack
// call_user_func( $this->uploadCallback, $revision );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
return $dbw->deadlockLoop( array( $revision, 'importUpload' ) );
}
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$user = $dbw->tableName( 'user' );
$revision = $dbw->tableName( 'revision' );
if ( $backgroundMode ) {
$this->output( "Using replication-friendly background mode...\n" );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$chunkSize = 100;
$lastUser = $dbr->selectField( 'user', 'MAX(user_id)', '', __METHOD__ );
if ( $this->hasOption( 'active' ) ) {
$this->output( "\nCounting and updating active users..." );
- $active = SiteStatsUpdate::cacheUpdate( wfGetDB( DB_MASTER ) );
+ $active = SiteStatsUpdate::cacheUpdate( $this->getDB( DB_MASTER ) );
$this->output( "{$active}\n" );
}
$count = 0;
$oldGroup = $this->getArg( 0 );
$newGroup = $this->getArg( 1 );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$start = $dbw->selectField( 'user_groups', 'MIN(ug_user)',
array( 'ug_group' => $oldGroup ), __FUNCTION__ );
$end = $dbw->selectField( 'user_groups', 'MAX(ug_user)',
}
# Setup complete, now start
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
// @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning
for ( $linenum = 1; !feof( $file ); $linenum++ ) {
// @codingStandardsIgnoreEnd
}
public function execute() {
- $this->db = wfGetDB( DB_MASTER );
+ $this->db = $this->getDB( DB_MASTER );
$options = array(
'fix' => $this->hasOption( 'fix' ),
$ns = $this->getOption( 'ns', NS_MEDIAWIKI );
$delete = $this->getOption( 'delete', false );
$all = $this->getOption( 'all', false );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
$tbl_pag = $dbw->tableName( 'page' );
$name = $this->getArg();
$delete = $this->getOption( 'delete', false );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
$tbl_pag = $dbw->tableName( 'page' );
}
public function deleteRevisions( $ids ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
$tbl_rev = $dbw->tableName( 'revision' );
return;
}
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
foreach ( $wgSharedTables as $table ) {
$stable = $dbw->tableNameInternal( $table );
if ( $wgSharedPrefix != null ) {
* @param bool $fix Whether to fix broken revisions when found
*/
private function checkOrphans( $fix ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$page = $dbw->tableName( 'page' );
$revision = $dbw->tableName( 'revision' );
* but valid revisions do exist)
*/
private function checkWidows( $fix ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$page = $dbw->tableName( 'page' );
$revision = $dbw->tableName( 'revision' );
* @param bool $fix Whether to fix broken entries
*/
private function checkSeparation( $fix ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$page = $dbw->tableName( 'page' );
$revision = $dbw->tableName( 'revision' );
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
foreach ( $this->mArgs as $arg ) {
$files = array(
$arg,
$throttle = $this->getOption( 'throttle', 0 );
$force = $this->getOption( 'force', false );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( !$force ) {
$row = $dbw->selectRow(
}
public function execute() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$ns = $this->getOption( 'ns' );
if ( !ctype_digit( $ns ) && $ns !== 'all' ) {
$this->error( 'Invalid namespace', 1 );
public function doDBUpdates() {
$startTime = microtime( true );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$table = 'filearchive';
$conds = array( 'fa_sha1' => '', 'fa_storage_key IS NOT NULL' );
$isRegen = ( $force || $file != '' ); // forced recalculation?
$t = -microtime( true );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( $file != '' ) {
$res = $dbw->select(
'image',
}
protected function doDBUpdates() {
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
if ( !$db->tableExists( 'revision' ) ) {
$this->error( "revision table does not exist" );
* @param int|bool $namespace
*/
private function purgeNamespace( $namespace = false ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$startId = 0;
if ( $namespace === false ) {
$conds = array();
* @return int Number of entries changed, or that would be changed
*/
private function doReassignEdits( &$from, &$to, $rc = false, $report = false ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->beginTransaction( $dbw, __METHOD__ );
# Count things
$this->output( "Building content page file cache from page {$start}!\n" );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$overwrite = $this->getOption( 'overwrite', false );
$start = ( $start > 0 )
? $start
$blockStart = $start;
$blockEnd = $start + $this->mBatchSize - 1;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
// Go through each page and save the output
while ( $blockEnd <= $end ) {
// Get the pages
}
public function execute() {
- $this->dbw = wfGetDB( DB_MASTER );
+ $this->dbw = $this->getDB( DB_MASTER );
$this->dryrun = $this->hasOption( 'dry-run' );
if ( $this->dryrun ) {
$GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed';
$this->init( $count, $table );
$this->output( "Processing $table...\n" );
- $result = wfGetDB( DB_SLAVE )->select( $table, '*', array(), __METHOD__ );
+ $result = $this->getDB( DB_SLAVE )->select( $table, '*', array(), __METHOD__ );
foreach ( $result as $row ) {
$update = call_user_func( $callback, $row, null );
public function execute() {
// Rebuild the text index
- if ( wfGetDB( DB_SLAVE )->getType() != 'postgres' ) {
+ if ( $this->getDB( DB_SLAVE )->getType() != 'postgres' ) {
$this->output( "** Rebuilding fulltext search index (if you abort "
. "this will break searching; run this script again to fix):\n" );
$rebuildText = $this->runChild( 'RebuildTextIndex', 'rebuildtextindex.php' );
* Rebuild pass 1: Insert `recentchanges` entries for page revisions.
*/
private function rebuildRecentChangesTablePass1() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->delete( 'recentchanges', '*' );
* (rc_last_oldid, rc_new etc.) and size differences (rc_old_len, rc_new_len).
*/
private function rebuildRecentChangesTablePass2() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
list( $recentchanges, $revision ) = $dbw->tableNamesN( 'recentchanges', 'revision' );
$this->output( "Updating links and size differences...\n" );
* Rebuild pass 3: Insert `recentchanges` entries for action logs.
*/
private function rebuildRecentChangesTablePass3() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->output( "Loading from user, page, and logging tables...\n" );
private function rebuildRecentChangesTablePass4() {
global $wgUseRCPatrol;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
list( $recentchanges, $usergroups, $user ) =
$dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' );
public function execute() {
// Shouldn't be needed for Postgres
- $this->db = wfGetDB( DB_MASTER );
+ $this->db = $this->getDB( DB_MASTER );
if ( $this->db->getType() == 'postgres' ) {
$this->error( "This script is not needed when using Postgres.\n", true );
}
- $this->db = wfGetDB( DB_MASTER );
if ( $this->db->getType() == 'sqlite' ) {
if ( !DatabaseSqlite::getFulltextSearchModule() ) {
$this->error( "Your version of SQLite module for PHP doesn't "
$end = str_replace( ' ', '_', $this->getOption( 'end', '' ) ); // page on img_name
$count = 0;
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
do {
$conds = array( "img_name > {$dbr->addQuotes( $start )}" );
if ( strlen( $end ) ) {
$leftAlone = 0;
$error = 0;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( $this->mBatchSize <= 0 ) {
$this->error( "Batch size is too low...", 12 );
}
global $wgParser;
$reportingInterval = 100;
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
if ( $start === null ) {
$start = 1;
*/
private function fixRedirect( $id ) {
$page = WikiPage::newFromID( $id );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( $page === null ) {
// This page doesn't exist (any more)
) {
wfWaitForSlaves();
$this->output( "Deleting illegal entries from the links tables...\n" );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
do {
// Find the start of the next chunk. This is based only
// on existent page_ids.
* @param int $batchSize The size of deletion batches
*/
private function dfnCheckInterval( $start = null, $end = null, $batchSize = 100 ) {
- $dbw = wfGetDB( DB_MASTER );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbw = $this->getDB( DB_MASTER );
+ $dbr = $this->getDB( DB_SLAVE );
$linksTables = array( // table name => page_id field
'pagelinks' => 'pl_from',
# Do an initial scan for inactive accounts and report the result
$this->output( "Checking for unused user accounts...\n" );
$del = array();
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$res = $dbr->select( 'user', array( 'user_id', 'user_name', 'user_touched' ), '', __METHOD__ );
if ( $this->hasOption( 'ignore-groups' ) ) {
$excludedGroups = explode( ',', $this->getOption( 'ignore-groups' ) );
# If required, go back and delete each marked account
if ( $count > 0 && $this->hasOption( 'delete' ) ) {
$this->output( "\nDeleting unused accounts..." );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->delete( 'user', array( 'user_id' => $del ), __METHOD__ );
$dbw->delete( 'user_groups', array( 'ug_user' => $del ), __METHOD__ );
$dbw->delete( 'user_former_groups', array( 'ufg_user' => $del ), __METHOD__ );
* @return bool
*/
private function isInactiveAccount( $id, $master = false ) {
- $dbo = wfGetDB( $master ? DB_MASTER : DB_SLAVE );
+ $dbo = $this->getDB( $master ? DB_MASTER : DB_SLAVE );
$checks = array(
'revision' => 'rev',
'archive' => 'ar',
$this->output( "Renaming DB prefix for tables of $wgDBname from '$old' to '$new'\n" );
$count = 0;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$res = $dbw->query( "SHOW TABLES " . $dbw->buildLike( $old, $dbw->anyString() ) );
foreach ( $res as $row ) {
// XXX: odd syntax. MySQL outputs an oddly cased "Tables of X"
}
// We list user by user_id from one of the slave database
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$where = array();
if ( $this->nullsOnly ) {
* @return array
*/
private function getRollbackTitles( $user ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$titles = array();
$results = $dbr->select(
array( 'page', 'revision' ),
$query = $this->getArg();
$n = 1;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
do {
$this->output( "Batch $n: " );
$n++;
);
// Get cached stats from slave database
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$stats = $dbr->selectRow( 'site_stats', '*', '', __METHOD__ );
// Get maximum size for each column
return;
}
- $this->db = wfGetDB( DB_MASTER );
+ $this->db = $this->getDB( DB_MASTER );
if ( $this->db->getType() != 'sqlite' ) {
$this->error( "This maintenance script requires a SQLite database.\n" );
private function compressOldPages( $start = 0, $extdb = '' ) {
$chunksize = 50;
$this->output( "Starting from old_id $start...\n" );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
do {
$res = $dbw->select(
'text',
# print "Already compressed row {$row->old_id}\n";
return false;
}
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$flags = $row->old_flags ? "{$row->old_flags},gzip" : "gzip";
$compress = gzdeflate( $row->old_text );
) {
$loadStyle = self::LS_CHUNKED;
- $dbr = wfGetDB( DB_SLAVE );
- $dbw = wfGetDB( DB_MASTER );
+ $dbr = $this->getDB( DB_SLAVE );
+ $dbw = $this->getDB( DB_MASTER );
# Set up external storage
if ( $extdb != '' ) {
}
public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$row = $dbr->selectRow(
array( 'text', 'revision' ),
array( 'old_flags', 'old_text' ),
}
function execute() {
- $dbr = wfGetDB( DB_SLAVE );
- $dbw = wfGetDB( DB_MASTER );
+ $dbr = $this->getDB( DB_SLAVE );
+ $dbw = $this->getDB( DB_MASTER );
$dryRun = $this->getOption( 'dry-run' );
if ( $dryRun ) {
unset( $this->mapCache[$key] );
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$map = array();
$res = $dbr->select( 'revision',
array( 'rev_id', 'rev_text_id' ),
}
public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
if ( !$dbr->tableExists( 'blob_orphans' ) ) {
$this->error( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first", true );
}
class StorageTypeStats extends Maintenance {
function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->getDB( DB_SLAVE );
$endId = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
if ( !$endId ) {
}
$type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
-$dbr = wfGetDB( DB_SLAVE );
+$dbr = $this->getDB( DB_SLAVE );
$res = $dbr->select(
array( 'page', 'revision', 'text' ),
'*',
class TidyUpBug37714 extends Maintenance {
public function execute() {
// Search for all log entries which are about changing the visability of other log entries.
- $result = wfGetDB( DB_SLAVE )->select(
+ $result = $this->getDB( DB_SLAVE )->select(
'logging',
array( 'log_id', 'log_params' ),
array(
foreach ( $result as $row ) {
$paramLines = explode( "\n", $row->log_params );
$ids = explode( ',', $paramLines[0] ); // Array dereferencing is PHP >= 5.4 :(
- $result = wfGetDB( DB_SLAVE )->select( // Work out what log entries were changed here.
+ $result = $this->getDB( DB_SLAVE )->select( // Work out what log entries were changed here.
'logging',
'log_type',
array( 'log_id' => $ids ),
// If there's only one type, the target title can be set to include it.
$logTitle = SpecialPage::getTitleFor( 'Log', $result->current()->log_type )->getText();
$this->output( 'Set log_title to "' . $logTitle . '" for log entry ' . $row->log_id . ".\n" );
- wfGetDB( DB_MASTER )->update(
+ $this->getDB( DB_MASTER )->update(
'logging',
array( 'log_title' => $logTitle ),
array( 'log_id' => $row->log_id ),
# Attempt to connect to the database as a privileged user
# This will vomit up an error if there are permissions problems
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
$this->output( "Going to run database updates for " . wfWikiID() . "\n" );
if ( $db->getType() === 'sqlite' ) {
$this->output( "Counting articles..." );
if ( $this->hasOption( 'use-master' ) ) {
- $dbr = wfGetDB( DB_MASTER );
+ $dbr = $this->getDB( DB_MASTER );
} else {
- $dbr = wfGetDB( DB_SLAVE, 'vslow' );
+ $dbr = $this->getDB( DB_SLAVE, 'vslow' );
}
$counter = new SiteStatsInit( $dbr );
$result = $counter->articles();
$this->output( "found {$result}.\n" );
if ( $this->hasOption( 'update' ) ) {
$this->output( "Updating site statistics table... " );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$dbw->update(
'site_stats',
array( 'ss_good_articles' => $result ),
public function execute() {
$maxLockTime = $this->getOption( 'l', 20 );
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
if ( $dbw->getType() !== 'mysql' ) {
$this->error( "This change is only needed on MySQL, quitting.\n", true );
}
}
public function execute() {
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
if ( !$db->tableExists( 'page_restrictions' ) ) {
$this->error( "page_restrictions table does not exist", true );
}
$wgDisableSearchUpdate = false;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$recentchanges = $dbw->tableName( 'recentchanges' );
$this->output( "Updating searchindex between $start and $end\n" );
public function execute() {
global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->getDB( DB_MASTER );
$this->doSpecialPageCacheUpdates( $dbw );
'styles' => 'resources/src/mediawiki.special/mediawiki.special.block.css',
'dependencies' => 'mediawiki.util',
),
+ 'mediawiki.special.blocklist' => array(
+ 'styles' => 'resources/src/mediawiki.special/mediawiki.special.blocklist.css',
+ 'position' => 'top',
+ ),
'mediawiki.special.changeslist' => array(
'position' => 'top',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
height: 6px;
}
/* @noflip */ .tipsy-n .tipsy-arrow {
- top: 0px;
+ top: 0;
left: 50%;
margin-left: -5px;
}
/* @noflip */ .tipsy-nw .tipsy-arrow {
- top: 1px;
+ top: 0;
left: 10px;
}
/* @noflip */ .tipsy-ne .tipsy-arrow {
- top: 1px;
+ top: 0;
right: 10px;
}
/* @noflip */ .tipsy-s .tipsy-arrow {
- bottom: 0px;
+ bottom: 0;
left: 50%;
margin-left: -5px;
background-position: bottom left;
}
/* @noflip */ .tipsy-sw .tipsy-arrow {
- bottom: 0px;
+ bottom: 0;
left: 10px;
background-position: bottom left;
}
/* @noflip */ .tipsy-se .tipsy-arrow {
- bottom: 0px;
+ bottom: 0;
right: 10px;
background-position: bottom left;
}
/* @noflip */ .tipsy-e .tipsy-arrow {
top: 50%;
margin-top: -5px;
- right: 1px;
- width: 5px;
+ right: 0;
+ width: 6px;
height: 11px;
background-position: top right;
}
/* @noflip */ .tipsy-w .tipsy-arrow {
top: 50%;
margin-top: -5px;
- left: 0px;
+ left: 0;
width: 6px;
height: 11px;
}
.addClass( 'mw-indicator' )
.attr( 'id', mw.util.escapeId( 'mw-indicator-' + indicator.name ) )
.html( indicator[ '*' ] )
- .get( 0 )
+ .get( 0 ),
+ // Add a whitespace between the <div>s because
+ // they get displayed with display: inline-block
+ document.createTextNode( '\n' )
);
- newList.push( document.createTextNode( '\n' ) );
} );
$( '.mw-indicators' ).empty().append( newList );
--- /dev/null
+.mw-htmlform-flatlist-item {\r
+ /* FIXME: There should be an option in OOUI to do that */\r
+ display: inline-block !important;\r
+}
\ No newline at end of file
);
}
- /**
- * @dataProvider providePreSaveTransform
- * @covers WikiPage::preSaveTransform
- */
- public function testPreSaveTransform( $text, $expected ) {
- $this->hideDeprecated( 'WikiPage::preSaveTransform' );
- $user = new User();
- $user->setName( "127.0.0.1" );
-
- // NOTE: assume Help namespace to contain wikitext
- $page = $this->newPage( "Help:WikiPageTest_testPreloadTransform" );
- $text = $page->preSaveTransform( $text, $user );
-
- $this->assertEquals( $expected, $text );
- }
-
/**
* @covers WikiPage::factory
*/