Extension:Dia

What does this extension do?
The Dia extension allows Dia diagrams to be embedded/rendered inside MediaWiki pages. It can be used to have thumbnails of specified size to be automatically generated from the uploaded .dia files. (If no size is given, then the nominal size will be used.)

In the future, when SVG gets better support in all the major browsers, this extension may also produce .svg from the .dia files.

Dependencies

 * dia - This extension relies on an external conversion program to perform the conversion. By default, dia itself is used to perform this conversion, which means that you will need to have it installed on the server.

Installation
First copy the Dia/ directory into the extensions folder of your MediaWiki installation.

To activate the extension, add the following lines to your LocalSettings.php file (near the end):

Also make sure that you have mediawiki configured to allow for file uploads:

This setting is already present in LocalSettings.php, however, it defaults to false. To enable uploads, make sure it is set to true.

Furthermore, when relatively large diagrams are used, dia consumes more memory than the default 100MB that MediaWiki grants it. You can increase the memory to 512MB by adding the following line to LocalSettings.php:

Mime type recognition
The following is only required by MediaWiki versions 1.12 and below.

To finish the installation, you must make sure the dia mime types are known to Mediawiki. This can be done by applying the supplied patch mimetypes.patch. To do so, go to your mediawiki installation root (the directory containing the includes/ directory) and type the following in a commandline shell:

If that doesn't work, you'll have to modify the files manually. First add the following line to includes/mime.types</tt>:

Then add the following line to includes/mime.info</tt>:

MediaWiki 1.12
In MediaWiki 1.12, the mime type checking has been "improved", which means that it now recognises files not only by file name extension but also based on its contents. Unfortunately, because MediaWiki does not recognise dia files by default, it detects a dia file as an ordinary xml file.

To fix this, you will have to patch MediaWiki. Copy/paste the following code snippet to a file called dia_xml_format.patch</tt>.

And apply the patch from the MediaWiki installation root:

If this doesn't work, manually add the line to the file includes/MimeMagic.php</tt>.

Configuration

 * $wgDIANominalSize: The nominal width of a Dia file when rendered to png (default: 300px).


 * $wgDIAMaxSize: Don't scale a Dia file larger than this (default: 1024px).

Advanced Configuration
Dia diagrams may be uploaded as drawings. these diagrams are converted to png before they can be rendered on a page. An external program is required to perform this conversion. By default 'dia' itself is used to perform this conversion, but if you have a different tool to perform the conversion you can set it up here.


 * $wgDIAConverters: An associative array linking your conversion tool (as key) with the commandline to be used for your tool. In this commandline you can use the following variables:
 * $input: The input filename
 * $output: The output filename
 * $width: The output width
 * $wgDIAConverter: The currently selected converter (default: 'dia').
 * $wgDIAConverterPath: If the currently selected converter is not in the default PATH environment variable, you can set the path here.

Note: Future versions of the extension may also output SVG.

Client side
This extension works great when using an external editor, which even works with HTTP authentication.

FAQ
Please also see Extension_talk:Dia for further assistence and questions regarding this extension.

"Corrupt file"

 * Question: When I upload I get: "The file is corrupt or has an incorrect extension"


 * Answer: You are probably using MediaWiki 1.12 and have not yet applied the above patch.
 * Answer: It might also be because dia compresses the dia file when you save it. Try selecting "save as" and remove the v in the kompression box in the lover left corner of the save box.

"Cannot allocate memory"
Error creating thumbnail: dia: error while loading shared libraries: libXrender.so.1: failed to map segment from shared object: Cannot allocate memory
 * Question: After I have successfully uploaded a dia file, instead of a diagram, I get a gray box with the error message
 * Answer: By default, MediaWiki only grants 100MB to a the dia program, which is not enough when relatively large diagrams are processed. To increase the allowed amount of memory to 500MB, add the following line to the end of LocalSettings.php</tt>:

Which shapes does this extension support?

 * Answer: This extension uses 'dia' itself to perform the conversion, so it will supported whatever the 'dia' that is installed on the server will support. If someone uploads a .dia</tt> file that uses shapes (from a third-party plugin) that the installed 'dia' does not have, then these shapes will not get rendered in the thumbnail until the 'dia' on the server-side is also extended with the used plugin.

How can I display a dia file ?

 * Answer: A Dia file can be displayed and edited using Dia . The file can also be exported to a variety of different formats (such as SVG, PDF, PNG). Of course, once exported, it cannot be edited anymore. This plugin performs an automatic conversion to PNG when including dia files as images inside mediawiki. However, the original dia file can be retrieved for editing and maintenance via the image page.

Editing Dia files

 * Question: The installation works fine for me and i am able to see the thumbnail on the wiki page. Now I have more than 10 to 20 users who would be using the wiki page. In order to edit the .dia file, I understand that an external editor has to be configured. My question is do all the users have to configure the external editor in their pc's to edit the .dia file and upload it back to the server?


 * Answer: Yes, you will need to set up and configure the external editor for each user/on each system. Please refer to systems administration best practices to set it up automatically for all users/each system.

"String could not be parsed as XML"
exception 'Exception' with message 'String could not be parsed as XML' in /srv/www/vhosts/itwiki_science_unsw_edu_au/extensions/Dia/Dia.body.php:11 Stack trace:
 * Question: I've set it up, following the instructions on 1.10. But I get this error:
 * 1) 0 /srv/www/vhosts/itwiki_science_unsw_edu_au/extensions/Dia/Dia.body.php(11): SimpleXMLElement->__construct('????????????[s?...')
 * 2) 1 /srv/www/vhosts/itwiki_science_unsw_edu_au/extensions/Dia/Dia.body.php(159): wfGetDIAsize('/srv/www/vhosts...')
 * 3) 2 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Image.php(279): DiaHandler->getImageSize(Object(Image), '/srv/www/vhosts...')
 * 4) 3 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Image.php(1061): Image->loadFromFile
 * 5) 4 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Image.php(1072): Image->purgeMetadataCache
 * 6) 5 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Image.php(1270): Image->purgeCache
 * 7) 6 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/SpecialUpload.php(509): Image->recordUpload('20090421012807!...', , , , , true)
 * 8) 7 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/SpecialUpload.php(249): UploadForm->processUpload
 * 9) 8 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/SpecialUpload.php(14): UploadForm->execute
 * 10) 9 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/SpecialPage.php(627): wfSpecialUpload(NULL, Object(SpecialPage))
 * 11) 10 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/SpecialPage.php(433): SpecialPage->execute(NULL)
 * 12) 11 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Wiki.php(196): SpecialPage::executePath(Object(Title))
 * 13) 12 /srv/www/vhosts/itwiki_science_unsw_edu_au/includes/Wiki.php(45): MediaWiki->initializeSpecialCases(Object(Title), Object(OutputPage), Object(WebRequest))
 * 14) 13 /srv/www/vhosts/itwiki_science_unsw_edu_au/index.php(89): MediaWiki->initialize(Object(Title), Object(OutputPage), Object(User), Object(WebRequest))
 * 15) 14 {main}

This is caused by newer versions of dia that by default save the dia files as gzip compressed XML files. You have to re-save the dia diagram as an "uncompressed" file.
 * Answer:

At line 8 of extensions/Dia/Dia.body.php add: // hack for dia zip files if($xmlstr[0] != "<") { exec("gzip -d - < \"$filename\"", $xmlstr); $xmlstr = join("\n", $xmlstr); } And in doGuessMimeType in includes/MimeMagic.php after fclose($f) add: // hack for dia if($head[0] != "<") { exec("gzip -d - < \"$file\"", $unzip); $unzip = join("\n", $unzip); if(strstr($unzip, 'http://www.lysator.liu.se/~alla/dia/')) return('application/x-dia-diagram'); }
 * Or make two hacks:

History

 * 20071031 Initial version.