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

Reply via email to