160 lines
5.0 KiB
PHP
160 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* PHP_UML
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* @category PHP
|
|
* @package PHP_UML
|
|
* @author Baptiste Autin <ohlesbeauxjours@yahoo.fr>
|
|
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
|
|
* @version SVN: $Revision: 176 $
|
|
* @link http://pear.php.net/package/PHP_UML
|
|
* @since $Date: 2011-09-19 00:03:11 +0200 (lun., 19 sept. 2011) $
|
|
*/
|
|
|
|
/**
|
|
* Implementation of the HTML renderer for the Index page
|
|
*
|
|
* @category PHP
|
|
* @package PHP_UML
|
|
* @subpackage Output
|
|
* @subpackage HtmlNew
|
|
* @author Baptiste Autin <ohlesbeauxjours@yahoo.fr>
|
|
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
|
|
*/
|
|
class PHP_UML_Output_HtmlNew_DocIndex extends PHP_UML_Output_HtmlNew_DocMenu
|
|
{
|
|
/**
|
|
* Temporary structure to store all the elements (in order to sort them)
|
|
* @var array First index: the element, Second index: filepath to detail page, Third index: true only for operations/attributes of a Package (procedural code)
|
|
*/
|
|
private $elements = array();
|
|
|
|
/**
|
|
* Generates and saves the HTML code for the Index page
|
|
*
|
|
* @param PHP_UML_Metamodel_Package $p Package to render
|
|
*/
|
|
public function render($p)
|
|
{
|
|
$tpl = $this->getTemplate(self::INDEXALL_FILENAME.'.'.self::FILE_EXT);
|
|
|
|
$nav = $this->getNavigationBlock();
|
|
|
|
$str = '<ul id="MainList" class="indexAll">';
|
|
$str .= $this->getContent($p);
|
|
$str .= '</ul>';
|
|
|
|
$tmp = str_replace('#NAVIG', $nav, $tpl);
|
|
$str = str_replace('#INDEX', $str, $tmp);
|
|
|
|
$this->save(self::INDEXALL_FILENAME, $str);
|
|
}
|
|
|
|
/**
|
|
* Return the HTML code for an Index page
|
|
*
|
|
* @param PHP_UML_Metamodel_Package $p Starting package
|
|
*
|
|
* @return string HTML code
|
|
*/
|
|
private function getContent(PHP_UML_Metamodel_Package $p)
|
|
{
|
|
$this->readPackage($p);
|
|
$str = '';
|
|
usort($this->elements, array('self', 'compareElt'));
|
|
foreach ($this->elements as $x) {
|
|
list($elt, $path, $pkgElt) = $x;
|
|
switch(get_class($elt)) {
|
|
case self::META_CLASS:
|
|
case self::META_INTERFACE:
|
|
$str .= $this->getClassifierItem($elt, $path, 0);
|
|
break;
|
|
case self::META_OPERATION:
|
|
if ($pkgElt)
|
|
$str .= $this->getPackageOperationItem($elt, $path);
|
|
else
|
|
$str .= $this->getOperationItem($elt, $path);
|
|
break;
|
|
case self::META_PROPERTY:
|
|
if ($pkgElt)
|
|
$str .= $this->getPackagePropertyItem($elt, $path);
|
|
else
|
|
$str .= $this->getPropertyItem($elt, $path);
|
|
break;
|
|
}
|
|
}
|
|
return $str;
|
|
}
|
|
|
|
static private function compareElt($a, $b)
|
|
{
|
|
return strcasecmp($a[0]->name, $b[0]->name);
|
|
}
|
|
|
|
/**
|
|
* Set the elements[] property with the API data of a package
|
|
*
|
|
* @param PHP_UML_Metamodel_Package $p Package
|
|
* @param string $path Relative path to the current package
|
|
* @param string $level Recursion level
|
|
*
|
|
* @return void
|
|
*/
|
|
private function readPackage(PHP_UML_Metamodel_Package $p, $path='', $level=0)
|
|
{
|
|
foreach ($p->nestedPackage as $np) {
|
|
$npDir = $path.$np->name;
|
|
$this->readPackage($np, $npDir.'/', $level+1);
|
|
}
|
|
foreach ($p->ownedType as $c) {
|
|
$this->elements[] = array($c, $path, false);
|
|
foreach ($c->ownedOperation as $o) {
|
|
$this->elements[] = array($o, $path, false);
|
|
}
|
|
if (isset($c->ownedAttribute)) {
|
|
foreach ($c->ownedAttribute as $a) {
|
|
$this->elements[] = array($a, $path, false);
|
|
}
|
|
}
|
|
}
|
|
foreach ($p->ownedOperation as $o) {
|
|
$this->elements[] = array($o, $path, true);
|
|
}
|
|
foreach ($p->ownedAttribute as $a) {
|
|
$this->elements[] = array($a, $path, true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return the HTML code for the navigation bar
|
|
*
|
|
* @return string
|
|
*/
|
|
private function getNavigationBlock()
|
|
{
|
|
$str = '<ul class="navig">';
|
|
$str .= $this->getCommonLinks();
|
|
$str .= '</ul>';
|
|
return $str;
|
|
}
|
|
|
|
protected function getPropertyItem(PHP_UML_Metamodel_Property $p, $path)
|
|
{
|
|
return '<li>'.
|
|
'<a href="'.$path.self::getObjPrefix($p->class).$p->class->name.'.'.self::FILE_EXT.'#'.$p->name.
|
|
'" class="'.$this->getPropertyStyle($p->visibility).'" target="main">'.$p->name.'</a>'.
|
|
'</li>';
|
|
}
|
|
|
|
protected function getOperationItem(PHP_UML_Metamodel_Operation $o, $path)
|
|
{
|
|
return '<li>'.
|
|
'<a href="'.$path.self::getObjPrefix($o->class).$o->class->name.'.'.self::FILE_EXT.'#f'.$o->id.
|
|
'" class="'.$this->getFunctionStyle($o->visibility).'" target="main">'.$o->name.$this->getParameterList($o).'</a>'.
|
|
'</li>';
|
|
}
|
|
}
|
|
?>
|