MarcoAurelio has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/391877 )
Change subject: Convert CloseWikis to use extension registration ...................................................................... Convert CloseWikis to use extension registration Bug: T172038 Change-Id: Ia373ef38e7df88151a11219b1d26534c111ee4a6 --- M CloseWikis.php A extension.json 2 files changed, 71 insertions(+), 199 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CloseWikis refs/changes/77/391877/1 diff --git a/CloseWikis.php b/CloseWikis.php index 11fbebe..e662178 100644 --- a/CloseWikis.php +++ b/CloseWikis.php @@ -18,203 +18,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ - -if ( !defined( 'MEDIAWIKI' ) ) - die(); - -$wgExtensionCredits['other'][] = array( - 'path' => __FILE__, - 'name' => 'CloseWikis', - 'author' => array( 'Victor Vasiliev', 'Hydriz Scholz' ), - 'descriptionmsg' => 'closewikis-desc', - 'url' => 'https://www.mediawiki.org/wiki/Extension:CloseWikis', - 'license-name' => 'GPL-2.0+', -); - -$dir = dirname( __FILE__ ); -$wgMessagesDirs['CloseWikis'] = __DIR__ . '/i18n'; -$wgExtensionMessagesFiles['CloseWikisAlias'] = "$dir/CloseWikis.alias.php"; -$wgHooks['getUserPermissionsErrors'][] = "CloseWikisHooks::userCan"; - -$wgGroupPermissions['steward']['closewikis'] = true; -$wgAvailableRights[] = 'closewikis'; -// To be promoted globally -$wgAvailableRights[] = 'editclosedwikis'; - -$wgAutoloadClasses['SpecialCloseWiki'] = "$dir/SpecialCloseWiki.php"; -$wgAutoloadClasses['SpecialListClosedWikis'] = "$dir/SpecialListClosedWikis.php"; -$wgSpecialPages['CloseWiki'] = 'SpecialCloseWiki'; -$wgSpecialPages['ListClosedWikis'] = 'SpecialListClosedWikis'; - -$wgCloseWikisDatabase = 'closedwikis'; - -$wgLogTypes[] = 'closewiki'; -$wgLogNames['closewiki'] = 'closewikis-log'; -$wgLogHeaders['closewiki'] = 'closewikis-log-header'; -$wgLogActions['closewiki/close'] = 'closewikis-log-close'; -$wgLogActions['closewiki/reopen'] = 'closewikis-log-reopen'; - -class CloseWikisRow { - private $mRow; - - public function __construct( $row ) { - $this->mRow = $row; - } - - public function isClosed() { - return (bool)$this->mRow; - } - - public function getWiki() { - return $this->mRow ? $this->mRow->cw_wiki : null; - } - - public function getReason() { - return $this->mRow ? $this->mRow->cw_reason : null; - } - - public function getTimestamp() { - return $this->mRow ? wfTimestamp( TS_MW, $this->mRow->cw_timestamp ) : null; - } - - public function getBy() { - return $this->mRow ? $this->mRow->cw_by : null; - } -} - -class CloseWikis { - static $cachedList = null; - - static function getSlaveDB() { - global $wgCloseWikisDatabase; - return wfGetDB( DB_REPLICA, 'closewikis', $wgCloseWikisDatabase ); - } - - static function getMasterDB() { - global $wgCloseWikisDatabase; - return wfGetDB( DB_MASTER, 'closewikis', $wgCloseWikisDatabase ); - } - - /** Returns list of all closed wikis in form of CloseWikisRow array. Not cached */ - static function getAll() { - $list = array(); - $dbr = self::getSlaveDB(); - $result = $dbr->select( 'closedwikis', '*', false, __METHOD__ ); - foreach( $result as $row ) { - $list[] = new CloseWikisRow( $row ); - } - $dbr->freeResult( $result ); - return $list; - } - - /** Returns list of closed wikis in form of string array. Cached in CloseWikis::$cachedList */ - static function getList() { - if( self::$cachedList ) { - return self::$cachedList; - } - $list = array(); - $dbr = self::getMasterDB(); // Used only on writes - $result = $dbr->select( 'closedwikis', 'cw_wiki', false, __METHOD__ ); - foreach( $result as $row ) { - $list[] = $row->cw_wiki; - } - $dbr->freeResult( $result ); - self::$cachedList = $list; - return $list; - } - - /** Returns list of unclosed wikis in form of string array. Based on getList() */ - static function getUnclosedList() { - global $wgLocalDatabases; - return array_diff( $wgLocalDatabases, self::getList() ); - } - - /** Returns a CloseWikisRow for specific wiki. Cached in $wgMemc */ - static function getClosedRow( $wiki ) { - global $wgMemc; - $memcKey = "closedwikis:{$wiki}"; - $cached = $wgMemc->get( $memcKey ); - if( is_object( $cached ) ) { - return $cached; - } - $dbr = self::getSlaveDB(); - $result = new CloseWikisRow( $dbr->selectRow( 'closedwikis', '*', array( 'cw_wiki' => $wiki ), __METHOD__ ) ); - $wgMemc->set( $memcKey, $result ); - return $result; - } - - /** Closes a wiki - * - * @param $by User - */ - static function close( $wiki, $dispreason, $by ) { - global $wgMemc; - $dbw = self::getMasterDB(); - $dbw->startAtomic( __METHOD__ ); - $dbw->insert( - 'closedwikis', - array( - 'cw_wiki' => $wiki, - 'cw_reason' => $dispreason, - 'cw_timestamp' => $dbw->timestamp( wfTimestampNow() ), - 'cw_by' => $by->getName(), - ), - __METHOD__, - array( 'IGNORE' ) // Better error handling - ); - $result = (bool)$dbw->affectedRows(); - $dbw->endAtomic( __METHOD__ ); - $wgMemc->delete( "closedwikis:{$wiki}" ); - self::$cachedList = null; - return $result; - } - - /** Reopens a wiki */ - static function reopen( $wiki ) { - global $wgMemc; - $dbw = self::getMasterDB(); - $dbw->startAtomic( __METHOD__ ); - $dbw->delete( - 'closedwikis', - array( 'cw_wiki' => $wiki ), - __METHOD__ - ); - $result = (bool)$dbw->affectedRows(); - $dbw->endAtomic( __METHOD__ ); - $wgMemc->delete( "closedwikis:{$wiki}" ); - self::$cachedList = null; - return $result; - } -} - -class CloseWikisHooks { - /** - * @static - * @param $title - * @param $user User - * @param $action - * @param $result - * @return bool - */ - static function userCan( &$title, &$user, $action, &$result ) { - static $closed = null; - global $wgLang; - if( $action == 'read' ) { - return true; - } - - if( is_null( $closed ) ) { - $closed = CloseWikis::getClosedRow( wfWikiID() ); - } - - if( $closed->isClosed() && !$user->isAllowed( 'editclosedwikis' ) ) { - $reason = $closed->getReason(); - $ts = $closed->getTimestamp(); - $by = $closed->getBy(); - $result[] = array( 'closewikis-closed', $reason, $by, - $wgLang->timeanddate( $ts ), $wgLang->time( $ts ), $wgLang->date( $ts ) ); - return false; - } - return true; - } +if ( function_exists( 'wfLoadExtension' ) ) { + wfLoadExtension( 'CloseWikis' ); + // Keep i18n globals so mergeMessageFileList.php doesn't break + $wgMessagesDirs['CloseWikis'] = __DIR__ . '/i18n'; + $wgExtensionMessagesFiles['CloseWikisAlias'] = __DIR__ . '/CloseWikis.alias.php'; + wfWarn( + 'Deprecated PHP entry point used for the CloseWikis extension. ' . + 'Please use wfLoadExtension instead, ' . + 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' + ); + return; +} else { + die( 'This version of the CloseWikis extension requires MediaWiki 1.29+' ); } diff --git a/extension.json b/extension.json new file mode 100644 index 0000000..f9f7784 --- /dev/null +++ b/extension.json @@ -0,0 +1,58 @@ +{ + "name": "CloseWikis", + "author": [ + "Victor Vasiliev", + "Hydriz Scholz" + ], + "url": "https://www.mediawiki.org/wiki/Extension:CloseWikis", + "descriptionmsg": "closewikis-desc", + "license-name": "GPL-2.0+", + "type": "other", + "AvailableRights": [ + "closewikis", + "editclosedwikis" + ], + "GroupPermissions": { + "steward": { + "closewikis": true + } + }, + "LogActions": { + "closewiki/close": "closewikis-log-close", + "closewiki/reopen": "closewikis-log-reopen" + }, + "LogHeaders": { + "closewiki": "closewikis-log-header" + }, + "LogNames": { + "closewiki": "closewikis-log" + }, + "LogTypes": [ + "closewiki" + ], + "SpecialPages": { + "CloseWiki": "SpecialCloseWiki", + "ListClosedWikis": "SpecialListClosedWikis" + }, + "MessagesDirs": { + "CloseWikis": [ + "i18n" + ] + }, + "ExtensionMessagesFiles": { + "CloseWikisAlias": "CloseWikis.alias.php" + }, + "AutoloadClasses": { + "SpecialCloseWiki": "SpecialCloseWiki.php", + "SpecialListClosedWikis": "SpecialListClosedWikis.php" + }, + "Hooks": { + "getUserPermissionsErrors": "CloseWikisHooks::userCan" + }, + "config": { + "CloseWikisDatabase": { + "value": "closedwikis" + } + }, + "manifest_version": 2 +} -- To view, visit https://gerrit.wikimedia.org/r/391877 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia373ef38e7df88151a11219b1d26534c111ee4a6 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/CloseWikis Gerrit-Branch: master Gerrit-Owner: MarcoAurelio <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
