diff options
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php')
-rw-r--r-- | www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php new file mode 100644 index 00000000..1a4cbf4d --- /dev/null +++ b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php @@ -0,0 +1,134 @@ +<?php + +class SpecialAbuseFilter extends SpecialPage { + public $mFilter, $mHistoryID; + + public function __construct() { + parent::__construct( 'AbuseFilter', 'abusefilter-view' ); + } + + public function doesWrites() { + return true; + } + + public function execute( $subpage ) { + $out = $this->getOutput(); + $request = $this->getRequest(); + + $out->addModuleStyles( 'ext.abuseFilter' ); + $view = 'AbuseFilterViewList'; + + $this->setHeaders(); + + $this->loadParameters( $subpage ); + $out->setPageTitle( $this->msg( 'abusefilter-management' ) ); + + // Are we allowed? + $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( '<p class="success">$1</p>', + [ + 'abusefilter-edit-done', + $changedFilter, + $changeId, + $this->getLanguage()->formatNum( $changedFilter ) + ] + ); + } + + $this->mHistoryID = null; + $pageType = 'home'; + + $params = explode( '/', $subpage ); + + // Filter by removing blanks. + foreach ( $params as $index => $param ) { + if ( $param === '' ) { + unset( $params[$index] ); + } + } + $params = array_values( $params ); + + if ( $subpage == 'tools' ) { + $view = 'AbuseFilterViewTools'; + $pageType = 'tools'; + $out->addHelpLink( 'Extension:AbuseFilter/Rules format' ); + } + + if ( count( $params ) == 2 && $params[0] == 'revert' && is_numeric( $params[1] ) ) { + $this->mFilter = $params[1]; + $view = 'AbuseFilterViewRevert'; + $pageType = 'revert'; + } + + if ( count( $params ) && $params[0] == 'test' ) { + $view = 'AbuseFilterViewTestBatch'; + $pageType = 'test'; + $out->addHelpLink( 'Extension:AbuseFilter/Rules format' ); + } + + if ( count( $params ) && $params[0] == 'examine' ) { + $view = 'AbuseFilterViewExamine'; + $pageType = 'examine'; + $out->addHelpLink( 'Extension:AbuseFilter/Rules format' ); + } + + if ( !empty( $params[0] ) && ( $params[0] == 'history' || $params[0] == 'log' ) ) { + $pageType = ''; + if ( count( $params ) == 1 ) { + $view = 'AbuseFilterViewHistory'; + $pageType = 'recentchanges'; + } elseif ( count( $params ) == 2 ) { + # Second param is a filter ID + $view = 'AbuseFilterViewHistory'; + $this->mFilter = $params[1]; + } elseif ( count( $params ) == 4 && $params[2] == 'item' ) { + $this->mFilter = $params[1]; + $this->mHistoryID = $params[3]; + $view = 'AbuseFilterViewEdit'; + } elseif ( count( $params ) == 5 && $params[2] == 'diff' ) { + // Special:AbuseFilter/history/<filter>/diff/<oldid>/<newid> + $view = 'AbuseFilterViewDiff'; + } + } + + if ( is_numeric( $subpage ) || $subpage == 'new' ) { + $this->mFilter = $subpage; + $view = 'AbuseFilterViewEdit'; + $pageType = 'edit'; + } + + if ( $subpage == 'import' ) { + $view = 'AbuseFilterViewImport'; + $pageType = 'import'; + } + + // Links at the top + AbuseFilter::addNavigationLinks( + $this->getContext(), $pageType, $this->getLinkRenderer() ); + + /** @var AbuseFilterView $v */ + $v = new $view( $this, $params ); + $v->show(); + } + + function loadParameters( $subpage ) { + $filter = $subpage; + + if ( !is_numeric( $filter ) && $filter != 'new' ) { + $filter = $this->getRequest()->getIntOrNull( 'wpFilter' ); + } + $this->mFilter = $filter; + } + + /** + * @return string + */ + protected function getGroupName() { + return 'wiki'; + } +} |