jenkins-bot has submitted this change and it was merged. Change subject: Add category pages and tags. ......................................................................
Add category pages and tags. This change adds a category for all pages generated by the GraphViz extension. There is one "root" category for GraphViz and a subcategory for each renderer (dot, neato, fdp, sfdp, circo, twopi and mscgen). This makes it easy to find graph images created by the extension. Change-Id: I942f703614165d7cadcf501b1312139e265bf5f0 --- M GraphRenderParms.php M GraphViz_body.php M RELEASE-NOTES.md M i18n/en.json M i18n/qqq.json 5 files changed, 131 insertions(+), 17 deletions(-) Approvals: Welterkj: Verified; Looks good to me, approved Siebrand: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/GraphRenderParms.php b/GraphRenderParms.php index a0d4c8f..f6d21ce 100644 --- a/GraphRenderParms.php +++ b/GraphRenderParms.php @@ -159,12 +159,16 @@ return $this->getGraphName( $userSpecific ) . '.src'; } + public function getImageBaseName( $userSpecific ) { + return $this->getGraphName( $userSpecific ) . '_' . $this->getRenderer(); + } + public function getImageFileName( $userSpecific ) { - return $this->getGraphName( $userSpecific ) . '.' . $this->imageType; + return $this->getImageBaseName( $userSpecific ) . '.' . $this->imageType; } public function getMapFileName( $userSpecific ) { - return $this->getGraphName( $userSpecific ) . '.map'; + return $this->getImageBaseName( $userSpecific ) . '.map'; } public function getSourcePath( $userSpecific ) { diff --git a/GraphViz_body.php b/GraphViz_body.php index 95634c4..c051374 100644 --- a/GraphViz_body.php +++ b/GraphViz_body.php @@ -104,7 +104,7 @@ * * @var string IMAGE_DUMMY */ - const IMAGE_DUMMY = "File_graph_GraphVizExtensionDummy"; + const IMAGE_DUMMY = "File_graph_GraphVizExtensionDummy_dot"; /** * Used as an array key in GraphViz::$graphTypes and other arrays. @@ -121,6 +121,27 @@ * @var integer MSCGEN */ const MSCGEN = 1; + + /** + * The name of the root category containing pages created by this extension. + * + * @var integer ROOT_CATEGORY + */ + const ROOT_CATEGORY = "GraphViz"; + + /** + * Subcategories of pages created by this extension. + * @var array $subCategories + */ + private static $subCategories = array( + 'mscgen', + 'dot', + 'neato', + 'fdp', + 'sfdp', + 'circo', + 'twopi' + ); /** * A list of dot attributes that are forbidden. @@ -260,6 +281,50 @@ } /** + * Create a category page for GraphViz::ROOT_CATEGORY and subcategory pages for GraphViz::$subCategories. + * @author Keith Welter + */ + public static function createCategoryPages() { + $rootCategoryName = self::ROOT_CATEGORY; + $rootCategoryDesc = wfMessage( 'graphviz-category-desc', "[[:Category:$rootCategoryName]]" )->text(); + self::createCategoryPage( $rootCategoryName, $rootCategoryDesc, "" ); + + foreach( self::$subCategories as $subCategory ) { + $subCategoryName = $rootCategoryName . ' ' . $subCategory; + $subCategoryDesc = wfMessage( 'graphviz-subcategory-desc', "[[:Category:$subCategoryName]]", $subCategory )->text(); + $subCategoryDesc .= "[[Category:$rootCategoryName]]"; + self::createCategoryPage( $subCategoryName, $subCategoryDesc, "" ); + } + } + + public static function getCategoryTags( $renderer ) { + $rootCategoryName = self::ROOT_CATEGORY; + return "[[Category:$rootCategoryName]][[Category:$rootCategoryName $renderer]]"; + } + + /** + * Create a category page with the given name if it does not already exist. + * @param[in] string $name is the name to use for the new category page. + * @param[in] string $pageText is the page text to supply. + * @param[in] string $comment is the comment to supply for the edit. + * @author Keith Welter + */ + public static function createCategoryPage( $name, $pageText, $comment ) { + $title = Title::newFromText( "Category:" . $name ); + + if ( !$title->exists() ) { + $wikiPage = new WikiPage( $title ); + $flags = EDIT_NEW; + $status = self::doEditContent( $wikiPage, $title, $pageText, $comment, $flags, null ); + if ( $status->isOK() ) { + wfDebug( __METHOD__ . ": created category '$name'\n" ); + } else { + wfDebug( __METHOD__ . ": create failed for category '$name'\n" ); + } + } + } + + /** * Create a dummy file page with a trivial graph image of the given image type. * New graph images of the same type may be uploaded on top of this dummy without * triggering any parser code. This makes it possible to do graph image file @@ -293,6 +358,8 @@ * @return true */ public static function onParserInit( Parser &$parser ) { + self::createCategoryPages(); + self::initDummyFilePages( $parser ); foreach ( self::$graphTypes as $graphType ) { @@ -380,6 +447,44 @@ } /** + * Convenience function for creating or editing page text. + * + * @param[in] WikiPage $wikiPage is the wiki page to create or edit. + * @param[in] string $title is the title of the wiki page to create or edit. + * @param[in] string $pageText is the page text to supply. + * @param[in] string $comment is the comment to supply for the edit. + * @param[in] integer $flags see the WikiPage::doEditContent flags documentation + * @param[in] User $user is the user on behalf of whom the edit is recorded. + * + * @return Status. + * + * @author Keith Welter + */ + public static function doEditContent( $wikiPage, $title, $pageText, $comment, $flags, $user ) { + $status = Status::newGood(); + + $oldVersion = version_compare( $GLOBALS['wgVersion'], '1.21', '<' ); + if ( $oldVersion ) { + // Do stuff for MediaWiki 1.20 and older + $status = $wikiPage->doEdit( $pageText, $comment, $flags, false, $user ); + } else { + // Do stuff for MediaWiki 1.21 and newer + $content = ContentHandler::makeContent( $pageText, $title ); + $status = $wikiPage->doEditContent( $content, $comment, $flags, false, $user ); + } + + return $status; + } + + public static function getRendererFromImageFileName( $imageFileName ) { + $renderer = strrev( $imageFileName ); + $renderer = substr( $renderer, 0, strpos( $renderer, '_' ) ); + $renderer = strrev( $renderer ); + wfDebug( __METHOD__ . ": imageFileName: $imageFileName renderer: $renderer\n" ); + return $renderer; + } + + /** * Upload a list of graph images for a wiki page with the given title text. * * @param[in] string $titleText is the title text of the wiki page. @@ -400,7 +505,8 @@ foreach ( $imageFilePaths as $imageFilePath ) { wfDebug( __METHOD__ . ": uploading $imageFilePath\n" ); $imageFileName = basename( $imageFilePath ); - $pageText = self::getMapHowToText( $imageFileName ); + $renderer = self::getRendererFromImageFileName( pathinfo ( $imageFilePath, PATHINFO_FILENAME ) ); + $pageText = self::getMapHowToText( $imageFileName ) . self::getCategoryTags( $renderer ); $imageTitle = Title::newFromText( $imageFileName, NS_FILE ); if ( !$imageTitle->exists() ) { @@ -421,17 +527,10 @@ // The upload for this title has already occured in GraphViz::render // but the page text and comment have not been updated yet so do it now. unlink( $imageFilePath ); - $wikiPage = new WikiFilePage( $imageTitle ); - $oldVersion = version_compare( $GLOBALS['wgVersion'], '1.21', '<' ); - if ( $oldVersion ) { - // Do stuff for MediaWiki 1.20 and older - $status = $wikiPage->doEdit( $pageText, $comment, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $user ); - } else { - // Do stuff for MediaWiki 1.21 and newer - $content = ContentHandler::makeContent( $pageText, $imageTitle ); - $status = $wikiPage->doEditContent( $content, $comment, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $user ); - } + $wikiPage = new WikiFilePage( $imageTitle ); + $flags = EDIT_UPDATE | EDIT_SUPPRESS_RC; + self::doEditContent( $wikiPage, $imageTitle, $pageText, $comment, $flags, $user ); wfDebug( __METHOD__ . ": updated file page for $imageFilePath\n" ); // Go ahead and count this as an upload since it has been done. @@ -1027,8 +1126,8 @@ } // prepare to upload - $pageText = ""; - $comment = ""; + $pageText = self::getCategoryTags( $renderer ); + $comment = wfMessage( 'graphviz-upload-comment', $titleText )->text(); $watch = false; $removeTempFile = true; @@ -1246,9 +1345,15 @@ $graphParms->deleteFiles( $isPreview ); if ( $deleteUploads ) { - $imageFile = UploadLocalFile::getUploadedFile( $graphParms->getImageFileName( $isPreview ) ); + $imageFileName = $graphParms->getImageFileName( $isPreview ); + $imageFile = UploadLocalFile::getUploadedFile( $imageFileName ); if ( $imageFile ) { $imageFile->delete( wfMessage( 'graphviz-delete-reason' )->text() ); + + $imageTitle = Title::newFromText( $imageFileName, NS_FILE ); + if ( $imageTitle->exists() ) { + self::deleteFilePage( $imageTitle ); + } } } } diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index bb9e0df..91cb0b3 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -2,6 +2,7 @@ ## GraphViz 1.5.x ## (not released yet) * Add tag arguments preparse="dynamic" and preparse="static". +* Add categories for pages created by this extension. ## GraphViz 1.4.1 ## (2014-10-21) * Fix for [bug 72325](https://bugzilla.wikimedia.org/show_bug.cgi?id=72325). diff --git a/i18n/en.json b/i18n/en.json index 696eb91..64aa805 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -24,5 +24,7 @@ "graphviz-uploaderror": "Graph image upload failed for file: $1", "graphviz-upload-comment": "generated by the GraphViz [[Special:Version#Installed_extensions|extension]] from the [[$1]] page", "graphviz-unrecognized-preparse-value": "The preparse value \"$1\" is unrecognized.", + "graphviz-category-desc": "$1 contains pages created by the GraphViz extension.", + "graphviz-subcategory-desc": "$1 contains pages created using the $2 command.", "graphviz-map-desc": "= ImageMap =\nWhen including this image in a wiki page, use the following mark-up to enable links:\n <nowiki>\n<imagemap>\nFile:$1\n$2</imagemap>\n</nowiki>\nSee [https://www.mediawiki.org/wiki/Extension:ImageMap ImageMap] for more information." } diff --git a/i18n/qqq.json b/i18n/qqq.json index a0dea67..9416f21 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -24,5 +24,7 @@ "graphviz-uploaderror": "Used as error message.", "graphviz-upload-comment": "Comment supplied for an image uploaded by the extension. Parameters:\n* $1 - article title", "graphviz-unrecognized-preparse-value": "Used as error message. Parameters:\n* $1 - attribute name", + "graphviz-category-desc": "GraphViz category page text. Parameters:\n* $1 - GraphViz category tag", + "graphviz-subcategory-desc": "GraphViz subcategory page text. Parameters:\n* $1 - GraphViz subcategory tag\n* $2 - graph render command associated with subcategory", "graphviz-map-desc": "Do not translate the tags <code><nowiki></code>, <code><imagemap></code>, <code></imagemap></code> or <code></nowiki></code>. Parameters:\n* $1 - image file name\n* $2 - image map shape, coordinates and URL (0 or more lines)" } -- To view, visit https://gerrit.wikimedia.org/r/169316 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I942f703614165d7cadcf501b1312139e265bf5f0 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/GraphViz Gerrit-Branch: master Gerrit-Owner: Welterkj <welterkj+...@gmail.com> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: Welterkj <welterkj+...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits