Revision: 43460
Author:   ialex
Date:     2008-11-13 18:08:30 +0000 (Thu, 13 Nov 2008)

Log Message:
-----------
* Version list on Special:ViewConfig now uses a pager.
* Listed version at the top Special:Configure and Special:Extension are only 
shown when they contain the configuration for the wiki being modified.

Modified Paths:
--------------
    trunk/extensions/Configure/CHANGELOG
    trunk/extensions/Configure/Configure.handler-db.php
    trunk/extensions/Configure/Configure.handler-files.php
    trunk/extensions/Configure/Configure.handler.php
    trunk/extensions/Configure/Configure.obj.php
    trunk/extensions/Configure/Configure.page.php
    trunk/extensions/Configure/Configure.php
    trunk/extensions/Configure/SpecialViewConfig.php

Added Paths:
-----------
    trunk/extensions/Configure/Configure.pager-db.php
    trunk/extensions/Configure/Configure.pager-files.php

Modified: trunk/extensions/Configure/CHANGELOG
===================================================================
--- trunk/extensions/Configure/CHANGELOG        2008-11-13 17:41:41 UTC (rev 
43459)
+++ trunk/extensions/Configure/CHANGELOG        2008-11-13 18:08:30 UTC (rev 
43460)
@@ -1,7 +1,12 @@
 This file lists changes on this extension.
 Localisation updates are done on betawiki and aren't listed here.
 
-0.9.5 - 10 November 2008
+0.9.6 - 13 November 2008
+  * Version list on Special:ViewConfig now uses a pager.
+  * Listed version at the top Special:Configure and Special:Extension are only
+    shown when they contain the configuration for the wiki being modified.
+
+0.9.5 - 12 November 2008
   Added $wgNamespacesToBeSearchedProject.
 
 0.9.4 - 9 November 2008

Modified: trunk/extensions/Configure/Configure.handler-db.php
===================================================================
--- trunk/extensions/Configure/Configure.handler-db.php 2008-11-13 17:41:41 UTC 
(rev 43459)
+++ trunk/extensions/Configure/Configure.handler-db.php 2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -127,6 +127,15 @@
        }
 
        /**
+        * Returns a pager for this handler
+        *
+        * @return Pager
+        */
+       public function getPager(){
+               return new ConfigurationPagerDb( $this );
+       }
+
+       /**
         * Save a new configuration
         * @param $settings array of settings
         * @param $wiki String: wiki name or true for all

Modified: trunk/extensions/Configure/Configure.handler-files.php
===================================================================
--- trunk/extensions/Configure/Configure.handler-files.php      2008-11-13 
17:41:41 UTC (rev 43459)
+++ trunk/extensions/Configure/Configure.handler-files.php      2008-11-13 
18:08:30 UTC (rev 43460)
@@ -83,6 +83,15 @@
        }
 
        /**
+        * Returns a pager for this handler
+        *
+        * @return Pager
+        */
+       public function getPager(){
+               return new ConfigurationPagerFiles( $this );
+       }
+
+       /**
         * Save a new configuration
         * @param $settings array of settings
         * @param $wiki String: wiki name or true for all

Modified: trunk/extensions/Configure/Configure.handler.php
===================================================================
--- trunk/extensions/Configure/Configure.handler.php    2008-11-13 17:41:41 UTC 
(rev 43459)
+++ trunk/extensions/Configure/Configure.handler.php    2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -36,6 +36,13 @@
        public function getWikisInVersion( $ts );
 
        /**
+        * Returns a pager for this handler
+        *
+        * @return Pager
+        */
+       public function getPager();
+
+       /**
         * Save a new configuration
         * @param $settings array of settings
         * @param $wiki String: wiki name or false to use the current one

Modified: trunk/extensions/Configure/Configure.obj.php
===================================================================
--- trunk/extensions/Configure/Configure.obj.php        2008-11-13 17:41:41 UTC 
(rev 43459)
+++ trunk/extensions/Configure/Configure.obj.php        2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -151,6 +151,15 @@
        }
 
        /**
+        * Returns a pager for this handler
+        *
+        * @return Pager
+        */
+       public function getPager(){
+               return $this->mHandler->getPager();
+       }
+
+       /**
         * Get the defalut values for all settings
         * Very, very hacky...
         *

Modified: trunk/extensions/Configure/Configure.page.php
===================================================================
--- trunk/extensions/Configure/Configure.page.php       2008-11-13 17:41:41 UTC 
(rev 43459)
+++ trunk/extensions/Configure/Configure.page.php       2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -318,27 +318,39 @@
         */
        protected function buildOldVersionSelect(){
                global $wgConf, $wgLang, $wgUser;
+
+               $showAllLink = false;
+               $count = 0;
+               $links = array();
+
                $versions = $wgConf->listArchiveVersions();
+               $skin = $wgUser->getSkin();
+               $title = $this->getTitle();
+               foreach( $versions as $ts ){
+                       if( $count > 10 ) {
+                               $showAllLink = true;
+                               break;
+                       } elseif( in_array( $this->mWiki, 
$wgConf->getWikisInVersion( $ts ) ) ){
+                               $count++;
+                               $links[] = $skin->makeKnownLinkObj( $title, 
$wgLang->timeAndDate( $ts ), "version=$ts" );
+                       } else {
+                               $showAllLink = true;
+                       }
+               }
+
                $text = '<fieldset><legend>' . wfMsgHtml( 'configure-old' ) . 
'</legend>';
-               if( empty( $versions ) ){
+               if( !count( $links ) ){
                        $text .= wfMsgExt( 'configure-no-old', array( 'parse' ) 
);
                } else {
                        $text .= wfMsgExt( 'configure-old-versions', array( 
'parse' ) );
-                       $text .= "<ul>\n";
-                       $skin = $wgUser->getSkin();
-                       $title = $this->getTitle();
-                       if( count( $versions ) > 10 ){
-                               $versions = array_slice( $versions, 0, 10 );
-                               $link = SpecialPage::getTitleFor( 'ViewConfig' 
);
-                               $moreLink = $skin->makeKnownLinkObj( $link, 
wfMsgHtml( 'configure-view-all-versions' ) );
-                       } else {
-                               $moreLink = '';
-                       }
-                       foreach( $versions as $ts ){
-                               $text .= '<li>' . $skin->makeKnownLinkObj( 
$title, $wgLang->timeAndDate( $ts ), "version=$ts" ) . "</li>\n";
-                       }
-                       $text .= '</ul>' . $moreLink;
+                       $text .= "<ul>\n<li>";
+                       $text .= implode( "</li>\n<li>", $links );
+                       $text .= "</li>\n</ul>\n";
                }
+               if( $showAllLink ){
+                       $link = SpecialPage::getTitleFor( 'ViewConfig' );
+                       $text .= $skin->makeKnownLinkObj( $link, wfMsgHtml( 
'configure-view-all-versions' ) );
+               }
                $text .= '</fieldset>';
                return $text;
        }

Added: trunk/extensions/Configure/Configure.pager-db.php
===================================================================
--- trunk/extensions/Configure/Configure.pager-db.php                           
(rev 0)
+++ trunk/extensions/Configure/Configure.pager-db.php   2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * Class used to list versions at Special:ViewConfig when using a database
+ * handler
+ *
+ * @ingroup Extensions
+ * @author Alexandre Emsenhuber
+ */
+class ConfigurationPagerDb extends ReverseChronologicalPager {
+       protected $mHandler, $mCallback, $mCounter;
+
+       function __construct( ConfigureHandlerDb $handler ) {
+               parent::__construct();
+               $this->mHandler = $handler;
+               $this->mDb = $handler->getSlaveDB();
+       }
+
+       function getQueryInfo() {
+               $queryInfo = array(
+                       'tables'  => array( 'config_version' ),
+                       'fields'  => array( '*' ),
+                       'conds'   => array(),
+                       'options' => array()
+               );
+               return $queryInfo;
+       }
+
+       function getIndexField() {
+               return 'cv_timestamp';
+       }
+
+       function setFormatCallback( $callback ) {
+               $this->mCallback = $callback;
+       }
+
+       function formatRow( $row ) {
+               if( !is_callable( $this->mCallback ) )
+                       throw new MWException( 
'ConfigurationPagerDb::$mCallback not callable' );
+               $this->mCounter++;
+               $info = array(
+                       'timestamp' => $row->cv_timestamp,
+                       'wikis' => array( $row->cv_wiki ),
+                       'count' => $this->mCounter,
+               );
+               return call_user_func( $this->mCallback, $info );
+       }
+
+       function getStartBody() {
+               $this->mCounter = 0;
+               return "<ul>\n";
+       }
+
+       function getEndBody() {
+               return "</ul>\n";
+       }
+}


Property changes on: trunk/extensions/Configure/Configure.pager-db.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/Configure/Configure.pager-files.php
===================================================================
--- trunk/extensions/Configure/Configure.pager-files.php                        
        (rev 0)
+++ trunk/extensions/Configure/Configure.pager-files.php        2008-11-13 
18:08:30 UTC (rev 43460)
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Class used to list versions at Special:ViewConfig when using a files handler
+ *
+ * @ingroup Extensions
+ * @author Alexandre Emsenhuber
+ */
+class ConfigurationPagerFiles implements Pager {
+       protected $mHandler, $mCallback;
+
+       function __construct( ConfigureHandler $handler ) {
+               $this->mHandler = $handler;
+       }
+
+       function getBody() {
+               $versions = $this->mHandler->listArchiveVersions();
+               if( empty( $versions ) ){
+                       return wfMsgExt( 'configure-no-old', array( 'parse' ) );
+               }
+               
+               $text = "<ul>\n";
+               $count = 0;
+               foreach( $versions as $version ){
+                       $count++;
+                       $wikis = array_keys( $this->mHandler->getOldSettings( 
$version ) );
+                       $info = array(
+                               'timestamp' => $version,
+                               'wikis' => $wikis,
+                               'count' => $count,
+                       );
+                       $text .= $this->formatRow( $info );
+               }
+               $text .= "</ul>\n";
+               return $text;
+       }
+
+       function getNumRows() {
+               return count( $this->mHandler->listArchiveVersions() ); 
+       }
+
+       function getNavigationBar() {
+               return '';
+       }
+
+       function setFormatCallback( $callback ) {
+               $this->mCallback = $callback;
+       }
+
+       function formatRow( $info ) {
+               if( !is_callable( $this->mCallback ) )
+                       throw new MWException( 
'ConfigurationPagerFiles::$mCallback not callable' );
+               return call_user_func( $this->mCallback, $info );
+       }
+}


Property changes on: trunk/extensions/Configure/Configure.pager-files.php
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: trunk/extensions/Configure/Configure.php
===================================================================
--- trunk/extensions/Configure/Configure.php    2008-11-13 17:41:41 UTC (rev 
43459)
+++ trunk/extensions/Configure/Configure.php    2008-11-13 18:08:30 UTC (rev 
43460)
@@ -17,7 +17,7 @@
        'url' => 'http://www.mediawiki.org/wiki/Extension:Configure',
        'description' => 'Allow authorised users to configure the wiki by a 
web-based interface',
        'descriptionmsg' => 'configure-desc',
-       'version' => '0.9.5',
+       'version' => '0.9.6',
 );
 
 ## Configuration part
@@ -179,6 +179,10 @@
 $wgAutoloadClasses['ExtPreviewConfigurationDiff'] = $dir . 
'Configure.diff.php';
 $wgAutoloadClasses['HistoryConfigurationDiff'] = $dir . 'Configure.diff.php';
 
+## Pager stuff
+$wgAutoloadClasses['ConfigurationPagerDb'] = $dir . 'Configure.pager-db.php';
+$wgAutoloadClasses['ConfigurationPagerFiles'] = $dir . 
'Configure.pager-files.php';
+
 ## API module
 $wgAutoloadClasses['ApiConfigure'] = $dir . 'Configure.api.php';
 $wgAPIModules['configure'] = 'ApiConfigure';

Modified: trunk/extensions/Configure/SpecialViewConfig.php
===================================================================
--- trunk/extensions/Configure/SpecialViewConfig.php    2008-11-13 17:41:41 UTC 
(rev 43459)
+++ trunk/extensions/Configure/SpecialViewConfig.php    2008-11-13 18:08:30 UTC 
(rev 43460)
@@ -118,100 +118,121 @@
                if( !$this->isWebConfig )
                        return '';
 
-               $versions = $wgConf->listArchiveVersions();
-               if( empty( $versions ) ){
-                       return wfMsgExt( 'configure-no-old', array( 'parse' ) );
-               }
+               $self = $this->getTitle();
+               $pager = $wgConf->getPager();
+               $pager->setFormatCallback( array( $this, 'formatVersionRow' ) );
+               $showDiff = $pager->getNumRows() > 1;
 
-               $title = $this->getTitle();
-               $skin = $wgUser->getSkin();
-               $showDiff = count( $versions ) > 1;
+               $formatConf = array(
+                       'showDiff' => $showDiff,
+                       'allowedConfig' => $wgUser->isAllowed( 'configure' ),
+                       'allowedExtensions' => $wgUser->isAllowed( 'extensions' 
),
+                       'allowedAll' => $this->isUserAllowedInterwiki(),
+                       'allowedConfigAll' => $wgUser->isAllowed( 
'configure-interwiki' ),
+                       'allowedExtensionsAll' => $wgUser->isAllowed( 
'extensions-interwiki' ),
+                       'self' => $self,
+                       'skin' => $wgUser->getSkin(),
+                       'editMsg' => wfMsg( 'edit' ) . ': ',
+               );
 
-               $allowedConfig = $wgUser->isAllowed( 'configure' );
-               $allowedExtensions = $wgUser->isAllowed( 'extensions' );
+               if( $formatConf['allowedConfig'] )
+                       $formatConf['configTitle'] = SpecialPage::getTitleFor( 
'Configure' );
 
-               $allowedAll = $this->isUserAllowedInterwiki();
-               $allowedConfigAll = $wgUser->isAllowed( 'configure-interwiki' );
-               $allowedExtensionsAll = $wgUser->isAllowed( 
'extensions-interwiki' );
+               if( $formatConf['allowedExtensions'] )
+                       $formatConf['extTitle'] = SpecialPage::getTitleFor( 
'Extensions' );
 
-               if( $allowedConfig )
-                       $configTitle = SpecialPage::getTitleFor( 'Configure' );
+               $this->formatConf = $formatConf;
 
-               if( $allowedExtensions )
-                       $extTitle = SpecialPage::getTitleFor( 'Extensions' );
-
                $text = wfMsgExt( 'configure-old-versions', array( 'parse' ) );
-               if( $showDiff )
+               $text .= $pager->getNavigationBar();
+               if( $showDiff ) {
                        $text .= Xml::openElement( 'form', array( 'action' => 
$wgScript ) ) . "\n" .
-                       Xml::hidden( 'title', $title->getPrefixedDBKey() ) . 
"\n" .
-                       $this->getButton() . "\n";
-               $text .= "<ul>\n";
-               
-               $editMsg = wfMsg( 'edit' ) . ': ';
-               $c = 0;
-               foreach( $versions as $ts ){
-                       $c++;
-                       $time = $wgLang->timeAndDate( $ts );
-                       if( $allowedAll || $allowedConfigAll || 
$allowedExtensionsAll ){
-                               $wikis = $wgConf->getWikisInVersion( $ts );
+                       Xml::hidden( 'title', $self->getPrefixedDBKey() ) . 
"\n" .
+                       $this->getButton() . "<br/>\n";
+               }
+               $text .= $pager->getBody();
+               if( $showDiff ) {
+                       $text .= $this->getButton() . "</form>";
+               }
+               $text .= $pager->getNavigationBar();
+               return $text;
+       }
+
+       public function formatVersionRow( $arr ){
+               global $wgLang;
+
+               $ts = $arr['timestamp'];
+               $wikis = $arr['wikis']; 
+               $c = $arr['count'];
+               $hasSelf = in_array( $this->mWiki, $wikis );
+
+               extract( $this->formatConf );
+               $time = $wgLang->timeAndDate( $ts );
+
+               $actions = array();
+               if( $hasSelf )
+                       $view = $skin->makeKnownLinkObj( $self, wfMsgHtml( 
'configure-view' ), "version=$ts" );
+               else
+                       $view = wfMsgHtml( 'configure-view' );
+
+               if( $allowedAll ){
+                       $viewWikis = array();
+                       foreach( $wikis as $wiki ){
+                               $viewWikis[] = $skin->makeKnownLinkObj( $self, 
htmlspecialchars( $wiki ), "version={$ts}&wiki={$wiki}" );
                        }
-                       $actions = array();
-                       $view = $skin->makeKnownLinkObj( $title, wfMsg( 
'configure-view' ), "version=$ts" );
-                       if( $allowedAll ){
+                       $view .= ' (' . implode( ', ', $viewWikis ) . ')';
+               }
+               $actions[] = $view;
+               $editDone = false;
+               if( $allowedConfig ){
+                       if( $hasSelf )
+                               $editCore = $editMsg . $skin->makeKnownLinkObj( 
$configTitle, wfMsgHtml( 'configure-edit-core' ), "version=$ts" );
+                       else
+                               $editCore = $editMsg . wfMsgHtml( 
'configure-edit-core' );
+
+                       if( $allowedConfigAll ){
                                $viewWikis = array();
                                foreach( $wikis as $wiki ){
-                                       $viewWikis[] = $skin->makeKnownLinkObj( 
$title, $wiki, "version={$ts}&wiki={$wiki}" );
+                                       $viewWikis[] = $skin->makeKnownLinkObj( 
$configTitle, htmlspecialchars( $wiki ), "version={$ts}&wiki={$wiki}" );
                                }
-                               $view .= ' (' . implode( ', ', $viewWikis ) . 
')';
+                               $editCore .= ' (' . implode( ', ', $viewWikis ) 
. ')';
                        }
-                       $actions[] = $view;
-                       $editDone = false;
-                       if( $allowedConfig ){
-                               $editCore = $editMsg . $skin->makeKnownLinkObj( 
$configTitle, wfMsg( 'configure-edit-core' ), "version=$ts" );
-                               if( $allowedConfigAll ){
-                                       $viewWikis = array();
-                                       foreach( $wikis as $wiki ){
-                                               $viewWikis[] = 
$skin->makeKnownLinkObj( $configTitle, $wiki, "version={$ts}&wiki={$wiki}" );
-                                       }
-                                       $editCore .= ' (' . implode( ', ', 
$viewWikis ) . ')';
+                       $actions[] = $editCore;
+               }
+               if( $allowedExtensions ){
+                       $editExt = '';
+                       if( !$allowedConfig )
+                               $editExt .= $editMsg;
+                       if( $hasSelf )
+                               $editExt .= $skin->makeKnownLinkObj( $extTitle, 
wfMsgHtml( 'configure-edit-ext' ), "version=$ts" );
+                       else
+                               $editExt .= wfMsgHtml( 'configure-edit-ext' );
+
+                       if( $allowedExtensionsAll ){
+                               $viewWikis = array();
+                               foreach( $wikis as $wiki ){
+                                       $viewWikis[] = $skin->makeKnownLinkObj( 
$extTitle, htmlspecialchars( $wiki ), "version={$ts}&wiki={$wiki}" );
                                }
-                               $actions[] = $editCore;
+                               $editExt .= ' (' . implode( ', ', $viewWikis ) 
. ')';
                        }
-                       if( $allowedExtensions ){
-                               $editExt = '';
-                               if( !$allowedConfig )
-                                       $editExt .= $editMsg;
-                               $editExt .= $skin->makeKnownLinkObj( $extTitle, 
wfMsg( 'configure-edit-ext' ), "version=$ts" );
-                               if( $allowedExtensionsAll ){
-                                       $viewWikis = array();
-                                       foreach( $wikis as $wiki ){
-                                               $viewWikis[] = 
$skin->makeKnownLinkObj( $extTitle, $wiki, "version={$ts}&wiki={$wiki}" );
-                                       }
-                                       $editExt .= ' (' . implode( ', ', 
$viewWikis ) . ')';
-                               }
-                               $actions[] = $editExt;
-                       }
-                       if( $showDiff ){
-                               $diffCheck = $c == 2 ? array( 'checked' => 
'checked' ) : array();
-                               $versionCheck = $c == 1 ? array( 'checked' => 
'checked' ) : array();
-                               $buttons =
-                                       Xml::element( 'input', array_merge( 
-                                               array( 'type' => 'radio', 
'name' => 'diff', 'value' => $ts ),
-                                               $diffCheck ) ) .
-                                       Xml::element( 'input', array_merge(
-                                               array( 'type' => 'radio', 
'name' => 'version', 'value' => $ts ),
-                                               $versionCheck ) );
-                                               
-                       } else {
-                               $buttons = '';
-                       }
-                       $action = implode( ', ', $actions );
-                       $text .= "<li>{$buttons}{$time}: {$action}</li>\n";
+                       $actions[] = $editExt;
                }
-               $text .= "</ul>";
-               if( $showDiff )
-                       $text .= $this->getButton() . "</form>";
-               return $text;
+               if( $showDiff ){
+                       $diffCheck = $c == 2 ? array( 'checked' => 'checked' ) 
: array();
+                       $versionCheck = $c == 1 ? array( 'checked' => 'checked' 
) : array();
+                       $buttons =
+                               Xml::element( 'input', array_merge( 
+                                       array( 'type' => 'radio', 'name' => 
'diff', 'value' => $ts ),
+                                       $diffCheck ) ) .
+                               Xml::element( 'input', array_merge(
+                                       array( 'type' => 'radio', 'name' => 
'version', 'value' => $ts ),
+                                       $versionCheck ) );
+                       
+               } else {
+                       $buttons = '';
+               }
+               $action = implode( ', ', $actions );
+               return "<li>{$buttons}{$time}: {$action}</li>\n";
        }
 
        /**



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to