freenetis-axo-doc-git/source.php @ master
a57d4e8d | David Raška | <?php
|
|
/*
|
|||
* This file is part of open source system FreenetIS
|
|||
* and it is released under GPLv3 licence.
|
|||
*
|
|||
* More info about licence can be found:
|
|||
* http://www.gnu.org/licenses/gpl-3.0.html
|
|||
*
|
|||
* More info about project can be found:
|
|||
* http://www.freenetis.org/
|
|||
*
|
|||
*/
|
|||
/**
|
|||
* Rebuilds associative array to dynatree array format
|
|||
*
|
|||
* @param array $nodes
|
|||
* @param string $prev
|
|||
* @return array
|
|||
*/
|
|||
function rebuild($nodes, $prev = null)
|
|||
{
|
|||
ksort($nodes);
|
|||
$root = array();
|
|||
foreach ($nodes AS $n => $v)
|
|||
{
|
|||
// rebuild children
|
|||
$children = rebuild($v, ($prev !== null ? "$prev/$n" : $n));
|
|||
$icon = null;
|
|||
// Set icon if list
|
|||
if (!is_array($v))
|
|||
{
|
|||
$icon = "$v.png";
|
|||
}
|
|||
// create node
|
|||
$node = array(
|
|||
'title' => $n,
|
|||
'nf_title' => $n,
|
|||
'isFolder' => is_array($v),
|
|||
'icon' => $icon,
|
|||
'links' => $v,
|
|||
'key' => ($prev !== null ? "$prev/$n" : $n),
|
|||
'children' => $children,
|
|||
'type' => $prev
|
|||
);
|
|||
$root[] = $node;
|
|||
}
|
|||
return $root;
|
|||
}
|
|||
// load XML
|
|||
$file = file_get_contents('axo_doc.xml');
|
|||
if ($file === FALSE)
|
|||
{
|
|||
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
|
|||
die;
|
|||
}
|
|||
$xml = new XMLReader($file);
|
|||
$xml->XML($file);
|
|||
$controllers = array();
|
|||
$helpers = array();
|
|||
$libraries = array();
|
|||
$views = array();
|
|||
$sections = array();
|
|||
// parse XML
|
|||
while ($xml->read())
|
|||
{
|
|||
if ($xml->nodeType == XMLReader::ELEMENT)
|
|||
{
|
|||
if ($xml->name == 'object')
|
|||
{
|
|||
$object = array();
|
|||
$object['title'] = $xml->getAttribute('name');
|
|||
$object['nf_title'] = $xml->getAttribute('name');
|
|||
$object['c_en'] = $xml->getAttribute('comment-en');
|
|||
$object['c_cs'] = $xml->getAttribute('comment-cs');
|
|||
$object['isFolder'] = true;
|
|||
$object['type'] = $xml->getAttribute('type');
|
|||
$object['hide'] = $xml->getAttribute('hide');
|
|||
$object['key'] = $xml->getAttribute('type')."/".$xml->getAttribute('name');
|
|||
$object['children'] = array();
|
|||
}
|
|||
else if ($xml->name == 'method')
|
|||
{
|
|||
$method = array();
|
|||
$method['title'] = $xml->getAttribute('name');
|
|||
$method['nf_title'] = $xml->getAttribute('name');
|
|||
$method['c_en'] = $xml->getAttribute('comment-en');
|
|||
$method['c_cs'] = $xml->getAttribute('comment-cs');
|
|||
$method['isFolder'] = true;
|
|||
$method['type'] = 'method';
|
|||
$method['key'] = $object['key']."/".$xml->getAttribute('name');
|
|||
$method['children'] = array();
|
|||
}
|
|||
else if ($xml->name == 'axo')
|
|||
{
|
|||
$axo = array();
|
|||
$own = '_all';
|
|||
if ($xml->getAttribute('own') == 'true')
|
|||
{
|
|||
$own = '_own';
|
|||
}
|
|||
$f_title = $title = $xml->getAttribute('section')." - ".$xml->getAttribute('value')." - ".$xml->getAttribute('action').$own;
|
|||
switch ($xml->getAttribute('usage_type'))
|
|||
{
|
|||
case 'access':
|
|||
$icon = 'access.png';
|
|||
$f_title = "<span class='access'>$title</span>";
|
|||
break;
|
|||
case 'access-partial':
|
|||
$icon = 'access-partial.png';
|
|||
break;
|
|||
case 'links':
|
|||
$icon = 'links.png';
|
|||
break;
|
|||
case 'grid-action':
|
|||
$icon = 'grid-action.png';
|
|||
break;
|
|||
case 'breadcrumbs':
|
|||
$icon = 'breadcrumbs.png';
|
|||
break;
|
|||
default:
|
|||
$icon = null;
|
|||
}
|
|||
$axo['title'] = $f_title;
|
|||
$axo['nf_title'] = $title;
|
|||
$axo['section'] = $xml->getAttribute('section');
|
|||
$axo['value'] = $xml->getAttribute('value');
|
|||
$axo['action'] = $xml->getAttribute('action').$own;
|
|||
$axo['usage'] = $xml->getAttribute('usage_type');
|
|||
$axo['icon'] = $icon;
|
|||
$axo['type'] = 'axo';
|
|||
$axo['links'] = 'axo';
|
|||
$axo['key'] = $method['key']."/".$title;
|
|||
if (!isset($sections[$xml->getAttribute('section')]))
|
|||
{
|
|||
$sections[$xml->getAttribute('section')] = array();
|
|||
}
|
|||
if (!isset($sections[$xml->getAttribute('section')][$xml->getAttribute('value')]))
|
|||
{
|
|||
$sections[$xml->getAttribute('section')][$xml->getAttribute('value')] = array();
|
|||
}
|
|||
if ($object['type'] == 'controller')
|
|||
{
|
|||
$sections[$xml->getAttribute('section')][$xml->getAttribute('value')][$object['title']."/".$method['title']] = $object['type'];
|
|||
}
|
|||
}
|
|||
else if ($xml->name == 'comment')
|
|||
{
|
|||
$axo['c_'.$xml->getAttribute('lang')] = $xml->readString();
|
|||
}
|
|||
}
|
|||
else if ($xml->nodeType == XMLReader::END_ELEMENT)
|
|||
{
|
|||
if ($xml->name == 'object' && $xml->getAttribute('type') == 'controller')
|
|||
{
|
|||
if ($object['hide'] !== 'true')
|
|||
{
|
|||
$controllers[] = $object;
|
|||
}
|
|||
}
|
|||
if ($xml->name == 'object' && $xml->getAttribute('type') == 'helper')
|
|||
{
|
|||
$helpers[] = $object;
|
|||
}
|
|||
if ($xml->name == 'object' && $xml->getAttribute('type') == 'library')
|
|||
{
|
|||
$libraries[] = $object;
|
|||
}
|
|||
if ($xml->name == 'object' && $xml->getAttribute('type') == 'view')
|
|||
{
|
|||
$views[] = $object;
|
|||
}
|
|||
else if ($xml->name == 'method')
|
|||
{
|
|||
// do not show __construct method if has no AXOs
|
|||
if (!(empty($method['children']) &&
|
|||
$method['title'] === '__construct'
|
|||
))
|
|||
{
|
|||
// show message if method has no AXOs
|
|||
if (empty($method['children']))
|
|||
{
|
|||
$method['children'] = array(
|
|||
'title' => 'This page has no access rights',
|
|||
'icon' => false
|
|||
);
|
|||
}
|
|||
// add method to object
|
|||
$object['children'][] = $method;
|
|||
}
|
|||
}
|
|||
else if ($xml->name == 'axo')
|
|||
{
|
|||
// add AXO to method
|
|||
if ($object['type'] !== 'view')
|
|||
{
|
|||
$method['children'][] = $axo;
|
|||
}
|
|||
else
|
|||
{
|
|||
$object['children'][] = $axo;
|
|||
}
|
|||
}
|
|||
}
|
|||
}
|
|||
// rebuild AXO sections
|
|||
$axos = rebuild($sections, 'axo_section');
|
|||
$data = array();
|
|||
$data['sources'] = $controllers;
|
|||
// merge sections
|
|||
/*$data['sources'][] = array(
|
|||
'title' => 'Controllers',
|
|||
'isFolder' => true,
|
|||
'children' => $controllers
|
|||
);
|
|||
$data['sources'][] = array(
|
|||
'title' => 'Helpers',
|
|||
'isFolder' => true,
|
|||
'children' => $helpers
|
|||
);
|
|||
$data['sources'][] = array(
|
|||
'title' => 'Libraries',
|
|||
'isFolder' => true,
|
|||
'children' => $libraries
|
|||
);
|
|||
$data['sources'][] = array(
|
|||
'title' => 'Views',
|
|||
'isFolder' => true,
|
|||
'children' => $views
|
|||
);*/
|
|||
$data['sections'] = $axos;
|
|||
// encode to json format
|
|||
echo json_encode($data);
|