'RefreshLinksJob' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob.php',
'RefreshLinksJob2' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob2.php',
'RegexlikeReplacer' => __DIR__ . '/includes/utils/StringUtils.php',
+ 'RemoveInvalidEmails' => __DIR__ . '/maintenance/removeInvalidEmails.php',
'RemoveUnusedAccounts' => __DIR__ . '/maintenance/removeUnusedAccounts.php',
'RenameDbPrefix' => __DIR__ . '/maintenance/renameDbPrefix.php',
'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
* @throws FatalError
*/
public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
- wfProfileIn( 'hook: ' . $event );
+ $profiler = Profiler::instance();
+ $eventPS = $profiler->scopedProfileIn( 'hook: ' . $event );
+
foreach ( self::getHandlers( $event ) as $hook ) {
// Turn non-array values into an array. (Can't use casting because of objects.)
if ( !is_array( $hook ) ) {
$badhookmsg = null;
$hook_args = array_merge( $hook, $args );
- // Profile first in case the Profiler causes errors.
- wfProfileIn( $func );
+ // Profile first in case the Profiler causes errors
+ $funcPS = $profiler->scopedProfileIn( $func );
set_error_handler( 'Hooks::hookErrorHandler' );
// mark hook as deprecated, if deprecation version is specified
restore_error_handler();
throw $e;
}
+
restore_error_handler();
- wfProfileOut( $func );
+ $profiler->scopedProfileOut( $funcPS );
// Process the return value.
if ( is_string( $retval ) ) {
"Hook $func has invalid call signature; " . $badhookmsg
);
} elseif ( $retval === false ) {
- wfProfileOut( 'hook: ' . $event );
// False was returned. Stop processing, but no error.
return false;
}
}
- wfProfileOut( 'hook: ' . $event );
return true;
}
"apihelp-block-description": "Блякаваньне ўдзельніка.",
"apihelp-block-param-user": "Імя ўдзельніка, IP-адрас або IP-дыяпазон, якія вы хочаце заблякаваць.",
"apihelp-block-param-expiry": "Час заканчэньня. Можа быць адносным (напрыклад, «5 months» або «2 weeks») ці аблсалютным (напрыклад, «2014-09-18T12:34:56Z»). Калі выстаўлены на «infinite», «indefinite» ці «never», блякаваньне будзе бестэрміновым.",
- "apihelp-block-param-reason": "Прычына блякаваньня."
+ "apihelp-block-param-reason": "Прычына блякаваньня.",
+ "apihelp-block-param-anononly": "Заблякаваць толькі ананімных удзельнікаў (напрыклад, забараніць ананімныя праўкі з гэтага IP-адрасу)."
}
"apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
"apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
"apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel",
+ "apihelp-revisiondelete-description": "Supprimer et annuler la suppression des révisions.",
+ "apihelp-revisiondelete-param-type": "Type de suppression de révision en cours de traitement.",
+ "apihelp-revisiondelete-param-target": "Titre de page pour la suppression de révision, s’il est nécessaire pour le type.",
+ "apihelp-revisiondelete-param-ids": "Identifiants pour les révisions à supprimer.",
+ "apihelp-revisiondelete-param-hide": "Quoi masquer pour chaque révision.",
+ "apihelp-revisiondelete-param-show": "Quoi démasquer pour chaque révision",
+ "apihelp-revisiondelete-param-suppress": "S’il faut supprimer les données aux administrateurs comme aux autres.",
+ "apihelp-revisiondelete-param-reason": "Motif de suppression ou d’annulation de suppression.",
+ "apihelp-revisiondelete-example-revision": "Masquer le contenu de la révision 12345 de la Page principale",
+ "apihelp-revisiondelete-example-log": "Masquer toutes les données de l’entrée de journal 67890 avec le motif « Violation de Biographie de Personne Vivante »",
+ "apihelp-rollback-description": "Annuler la dernière modification de la page.\n\nSi le dernier utilisateur à avoir modifié la page a fait plusieurs modifications sur une ligne, elles seront toutes annulées.",
+ "apihelp-rollback-param-title": "Titre de la page que vous voulez restaurer. Impossible à utiliser avec $1pageid.",
+ "apihelp-rollback-param-pageid": "ID de la page que vous voulez restaurer. Impossible à utiliser avec $1title.",
+ "apihelp-rollback-param-user": "Nom de l’utilisateur dont les modifications doivent être annulées.",
+ "apihelp-rollback-param-summary": "Personnaliser le résumé de la modification. S’il est vide, le résumé par défaut sera utilisé.",
+ "apihelp-rollback-param-markbot": "Marquer les modifications annulées et les modifications annulées comme robot.",
+ "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de votre liste de suivi sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-rollback-example-simple": "Annuler les dernières modifications à [[Main Page]] par l’utilisateur Exemple",
+ "apihelp-rollback-example-summary": "Annuler les dernières modifications sur [[Main Page]] par l’utilisateur à l’adresse IP 192.0.2.5 avec le résumé « Annulation de vandalisme », et marquer ces modifications et l’annulation comme « robot »",
+ "apihelp-rsd-description": "Exporter un schéma RSD (Découverte Très Simple).",
+ "apihelp-rsd-example-simple": "Exporter le schéma RSD",
"apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
"apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.",
"apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).",
"apihelp-move-description": "Przenieś stronę.",
"apihelp-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
"apihelp-protect-example-protect": "Zabezpiecz stronę",
+ "apihelp-query+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
"apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
"apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
"apihelp-unblock-param-reason": "Powód odblokowania.",
}
/**
- * Get the name of an index in a given table
+ * Get the name of an index in a given table.
*
+ * @protected Don't use outside of DatabaseBase and childs
* @param string $index
* @return string
*/
- protected function indexName( $index ) {
+ public function indexName( $index ) {
+ // @FIXME: Make this protected once we move away from PHP 5.3
+ // Needs to be public because of usage in closure (in DatabaseBase::replaceVars)
+
// Backwards-compatibility hack
$renamed = array(
'ar_usertext_timestamp' => 'usertext_timestamp',
}
public function scopedProfileIn( $section ) {
- return null;
+ return new ScopedCallback( function() {
+ // no-op
+ } );
}
public function getFunctionStats() {
} );
}
- return null;
+ return new ScopedCallback( function() {
+ // no-op
+ } );
}
/**
}
/**
- * @param DatabaseBase $dbw Passed in from updateSpecialPages.php
+ * @param IDatabase $dbw Passed in from updateSpecialPages.php
* @return void
*/
- public static function cacheUpdate( DatabaseBase $dbw ) {
+ public static function cacheUpdate( IDatabase $dbw ) {
global $wgActiveUserDays;
self::doQueryCacheUpdate( $dbw, $wgActiveUserDays, $wgActiveUserDays * 86400 );
/**
* Update the query cache as needed
*
- * @param DatabaseBase $dbw
+ * @param IDatabase $dbw
* @param int $days How many days user must be idle before he is considered inactive
* @param int $window Maximum time range of new data to scan (in seconds)
* @return int|bool UNIX timestamp the cache is now up-to-date as of (false on error)
*/
- protected static function doQueryCacheUpdate( DatabaseBase $dbw, $days, $window ) {
+ protected static function doQueryCacheUpdate( IDatabase $dbw, $days, $window ) {
$dbw->startAtomic( __METHOD__ );
$lockKey = wfWikiID() . '-activeusers';
public $mDb;
public $preventClickjacking = false;
- /** @var DatabaseBase */
+ /** @var IDatabase */
public $mDbSecondary;
/**
/**
* Get the Database object in use
*
- * @return DatabaseBase
+ * @return IDatabase
*/
public function getDatabase() {
return $this->mDb;
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Cache page existence for performance
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
*
* @param $out OutputPage
* @param $skin Skin (deprecated presumably)
- * @param $dbr DatabaseBase
+ * @param $dbr IDatabase
* @param $res ResultWrapper Results from query
* @param $num integer Number of results
* @param $offset integer Paging offset (Should always be 0 in our case)
/**
* Initialize total values so we can figure out percentages later.
*
- * @param $dbr DatabaseBase
+ * @param $dbr IDatabase
* @param $res ResultWrapper
*/
public function preprocessResults( $dbr, $res ) {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Fetch user page links and cache their existence
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
/**
* Pre-cache page existence to speed up link generation
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
Xml::openElement( 'div', array( 'id' => 'mw-search-top-table' ) ) .
$this->shortDialog( $term, $num, $totalRes ) .
Xml::closeElement( 'div' ) .
- $this->formHeader( $term ) .
- Xml::closeElement( 'form' )
+ Xml::closeElement( 'form' ) .
+ $this->didYouMeanHtml .
+ $this->searchProfileTabs( $term )
);
$filePrefix = $wgContLang->getFormattedNsText( NS_FILE ) . ':';
* @param string $term
* @return string
*/
- protected function formHeader( $term ) {
- $out = Xml::openElement( 'div', array( 'class' => 'mw-search-formheader' ) );
+ protected function searchProfileTabs( $term ) {
+ $out = Xml::openElement( 'div', array( 'class' => 'mw-search-profile-tabs' ) );
$bareterm = $term;
if ( $this->startsWithImage( $term ) ) {
Xml::element( 'div', array( 'style' => 'clear:both' ), '', false );
}
- return $out . $this->didYouMeanHtml;
+ return $out;
}
/**
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
}
/**
- * @param DatabaseBase $dbr
+ * @param IDatabase $dbr
* @param string|array $condition
* @return bool|ResultWrapper
*/
}
/**
- * Return a DatabaseBase object for reading
+ * Return a IDatabase object for reading
*
- * @return DatabaseBase
+ * @return IDatabase
*/
protected function getDB() {
return wfGetDB( DB_SLAVE, 'watchlist' );
/**
* Count the number of items on a user's watchlist
*
- * @param DatabaseBase $dbr A database connection
+ * @param IDatabase $dbr A database connection
* @return int
*/
protected function countItems( $dbr ) {
"templatesusedsection": "{{PLURAL:$1|Predložak koji se rabi|Predlošci koji se rabe}} u ovom odjeljku:",
"template-protected": "(zaštićen)",
"template-semiprotected": "(djelomično zaštićen)",
- "hiddencategories": "Ova stranica je član {{PLURAL:$1|1 skrivene kategorija|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
+ "hiddencategories": "Ova stranica je član {{PLURAL:$1|1 skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
"nocreatetext": "Na ovom je projektu ograničeno otvaranje novih stranica.\nMožete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti suradnički račun]].",
"nocreate-loggedin": "Nemate ovlasti za stvaranje novih stranica.",
"sectioneditnotsupported-title": "Uređivanje odjeljka nije podržano",
"log-name-pagelang": "Språkändringslogg",
"log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
- "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code> katalogen från den.\n:* Ladda ner individuella skin tarbells från[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code> centralförvaren in i <code dir=\"ltr\">skins/</code> arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git arkivet om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+ "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseenden från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
"default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
"listusers-desc": "使用降冪排序",
"usereditcount": "$1 次{{PLURAL:$1|編輯}}",
"usercreated": "於 $1 $2 {{GENDER:$3|建立}}",
- "newpages": "æ\9c\80æ\96°é \81é\9d¢",
+ "newpages": "新頁面",
"newpages-username": "使用者名稱:",
"ancientpages": "最舊頁面",
"move": "移動",
if ( !Sanitizer::validateEmail( trim( $row->user_email ) ) ) {
$this->output( "Found bad email: {$row->user_email} for user #{$row->user_id}\n" );
$badIds[] = $row->user_id;
- if ( $row->user_id > $lastId ) {
- $lastId = $row->user_id;
- }
+ }
+ if ( $row->user_id > $lastId ) {
+ $lastId = $row->user_id;
}
}
color: green;
font-size: 97%;
}
-.mw-search-formheader {
+.mw-search-profile-tabs {
background-color: #f3f3f3;
margin-top: 1em;
border: 1px solid silver;
}
-.mw-search-formheader div.search-types {
+.mw-search-profile-tabs div.search-types {
float: left;
padding-left: 0.25em;
}
-.mw-search-formheader div.search-types ul {
+.mw-search-profile-tabs div.search-types ul {
margin: 0 !important;
padding: 0 !important;
list-style: none !important;
}
-.mw-search-formheader div.search-types ul li {
+.mw-search-profile-tabs div.search-types ul li {
float: left;
margin: 0;
padding: 0;
}
-.mw-search-formheader div.search-types ul li a {
+.mw-search-profile-tabs div.search-types ul li a {
display: block;
padding: 0.5em;
}
-.mw-search-formheader div.search-types ul li.current a {
+.mw-search-profile-tabs div.search-types ul li.current a {
color: #333333;
cursor: default;
}
-.mw-search-formheader div.search-types ul li.current a:hover {
+.mw-search-profile-tabs div.search-types ul li.current a:hover {
text-decoration: none;
}
#mw-search-top-table div.results-info {