<?php

class kategorie_recursiv
{
    var 
$tableName "katbaum";

    function 
kategorie_recursiv ($table FALSE)
    {
    if(
FALSE !== $table$this->tableName $table;
    
  }

  
  function 
getChildNodesById($id)
  {
    
$sql " SELECT * FROM ".$this->tableName."
                WHERE `parent`=
$id
                ORDER BY `anordnung`,`name`"
;
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
        if (
FALSE === $res) return FALSE;
        
$nodes = array();
        while (
$row mysql_fetch_assoc($res)) $nodes[] = $row;
        return 
$nodes;
  }

  function 
getAllNodes()
  {
    
$nodes=array();
    
$nodes['byId']=array();
    
$nodes['byParent']=array();
    
$sql " SELECT * FROM ".$this->tableName."
                    ORDER BY `anordnung`,`name`"
;
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
        if (
FALSE === $res) return FALSE;
        while (
$row mysql_fetch_assoc($res))
    {
      
$nodes['byId'][$row['id']] = $row;
      if(!isset(
$nodes['byParent'][$row['parent']]))
          
$nodes['byParent'][$row['parent']]=array();
      
$nodes['byParent'][$row['parent']][] = $row['id'];
    }
        return 
$nodes;
  }
  
  function 
getNodeById($id)
  {
    
$id= (int)$id;
    
$sql " SELECT * FROM ".$this->tableName."
                WHERE `id`= 
$id ";
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
        if (
FALSE === $res) return FALSE;
        if (
== mysql_num_rows($res))    return mysql_fetch_assoc($res);
        return 
FALSE;
  }

  function 
getZielNodes($id)
  {
    
$ich $this->getNodeById($id);
    
$ziele = array();
    
$ziele1 $this->getMyLevelNodesById($id);
    if(
is_array($ziele1)) $ziele array_merge($ziele,$ziele1);
    
$ziele1 $this->getMyLevelNodesById($ich['parent']);
    if(
is_array($ziele1)) $ziele array_merge($ziele,$ziele1);
    
$gueltigeziele = array();
    
$deliquent = -;
    foreach(
$ziele as  $ziel)
    {
      if(
$ich['id']     == $ziel['id']) continue;
      if(
$ich['parent'] == $ziel['id']) continue;
        
$gueltigeziele[]=$ziel;
    }
        return 
$gueltigeziele;
  }
  function 
JumpToNode($id,$ziel)
  {
    
$sql " UPDATE `".$this->tableName."`
              SET `parent`= 
$ziel
              WHERE `id`=
$id ";
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
  }
  
  function 
moveUp($id)
  {
     
$ich $this->getNodeById($id);
    if(
FALSE === $ich) return;
    
$wir $this->getChildNodesById($ich['parent']);
    if(
count($wir)<1) return;
    if(
$wir[0]['id'] == $id)return;
    foreach(
$wir as $key => $bruder)
      if(
$bruder['id']==$ich['id']) break;
    
$changeid $id;
    
$anordnung $wir[$key-1]['anordnung'];
    
$sql " UPDATE `".$this->tableName."`
              SET `anordnung`= 
$anordnung
              WHERE `id`=
$changeid ";
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());

    
$changeid $wir[$key-1]['id'];
    
$anordnung $ich['anordnung'];
    
$sql " UPDATE `".$this->tableName."`
              SET `anordnung`= 
$anordnung
              WHERE `id`=
$changeid ";
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
  }
  function 
movedown($id)
  {
     
$ich $this->getNodeById($id);
    if(
FALSE === $ich) return;
    
$wir $this->getChildNodesById($ich['parent']);
    if(
count($wir)<1) return;
    if(
$wir[count($wir)-1]['id'] == $id)return;
    foreach(
$wir as $key => $bruder)
      if(
$bruder['id']==$ich['id']) break;
      
    
$changeid $id;
    
$anordnung $wir[$key+1]['anordnung'];
    
$sql " UPDATE `".$this->tableName."`
              SET `anordnung`= 
$anordnung
              WHERE `id`=
$changeid ";
        
$res mysql_query($sql)or mysql_error();

    
$changeid $wir[$key+1]['id'];
    
$anordnung $ich['anordnung'];
    
$sql " UPDATE `".$this->tableName."`
              SET `anordnung`= 
$anordnung
              WHERE `id`=
$changeid ";
        
$res mysql_query($sql)or mysql_error();
  }

  function 
getMyLevelNodesById($id)
  {
    
$selbst $this->getNodeById($id);
    if(
FALSE === $selbst) return FALSE;
    return 
$this->getChildNodesById($selbst['parent']);
  }

  function 
addNode($name,$parent=0)
  {
    
$vater $this->getNodeById($parent);
    if(
FALSE === $vater$vater 0;
    
$sql " INSERT INTO  ".$this->tableName."
                SET `name`='
$name' ,
                 `parent`=
$parent ,
                 `anordnung`="
.mt_rand() ;
        
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
        if (
FALSE === $res) return FALSE;
  }
  
  function 
delNode($id)
  {
    
$childs $this->getChildNodesById($id);
    if(empty(
$childs))
    {
      
$sql " DELETE FROM  ".$this->tableName."
                WHERE `id`=
$id ";
          
$res mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
    }
  }

    function 
createtable()
    {
    
$sql "
          CREATE TABLE `"
.$this->tableName."` (
            `id` int(11) NOT NULL auto_increment,
            `name` varchar(255) NOT NULL,
            `parent` int(11) default '0',
            `anordnung` int(11) default '0',
            PRIMARY KEY  (`id`),
            UNIQUE KEY `name` (`name`),
            KEY `parent` (`parent`)
          ) TYPE=MyISAM AUTO_INCREMENT=1
          "
;
      
mysql_query($sql);// or die(__FUNCTION__.': '.mysql_error());
  
}
  
    function 
cleartable()
    {
    
$sql "TRUNCATE TABLE    `".$this->tableName."`";
      
mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
  }
    function 
droptable()
    {
    
$sql "DROP TABLE    `".$this->tableName."`";
      
mysql_query($sql)or die(__FUNCTION__.': '.mysql_error());
  }

}
?>