function Resolver($pos) { if ($pos == 22) { $this->flag = $this->flag + 1; $this->Resolver(1); } if ($this->flag == 10) { $this->Mostrar(); } $minodo = new nodo(); $posHijoIzq = log($pos, 2) + $pos + 1.05; $posHijoIzq = round($posHijoIzq, 0, PHP_ROUND_HALF_UP); $posHijoDer = log($pos, 2) + $pos + 2.05; $posHijoDer = round($posHijoDer, 0, PHP_ROUND_HALF_UP); if ($minodo->vacio($pos, $GLOBALS[$pos]) == 1) { $minodo->ResolverPadre($pos, $posHijoIzq, $posHijoDer); $this->Resolver($pos + 1); } else { if ($pos == 1) { $minodo->ResolverHijo($pos, $GLOBALS[$pos]); $this->Resolver($pos + 1); } if ($pos < 17) { $minodo->ResolverHijo($pos, $GLOBALS[$pos]); $this->Resolver($pos + 1); } else { $this->Resolver($pos + 1); } } }
public static function makeNodo($dbh, $id, $obj_user, $obj_url) { $a = new nodo($dbh, $id); echo $a->idcategoria . "<br>"; if (!$obj_user->idusuario) { // INICIO condicional sesion SIN Usuario. // Este es el caso mas frecuente y debe estar optimizado if ($a->activa && !$a->eliminado && is_null($a->grupos)) { // Nodo SIN problemas, entonces lo devolvemos echo "Nodo sin problemas, caso mas frecuente en modo normal<br>"; $a->setModo("ver"); } else { // Nodo CON problemas de activa, eliminado o grupos entonces verificamos el papa $id = $a->idpadre; // Si llega a home, mostramos home if (0 == $id) { echo "Vista forzada de home en modo normal<br>"; $a->setModo("ver"); } else { // La destruimos para que no quede en memoria e intentamos con el padre unset($a); return self::makeNodo($dbh, $id, $obj_user, $obj_url); } } // FIN condicional sesiones SIN Usuario } else { // INICIO condicional sesion CON Usuario // INICIO condicional Administradores del portal if (9 == $obj_user->idzona) { // INICIO condicional Administradores del portal en modo EDICION if ($obj_url->getEd()) { echo "Administrador en modo edicion<br>"; $a->setModo("editar"); // FIN // INICIO condicional Administradores del portal en modo VER } else { echo "Administrador en modo normal<br>"; $a->setModo("ver"); } // FIN // FIN condicional Administradores del portal // INICIO condicional usuarios en sesion pero NO Administradores } else { // INICIO condicional editor de esta categoría if (!is_null($obj_user->categorias) && array_intersect($a->control, $obj_user->categorias) && $obj_user->idzona > 1) { // INICIO condicional Editor de esta categoria en modo EDICION if (!$a->eliminado) { if ($obj_url->getEd()) { echo "Editor en modo edicion<br>"; $a->setModo("editar"); // FIN // INICIO condicional Editor de esta categoria en modo VER } else { echo "Editor en modo normal<br>"; $a->setModo("ver"); } } else { // Nodo eliminado entonces intentaremos con el padre // Los editores NO pueden ver nodos eliminados $id = $a->idpadre; // Si llega a home, mostramos home forzado if (0 == $id) { echo "Vista forzada de home en modo normal<br>"; $a->setModo("ver"); // Si no hemos llegado a home intentamos con el padre } else { unset($a); return self::makeNodo($dbh, $id, $obj_user, $obj_url); } } // FIN // INICIO condicional usuarios en sesion pero NO Administradores y NO Editor de esta categoria } else { // INICIO condicional usuarios en sesion que pertenece a grupo autorizado if (is_array($obj_user->grupos) && is_array($a->grupos) && array_intersect($a->grupos, $obj_user->grupos)) { // Como solo puede ver debemos verificar que activa y no eliminada if ($a->activa && !$a->eliminado) { echo "Pertenece al grupo y la pagina no esta borrada ni inactiva, la puede ver en modo normal<br>"; $a->setModo("ver"); } else { // Nodo CON problemas de activa, eliminado o grupos entonces verificamos el papa $id = $a->idpadre; // Si llega a home, mostramos home if (0 == $id) { echo "Vista forzada de home en modo normal<br>"; $a->setModo("ver"); // Si no hemos llegado a home intentamos con el padre } else { unset($a); return self::makeNodo($dbh, $id, $obj_user, $obj_url); } } // INICIO condicional usuarios en sesion que NO pertenece a grupo autorizado // Es como si no estuviera en sesion } else { if ($a->activa && !$a->eliminado && is_null($a->grupos)) { // Nodo SIN problemas, entonces lo devolvemos echo "Modo normal, pero llego aqui despues de validar su sesion<br>"; $a->setModo("ver"); } else { // Nodo CON problemas de activa, eliminado o grupos entonces verificamos el papa $id = $a->idpadre; // Si llega a home, mostramos home if (0 == $id) { echo "Vista forzada de home en modo normal<br>"; $a->setModo("ver"); } else { // La destruimos para que no quede en memoria e intentamos con el padre unset($a); return self::makeNodo($dbh, $id, $obj_user, $obj_url); } } } } } } return $a; }