category = $category; $this->linkRenderer = $linkRenderer; parent::__construct( $context ); } public function getQueryInfo() { return [ 'tables' => [ 'page', 'linter' ], 'fields' => array_merge( LinkCache::getSelectFields(), [ 'page_namespace', 'page_title', 'linter_id', 'linter_params', ] ), 'conds' => [ 'linter_cat' => $this->category ], 'join_conds' => [ 'page' => [ 'INNER JOIN', 'page_id=linter_page' ] ] ]; } protected function doBatchLookups() { $linkCache = MediaWikiServices::getInstance()->getLinkCache(); foreach ( $this->mResult as $row ) { $titleValue = new TitleValue( (int)$row->page_namespace, $row->page_title ); $linkCache->addGoodLinkObjFromRow( $titleValue, $row ); } } public function isFieldSortable( $field ) { return false; } public function formatValue( $name, $value ) { $row = $this->mCurrentRow; $row->linter_cat = $this->category; $lintError = Database::makeLintError( $row ); switch ( $name ) { case 'title': $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $viewLink = $this->linkRenderer->makeLink( $title ); if ( !$title->quickUserCan( 'edit', $this->getUser() ) ) { return $viewLink; } $editLink = $this->linkRenderer->makeLink( $title, $this->msg( 'linker-page-edit' )->text(), [], [ 'action' => 'edit', 'lintid' => $lintError->lintId, ] ); return $this->msg( 'linker-page-title-edit' )->rawParams( $viewLink, $editLink )->escaped(); case 'details': if ( $this->category === 'obsolete-tag' && isset( $lintError->params['name'] ) ) { return Html::element( 'code', [], $lintError->params['name'] ); } elseif ( $this->category === 'bogus-image-options' && isset( $lintError->params['items'] ) ) { $list = array_map( function( $in ) { return Html::element( 'code', [], $in ); }, $lintError->params['items'] ); return $this->getLanguage()->commaList( $list ); } return ''; case 'template': if ( !$lintError->templateInfo ) { return '—'; } $templateName = $lintError->templateInfo['name']; $templateTitle = Title::newFromText( $templateName, NS_TEMPLATE ); if ( !$templateTitle ) { // Shouldn't be possible...??? return '&mdash'; } return $this->linkRenderer->makeLink( $templateTitle ); default: throw new InvalidArgumentException( "Unexpected name: $name" ); } } public function getDefaultSort() { return 'linter_id'; } public function getFieldNames() { $names = [ 'title' => $this->msg( 'linter-pager-title' ), ]; if ( $this->category !== 'fostered' ) { // TODO: don't hardcode list of stuff with no parameters...? $names['details'] = $this->msg( "linter-pager-{$this->category}-details" ); } $names['template'] = $this->msg( "linter-pager-template" ); return $names; } }