revert r106095, fix apparently not this simple
[lhc/web/wiklou.git] / includes / specials / SpecialPopularpages.php
index 0e8c62d..803f03e 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 /**
+ * Implements Special:PopularPages
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
- */
-
-/**
+ *
  * @file
  * @ingroup SpecialPage
  */
 
 /**
- * implements Special:Popularpages
+ * A special page that list most viewed pages
+ *
  * @ingroup SpecialPage
  */
 class PopularPagesPage extends QueryPage {
 
-       function getName() {
-               return "Popularpages";
+       function __construct( $name = 'Popularpages' ) {
+               parent::__construct( $name );
        }
 
        function isExpensive() {
                # page_counter is not indexed
                return true;
        }
-       function isSyndicated() { return false; }
-
-       function getSQL() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $page = $dbr->tableName( 'page' );
-
-               $query =
-                       "SELECT 'Popularpages' as type,
-                               page_namespace as namespace,
-                               page_title as title,
-                               page_counter as value
-                       FROM $page ";
-               $where =
-                       "WHERE page_is_redirect=0 AND page_namespace";
 
-               global $wgContentNamespaces;
-               if( empty( $wgContentNamespaces ) ) {
-                       $where .= '='.NS_MAIN;
-               } else if( count( $wgContentNamespaces ) > 1 ) {
-                       $where .= ' in (' . implode( ', ', $wgContentNamespaces ) . ')';
-               } else {
-                       $where .= '='.$wgContentNamespaces[0];
-               }
+       function isSyndicated() { return false; }
 
-               return $query . $where;
+       function getQueryInfo() {
+               return array (
+                       'tables' => array( 'page' ),
+                       'fields' => array( 'page_namespace AS namespace',
+                                       'page_title AS title',
+                                       'page_counter AS value'),
+                       'conds' => array( 'page_is_redirect' => 0,
+                                       'page_namespace' => MWNamespace::getContentNamespaces() ) );
        }
 
+       /**
+        * @param $skin Skin
+        * @param $result
+        * @return string
+        */
        function formatResult( $skin, $result ) {
-               global $wgLang, $wgContLang;
+               global $wgContLang;
                $title = Title::makeTitle( $result->namespace, $result->title );
-               $link = $skin->linkKnown(
+               $link = Linker::linkKnown(
                        $title,
                        htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) )
                );
-               $nv = wfMsgExt(
-                       'nviews',
-                       array( 'parsemag', 'escape'),
-                       $wgLang->formatNum( $result->value )
-               );
-               return wfSpecialList($link, $nv);
+               $nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
+               return $this->getLanguage()->specialList( $link, $nv );
        }
 }
-
-/**
- * Constructor
- */
-function wfSpecialPopularpages() {
-       list( $limit, $offset ) = wfCheckLimits();
-
-       $ppp = new PopularPagesPage();
-
-       return $ppp->doQuery( $offset, $limit );
-}