I was adding a special page (dead-end pages), and I realized that almost all
authorEvan Prodromou <evanprodromou@users.mediawiki.org>
Mon, 1 Dec 2003 16:04:35 +0000 (16:04 +0000)
committerEvan Prodromou <evanprodromou@users.mediawiki.org>
Mon, 1 Dec 2003 16:04:35 +0000 (16:04 +0000)
the special query pages were pretty much identical. I copy-and-pasted one to
make the one I was working on, and I realized that that was Wrong.

So, I took the common elements and made them into a class, QueryPage.php.
Then, I derived each of the existing special pages from QueryPage, and
overrode places where they differed. This is a Recipe pattern, btw, for
those of you following along at home.

Anyways, the upshot is that the query pages are a lot shorter, with just the
essentials that make them different from other query pages, and there's one
place to make big UI changes for all queries.

includes/QueryPage.php [new file with mode: 0644]
includes/SpecialAncientpages.php
includes/SpecialDeadendpages.php
includes/SpecialLonelypages.php
includes/SpecialLongpages.php
includes/SpecialNewpages.php
includes/SpecialPopularpages.php
includes/SpecialShortpages.php
includes/SpecialWantedpages.php

diff --git a/includes/QueryPage.php b/includes/QueryPage.php
new file mode 100644 (file)
index 0000000..50f34c3
--- /dev/null
@@ -0,0 +1,104 @@
+<?
+
+include_once ( "LogPage.php" ) ;
+
+# This is a class for doing query pages; since they're almost all the same,
+# we factor out some of the functionality into a superclass, and let
+# subclasses derive from it.
+
+class QueryPage {
+
+    # Subclasses return their name here. Make sure the name is also
+    # specified in Language.php, both in the $wgValidSpecialPagesEn
+    # variable, and as a language message param.
+    
+    function getName() {
+       return "";
+    }
+
+    # Subclasses return a SQL query here.
+    
+    function getSQL( $offset, $limit ) {
+       return "";
+    }
+
+    # Is this query expensive (for some definition of expensive)? Then we
+    # don't let it run in miser mode. The default is 0. Expensive
+    # subqueries should override this.
+    
+    function isExpensive( ) {
+       return 0;
+    }
+    
+    # Formats the results of the query for display. The skin is the current
+    # skin; you can use it for making links. The result is a single row of
+    # result data. You should be able to grab SQL results off of it.
+    
+    function formatResult( $skin, $result ) {
+       return "";
+    }
+
+    # This is the actual workhorse. It does everything needed to make a
+    # real, honest-to-gosh query page.
+    
+    function doQuery( $offset, $limit ) {
+       
+       global $wgUser, $wgOut, $wgLang, $wgMiserMode;
+
+       $sname = $this->getName();
+       $fname = get_class($this) . "::doQuery";
+       
+       if ( $this->isExpensive( ) ) {
+           
+           $vsp = $wgLang->getValidSpecialPages();
+           $logpage = new LogPage( $vsp[$sname] );
+           $logpage->mUpdateRecentChanges = false;
+           
+           if ( $wgMiserMode ) {
+               $logpage->showAsDisabledPage();
+               return;
+           }
+       }
+
+       $sql = $this->getSQL( $offset, $limit );
+
+       $res = wfQuery( $sql, DB_READ, $fname );
+
+       $sk = $wgUser->getSkin( );
+
+       $top = wfShowingResults( $offset, $limit );
+       $wgOut->addHTML( "<p>{$top}\n" );
+
+       $sl = wfViewPrevNext( $offset, $limit, $wgLang->specialPage( $sname ) );
+       $wgOut->addHTML( "<br>{$sl}\n" );
+
+       $s = "<ol start=" . ( $offset + 1 ) . ">";
+       while ( $obj = wfFetchObject( $res ) ) {
+           $format = $this->formatResult( $sk, $obj );
+           $s .= "<li>{$format}</li>\n";
+       }
+       wfFreeResult( $res );
+       $s .= "</ol>";
+       $wgOut->addHTML( $s );
+       $wgOut->addHTML( "<p>{$sl}\n" );
+
+       # Saving cache
+       
+       if ( $this->isExpensive() && $offset == 0 && $limit >= 50 ) {
+           $logpage->replaceContent( $s );
+       }
+    }
+}
+
+# This is a subclass for very simple queries that are just looking for page
+# titles that match some criteria. It formats each result item as a link to
+# that page.
+
+class PageQueryPage extends QueryPage {
+
+    function formatResult( $skin, $result ) {
+       return $skin->makeKnownLink( $result->cur_title, "" );
+    }
+}
+
+?>
index 60c736a..a93a4eb 100644 (file)
@@ -1,45 +1,40 @@
 <?
 
-function wfSpecialAncientpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialAncientpages";
+include_once( "QueryPage.php" );
+
+class AncientPagesPage extends QueryPage {
 
-       list( $limit, $offset ) = wfCheckLimits();
+    function getName() {
+       return "Ancientpages";
+    }
+    
+    function isExpensive() {
+       return 0;
+    }
 
-       $sql = "SELECT cur_title,cur_user,cur_user_text,cur_comment," .
-         "cur_timestamp FROM cur USE INDEX (cur_timestamp) " .
+    function getSQL( $offset, $limit ) {
+       return "SELECT cur_title, cur_timestamp " . 
+         "FROM cur USE INDEX (cur_timestamp) " .
          "WHERE cur_namespace=0 AND cur_is_redirect=0 " .
          " ORDER BY cur_timestamp LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Ancientpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
-
-       $sk = $wgUser->getSkin();
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $u = $obj->cur_user;
-               $ut = $obj->cur_user_text;
-               $c = wfEscapeHTML( $obj->cur_comment );
-               if ( 0 == $u ) { $ul = $ut; }
-               else { $ul = $sk->makeLink( $wgLang->getNsText(2).":{$ut}", $ut ); }
-
-               $d = $wgLang->timeanddate( $obj->cur_timestamp, true );
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$d} {$link} . . {$ul}";
+    }
+    
+    function formatResult( $skin, $result ) {
+       global $wgLang;
+       
+       $d = $wgLang->timeanddate( $result->cur_timestamp, true );
+       $link = $skin->makeKnownLink( $result->cur_title, "" );
+       return "{$link} ({$d})";
+    }
+}
 
-               if ( "" != $c && "*" != $c ) { $s .= " <em>({$c})</em>"; }
-               $s .= "</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+function wfSpecialAncientpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $app = new AncientPagesPage();
+    
+    $app->doQuery( $offset, $limit );
 }
 
 ?>
index aaec95a..b74f20c 100644 (file)
@@ -1,59 +1,36 @@
 <?
 
-function wfSpecialDeadendpages()
-{
-    global $wgUser, $wgOut, $wgLang, $wgTitle;
-    $fname = "wfSpecialDeadendpages";
+include_once( "QueryPage.php" );
+
+class DeadendPagesPage extends PageQueryPage {
+
+    function getName( ) {
+       return "Deadendpages";
+    }
+
+    # LEFT JOIN is expensive
     
-    # Cache
-    $vsp = $wgLang->getValidSpecialPages();
-    $log = new LogPage( $vsp["Deadendpages"] );
-    $log->mUpdateRecentChanges = false;
+    function isExpensive( ) {
+       return 1;
+    }
     
-    global $wgMiserMode;
-    if ( $wgMiserMode ) {
-       $log->showAsDisabledPage();
-       return;
+    function getSQL( $offset, $limit ) {
+       return "SELECT cur_title " . 
+         "FROM cur LEFT JOIN links ON cur_title = l_from " .
+         "WHERE l_from IS NULL " .
+         "AND cur_namespace = 0 " .
+         "ORDER BY cur_title " . 
+         "LIMIT {$offset}, {$limit}";
     }
+}
+
+function wfSpecialDeadendpages() {
     
     list( $limit, $offset ) = wfCheckLimits();
 
-    # Note: title is only the same as l_from for main namespace, 
-    # but that's what we want, anyways
-
-    # XXX: Left joins are losey
-    
-    $sql = "SELECT cur_title " . 
-      "FROM cur LEFT JOIN links ON cur_title = l_from " .
-      "WHERE l_from IS NULL " .
-      "AND cur_namespace = 0 " .
-      "ORDER BY cur_title " . 
-      "LIMIT {$offset}, {$limit}";
-    
-    $res = wfQuery( $sql, DB_READ, $fname );
-    
-    $sk = $wgUser->getSkin();
-    
-    $top = wfShowingResults( $offset, $limit );
-    $wgOut->addHTML( "<p>{$top}\n" );
-    
-    $sl = wfViewPrevNext( $offset, $limit,
-                         $wgLang->specialPage( "Deadendpages" ) );
-    $wgOut->addHTML( "<br>{$sl}\n" );
-    
-    $s = "<ol start=" . ( $offset + 1 ) . ">";
-    while ( $obj = wfFetchObject( $res ) ) {
-       $link = $sk->makeKnownLink( $obj->cur_title, "" );
-       $s .= "<li>{$link}</li>\n";
-    }
-    wfFreeResult( $res );
-    $s .= "</ol>";
-    $wgOut->addHTML( $s );
-    $wgOut->addHTML( "<p>{$sl}\n" );
+    $depp = new DeadendPagesPage();
     
-    # Saving cache
-    if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable
-       $log->replaceContent( $s );
+    return $depp->doQuery( $offset, $limit );
 }
 
 ?>
index 2983b32..40bd400 100644 (file)
@@ -1,50 +1,32 @@
 <?
 
-function wfSpecialLonelypages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialLonelypages";
-
-       # Cache
-       $vsp = $wgLang->getValidSpecialPages();
-       $log = new LogPage( $vsp["Lonelypages"] );
-       $log->mUpdateRecentChanges = false;
-
-       global $wgMiserMode;
-       if ( $wgMiserMode ) {
-               $log->showAsDisabledPage();
-               return;
-       }
-
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $sql = "SELECT cur_title FROM cur LEFT JOIN links ON " .
+include_once( "QueryPage.php" );
+
+class LonelyPagesPage extends PageQueryPage {
+
+    function getName() {
+       return "Lonelypages";
+    }
+    
+    function isExpensive() {
+       return 1;
+    }
+    
+    function getSQL( $offset, $limit ) {
+       
+       return "SELECT cur_title FROM cur LEFT JOIN links ON " .
          "cur_id=l_to WHERE l_to IS NULL AND cur_namespace=0 AND " .
          "cur_is_redirect=0 ORDER BY cur_title LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $sk = $wgUser->getSkin();
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Lonelypages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
-
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$link}</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+    }
+}
 
-       # Saving cache
-       if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable
-       $log->replaceContent( $s );
+function wfSpecialLonelypages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $lpp = new LonelyPagesPage();
+    
+    return $lpp->doQuery( $offset, $limit );
 }
 
 ?>
index 0ebcb7e..44fa88a 100644 (file)
@@ -1,51 +1,37 @@
 <?
 
-function wfSpecialLongpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialLongpages";
-
-       # Cache
-       $vsp = $wgLang->getValidSpecialPages();
-       $log = new LogPage( $vsp["Longpages"] );
-       $log->mUpdateRecentChanges = false;
-
-       global $wgMiserMode;
-       if ( $wgMiserMode ) {
-               $log->showAsDisabledPage();
-               return;
-       }
-
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $sql = "SELECT cur_title, LENGTH(cur_text) AS len FROM cur " .
+include_once( "QueryPage.php" );
+
+class LongPagesPage extends QueryPage {
+    
+    function getName() {
+       return "Longpages";
+    }
+    
+    function isExpensive() {
+       return 1;
+    }
+    
+    function getSQL( $offset, $limit ) {
+       return "SELECT cur_title, LENGTH(cur_text) AS len FROM cur " .
          "WHERE cur_namespace=0 AND cur_is_redirect=0 ORDER BY " .
          "LENGTH(cur_text) DESC LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
+    }
 
-       $sk = $wgUser->getSkin();
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Longpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
+    function formatResult( $skin, $result ) {
+       $nb = wfMsg( "nbytes", $result->len );
+       $link = $skin->makeKnownLink( $result->cur_title, "" );
+       return "{$link} ({$nb})";
+    }
+}
 
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $nb = wfMsg( "nbytes", $obj->len );
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$link} ({$nb})</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+function wfSpecialLongpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
 
-       # Saving cache
-       if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable
-       $log->replaceContent( $s );
+    $lpp = new LongPagesPage( );
+    
+    $lpp->doQuery( $offset, $limit );
 }
 
 ?>
index 3d0dc43..ddeafa2 100644 (file)
@@ -1,46 +1,60 @@
 <?
 
-function wfSpecialNewpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialNewpages";
+include_once( "QueryPage.php" );
 
-       list( $limit, $offset ) = wfCheckLimits();
+class NewPagesPage extends QueryPage {
 
-       $sql = "SELECT rc_title AS cur_title,rc_user AS cur_user,rc_user_text AS cur_user_text,rc_comment as cur_comment," .
+    function getName() {
+       return "Newpages";
+    }
+    
+    function isExpensive() {
+       return 0;
+    }
+
+    function getSQL( $offset, $limit ) {
+       return "SELECT rc_title AS cur_title,rc_user AS cur_user,rc_user_text AS cur_user_text,rc_comment as cur_comment," .
          "rc_timestamp AS cur_timestamp,length(cur_text) as cur_length FROM recentchanges,cur " .
          "WHERE rc_cur_id=cur_id AND rc_new=1 AND rc_namespace=0 AND cur_is_redirect=0 " .
          "ORDER BY rc_timestamp DESC LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Newpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
-
-       $sk = $wgUser->getSkin();
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $u = $obj->cur_user;
-               $ut = $obj->cur_user_text;
-               $length= wfmsg("nbytes",$obj->cur_length);
-               $c = wfEscapeHTML( $obj->cur_comment );
-               if ( 0 == $u ) { $ul = $ut; }
-               else { $ul = $sk->makeLink( $wgLang->getNsText(2).":{$ut}", $ut ); }
+    }
+    
+    function formatResult( $skin, $result ) {
+       
+       global $wgLang;
+       
+       $u = $result->cur_user;
+       $ut = $result->cur_user_text;
+       
+       $length = wfmsg( "nbytes", $result->cur_length );
+       $c = wfEscapeHTML( $result->cur_comment );
+       
+       if ( 0 == $u ) { # not by a logged-in user
+           $ul = $ut;
+       }
+       else {
+           $ul = $skin->makeLink( $wgLang->getNsText(2) . ":{$ut}", $ut );
+       }
+       
+       $d = $wgLang->timeanddate( $result->cur_timestamp, true );
+       $link = $skin->makeKnownLink( $result->cur_title, "" );
+       $s = "{$d} {$link} ({$length}) . . {$ul}";
+       
+       if ( "" != $c && "*" != $c ) {
+           $s .= " <em>({$c})</em>";
+       }
 
-               $d = $wgLang->timeanddate( $obj->cur_timestamp, true );
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$d} {$link} ({$length}) . . {$ul}";
+       return $s;
+    }
+}
 
-               if ( "" != $c && "*" != $c ) { $s .= " <em>({$c})</em>"; }
-               $s .= "</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+function wfSpecialNewpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $npp = new NewPagesPage();
+    
+    $npp->doQuery( $offset, $limit );
 }
 
 ?>
index 303a909..1e0db4e 100644 (file)
@@ -1,42 +1,37 @@
 <?
 
-function wfSpecialPopularpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialPopularpages";
-
-       global $wgMiserMode;
-       if ( $wgMiserMode ) {
-               $wgOut->addWikiText( wfMsg( "perfdisabled" ) );
-               return;
-       }
-
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $sql = "SELECT DISTINCT cur_title, cur_counter FROM cur " .
+include_once( "QueryPage.php" );
+
+class PopularPagesPage extends QueryPage {
+
+    function getName() {
+       return "Popularpages";
+    }
+    
+    function isExpensive() {
+       return 1;
+    }
+    
+    function getSQL( $offset, $limit ) {
+       return "SELECT DISTINCT cur_title, cur_counter FROM cur " .
          "WHERE cur_namespace=0 AND cur_is_redirect=0 ORDER BY " .
          "cur_counter DESC LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $sk = $wgUser->getSkin();
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Popularpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
+    }
+    
+    function formatResult( $skin, $result ) {
+       $link = $skin->makeKnownLink( $result->cur_title, "" );
+       $nv = wfMsg( "nviews", $result->cur_counter );
+       return "{$link} ({$nv})";
+    }
+}
 
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $nv = wfMsg( "nviews", $obj->cur_counter );
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$link} ({$nv})</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+function wfSpecialPopularpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $ppp = new PopularPagesPage();
+    
+    return $ppp->doQuery( $offset, $limit );
 }
 
 ?>
index bca5e8e..c74158f 100644 (file)
@@ -1,51 +1,37 @@
 <?
 
-function wfSpecialShortpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialShortpages";
-
-       # Cache
-       $vsp = $wgLang->getValidSpecialPages();
-       $log = new LogPage( $vsp["Shortpages"] );
-       $log->mUpdateRecentChanges = false;
-
-       global $wgMiserMode;
-       if ( $wgMiserMode ) {
-               $log->showAsDisabledPage();
-               return;
-       }
-
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $sql = "SELECT cur_title, LENGTH(cur_text) AS len FROM cur " .
+include_once("QueryPage.php");
+
+class ShortPagesPage extends QueryPage {
+    
+    function getName() {
+       return "Shortpages";
+    }
+    
+    function isExpensive() {
+       return 1;
+    }
+    
+    function getSQL( $offset, $limit ) {
+       return "SELECT cur_title, LENGTH(cur_text) AS len FROM cur " .
          "WHERE cur_namespace=0 AND cur_is_redirect=0 ORDER BY " .
          "LENGTH(cur_text) LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialPage( "Shortpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
-
-       $sk = $wgUser->getSkin();
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $nb = wfMsg( "nbytes", $obj->len );
-               $link = $sk->makeKnownLink( $obj->cur_title, "" );
-               $s .= "<li>{$link} ({$nb})</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
-
+    }
+    
+    function formatResult( $skin, $result ) {
+       $nb = wfMsg( "nbytes", $result->len );
+       $link = $skin->makeKnownLink( $result->cur_title, "" );
+       return "{$link} ({$nb})";
+    }
+}
 
-       # Saving cache
-       if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable
-       $log->replaceContent( $s );
+function wfSpecialShortpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $spp = new ShortPagesPage();
+    
+    return $spp->doQuery( $offset, $limit );
 }
 
 ?>
index 834d68c..acb11c6 100644 (file)
@@ -1,63 +1,44 @@
 <?
 
-include_once ( "LogPage.php" ) ;
-
-function wfSpecialWantedpages()
-{
-       global $wgUser, $wgOut, $wgLang, $wgTitle;
-       $fname = "wfSpecialWantedpages";
-
-       # Cache
-       $vsp = $wgLang->getValidSpecialPages() ;
-       $log = new LogPage( $vsp["Wantedpages"] );
-       $log->mUpdateRecentChanges = false;
-
-       $wgOut->setRobotpolicy( "noindex,nofollow" );
-       global $wgMiserMode;
-       if ( $wgMiserMode ) {
-               $log->showAsDisabledPage();
-               return;
-       }
-
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $cache = "" ; # To be saved, eventually
-
-       $sql = "SELECT bl_to, COUNT( DISTINCT bl_from ) as nlinks " .
+include_once ( "QueryPage.php" ) ;
+
+class WantedPagesPage extends QueryPage {
+    
+    function getName() {
+       return "Wantedpages";
+    }
+    
+    function isExpensive() {
+       return 1;
+    }
+    
+    function getSQL( $offset, $limit ) {
+       return "SELECT bl_to, COUNT( DISTINCT bl_from ) as nlinks " .
          "FROM brokenlinks GROUP BY bl_to HAVING nlinks > 1 " .
          "ORDER BY nlinks DESC LIMIT {$offset}, {$limit}";
-       $res = wfQuery( $sql, DB_READ, $fname );
-
-       $sk = $wgUser->getSkin();
-
-       $top = wfShowingResults( $offset, $limit );
-       $wgOut->addHTML( "<p>{$top}\n" );
-
-       $sl = wfViewPrevNext( $offset, $limit,
-         $wgLang->specialpage( "Wantedpages" ) );
-       $wgOut->addHTML( "<br>{$sl}\n" );
-
-       $s = "<ol start=" . ( $offset + 1 ) . ">";
-       while ( $obj = wfFetchObject( $res ) ) {
-               $nt = Title::newFromDBkey( $obj->bl_to );
-
-               $plink = $sk->makeBrokenLink( $nt->getPrefixedText(), "" );
-               $nl = wfMsg( "nlinks", $obj->nlinks );
-               $nlink = $sk->makeKnownLink( $wgLang->specialPage(
-                 "Whatlinkshere" ), $nl, "target=" . $nt->getPrefixedURL() );
-
-               $cache .= "* [[".$nt->getPrefixedText()."]] ({$nl})\n" ;
-
-               $s .= "<li>{$plink} ({$nlink})</li>\n";
-       }
-       wfFreeResult( $res );
-       $s .= "</ol>";
-       $wgOut->addHTML( $s );
-       $wgOut->addHTML( "<p>{$sl}\n" );
+    }
+
+    function formatResult( $skin, $result ) {
+       global $wgLang;
+       
+       $nt = Title::newFromDBkey( $result->bl_to );
+
+       $plink = $skin->makeBrokenLink( $nt->getPrefixedText(), "" );
+       $nl = wfMsg( "nlinks", $result->nlinks );
+       $nlink = $skin->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ), $nl,
+                                    "target=" . $nt->getPrefixedURL() );
+       
+       return "{$plink} ({$nlink})";
+    }
+}
 
-       # Saving cache
-       if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable
-       $log->replaceContent( $s );
+function wfSpecialWantedpages()
+{
+    list( $limit, $offset ) = wfCheckLimits();
+    
+    $wpp = new WantedPagesPage();
+    
+    $wpp->doQuery( $offset, $limit );
 }
 
 ?>