Projekt

Obecné

Profil

Stáhnout (5.78 KB) Statistiky
| Větev: | Tag: | Revize:
<?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);
(5-5/6)