/**
  * Returns an array filled with all permission categories known to the server including
  * their ID, name and parent.
  *
  * @return array
  */
 public function permissionTree()
 {
     $permtree = array();
     foreach ($this->permissionCats() as $key => $val) {
         $permtree[$val]["permcatid"] = $val;
         $permtree[$val]["permcathex"] = "0x" . dechex($val);
         $permtree[$val]["permcatname"] = String::factory(Convert::permissionCategory($val));
         $permtree[$val]["permcatparent"] = $permtree[$val]["permcathex"][3] == 0 ? 0 : hexdec($permtree[$val]["permcathex"][2] . 0);
         $permtree[$val]["permcatchilren"] = 0;
         $permtree[$val]["permcatcount"] = 0;
         if (isset($permtree[$permtree[$val]["permcatparent"]])) {
             $permtree[$permtree[$val]["permcatparent"]]["permcatchilren"]++;
         }
         if ($permtree[$val]["permcatname"]->contains("/")) {
             $permtree[$val]["permcatname"] = $permtree[$val]["permcatname"]->section("/", 1)->trim();
         }
         foreach ($this->permissionList() as $permission) {
             if ($permission["permid"]["permcatid"] == $val) {
                 $permtree[$val]["permcatcount"]++;
             }
         }
     }
     return $permtree;
 }