jenkins-bot has submitted this change and it was merged. (
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
---
A CloseWikis.class.php
M CloseWikis.php
A CloseWikisHooks.php
A CloseWikisRow.php
A extension.json
5 files changed, 240 insertions(+), 199 deletions(-)
Approvals:
20after4: Looks good to me, approved
jenkins-bot: Verified
diff --git a/CloseWikis.class.php b/CloseWikis.class.php
new file mode 100644
index 0000000..b1cbf4f
--- /dev/null
+++ b/CloseWikis.class.php
@@ -0,0 +1,105 @@
+<?php
+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;
+ }
+}
diff --git a/CloseWikis.php b/CloseWikis.php
index 28af227..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-or-later',
-);
-
-$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/CloseWikisHooks.php b/CloseWikisHooks.php
new file mode 100644
index 0000000..d31207f
--- /dev/null
+++ b/CloseWikisHooks.php
@@ -0,0 +1,32 @@
+<?php
+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;
+ }
+}
diff --git a/CloseWikisRow.php b/CloseWikisRow.php
new file mode 100644
index 0000000..cb2bcd1
--- /dev/null
+++ b/CloseWikisRow.php
@@ -0,0 +1,28 @@
+<?php
+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;
+ }
+}
diff --git a/extension.json b/extension.json
new file mode 100644
index 0000000..ca0a241
--- /dev/null
+++ b/extension.json
@@ -0,0 +1,62 @@
+{
+ "name": "CloseWikis",
+ "version": "1.2",
+ "author": [
+ "Victor Vasiliev",
+ "Hydriz Scholz"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:CloseWikis",
+ "descriptionmsg": "closewikis-desc",
+ "license-name": "GPL-2.0-or-later",
+ "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": {
+ "CloseWikis": "CloseWikis.class.php",
+ "CloseWikisHooks": "CloseWikisHooks.php",
+ "CloseWikisRow": "CloseWikisRow.php",
+ "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: merged
Gerrit-Change-Id: Ia373ef38e7df88151a11219b1d26534c111ee4a6
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/CloseWikis
Gerrit-Branch: master
Gerrit-Owner: MarcoAurelio <[email protected]>
Gerrit-Reviewer: 20after4 <[email protected]>
Gerrit-Reviewer: Hydriz <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Mainframe98 <[email protected]>
Gerrit-Reviewer: MarcoAurelio <[email protected]>
Gerrit-Reviewer: Victor Vasiliev <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits