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 ) . ',&#160;' : '' ) .
                                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

Reply via email to