tr('Diagram'),
'documentation' => 'PluginDiagram',
'description' => tr('Display diagrams.net/mxGraph/Draw.io diagrams'),
'prefs' => ['wikiplugin_diagram'],
'iconname' => 'sitemap',
'tags' => ['basic'],
'introduced' => 19,
'packages_required' => [
'tikiwiki/diagram' => VendorHelper::getAvailableVendorPath('diagram', 'tikiwiki/diagram/js/app.min.js')
],
'params' => [
'fileId' => [
'required' => false,
'name' => tr('fileId'),
'description' => tr('Id of the file in the file gallery. A xml file containing the graph model. Leave empty for more options.'),
'since' => '19.0',
'filter' => 'int',
],
'page' => [
'required' => false,
'name' => tr('page'),
'description' => tr('Page of the diagram that should be displayed.'),
'since' => '',
'filter' => 'text',
],
'annotate' => [
'required' => false,
'name' => tr('annotate'),
'description' => tr('Id of the file in the file gallery. A image file to include in the diagram.'),
'since' => '20.0',
'filter' => 'int',
],
'align' => [
'required' => false,
'name' => tr('Image alignment when exporting a PDF'),
'description' => tr('Alignment of the diagrams during PDF export. Accepted values: "left", "right" and "center"'),
'default' => 'left',
'since' => '21.0',
],
'wikiparse' => [
'required' => false,
'name' => tr('Parse wiki markup language inside the diagram'),
'description' => tr('Parameter that will allow to parse wiki markup language inside the diagram if the value is "1"'),
'since' => '21.0',
],
'compressXml' => [
'required' => false,
'name' => tr('Compress XML'),
'description' => tr('Parameter that will allow inline diagram data be saved compressed.'),
'since' => '21.0',
],
'template' => [
'required' => false,
'name' => tr('template'),
'description' => tr('Diagram\'s file id to use as a template to new the diagram. This parameter will be skipped if the fileId parameter is present.'),
'since' => '23.0',
'filter' => 'int',
],
'galleryId' => [
'required' => false,
'name' => tr('Gallery Id'),
'description' => tr('File Gallery id where the new diagram file will be stored. If this parameter is not present the content of
the file will be placed in the body of the plugin.'),
'since' => '23.0',
'filter' => 'int',
],
'fileName' => [
'required' => false,
'name' => tr('File Name'),
'description' => tr('The name used for the diagram file. Acceptable replacements are \'%page%\' and \'%date%\'. The default pattern is “Diagram %page% %date%.drawio”.'),
'since' => '23.0',
'filter' => 'text',
]
],
];
return $info;
}
/**
* @param $data
* @param $params
* @return string
* @throws Exception
*/
function wikiplugin_diagram($data, $params)
{
global $tikilib, $user, $page, $wikiplugin_included_page, $prefs, $tiki_p_upload_files;
$template = $params['template'];
$galleryId = $params['galleryId'] ?? ($params['fileName'] ? 1 : '');
$fileName = $params['fileName'] ?? 'Diagram %page% %date%.drawio' ;
$fileName = preg_replace('/\%page\%/', $page, $fileName);
$fileName = preg_replace('/\%date\%/', date('Y-m-d'), $fileName);
$compressXml = ($prefs['fgal_use_diagram_compression_by_default'] !== 'y') ? false : true;
$compressXmlParam = false;
if (empty($params['fileId']) && empty(trim($data)) && ! empty($params['template'])) {
$params['fileId'] = $template;
}
if (
empty($params['fileId'])
&& isset($params['compressXml'])
&& in_array($params['compressXml'], ['false', '0'])
) {
$compressXml = false;
$compressXmlParam = true;
}
$diagramIdentifier = ! empty($params['fileId']) ? $params['fileId'] : $data;
$info = wikiplugin_diagram_info();
$pageName = isset($params['page']) ? $params['page'] : '';
$diagrams = DiagramHelper::getDiagramsFromIdentifier($diagramIdentifier, $pageName);
if (! empty($params['align']) && in_array($params['align'], ['left', 'center', 'right'])) {
$alignment = $params['align'];
} else {
$alignment = $info['params']['align']['default'];
}
if (! empty($_GET['display']) && $_GET['display'] == 'pdf') {
$html = '';
foreach ($diagrams as $diagram) {
$html .= ! empty($html) ? '
' : '';
$html .= '
$galHtml
~/np~ EOF; } } //checking if user can see edit button if (! empty($wikiplugin_included_page)) { $sourcepage = $wikiplugin_included_page; } else { $sourcepage = $page; } //checking if user has edit permissions on the wiki page/file using the current permission library to obey global/categ/object perms if ($fileId) { $objectperms = Perms::get(['type' => 'file', 'object' => $fileId]); } else { $objectperms = Perms::get([ 'type' => 'wiki page', 'object' => $sourcepage ]); } if ($objectperms->edit) { $allowEdit = true; } else { $allowEdit = false; } $base_64_diagram = base64_encode($data); if (isset($params['wikiparse']) && $params['wikiparse'] == 1) { $parsedDiagrams = []; $XMLDiagrams = simplexml_load_string($data); if ($XMLDiagrams->getName() == 'mxGraphModel') { $parsedDiagrams = ['