Jeroen De Dauw has uploaded a new change for review. https://gerrit.wikimedia.org/r/136834
Change subject: Move special page code out of Lib ...................................................................... Move special page code out of Lib This moves SpecialWikibaseQueryPage and SpecialWikibasePage out of lib. There was one page in Client using those, which now got the code inlined. After inlining it, further refactoring was done to remove now not needed complexity. Change-Id: I5b3e76af8b29e9da4a392e42f3dc9c2016fbf04f --- M client/includes/specials/SpecialUnconnectedPages.php M repo/includes/specials/SpecialDispatchStats.php M repo/includes/specials/SpecialEntitiesWithoutPage.php M repo/includes/specials/SpecialEntityData.php M repo/includes/specials/SpecialItemByTitle.php M repo/includes/specials/SpecialItemResolver.php M repo/includes/specials/SpecialItemsWithoutSitelinks.php M repo/includes/specials/SpecialListDatatypes.php R repo/includes/specials/SpecialWikibasePage.php R repo/includes/specials/SpecialWikibaseQueryPage.php M repo/includes/specials/SpecialWikibaseRepoPage.php 11 files changed, 153 insertions(+), 91 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/34/136834/1 diff --git a/client/includes/specials/SpecialUnconnectedPages.php b/client/includes/specials/SpecialUnconnectedPages.php index 06e7d05..6444e3d 100644 --- a/client/includes/specials/SpecialUnconnectedPages.php +++ b/client/includes/specials/SpecialUnconnectedPages.php @@ -6,9 +6,10 @@ use Html; use Linker; use MWException; +use SpecialPage; use Title; use Wikibase\Client\WikibaseClient; -use Wikibase\Lib\Specials\SpecialWikibaseQueryPage; +use Wikibase\DataModel\Entity\EntityId; use Wikibase\NamespaceChecker; /** @@ -18,12 +19,10 @@ * @licence GNU GPL v2+ * @author John Erling Blad < [email protected] > */ -class SpecialUnconnectedPages extends SpecialWikibaseQueryPage { +class SpecialUnconnectedPages extends SpecialPage { /** * The title as a string to start search at - * - * @since 0.4 * * @var string */ @@ -32,18 +31,12 @@ /** * The startPage as a title to start search at * - * @since 0.4 - * - * @var Title + * @var Title|null */ private $startTitle = null; /** - * The namespaceChecker - * - * @since 0.4 - * - * @var NamespaceChecker + * @var NamespaceChecker|null */ private $namespaceChecker = null; @@ -58,20 +51,39 @@ public function __construct() { parent::__construct( 'UnconnectedPages' ); - } - /** - * @see SpecialWikibasePage::execute - * - * @since 0.4 - */ + public function getDescription() { + return $this->msg( 'special-' . strtolower( $this->getName() ) )->text(); + } + + public function setHeaders() { + $out = $this->getOutput(); + $out->setArticleRelated( false ); + $out->setPageTitle( $this->getDescription() ); + + $contLang = $this->getContext()->getLanguage(); + $this->outputHeader( $contLang->lc( 'wikibase-' . $this->getName() ) . '-summary' ); + } + public function execute( $subPage ) { - if ( !parent::execute( $subPage ) ) { - return false; + $this->setHeaders(); + + // If the user is authorized, display the page, if not, show an error. + if ( !$this->userCanExecute( $this->getUser() ) ) { + $this->displayRestrictionError(); } - $output = $this->getOutput(); + $this->setFieldsFromRequestData( $subPage ); + + $this->addFormToOutput(); + + $this->showQuery(); + } + + private function setFieldsFromRequestData( $subPage ) { + $subPage = is_null( $subPage ) ? '' : $subPage; + $request = $this->getRequest(); $this->startPage = $request->getText( 'page', $subPage ); @@ -80,7 +92,9 @@ } $this->iwData = $request->getText( 'iwdata', '' ); + } + private function addFormToOutput() { $out = ''; if ( $this->startPage !== '' && $this->startTitle === null ) { @@ -88,59 +102,129 @@ } $out .= Html::openElement( - 'form', - array( - 'action' => $this->getPageTitle()->getLocalURL(), - 'name' => 'unconnectedpages', - 'id' => 'wbc-unconnectedpages-form' + 'form', + array( + 'action' => $this->getPageTitle()->getLocalURL(), + 'name' => 'unconnectedpages', + 'id' => 'wbc-unconnectedpages-form' + ) ) - ) - . Html::openElement( 'fieldset' ) - . Html::element( 'legend', array(), $this->msg( 'wikibase-unconnectedpages-legend' )->text() ) - . Html::openElement( 'p' ) - . Html::element( 'label', array( 'for' => 'language' ), $this->msg( 'wikibase-unconnectedpages-page' )->text() ) - . ' ' - . Html::input( - 'page', - $this->startPage, - 'text', - array( - 'id' => 'page' + . Html::openElement( 'fieldset' ) + . Html::element( 'legend', array(), $this->msg( 'wikibase-unconnectedpages-legend' )->text() ) + . Html::openElement( 'p' ) + . Html::element( 'label', array( 'for' => 'language' ), $this->msg( 'wikibase-unconnectedpages-page' )->text() ) + . ' ' + . Html::input( + 'page', + $this->startPage, + 'text', + array( + 'id' => 'page' + ) ) - ) - . Html::input( - 'submit', - $this->msg( 'wikibase-unconnectedpages-submit' )->text(), - 'submit', - array( - 'id' => 'wbc-unconnectedpages-submit', - 'class' => 'wbc-input-button' + . Html::input( + 'submit', + $this->msg( 'wikibase-unconnectedpages-submit' )->text(), + 'submit', + array( + 'id' => 'wbc-unconnectedpages-submit', + 'class' => 'wbc-input-button' + ) ) - ) - . ' ' - . Html::input( - 'iwdata', - 'only', - 'checkbox', - array( - 'id' => 'wbc-unconnectedpages-iwdata', - 'class' => 'wbc-input-button', - $this->iwData === 'only' ? 'checked' : 'unchecked' => '' + . ' ' + . Html::input( + 'iwdata', + 'only', + 'checkbox', + array( + 'id' => 'wbc-unconnectedpages-iwdata', + 'class' => 'wbc-input-button', + $this->iwData === 'only' ? 'checked' : 'unchecked' => '' + ) ) - ) - . ' ' - . Html::element( 'label', array( 'for' => 'wbc-unconnectedpages-iwdata' ), $this->msg( 'wikibase-unconnectedpages-iwdata-label' )->text() ) - . Html::closeElement( 'p' ) - . Html::closeElement( 'fieldset' ) - . Html::closeElement( 'form' ); - $output->addHTML( $out ); + . ' ' + . Html::element( 'label', array( 'for' => 'wbc-unconnectedpages-iwdata' ), $this->msg( 'wikibase-unconnectedpages-iwdata-label' )->text() ) + . Html::closeElement( 'p' ) + . Html::closeElement( 'fieldset' ) + . Html::closeElement( 'form' ); + $this->getOutput()->addHTML( $out ); + } + + private function showQuery() { $query = array(); if ( $this->iwData === 'only' ) { $query['iwdata'] = $this->iwData; } - $this->showQuery( $query ); + $paging = false; + $out = $this->getOutput(); + + list( $limit, $offset ) = $this->getRequest()->getLimitOffset(); + + $result = $this->getResult( $offset, $limit + 1 ); + + $numRows = count( $result ); + + $out->addHTML( Html::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) ); + + if ( $numRows > 0 ) { + $out->addHTML( $this->msg( 'showingresults' )->numParams( + // do not format the one extra row, if exist + min( $numRows, $limit ), + $offset + 1 )->parseAsBlock() ); + // Disable the "next" link when we reach the end + $paging = $this->getLanguage()->viewPrevNext( + $this->getPageTitle( $this->startPage ), + $offset, + $limit, + $query, + $numRows <= $limit + ); + $out->addHTML( Html::rawElement( 'p', array(), $paging ) ); + } else { + // No results to show, so don't bother with "showing X of Y" etc. + // -- just let the user know and give up now + $out->addWikiMsg( 'specialpage-empty' ); + $out->addHTML( Html::closeElement( 'div' ) ); + } + + $this->outputResults( + $result, + // do not format the one extra row, if it exist + min( $numRows, $limit ), + $offset + ); + + if( $paging ) { + $out->addHTML( Html::rawElement( 'p', array(), $paging ) ); + } + + $out->addHTML( Html::closeElement( 'div' ) ); + } + + /** + * Format and output report results using the given information plus OutputPage + * + * @since 0.3 + * + * @param EntityId[] $results + * @param integer $num number of available result rows + * @param integer $offset paging offset + */ + private function outputResults( array $results, $num, $offset ) { + if ( $num > 0 ) { + $html = Html::openElement( 'ol', array( 'start' => $offset + 1, 'class' => 'special' ) ); + for ( $i = 0; $i < $num; $i++ ) { + $line = $this->formatRow( $results[$i] ); + if ( $line ) { + $html .= Html::rawElement( 'li', array(), $line ); + } + } + $html .= Html::closeElement( 'ol' ); + + $this->getOutput()->addHTML( $html ); + } } /** @@ -159,7 +243,7 @@ * * @since 0.4 * - * @return \Wikibase\NamespaceChecker + * @return NamespaceChecker */ public function getNamespaceChecker() { $settings = WikibaseClient::getDefaultInstance()->getSettings(); @@ -204,7 +288,6 @@ * @since 0.4 */ public function getResult( $offset = 0, $limit = 0 ) { - $dbr = wfGetDB( DB_SLAVE ); $conds = $this->buildConditionals( $dbr ); @@ -252,12 +335,7 @@ return $entries; } - /** - * @see SpecialWikibaseQueryPage::formatRow - * - * @since 0.4 - */ - protected function formatRow( $entry ) { + private function formatRow( $entry ) { try { $out = Linker::linkKnown( $entry['title'] ); if ( $entry['num'] > 0 ) { @@ -269,15 +347,6 @@ wfWarn( "Error formatting result row: " . $e->getMessage() ); return false; } - } - - /** - * @see SpecialWikibaseQueryPage::getTitleForNavigation - * - * @since 0.4 - */ - protected function getTitleForNavigation() { - return $this->getPageTitle( $this->startPage ); } } diff --git a/repo/includes/specials/SpecialDispatchStats.php b/repo/includes/specials/SpecialDispatchStats.php index e11222a..bf2c923 100644 --- a/repo/includes/specials/SpecialDispatchStats.php +++ b/repo/includes/specials/SpecialDispatchStats.php @@ -3,7 +3,6 @@ namespace Wikibase\Repo\Specials; use Html; -use Wikibase\Lib\Specials\SpecialWikibasePage; /** * Page for displaying diagnostics about the dispatch process. diff --git a/repo/includes/specials/SpecialEntitiesWithoutPage.php b/repo/includes/specials/SpecialEntitiesWithoutPage.php index 16b0da9..9fe7d4f 100644 --- a/repo/includes/specials/SpecialEntitiesWithoutPage.php +++ b/repo/includes/specials/SpecialEntitiesWithoutPage.php @@ -4,7 +4,6 @@ use Html; use Wikibase\EntityFactory; -use Wikibase\Lib\Specials\SpecialWikibaseQueryPage; use Wikibase\StoreFactory; use Wikibase\Utils; use XmlSelect; diff --git a/repo/includes/specials/SpecialEntityData.php b/repo/includes/specials/SpecialEntityData.php index 6e51442..9f93ecc 100644 --- a/repo/includes/specials/SpecialEntityData.php +++ b/repo/includes/specials/SpecialEntityData.php @@ -6,7 +6,6 @@ use Wikibase\EntityFactory; use Wikibase\Lib\Serializers\SerializationOptions; use Wikibase\Lib\Serializers\SerializerFactory; -use Wikibase\Lib\Specials\SpecialWikibasePage; use Wikibase\LinkedData\EntityDataRequestHandler; use Wikibase\LinkedData\EntityDataSerializationService; use Wikibase\LinkedData\EntityDataUriManager; diff --git a/repo/includes/specials/SpecialItemByTitle.php b/repo/includes/specials/SpecialItemByTitle.php index b7ba2a5..b081c63 100644 --- a/repo/includes/specials/SpecialItemByTitle.php +++ b/repo/includes/specials/SpecialItemByTitle.php @@ -1,6 +1,7 @@ <?php namespace Wikibase\Repo\Specials; + use Html; use Site; use SiteStore; diff --git a/repo/includes/specials/SpecialItemResolver.php b/repo/includes/specials/SpecialItemResolver.php index 393d56c..f6f1af2 100644 --- a/repo/includes/specials/SpecialItemResolver.php +++ b/repo/includes/specials/SpecialItemResolver.php @@ -2,8 +2,6 @@ namespace Wikibase\Repo\Specials; -use Wikibase\Lib\Specials\SpecialWikibasePage; - /** * Base for special pages that resolve certain arguments to an item. * diff --git a/repo/includes/specials/SpecialItemsWithoutSitelinks.php b/repo/includes/specials/SpecialItemsWithoutSitelinks.php index 091e768..c3628c8 100644 --- a/repo/includes/specials/SpecialItemsWithoutSitelinks.php +++ b/repo/includes/specials/SpecialItemsWithoutSitelinks.php @@ -2,7 +2,6 @@ namespace Wikibase\Repo\Specials; -use Wikibase\Lib\Specials\SpecialWikibaseQueryPage; use Wikibase\StoreFactory; /** diff --git a/repo/includes/specials/SpecialListDatatypes.php b/repo/includes/specials/SpecialListDatatypes.php index 23f4393..2440311 100644 --- a/repo/includes/specials/SpecialListDatatypes.php +++ b/repo/includes/specials/SpecialListDatatypes.php @@ -3,7 +3,6 @@ namespace Wikibase\Repo\Specials; use Html; -use Wikibase\Lib\Specials\SpecialWikibasePage; use Wikibase\Repo\WikibaseRepo; /** diff --git a/lib/includes/specials/SpecialWikibasePage.php b/repo/includes/specials/SpecialWikibasePage.php similarity index 98% rename from lib/includes/specials/SpecialWikibasePage.php rename to repo/includes/specials/SpecialWikibasePage.php index b1c1760..5d28e8c 100644 --- a/lib/includes/specials/SpecialWikibasePage.php +++ b/repo/includes/specials/SpecialWikibasePage.php @@ -1,6 +1,6 @@ <?php -namespace Wikibase\Lib\Specials; +namespace Wikibase\Repo\Specials; use Html; use SpecialPage; diff --git a/lib/includes/specials/SpecialWikibaseQueryPage.php b/repo/includes/specials/SpecialWikibaseQueryPage.php similarity index 98% rename from lib/includes/specials/SpecialWikibaseQueryPage.php rename to repo/includes/specials/SpecialWikibaseQueryPage.php index 8a1fbf8..06d04de 100644 --- a/lib/includes/specials/SpecialWikibaseQueryPage.php +++ b/repo/includes/specials/SpecialWikibaseQueryPage.php @@ -1,6 +1,6 @@ <?php -namespace Wikibase\Lib\Specials; +namespace Wikibase\Repo\Specials; use Html; use Linker; diff --git a/repo/includes/specials/SpecialWikibaseRepoPage.php b/repo/includes/specials/SpecialWikibaseRepoPage.php index 05d925e..bb744f0 100644 --- a/repo/includes/specials/SpecialWikibaseRepoPage.php +++ b/repo/includes/specials/SpecialWikibaseRepoPage.php @@ -16,7 +16,6 @@ use Wikibase\EntityRevision; use Wikibase\EntityRevisionLookup; use Wikibase\EntityTitleLookup; -use Wikibase\Lib\Specials\SpecialWikibasePage; use Wikibase\Repo\WikibaseRepo; use Wikibase\store\EntityStore; use Wikibase\Summary; -- To view, visit https://gerrit.wikimedia.org/r/136834 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5b3e76af8b29e9da4a392e42f3dc9c2016fbf04f Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Jeroen De Dauw <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
