<?php
include "../../../../conf/system.php";
include 
"../../../../conf/sesiones.php";
include 
$controllers."core_componente.php";
include 
$controllers."core_componentesvisitados.php";

include 
$controllers."core_perfil.php";
include 
$models."common/componente.php";

$err=new core_error();
$com=new core_componente();
$accion=$_POST['accion'];
if(!
$accion)$accion=$_GET['accion'];
switch (
$accion){
    case 
'listac':
        
$sql= new core_sql(); 
        
$id=$_REQUEST['perfil_id'];
        if(
trim($id."") !=''){
            if(
$id && $_REQUEST[node]=='0'){
                
$sql->Load('id=18');//lista de todos los componentes del sistema marcando los del perfil
                
$rs=$con->Execute($sql->sql,array($id));
            }
        }
        if(
$rs && $rs!==FALSE){
            unset(
$arrid,$men);
            
$pads=array();
            while(
$fil=$rs->FetchRow()){
                
$id=$fil['id'];
                
$id_pad=$fil['pad_com'];
                
                if((
$fil['enl_com']=='..' || $fil['enl_com']=='') && $fil['xajax']==''){
                
//sies de tipo menu
                    
$item=array(
                            
'id'   => $fil[id],
                            
'com' => $fil[tit_com],
                            
'tooltip' => $fil[des_com],
                            
'uiProvider'=>'com',
                            
'expand'=>true
                        
);
                        
                }else{
                
//si es una ventana
                    
if($fil['agregar']=='s'$add=true; else $add=false;
                    if(
$fil['modificar']=='s'$mod=true; else $mod=false;
                    if(
$fil['eliminar']=='s'$del=true; else $del=false;
                    
$item=array(
                        
'id'   => $fil[id],
                        
'com' => $fil[tit_com],
                        
'tooltip' => $fil[des_com],
                        
'uiProvider'=>'com',
                        
'leaf'=>true,
                        
'ver'=> array(id=>'v_'.$fil[id], checked=>($fil[chk]?true:false)),
                        
'add'=>    array(id=>'a_'.$fil[id], checked=>$add),
                        
'mod'=>    array(id=>'m_'.$fil[id], checked=>$mod),
                        
'del'=>    array(id=>'d_'.$fil[id], checked=>$del)        
                    );
                    
                }    
            
                if(
$fil['pad_com']==0){
                    
$c=count($men);    
                    
$men[$c]=$item;
                    
$pads[$id]=&$men[$c];                    
                }else{
                    
$c=count($pads[$id_pad]['children']);
                    
$pads[$id_pad]['children'][$c]=$item;
                    
$pads[$id]=&$pads[$id_pad]['children'][$c];
                }
            }
            
$suc=true;        
            echo 
json_encode($men);
        }else{
            
$msg=$sql->sql.' '.$con->ErrorMsg();
             echo 
json_encode(array("success"=>$suc,"message"=>$msg));
        }
        break;
    case 
'listap':
            
$per= new core_perfil(); 
            
$lista=$per->Find(" id>0 order by nom_per");
            if(
$lista){
                
$items=array();
                foreach(
$lista as $p)
                
$items[]=array(
                            
'id'   => $p->id,
                            
'text' => $p->nom_per,
                            
'qTip' => $p->des_per,
                            
'leaf'=>true
                        
);
                echo 
json_encode($items);    
            }
            
        break;
    case 
'listau':
            
$per= new core_perfil(); 
            
$lista=$per->Find(" id>0 order by nom_per");
            if(
$lista){
                
$items=array();
                foreach(
$lista as $p)
                
$items[]=array(
                            
'id'   => $p->id,
                            
'nom_per' => $p->nom_per
                        
);
            }
            echo 
json_encode(array(success=>truedata=>$items));
            
        break;    
    
    case 
'cargar'
        
$per= new core_perfil(); 
        
$att=$per->getAttributeNames();
        if(
$per->load('id='.$_POST['id'])){
            
$res=array();
            foreach (
$att as $a$res[$a]=$per->{$a};
            
$res['accion']='mod';
            echo 
json_encode(array('success'=>'true','data'=>$res));        
        }
        break;
        
    case 
'add'
    
        
$per= new core_perfil(); 
        
$att=$per->getAttributeNames();
        foreach (
$att as $a) if($a!='id')$per->{$a}=$_POST[$a];
        
$per->usuario_mod=$_SESSION[usuario_id];
        
$per->fecha_mod=date('y-m-d H:i:s');
        
$per->ip_mod =$_SERVER['REMOTE_ADDR'];
        
$con->LogSQL(); // turn on logging
        
if($per->save()){
            
$rta=true;
            
$comps=json_decode(stripslashes($_POST['aux']),true);
            if(
$comps){
                
                
$listas=getListas($comps);
                if(
$listas[0]!=''){
                    
$sql1="INSERT INTO core_perfilcomponente(core_componente_id,core_perfil_id) 
                    SELECT id, "
.$per->id." as core_perfil_id FROM core_componente where id in (".$listas[0].")";
                    
$rs=$con->Execute($sql1);
                    if(
$rs && $listas[1]!=''){
                        
$sql2="UPDATE core_perfilcomponente set agregar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[1].")";
                        
$rs=$con->Execute($sql2);
                    }
                    if(
$rs && $listas[2]!=''){
                        
$sql3="UPDATE core_perfilcomponente set modificar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[2].")";
                        
$rs=$con->Execute($sql3);
                    }
                    if(
$rs && $listas[3]!=''){
                        
$sql4="UPDATE core_perfilcomponente set eliminar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[3].")";
                        
$rs=$con->Execute($sql4);
                    }
                    if(!
$rs){ $rta=false$msg.=$con->ErrorMsg(); }
                }    
                    
//falta ingresar los componentes
            
}
            
            if(
$rta){
                
$msg=componente::LogByController($per,'add',$_POST[id_com],array($sql1,$sql2,$sql3,$sql4));
                
$suc=true;        
            }else{
                
$msg='Error al registrar datos ';
//                if($_SESSION[debug]=='s')
                    
$msg.=$per->ErrorMsg();
                
$suc=false;    
            }
        }else{
            
$msg='Error al registrar datos ';
            if(
$_SESSION[debug]=='s')
                
$msg.=$per->ErrorMsg();
            
$suc=false;    
        }
        echo 
json_encode(array('success'=>$suc,'message'=>$msg));
        
$con->LogSQL(false); // turn on logging
        
break;
    case 
'mod':    
        
$perm= new core_perfil(); 
        
$perm->Load('id='.$_POST[id]);
        
$per= new core_perfil(); 
        
$per->_saved=true;
        
$msg='';
        
$att=$per->getAttributeNames();
        foreach (
$att as $a$per->{$a}=$_POST[$a];
        
        
$per->usuario_mod=$_SESSION[usuario_id];
        
$per->fecha_mod=date('y-m-d H:i:s');
        
$per->ip_mod =$_SERVER['REMOTE_ADDR'];
        
        if(
$per->save()){
            
$rta=true;
            
$comps=json_decode(stripslashes($_POST['aux']),true);
            if(
$comps){
                
$sql0="DELETE FROM core_perfilcomponente WHERE core_perfil_id= ".$per->id."";
                
$rs=$con->Execute($sql0);
                
$listas=getListas($comps);
                if(
$rs && $listas[0]!=''){
                    
                    
$sql1="INSERT INTO core_perfilcomponente(core_componente_id,core_perfil_id) 
                    SELECT id, "
.$per->id." as core_perfil_id FROM core_componente where id in (".$listas[0].")";
                    
$rs=$con->Execute($sql1);
                    
                    if(
$rs && $listas[1]!=''){
                        
$sql2="UPDATE core_perfilcomponente set agregar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[1].")";
                        
$rs=$con->Execute($sql2);
                    }
                    if(
$rs && $listas[2]!=''){
                        
$sql3="UPDATE core_perfilcomponente set modificar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[2].")";
                        
$rs=$con->Execute($sql3);
                    }
                    if(
$rs && $listas[3]!=''){
                        
$sql4="UPDATE core_perfilcomponente set eliminar='s' WHERE core_perfil_id= ".$per->id." AND core_componente_id in (".$listas[3].")";
                        
$rs=$con->Execute($sql4);
                    }
                    if(!
$rs){ $rta=false$msg.=$con->ErrorMsg(); }
                }    
                    
            }
            
            if(
$rta){
                
$msg=componente::LogByController($per,'mod',$_POST[id_com],array($sql0,$sql1,$sql2,$sql3,$sql4));
                
$suc=true;        
            }else{
                
$msg='Error al registrar datos ';
            if(
$_SESSION[debug]=='s')
                    
$msg.=$per->ErrorMsg();
                
$suc=false;    
            }
            
componente::LogByController($perm,'mod',$_POST[id_com]);
            echo 
json_encode(array('success'=>true));        
        }else{
            if(
$_SESSION[debug]=='s')
            
$msg=$per->ErrorMsg();
            echo 
json_encode(array('success'=>false,'message'=>$msg));
        }
        break;
    case 
'del'
        
$per= new core_perfil(); 
        
$per->Load('id='.$_POST[id]);
        
$msg='';
        if(
$per->Delete()){
            
//falta ingresar los componentes
            
componente::LogByController($per,'del',$_POST[id_com]);
            echo 
json_encode(array('success'=>true));        
        }else{
            if(
$_SESSION[debug]=='s')$msg=$per->ErrorMsg();
            echo 
json_encode(array('success'=>true,'message'=>$msg));
        }
        break;
    
     }
function 
getListas($nod){
    
$l1=NULL;$l2=NULL;$l3=NULL;$l4=NULL;
    if(
$nod['children']){
        foreach(
$nod['children'] as $n){
            
$r=getListas($n);
            
            
$s1=strlen($l1)>&& $r[0]?',':'';
            
$s2=strlen($l2)>&& $r[1]?',':'';
            
$s3=strlen($l3)>&& $r[2]?',':'';
            
$s4=strlen($l4)>&& $r[3]?',':'';
            
$l1.=$s1.$r[0];
            
$l2.=$s2.$r[1];
            
$l3.=$s3.$r[2];
            
$l4.=$s4.$r[3];
            
            
        }
    }else{            
        if(
$nod['add']=='add' || $nod['add']==true$l2=$nod['id'];
        if(
$nod['mod']=='mod' || $nod['mod']==true$l3=$nod['id'];
        if(
$nod['del']=='del' || $nod['del']==true$l4=$nod['id'];    
    }
    
$s1=$l1?',':'';
    if(
$nod['ver']=='true' || $nod['ver']==true$l1.=$s1.$nod['id'];
    
    return array(
$l1,$l2,$l3,$l4);
    
}

?>