<?php
class FileTree {
var $tree = array();
// Array enthält für jeden Schlüssel (fid) als Wert die Strukturtiefe...
var $flatStructure = array();
// Array, dass für jede fid die Mutter anzeigt.
var $parentStructure = array();
var $limitStructure = 0;
var $openThisNode = array();
var $nodeName, $nodeID, $nodeSpace = array();
function FileTree() {
// Konstruktur initialisiert die Rubrikenspeicherung
$select = mysql_query("SELECT name, branchID, parentID, SUBSTRING(status,5) as status, SUBSTRING(status,2,3) as sort, module, parameter FROM ".TABLE."_mm_folder ORDER BY sort, name ASC");
while($fquery = mysql_fetch_array($select)) {
$status = $fquery['status'];
$branchID = $fquery['branchID'];
$this->flatStructure[$branchID] = $status;
$this->parentStructure[$branchID] = $fquery['parentID'];
// Speicherung der Struktur und aller Werte der aktuellen Rubrik in einem Array
foreach($fquery as $k => $value) {
$this->tree[$status][$branchID][$k] = $value;
}
if($status > 1) {
// wenn Status > 1, dann ist es eine Unterrubrik
// Errechnen des letzten Levels
$lasti = ($status - 1);
if(empty($this->tree[$lasti][$fquery['parentID']]['children'])) {
// wenn das Feld children von der Mutter leer ist,
// dann ist dieses das erste Kind
$cnr = 1;
// Anzahl der Kinder wird gespeichert
$this->tree[$lasti][$fquery['parentID']]['children'] = 1;
} else {
// wenn nicht, dann ist dieses das Kind Nummer LetztesKind + 1
$cnr = $this->tree[$lasti][$fquery['parentID']]['children'] + 1;
// Anzahl der Kinder wird gespeichert
$this->tree[$lasti][$fquery['parentID']]['children'] = $cnr;
}
// Hier werden der Mutter die Kinder angehangen
$this->tree[$lasti][$fquery['parentID']]['child'.$cnr] = $branchID;
}
}
}
function printTree($branchID, $name, $level) {
$this->nodeName[] = $name;
$this->nodeID[] = $branchID;
$this->nodeSpace[] = $level * 10;
}
function getOpennodes($opennode) {
$this->limitStructure = 1;
$this->openThisnode[$opennode] = "1";
$thisLevel = $this->flatStructure[$opennode];
$thisMother = $this->parentStructure[$opennode];
if(($thisLevel - 1) > 0) {
$this->getOpennodes($thisMother);
}
}
function getTree() {
// Die erste Ebene der Rubriken Struktur wird abgerufen und durchlaufen
if(is_array($this->tree['1'])) {
while(list($key, $value) = each($this->tree['1'])) {
// Übergabe dieses Elements an printTree()
$this->printTree($key, $this->tree['1'][$key]['name'], 1);
// Herausfinden, ob Kinder existieren
$children = $this->tree['1'][$key]['children'];
if(!empty($children)) {
// wenn Kinder existieren, dann diese ausgeben
if(!empty($this->openThisnode[$key]) OR $this->limitStructure == 0) {
$this->getChildren($children, '2', $key);
}
}
}
}
}
function getChildren($cnr, $level, $mother) {
$lastLevel = $level - 1;
$nextLevel = $level + 1;
// Schleifendurchläufe = Kinderzahl
for($z = 1; $z <= $cnr; ++$z) {
// Schlüssel (fid) des jeweiligen Kindes
$key = $this->tree[$lastLevel][$mother]['child'.$z];
$this->printTree($key, $this->tree[$level][$key]['name'], $level);
// Rekursive Abfrage der Kinder
$children = $this->tree[$level][$key]['children'];
if(!empty($children)) {
if(!empty($this->openThisnode[$key]) OR $this->limitStructure == 0) {
$this->getChildren($children, $nextLevel, $key);
}
}
}
}
}
?>