getOutput(); $request = $this->getRequest(); $out->addModuleStyles( 'ext.abuseFilter' ); $this->setHeaders(); $this->addHelpLink( 'Extension:AbuseFilter' ); $this->checkPermissions(); if ( $request->getVal( 'result' ) === 'success' ) { $out->setSubtitle( $this->msg( 'abusefilter-edit-done-subtitle' ) ); $changedFilter = intval( $request->getVal( 'changedfilter' ) ); $changeId = intval( $request->getVal( 'changeid' ) ); $out->wrapWikiMsg( '

$1

', [ 'abusefilter-edit-done', $changedFilter, $changeId, $this->getLanguage()->formatNum( $changedFilter ) ] ); } [ $view, $pageType, $params ] = $this->getViewClassAndPageType( $subpage ); // Links at the top $this->addNavigationLinks( $pageType ); /** @var AbuseFilterView $v */ $v = new $view( $this->getContext(), $this->getLinkRenderer(), self::PAGE_NAME, $params ); $v->show(); } /** * Determine the view class to instantiate * * @param string|null $subpage * @return array A tuple of three elements: * - a subclass of AbuseFilterView * - type of page for addNavigationLinks * - array of parameters for the class * @phan-return array{0:class-string,1:string,2:array} */ public function getViewClassAndPageType( $subpage ) : array { // Filter by removing blanks. $params = array_values( array_filter( explode( '/', $subpage ?: '' ), function ( $value ) { return $value !== ''; } ) ); if ( $subpage === 'tools' ) { return [ AbuseFilterViewTools::class, 'tools', [] ]; } if ( $subpage === 'import' ) { return [ AbuseFilterViewImport::class, 'import', [] ]; } if ( is_numeric( $subpage ) || $subpage === 'new' ) { return [ AbuseFilterViewEdit::class, 'edit', [ 'filter' => is_numeric( $subpage ) ? (int)$subpage : null ] ]; } if ( $params ) { if ( count( $params ) === 2 && $params[0] === 'revert' && is_numeric( $params[1] ) ) { $params[1] = (int)$params[1]; return [ AbuseFilterViewRevert::class, 'revert', $params ]; } if ( $params[0] === 'test' ) { return [ AbuseFilterViewTestBatch::class, 'test', $params ]; } if ( $params[0] === 'examine' ) { return [ AbuseFilterViewExamine::class, 'examine', $params ]; } if ( $params[0] === 'history' || $params[0] === 'log' ) { if ( count( $params ) <= 2 ) { $params = isset( $params[1] ) ? [ 'filter' => (int)$params[1] ] : []; return [ AbuseFilterViewHistory::class, 'recentchanges', $params ]; } if ( count( $params ) === 4 && $params[2] === 'item' ) { return [ AbuseFilterViewEdit::class, '', [ 'filter' => (int)$params[1], 'history' => (int)$params[3] ] ]; } if ( count( $params ) === 5 && $params[2] === 'diff' ) { // Special:AbuseFilter/history//diff// return [ AbuseFilterViewDiff::class, '', $params ]; } } } return [ AbuseFilterViewList::class, 'home', [] ]; } /** * Static variant to get the associated Title. * * @param string|int $subpage * @return Title */ public static function getTitleForSubpage( $subpage ) : Title { return self::getTitleFor( self::PAGE_NAME, $subpage ); } }