con una función recursiva, algo así
Código PHP:
//RECURSIVO:
function getPrivilegios(connection $c,recordset $priv, $level,$id_usuario,$id_empresa){
$event='';
$class='privilegio';
//verificando existencia de nodos:
$recnode = $c->pg_elemento_menu->doQuery($c, new criteria(sqlEQUAL,$c->pg_elemento_menu->id_padre,$priv->id_elemento_menu))->orderBy($c->pg_elemento_menu->def_order)->orderBy($c->pg_elemento_menu->nombre)->doSelect();
if($recnode){
if($recnode->getNumRows()!=0){
if($level==20 || $level==40){
$display="display:none;";
$sl=($level==20) ? '_p':'_p2';
$class="menuprivilegio_close";
}else{
$class="menuprivilegio";
}
$html.='<div style="'.$display.'" id="container'.$priv->id_elemento_menu.'">';
$event='onclick="switch_priv(this,'.$priv->id_elemento_menu.');"';
//$class="menuprivilegio";
foreach($recnode as $e){//RECURSION:
$html.=getPrivilegios($c,$e,$level+20,$id_usuario,$id_empresa);
}
$html.='</div>';
}
}
//leer los privilegiso del usuario por la empresa:
$recu=$c->pg_menu_usuario->doSelect($c,new criteria(sqlAND,array(
new criteria(sqlEQUAL,$c->pg_menu_usuario->id_usuario,$id_usuario),
new criteria(sqlEQUAL,$c->pg_menu_usuario->id_empresa,"'".$id_empresa."'"),
new criteria(sqlEQUAL,$c->pg_menu_usuario->id_elemento_menu,$priv->id_elemento_menu)
)));
//...
return $html;
}