https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113604
Revision: 113604
Author: saper
Date: 2012-03-12 00:18:08 +0000 (Mon, 12 Mar 2012)
Log Message:
-----------
bug 16985: Show number of recent edits in Special:Nuke
One aggregate query only to get list of recent changes
matching the criteria.
Bumping extension version + adding myself to credits.
Followup-To: r108602 r108871
i18n: remove nuke-viewchanges introduced in r111298
Modified Paths:
--------------
trunk/extensions/Nuke/Nuke.i18n.php
trunk/extensions/Nuke/Nuke.php
trunk/extensions/Nuke/Nuke_body.php
Modified: trunk/extensions/Nuke/Nuke.i18n.php
===================================================================
--- trunk/extensions/Nuke/Nuke.i18n.php 2012-03-12 00:07:45 UTC (rev 113603)
+++ trunk/extensions/Nuke/Nuke.i18n.php 2012-03-12 00:18:08 UTC (rev 113604)
@@ -37,7 +37,6 @@
'nuke-delete-more' => '[[Special:Nuke|Delete more pages]]',
'nuke-pattern' => 'Pattern for the page name:',
'nuke-nopages-global'=> 'There are no new pages in
[[Special:RecentChanges|recent changes]].',
- 'nuke-viewchanges' => 'view changes',
);
/** Message documentation (Message documentation)
@@ -196,7 +195,6 @@
'nuke-delete-more' => '[[Special:Nuke|Desaniciar más páxines]]',
'nuke-pattern' => 'Patrón pal nome de páxina:',
'nuke-nopages-global' => 'Nun hai páxines nueves nos
[[Special:RecentChanges|cambios recientes]].',
- 'nuke-viewchanges' => 'ver los cambios',
);
/** Azerbaijani (Azərbaycanca)
@@ -288,7 +286,6 @@
'nuke-delete-more' => '[[Special:Nuke|Масавае выдаленьне старонак]]',
'nuke-pattern' => 'Узор для назвы старонкі:',
'nuke-nopages-global' => 'У [[Special:RecentChanges|апошніх зьменах]]
больш няма новых старонак.',
- 'nuke-viewchanges' => 'праглядзець зьмены',
);
/** Bulgarian (Български)
@@ -356,7 +353,6 @@
'nuke-delete-more' => '[[Special:Nuke|Diverkañ pajennoù all]]',
'nuke-pattern' => 'Patrom evit anv ar bajenn :',
'nuke-nopages-global' => "N'eus pajenn nevez ebet er
[[Special:RecentChanges|c'hemmoù diwezhañ]].",
- 'nuke-viewchanges' => "Diskouez ar c'hemmoù",
);
/** Bosnian (Bosanski)
@@ -509,7 +505,6 @@
'nuke-delete-more' => '[[Special:Nuke|Weitere Seiten löschen]]',
'nuke-pattern' => 'Muster für den Seitennamen:',
'nuke-nopages-global' => 'Es gibt keine neuen Seiten unter den
[[Special:RecentChanges|letzten Änderungen]].',
- 'nuke-viewchanges' => 'Änderungen ansehen',
);
/** German (formal address) (Deutsch (Sie-Form))
@@ -569,7 +564,6 @@
'nuke-delete-more' => '[[Special:Nuke|Dalšne boki lašowaś]]',
'nuke-pattern' => 'Pśikład za bokowe mě:',
'nuke-nopages-global' => 'Njejsu žedne nowe boki w
[[Special:RecentChanges|aktualnych změnach]].',
- 'nuke-viewchanges' => 'změny pokazaś',
);
/** Ewe (Eʋegbe) */
@@ -668,7 +662,6 @@
'nuke-delete-more' => '[[Special:Nuke|Borrar más páginas]]',
'nuke-pattern' => 'Patrón del título de la página:',
'nuke-nopages-global' => 'No hay nuevas páginas en los
[[Special:RecentChanges|cambios recientes]].',
- 'nuke-viewchanges' => 'Mostrar cambios',
);
/** Estonian (Eesti)
@@ -741,7 +734,6 @@
'nuke-delete-more' => '[[Special:Nuke|حذف صفحههای بیشتر]]',
'nuke-pattern' => 'الگو برای نام صفحه:',
'nuke-nopages-global' => 'هیچ صفحهٔ جدیدی در
[[Special:RecentChanges|فهرست تغییرات اخیر]] نیست.',
- 'nuke-viewchanges' => 'نمایش تغییرات',
);
/** Finnish (Suomi)
@@ -813,7 +805,6 @@
'nuke-delete-more' => '[[Special:Nuke|Supprimer plus de pages]]',
'nuke-pattern' => 'Modèle pour le nom de page:',
'nuke-nopages-global' => "Il n'y a pas de nouvelle page dans
[[Special:RecentChanges|changements récents]].",
- 'nuke-viewchanges' => 'voir les modifications',
);
/** Franco-Provençal (Arpetan)
@@ -883,7 +874,6 @@
'nuke-delete-more' => '[[Special:Nuke|Borrar máis páxinas]]',
'nuke-pattern' => 'Patrón para o nome de páxina:',
'nuke-nopages-global' => 'Non hai páxinas novas nos
[[Special:RecentChanges|cambios recentes]].',
- 'nuke-viewchanges' => 'ollar os cambios',
);
/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
@@ -967,7 +957,6 @@
'nuke-delete-more' => '[[Special:Nuke|למחוק עוד דפים]]',
'nuke-pattern' => 'תבנית עבור שם הדף:',
'nuke-nopages-global' => 'אין דפים חדשים
ב[[Special:RecentChanges|שינויים אחרונים]].',
- 'nuke-viewchanges' => 'הצגת שינויים',
);
/** Hindi (हिन्दी)
@@ -1043,7 +1032,6 @@
'nuke-delete-more' => '[[Special:Nuke|Dalše strony wušmórnyć]]',
'nuke-pattern' => 'Přikład za mjeno strony:',
'nuke-nopages-global' => 'Njejsu žane nowe strony w
[[Special:RecentChanges|aktualnych změnach]].',
- 'nuke-viewchanges' => 'změny pokazać',
);
/** Hungarian (Magyar)
@@ -1099,7 +1087,6 @@
'nuke-delete-more' => '[[Special:Nuke|Deler plus paginas]]',
'nuke-pattern' => 'Patrono pro le nomine de pagina:',
'nuke-nopages-global' => 'Il non ha nove paginas in le
[[Special:RecentChanges|modificationes recente]].',
- 'nuke-viewchanges' => 'vider modificationes',
);
/** Indonesian (Bahasa Indonesia)
@@ -1234,7 +1221,6 @@
'nuke-delete-more' => '[[Special:Nuke|Cancella più pagine]]',
'nuke-pattern' => 'Modello per il titolo della pagina:',
'nuke-nopages-global' => 'Non ci sono nuove pagine negli
[[Special:RecentChanges|ultimi cambiamenti]].',
- 'nuke-viewchanges' => 'vedi modifiche',
);
/** Japanese (日本語)
@@ -1457,7 +1443,6 @@
'nuke-delete-more' => '[[Special:Nuke|Méi Säite läschen]]',
'nuke-pattern' => 'Muster fir de Säitennumm:',
'nuke-nopages-global' => 'Et si keng nei Säiten an de
[[Special:RecentChanges|rezenten Ännerungen]].',
- 'nuke-viewchanges' => 'Ännerunge weisen',
);
/** Limburgish (Limburgs)
@@ -1550,7 +1535,6 @@
'nuke-delete-more' => '[[Special:Nuke|Избриши уште страници]]',
'nuke-pattern' => 'Мостра за име на страница:',
'nuke-nopages-global' => 'Нема нови страници во
[[Special:RecentChanges|скорешните промени]].',
- 'nuke-viewchanges' => 'прикажи промени',
);
/** Malayalam (മലയാളം)
@@ -1626,7 +1610,6 @@
'nuke-delete-more' => '[[Special:Nuke|Hapuskan lebih banyak laman]]',
'nuke-pattern' => 'Pola nama laman:',
'nuke-nopages-global' => 'Tiada laman baru dalam
[[Special:RecentChanges|perubahan terkini]].',
- 'nuke-viewchanges' => 'lihat perubahan',
);
/** Maltese (Malti)
@@ -1763,7 +1746,6 @@
'nuke-delete-more' => "[[Special:Nuke|Meer pagina's verwijderen]]",
'nuke-pattern' => 'Patroon voor de paginanaam:',
'nuke-nopages-global' => "Er zijn geen nieuwe pagina's in de
[[Special:RecentChanges|recente wijzigingen]].",
- 'nuke-viewchanges' => 'wijzigingen bekijken',
);
/** Norwegian Nynorsk (Norsk (nynorsk))
@@ -1886,7 +1868,6 @@
'nuke-delete-more' => '[[Special:Nuke|Usuń więcej stron]]',
'nuke-pattern' => 'Wzór nazwy strony:',
'nuke-nopages-global' => 'Brak nowych stron w
[[Special:RecentChanges|ostatnich zmianach]].',
- 'nuke-viewchanges' => 'widok zmian',
);
/** Piedmontese (Piemontèis)
@@ -1917,7 +1898,6 @@
'nuke-delete-more' => "[[Special:Nuke|Scancelé pì 'd pàgine]]",
'nuke-pattern' => 'Model për ël nòm ëd pàgina:',
'nuke-nopages-global' => "A-i é pa 'd pàgine neuve an
[[Special:RecentChanges|ùltime modìfiche]].",
- 'nuke-viewchanges' => 'varda modìfiche',
);
/** Pashto (پښتو)
@@ -2110,7 +2090,6 @@
'nuke-delete-more' => '[[Special:Nuke|Множественное удаление страниц]]',
'nuke-pattern' => 'Шаблон для имени страницы:',
'nuke-nopages-global' => 'В [[Special:RecentChanges|недавних
изменениях]] нет новых страниц.',
- 'nuke-viewchanges' => 'Внесённые изменения',
);
/** Rusyn (Русиньскый)
@@ -2251,7 +2230,6 @@
'nuke-delete-more' => '[[Special:Nuke|Izbriši več strani]]',
'nuke-pattern' => 'Vzorec imena strani:',
'nuke-nopages-global' => 'V [[Special:RecentChanges|zadnjih
spremembah]] ni novih strani.',
- 'nuke-viewchanges' => 'ogled sprememb',
);
/** Serbian (Cyrillic script) (Српски (ћирилица))
@@ -2580,7 +2558,6 @@
'nuke-delete-more' => '[[Special:Nuke|Xóa thêm trang]]',
'nuke-pattern' => 'Mẫu tên trang:',
'nuke-nopages-global' => 'Không có trang mới trong các
[[Special:RecentChanges|thay đổi gần đây]].',
- 'nuke-viewchanges' => 'xem thay đổi',
);
/** Volapük (Volapük)
Modified: trunk/extensions/Nuke/Nuke.php
===================================================================
--- trunk/extensions/Nuke/Nuke.php 2012-03-12 00:07:45 UTC (rev 113603)
+++ trunk/extensions/Nuke/Nuke.php 2012-03-12 00:18:08 UTC (rev 113604)
@@ -4,7 +4,7 @@
die( 'Not an entry point.' );
}
-define( 'Nuke_VERSION', '1.1.4' );
+define( 'Nuke_VERSION', '1.1.5' );
$dir = dirname(__FILE__) . '/';
@@ -15,7 +15,7 @@
'path' => __FILE__,
'name' => 'Nuke',
'descriptionmsg' => 'nuke-desc',
- 'author' => array( 'Brion Vibber', 'Jeroen De Dauw' ),
+ 'author' => array( 'Brion Vibber', 'Jeroen De Dauw', 'Marcin
Cieślak' ),
'url' => 'https://www.mediawiki.org/wiki/Extension:Nuke',
'version' => Nuke_VERSION,
);
Modified: trunk/extensions/Nuke/Nuke_body.php
===================================================================
--- trunk/extensions/Nuke/Nuke_body.php 2012-03-12 00:07:45 UTC (rev 113603)
+++ trunk/extensions/Nuke/Nuke_body.php 2012-03-12 00:18:08 UTC (rev 113604)
@@ -161,11 +161,13 @@
/**
* @var $title Title
*/
- list( $title, $userName ) = $info;
+ list( $title, $userName, $edits ) = $info;
$image = $title->getNamespace() == NS_IMAGE ?
wfLocalFile( $title ) : false;
$thumb = $image && $image->exists() ?
$image->transform( array( 'width' => 120, 'height' => 120 ), 0 ) : false;
+ $changes = wfMsgExt( 'nchanges', 'parsemag',
$this->getLanguage()->formatNum( $edits ) );
+
$out->addHTML( '<li>' .
Xml::check(
'pages[]',
@@ -179,7 +181,7 @@
( $userName ? wfMsgExt( 'nuke-editby',
'parseinline', $userName ) . ', ' : '' ) .
Linker::linkKnown(
$title,
- wfMsg( 'nuke-viewchanges' ),
+ $changes,
array(),
array( 'action' => 'history' )
) .
@@ -204,13 +206,29 @@
protected function getNewPages( $username, $limit ) {
$dbr = wfGetDB( DB_SLAVE );
+ /**
+ * This is the worst-case query:
+ *
+ * SELECT rc_user_text, rc_namespace, rc_title, SUM(1) AS edits,
MAX(rc_new)
+ * FROM recentchanges
+ * WHERE (rc_log_type IS NULL OR (rc_log_type = 'upload' AND
rc_log_action='upload'))
+ * AND rc_title LIKE 'Test%'
+ * GROUP BY rc_user_text, rc_namespace, rc_title
+ * HAVING MIN(CASE
+ * WHEN rc_log_type IS NULL THEN 2
+ * WHEN rc_log_type = 'upload' THEN 1
+ * ELSE 0 END) = 1
+ * OR MAX(rc_new) = 1
+ * ORDER BY min(rc_timestamp) DESC;
+ *
+ */
+
$what = array(
'rc_namespace',
'rc_title',
- 'rc_timestamp',
);
- $where = array( "(rc_new = 1) OR (rc_log_type = 'upload' AND
rc_log_action = 'upload')" );
+ $where = array( "(rc_log_type IS NULL) OR (rc_log_type =
'upload' AND rc_log_action = 'upload')" );
if ( $username === '' ) {
$what[] = 'rc_user_text';
@@ -222,16 +240,23 @@
if ( !is_null( $pattern ) && trim( $pattern ) !== '' ) {
$where[] = 'rc_title LIKE ' . $dbr->addQuotes( $pattern
);
}
- $group = implode( ', ', $what );
+ $group = implode( ', ', $what );
+ $what[] = "sum(1) AS edits";
$result = $dbr->select( 'recentchanges',
$what,
$where,
__METHOD__,
array(
- 'ORDER BY' => 'rc_timestamp DESC',
'GROUP BY' => $group,
- 'LIMIT' => $limit
+ 'LIMIT' => $limit,
+ 'ORDER BY' => 'MIN(rc_timestamp) DESC',
+ 'HAVING' => <<<QUERY
+ MIN(CASE WHEN rc_log_type IS NULL
THEN 2
+ WHEN rc_log_type = 'upload'
THEN 1
+ ELSE 0 END) = 1
+ OR MAX(rc_new) = 1
+QUERY
)
);
@@ -240,7 +265,8 @@
foreach ( $result as $row ) {
$pages[] = array(
Title::makeTitle( $row->rc_namespace,
$row->rc_title ),
- $username === '' ? $row->rc_user_text : false
+ $username === '' ? $row->rc_user_text : false,
+ $row->edits,
);
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs