jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/373735 )
Change subject: Convert to extension registration and PSR4
......................................................................
Convert to extension registration and PSR4
Also move all classes to their own files in 'includes' and
namespace, and update the code accordingly.
Bug: T173209
Change-Id: I8c8a47b13ca79be5789f796fe77e2b4fff28cb03
---
M GraphViz.php
M README.md
M RELEASE-NOTES.md
M composer.json
A extension.json
R includes/GraphRenderParms.php
R includes/GraphViz.php
A includes/Settings.php
A includes/UploadFromLocalFile.php
R includes/UploadLocalFile.php
M tests/phpunit/GraphVizTest.php
11 files changed, 255 insertions(+), 198 deletions(-)
Approvals:
Welterkj: Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/GraphViz.php b/GraphViz.php
index 77acb12..7e1b59d 100644
--- a/GraphViz.php
+++ b/GraphViz.php
@@ -30,97 +30,14 @@
* @file
* @ingroup Extensions
*/
-
-define( 'GraphViz_VERSION', '2.1.0' );
-
-/**
- * The GraphViz settings class.
- */
-class GraphVizSettings {
- /**
- * dot executable path
- * Windows Default: C:/Programme/ATT/Graphviz/bin/
- * Other Platform : /usr/local/bin/dot
- *
- * '/' will be converted to '\\' later on, so feel free how to write
your path C:/ or C:\\
- *
- * @var string $execPath
- */
- public $execPath;
-
- /**
- * mscgen executable path
- * Commonly '/usr/bin/', '/usr/local/bin/' or (if set) '$DOT_PATH/'.
- *
- * '/' will be converted to '\\' later on, so feel free how to write
your path C:/ or C:\\
- *
- * @var string $mscgenPath
- */
- public $mscgenPath;
-
- /**
- * default image type for the output of dot or mscgen
- * The "default default" is png.
- *
- * @var string $defaultImageType
- */
- public $defaultImageType;
-
- /**
- * Whether or not to automatically create category pages for images
created by this extension.
- * yes|no (case insensitive). The default is no.
- *
- * @var string $createCategoryPages
- */
- public $createCategoryPages;
-
- /**
- * Constructor for setting configuration variable defaults.
- */
- public function __construct() {
- // Set execution path
- if ( stristr( PHP_OS, 'WIN' ) && !stristr( PHP_OS, 'Darwin' ) )
{
- $this->execPath = 'C:/Program Files/Graphviz/bin/';
- } else {
- $this->execPath = '/usr/bin/';
- }
-
- $this->mscgenPath = '';
- $this->defaultImageType = 'png';
- $this->createCategoryPages = 'no';
- }
-};
-
-if ( defined( 'MEDIAWIKI' ) ) {
- $GLOBALS['wgGraphVizSettings'] = new GraphVizSettings();
-
- // self executing anonymous function to prevent global scope assumptions
- call_user_func( function () {
- $dir = __DIR__ . '/';
-
- $GLOBALS['wgMessagesDirs']['GraphViz'] = $dir . 'i18n';
- $GLOBALS['wgAutoloadClasses']['GraphViz'] = $dir .
"GraphViz_body.php";
- $GLOBALS['wgAutoloadClasses']['GraphRenderParms'] = $dir .
"GraphRenderParms.php";
- $GLOBALS['wgAutoloadClasses']['UploadLocalFile'] = $dir .
"UploadLocalFile.php";
- $GLOBALS['wgAutoloadClasses']['UploadFromLocalFile'] = $dir .
"UploadLocalFile.php";
- $GLOBALS['wgHooks']['ParserFirstCallInit'][] =
'GraphViz::onParserInit';
- $GLOBALS['wgHooks']['ArticleDeleteComplete'][] =
'GraphViz::onArticleDeleteComplete';
- $GLOBALS['wgHooks']['UnitTestsList'][] =
'GraphViz::onUnitTestsList';
- $GLOBALS['wgHooks']['PageContentSave'][] =
'GraphViz::onPageContentSave';
- $GLOBALS['wgHooks']['RejectParserCacheValue'][] =
'GraphViz::onRejectParserCacheValue';
- $GLOBALS['wgExtensionCredits']['parserhook'][] = [
- 'name' => 'Graphviz',
- 'path' => __FILE__,
- 'version' => GraphViz_VERSION,
- 'author' => [
- '[http://wickle.com CoffMan]',
- '[mailto://[email protected]
MasterOfDesaster]',
- '[http://hummel-universe.net Thomas Hummel]',
- '[mailto://[email protected] Keith Welter]'
- ],
- 'url' =>
'https://www.mediawiki.org/wiki/Extension:GraphViz',
- 'descriptionmsg' => 'graphviz-desc',
- 'license-name' => 'GPL-2.0+'
- ];
- } );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'GraphViz' );
+ $wgMessageDirs['GraphViz'] = __DIR__ . '/i18n';
+ wfWarn(
+ 'Deprecated PHP entry point used for GraphViz extension. ' .
+ 'Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for
more details.'
+ );
+} else {
+ die( 'This version of the GraphViz extension requires MediaWiki 1.29+'
);
}
diff --git a/README.md b/README.md
index 81342c4..2f283db 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
```json
{
"require": {
- "mediawiki/graph-viz": "~1.1"
+ "mediawiki/graph-viz": "^2.0"
}
}
```
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index dc6fd76..92b4f15 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,10 +1,15 @@
These are the release notes for the [MediaWiki][mediawiki] [GraphViz
extension][gv_ext].
+## GraphViz 3.0.0
+* Add support for MediaWiki 1.29 [bug
T173209](https://phabricator.wikimedia.org/T173209)
+* Drop support for MediaWiki 1.28 and earlier.
+* Add extension registration and move classes to their own namespace.
+
## GraphViz 2.1.0 ## (2017-08-02)
-* Remove compat with PHP 5.3 and earlier
-* Remove compat with MW 1.22 and earlier
-* Remove I18n php shim [bug T168353](https://phabricator.wikimedia.org/T168353)
-* Fix for dying on phpcs run [bug
T168738](https://phabricator.wikimedia.org/T168738)
+* Remove compatibilty with PHP 5.3 and earlier.
+* Remove compatiblity with MW 1.22 and earlier.
+* Remove I18n php shim [bug
T168353](https://phabricator.wikimedia.org/T168353).
+* Fix for dying on phpcs run [bug
T168738](https://phabricator.wikimedia.org/T168738).
## GraphViz 2.0.1 ## (2017-04-18)
* Fix for [bug T163103](https://phabricator.wikimedia.org/T163103).
diff --git a/composer.json b/composer.json
index 8808d80..a48dc1a 100644
--- a/composer.json
+++ b/composer.json
@@ -19,14 +19,9 @@
"mediawiki/image-map": "The ImageMap extension is required and
is bundled with MediaWiki. See
https://www.mediawiki.org/wiki/Extension:ImageMap"
},
"autoload": {
- "files": [
- "GraphViz.php"
- ],
- "classmap": [
- "GraphRenderParms.php",
- "GraphViz_body.php",
- "UploadLocalFile.php"
- ]
+ "psr-4": {
+ "MediaWiki\\Extension\\GraphViz\\": "includes/"
+ }
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "0.9.2",
diff --git a/extension.json b/extension.json
new file mode 100644
index 0000000..7e01f70
--- /dev/null
+++ b/extension.json
@@ -0,0 +1,47 @@
+{
+ "name": "GraphViz",
+ "version": "3.0.0",
+ "type": "parserhook",
+ "author": [
+ "Keith Welter",
+ "[https://meta.wikimedia.org/wiki/User:Coffman Victor FariƱa]",
+ "[https://www.mediawiki.org/wiki/User:Matthewpearson Matthew
Pearson]",
+ "[https://www.mediawiki.org/wiki/User:Hummel-riegel Thomas
Hummel]",
+ "Gregory Szorc"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:GraphViz",
+ "descriptionmsg": "graphviz-desc",
+ "license-name": "GPL-2.0+",
+ "requires": {
+ "MediaWiki": ">= 1.29.0"
+ },
+ "AutoloadClasses": {
+ "MediaWiki\\Extension\\GraphViz\\GraphViz":
"includes/GraphViz.php",
+ "MediaWiki\\Extension\\GraphViz\\Settings":
"includes/Settings.php",
+ "MediaWiki\\Extension\\GraphViz\\UploadLocalFile":
"includes/UploadLocalFile.php",
+ "MediaWiki\\Extension\\GraphViz\\UploadFromLocalFile":
"includes/UploadFromLocalFile.php",
+ "MediaWiki\\Extension\\GraphViz\\GraphRenderParms":
"includes/GraphRenderParms.php"
+ },
+ "MessagesDirs": {
+ "GraphViz": [
+ "i18n"
+ ]
+ },
+ "config": {
+ "AdminCanReadAll": {
+ "value": true,
+ "description": "Sysop users can read all restricted
pages"
+ },
+ "GraphVizRedirect": {
+ "value": true,
+ "description": "Do not redirect from page in search
results to restricted pages"
+ }
+ },
+ "Hooks": {
+ "ParserFirstCallInit":
"MediaWiki\\Extension\\GraphViz\\GraphViz::onParserInit",
+ "ArticleDeleteComplete":
"MediaWiki\\Extension\\GraphViz\\GraphViz::onArticleDeleteComplete",
+ "PageContentSave":
"MediaWiki\\Extension\\GraphViz\\GraphViz::onPageContentSave",
+ "RejectParserCacheValue":
"MediaWiki\\Extension\\GraphViz\\GraphViz::onRejectParserCacheValue"
+ },
+ "manifest_version": 2
+}
diff --git a/GraphRenderParms.php b/includes/GraphRenderParms.php
similarity index 97%
rename from GraphRenderParms.php
rename to includes/GraphRenderParms.php
index 18b1af8..29f5f66 100644
--- a/GraphRenderParms.php
+++ b/includes/GraphRenderParms.php
@@ -24,6 +24,8 @@
* @ingroup Extensions
*/
+namespace MediaWiki\Extension\GraphViz;
+
/**
* A convenience class for holding the parameters pertaining to graph
rendering using dot or mscgen.
* @author Keith Welter
@@ -73,14 +75,13 @@
private $imageDir = '';
public function __construct( $renderer, $graphName, $userName,
$imageType, $sourceAndMapDir, $imageDir ) {
- global $wgGraphVizSettings;
-
$this->graphName = $graphName;
$this->userName = $userName;
$this->renderer = $renderer;
$this->sourceAndMapDir = $sourceAndMapDir;
$this->imageDir = $imageDir;
- $this->execPath = $wgGraphVizSettings->execPath;
+ $settings = new Settings();
+ $this->execPath = $settings->execPath;
wfDebug( __METHOD__ . ": userName: $userName graphName:
$graphName\n" );
wfDebug( __METHOD__ . ": sourceAndMapDir: $sourceAndMapDir
imageDir: $imageDir\n" );
@@ -97,7 +98,7 @@
break;
case 'mscgen':
$this->mapType = 'ismap';
- $this->execPath =
$wgGraphVizSettings->mscgenPath;
+ $this->execPath = $settings->mscgenPath;
break;
default:
$this->renderer = 'dot';
diff --git a/GraphViz_body.php b/includes/GraphViz.php
similarity index 97%
rename from GraphViz_body.php
rename to includes/GraphViz.php
index 9134687..58d97eb 100644
--- a/GraphViz_body.php
+++ b/includes/GraphViz.php
@@ -23,12 +23,21 @@
* @ingroup Extensions
*/
- /**
- * This is the principal class of the GraphViz extension, responsible
- * for graph file management and rendering graph images and maps as HTML.
- * Graph source, image and map files are saved in the file system in order to
avoid
- * regenerating them every time a page containing a graph is rendered.
- * The ImageMap extension is used for the rendering of graph images and maps
as HTML.
+namespace MediaWiki\Extension\GraphViz;
+
+use Html;
+use ImageMap;
+use MWException;
+use Parser;
+use Sanitizer;
+use User;
+
+/**
+ * This is the principal class of the GraphViz extension, responsible
+ * for graph file management and rendering graph images and maps as HTML.
+ * Graph source, image and map files are saved in the file system in order
to avoid
+ * regenerating them every time a page containing a graph is rendered.
+ * The ImageMap extension is used for the rendering of graph images and maps
as HTML.
*
* @ingroup Extensions
*/
@@ -171,16 +180,6 @@
*/
protected static function getDotImagePattern() {
return "~(?i)image\s*=\s*(" . self::DOT_ID_STRING . "|" .
self::DOT_NUMERAL . "|" . self::DOT_QUOTED_STRING . "|" .
self::DOT_HTML_STRING . ")~";
- }
-
- /**
- * Unit test hook.
- * @author Keith Welter
- * @return true
- */
- public static function onUnitTestsList( &$files ) {
- $files = array_merge( $files, glob( __DIR__ .
'/tests/phpunit/*Test.php' ) );
- return true;
}
/**
@@ -480,9 +479,7 @@
* @author Keith Welter et al.
*/
protected static function render( $input, $args, $parser, $frame ) {
- global
- $wgUser,
- $wgGraphVizSettings;
+ global $wgUser;
// sanity check the input
$input = trim( $input );
@@ -537,7 +534,8 @@
if ( isset( $args['format'] ) ) {
$imageType = $args['format'];
} else {
- $imageType = $wgGraphVizSettings->defaultImageType;
+ $settings = new Settings();
+ $imageType = $settings->defaultImageType;
}
// determine user...
diff --git a/includes/Settings.php b/includes/Settings.php
new file mode 100644
index 0000000..2ee631e
--- /dev/null
+++ b/includes/Settings.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace MediaWiki\Extension\GraphViz;
+
+/**
+ * The GraphViz settings class.
+ */
+class Settings {
+ /**
+ * dot executable path
+ * Windows Default: C:/Programme/ATT/Graphviz/bin/
+ * Other Platform : /usr/local/bin/dot
+ *
+ * '/' will be converted to '\\' later on, so feel free how to write
your path C:/ or C:\\
+ *
+ * @var string $execPath
+ */
+ public $execPath;
+
+ /**
+ * mscgen executable path
+ * Commonly '/usr/bin/', '/usr/local/bin/' or (if set) '$DOT_PATH/'.
+ *
+ * '/' will be converted to '\\' later on, so feel free how to write
your path C:/ or C:\\
+ *
+ * @var string $mscgenPath
+ */
+ public $mscgenPath;
+
+ /**
+ * default image type for the output of dot or mscgen
+ * The "default default" is png.
+ *
+ * @var string $defaultImageType
+ */
+ public $defaultImageType;
+
+ /**
+ * Whether or not to automatically create category pages for images
created by this extension.
+ * yes|no (case insensitive). The default is no.
+ *
+ * @var string $createCategoryPages
+ */
+ public $createCategoryPages;
+
+ /**
+ * Constructor for setting configuration variable defaults.
+ */
+ public function __construct() {
+ // Set execution path
+ if ( stristr( PHP_OS, 'WIN' ) && !stristr( PHP_OS, 'Darwin' ) )
{
+ $this->execPath = 'C:/Program Files/Graphviz/bin/';
+ } else {
+ $this->execPath = '/usr/bin/';
+ }
+
+ $this->mscgenPath = '';
+ $this->defaultImageType = 'png';
+ $this->createCategoryPages = 'no';
+ }
+}
diff --git a/includes/UploadFromLocalFile.php b/includes/UploadFromLocalFile.php
new file mode 100644
index 0000000..c40062e
--- /dev/null
+++ b/includes/UploadFromLocalFile.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace MediaWiki\Extension\GraphViz;
+
+use File;
+use RepoGroup;
+use Status;
+use UploadBase;
+
+/**
+ * Supports local file uploads in the absence of a WebRequest.
+ * Simplified from UploadFromFile.
+ *
+ * @ingroup Upload
+ * @author Keith Welter
+ */
+class UploadFromLocalFile extends UploadBase {
+ /**
+ * This function is a no-op because a WebRequest is not used.
+ * It exists here because it is abstract in UploadBase.
+ */
+ function initializeFromRequest( &$request ) {
+ }
+
+ /**
+ * @return string 'file'
+ */
+ public function getSourceType() {
+ return 'file';
+ }
+
+ /**
+ * Return the local file and initializes if necessary.
+ *
+ * @return UploadLocalFile|null
+ */
+ public function getLocalFile() {
+ if ( is_null( $this->mLocalFile ) ) {
+ $nt = $this->getTitle();
+ $repo = RepoGroup::singleton()->getLocalRepo();
+ $this->mLocalFile = is_null( $nt ) ? null :
UploadLocalFile::newFromTitle( $nt, $repo );
+ }
+
+ return $this->mLocalFile;
+ }
+
+ /**
+ * Really perform the upload.
+ *
+ * @param string $comment
+ * @return Status Indicating the whether the upload succeeded.
+ */
+ public function performUpload2( $comment ) {
+ global $wgUser;
+ $user = $wgUser;
+
+ $this->getLocalFile()->load( File::READ_LATEST );
+ $props = $this->mFileProps;
+
+ $pageText = '';
+
+ $status = $this->getLocalFile()->upload2(
+ $this->mTempPath,
+ $comment,
+ $props,
+ File::DELETE_SOURCE
+ );
+
+ if ( $status->isGood() ) {
+ $this->postProcessUpload();
+ }
+
+ return $status;
+ }
+}
diff --git a/UploadLocalFile.php b/includes/UploadLocalFile.php
similarity index 91%
rename from UploadLocalFile.php
rename to includes/UploadLocalFile.php
index 2874677..847c1de 100644
--- a/UploadLocalFile.php
+++ b/includes/UploadLocalFile.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Extension to allow Graphviz to work inside MediaWiki.
* See mediawiki.org/wiki/Extension:GraphViz for more information
@@ -24,6 +25,24 @@
* @ingroup Upload
* @author Keith Welter
*/
+
+namespace MediaWiki\Extension\GraphViz;
+
+use CdnCacheUpdate;
+use DeferredUpdates;
+use File;
+use FileRepo;
+use FSFile;
+use HTMLCacheUpdate;
+use LinksUpdate;
+use LocalFile;
+use MediaHandler;
+use MWException;
+use RepoGroup;
+use SiteStatsUpdate;
+use Status;
+use Title;
+use UploadBase;
/**
* Implements local file uploads in the absence of a WebRequest in conjunction
with UploadFromLocalFile.
@@ -458,72 +477,5 @@
}
return true;
- }
-}
-
-/**
- * Supports local file uploads in the absence of a WebRequest.
- * Simplified from UploadFromFile.
- *
- * @ingroup Upload
- * @author Keith Welter
- */
-class UploadFromLocalFile extends UploadBase {
- /**
- * This function is a no-op because a WebRequest is not used.
- * It exists here because it is abstract in UploadBase.
- */
- function initializeFromRequest( &$request ) {
- }
-
- /**
- * @return string 'file'
- */
- public function getSourceType() {
- return 'file';
- }
-
- /**
- * Return the local file and initializes if necessary.
- *
- * @return UploadLocalFile|null
- */
- public function getLocalFile() {
- if ( is_null( $this->mLocalFile ) ) {
- $nt = $this->getTitle();
- $repo = RepoGroup::singleton()->getLocalRepo();
- $this->mLocalFile = is_null( $nt ) ? null :
UploadLocalFile::newFromTitle( $nt, $repo );
- }
-
- return $this->mLocalFile;
- }
-
- /**
- * Really perform the upload.
- *
- * @param string $comment
- * @return Status Indicating the whether the upload succeeded.
- */
- public function performUpload2( $comment ) {
- global $wgUser;
- $user = $wgUser;
-
- $this->getLocalFile()->load( File::READ_LATEST );
- $props = $this->mFileProps;
-
- $pageText = '';
-
- $status = $this->getLocalFile()->upload2(
- $this->mTempPath,
- $comment,
- $props,
- File::DELETE_SOURCE
- );
-
- if ( $status->isGood() ) {
- $this->postProcessUpload();
- }
-
- return $status;
}
}
diff --git a/tests/phpunit/GraphVizTest.php b/tests/phpunit/GraphVizTest.php
index c3a3bcb..26ee1d8 100644
--- a/tests/phpunit/GraphVizTest.php
+++ b/tests/phpunit/GraphVizTest.php
@@ -1,5 +1,11 @@
<?php
+namespace MediaWiki\Extension\GraphViz\Test;
+
+use MediaWiki\Extension\GraphViz\GraphViz;
+use MediaWikiTestCase;
+use ReflectionClass;
+
/**
* @group GraphViz
*/
@@ -15,7 +21,7 @@
}
protected static function getGraphVizMethod( $name ) {
- $class = new ReflectionClass( 'GraphViz' );
+ $class = new ReflectionClass( GraphViz::class );
$method = $class->getMethod( $name );
$method->setAccessible( true );
return $method;
--
To view, visit https://gerrit.wikimedia.org/r/373735
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8c8a47b13ca79be5789f796fe77e2b4fff28cb03
Gerrit-PatchSet: 18
Gerrit-Project: mediawiki/extensions/GraphViz
Gerrit-Branch: master
Gerrit-Owner: Reception123 <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Mainframe98 <[email protected]>
Gerrit-Reviewer: Reception123 <[email protected]>
Gerrit-Reviewer: Samwilson <[email protected]>
Gerrit-Reviewer: Welterkj <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits