You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

92 lines
3.4 KiB

<?php
/**
* @package tikiwiki
*/
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
require_once 'tiki-setup.php';
$wikilib = TikiLib::lib('wiki');
$access->check_feature('feature_wiki_mindmap');
if (! file_exists('files/visorFreemind.swf')) {
$smarty->assign('missing', 'files/visorFreemind.swf');
$smarty->assign('mid', 'tiki-mindmap.tpl');
$smarty->display("tiki.tpl");
exit;
}
if (isset($_REQUEST['export'])) { // {{{
// Output the page relations in WikiMindMap format (derived from Freemind)
$dom = new DOMDocument();
$dom->appendChild($root = $dom->createElement('map'));
$root->setAttribute('version', '0.8.0');
/**
* @param $dom
* @param $text
* @param bool $link
* @return mixed
*/
function create_node($dom, $text, $link = true)
{
$wikilib = TikiLib::lib('wiki');
$node = $dom->createElement('node');
$node->setAttribute('TEXT', $text);
$node->setAttribute('STYLE', 'bubble');
if ($link) {
$node->setAttribute('WIKILINK', $wikilib->sefurl($text));
$node->setAttribute('MMLINK', 'tiki-mindmap.php?page=' . urlencode($text));
}
return $node;
}
/**
* @param $node
* @param $pageName
* @param int $remainingLevels
* @param array $pages
*/
function populate_node($node, $pageName, $remainingLevels = 3, $pages = [])
{
global $user;
$wikilib = TikiLib::lib('wiki');
$tikilib = TikiLib::lib('tiki');
$child = $wikilib->wiki_get_neighbours($pageName);
$child = array_diff($child, $pages);
foreach ($child as $page) {
if (! $tikilib->user_has_perm_on_object($user, $page, 'wiki page', 'tiki_p_view')) {
continue;
}
$node->appendChild($new = create_node($node->ownerDocument, $page));
if ($remainingLevels != 0) {
populate_node($new, $page, $remainingLevels - 1, array_merge($pages, [$page, $pageName]));
} else {
$new->setAttribute('STYLE', 'fork');
}
}
if (count($child) == 0) {
$node->setAttribute('STYLE', 'fork');
}
}
if (! isset($_REQUEST['export'])) {
$root->appendChild(create_node($dom, tra('No page provided.'), false));
} elseif (! $tikilib->page_exists($_REQUEST['export'])) {
$root->appendChild(create_node($dom, tr('Page "%0" does not exist', $_REQUEST['export']), false));
} else {
$root->appendChild($parent = create_node($dom, $_REQUEST['export']));
populate_node($parent, $_REQUEST['export']);
}
header('Content-Type: text/xml');
echo $dom->saveXML();
exit;
} // }}}
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : $prefs['wikiHomePage'];
$ePage = urlencode($page);
$code = $tikilib->embed_flash(['movie' => 'files/visorFreemind.swf', 'bgcolor' => '#cccccc', 'width' => 800, 'height' => 800,], '', ['openUrl' => '_blank', 'initLoadFile' => "tiki-mindmap.php?export={$ePage}", 'startCollapsedToLevel' => 1, 'mainNodeShape' => 'bubble',]);
$smarty->assign('mindmap', $code);
$smarty->assign('page', $page);
$smarty->assign('mid', 'tiki-mindmap.tpl');
$smarty->display("tiki.tpl");