!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/apex_led/php/contrib/lib/RDILib/servicios/   drwxrwxr-x
Free 11.78 GB of 61.93 GB (19.02%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     RDIServicioRecurso.php (10.59 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

class RDIServicioRecurso 
{
    protected 
$conector;
    protected 
$sistema;
    protected 
$instalacion;
    protected 
$log;
    
    function 
__construct($conector$sistema$instalacion
    {
        
$this->conector $conector;
        
$this->sistema $sistema;
        
$this->instalacion $instalacion;
    }
    
    function 
asociarLog($log)
    {
        
$this->log $log;
    }
    
    protected function 
log($titulo$texto)
    {
        if(isset(
$this->log)) {
            
$this->log->add_debug($titulo$texto);
        }
    }

    
//-------------------------------------------------
    
    
function getTipo()
    {
        return 
RDITipos::RECURSO;
    }
    
    protected function 
definirUbicacion($parametros
    {        
        
$this->log('RECURSO',"Definir ubicacion ('/')");
        
$idCarpeta $this->conector->getIdCarpeta('/');
        return 
$idCarpeta;
    }    
    
    function 
getNombre($parametros)
    {
        return 
'recurso-' $parametros['aplicacionOrigen'] . $parametros['instalacionOrigen'];
    }
    
    
//-------------------------------------------------
    // PARAMETROS / ATRIBUTOS
    //-------------------------------------------------        

    
function getParametrosObligatorios()
    {
        return array();
    }    
    
    function 
getParametrosObligatoriosImplicitos()
    {
        
$parametros['rdi:aplicacionOrigen'] = 'aplicacion';
        
$parametros['rdi:instalacionOrigen'] = 'instalacion';
        return 
$parametros;
    }        
    
    function 
getParametrosOpcionales()
    {
        
$parametros['rdi:publicado'] = 'publicado';
        return 
$parametros;
    }    
    
    function 
getAtributosInternos()
    {
        
$parametros array_flip($this->conector->atributos());
        return 
$parametros;
    }    
    
    protected function 
controlarParametrosObligatorios($parametros)
    {
        
$definidos array_merge($this->getParametrosObligatorios(), $this->getParametrosObligatoriosImplicitos());
        
$no_incluidos = array();
        
$ok true;
        foreach(
$definidos as $def) {
            if (!isset(
$parametros[$def])) {
                
$no_incluidos[] = $def;
                
$ok false;
            }
        }
        if (!
$ok) {
            throw new 
RDIExcepcion("ERROR [".$this->getTipo()."] Parametros obligatorios no definidos: " implode(','$no_incluidos));
        } 
    }
    
    protected function 
procesarAtributos($parametros)
    {
        
// Obligatorios
        
$listaAtributos = array();
        
$obligatorios array_merge($this->getParametrosObligatorios(), $this->getParametrosObligatoriosImplicitos());
        foreach(
$obligatorios as $atributoTipo => $parametro) {
            if (isset(
$parametros[$parametro])) {
                
$listaAtributos[$atributoTipo] = $parametros[$parametro];
            }
        }
        
// Opcionales
        
$opcionales $this->getParametrosOpcionales();
        foreach(
$opcionales as $atributoTipo => $parametro) {
            if (isset(
$parametros[$parametro])) {
                
$listaAtributos[$atributoTipo] = $parametros[$parametro];
            }
        }
        
// Controlar parametros INVALIDOS
        
$posibles array_merge($opcionales$obligatorios);
        
$actuales array_keys($parametros);
        
        
$invalidos array_diff($actuales$posibles);
        if (! empty(
$invalidos)) {
            throw new 
RDIExcepcion("ERROR [".$this->getTipo()."] Parametros invalidos: " implode(','$invalidos));
        }
        return 
$listaAtributos;
    }
    
    
//-------------------------------------------------
    // API RECURSO
    //-------------------------------------------------    

    
function crear($parametros$contenido$mimeType="")
    {
        
$parametros['aplicacion'] = $this->sistema;
        
$parametros['instalacion'] = $this->instalacion;
        
// Los documentos nuevos esta PUBLICADOS por defecto
        
if(!isset($parametros['publicado'])){ $parametros['publicado'] = 1;}
        
        
$this->controlarParametrosObligatorios($parametros);        
        
$atributos $this->procesarAtributos($parametros);
        
$tipo $this->getTipo();        
        
        
$this->log('RECURSO',"Crear '$tipo'\n" var_export($atributos,true));        
        
$idCarpeta $this->definirUbicacion($parametros);
        
$nombre $this->getNombre($parametros);
        
$idRecurso $this->conector->crearDocumento($idCarpeta$nombre$tipo$atributos$contenido$mimeType);
        
        return 
$idRecurso;
    }    
    
    function 
recuperarAtributos($idRecurso)
    {
        
$this->log('RECURSO',"Recuperar contenido $idRecurso");        
        
$objeto $this->conector->recuperarAtributos($idRecurso);
        
$atributos = array();
        foreach(
$this->getListaColumnasPosibles() as $atrib => $param) {
            
$atributos[$param] = $objeto->properties[$atrib];
        }
        return 
$atributos;
    }
    
    function 
recuperarContenido($idRecurso)
    {
        
$this->log('RECURSO',"Recuperar contenido $idRecurso");        
        return 
$this->conector->recuperarContenido($idRecurso);
    }
    
    
/**
     * Atencion, el parametro versionar en false es SOLO para los casos
     * en que se esta utilizando este metodo dentro de una "transaccion"
     * manejada desde afuera. Si la modificacion no se completa con el 
     * checkIN el objeto queda en el limbo de la no-version.
     */
    
function modificarAtributos($idRecurso$parametros$versionar=true)
    {
        
$this->log('RECURSO',"modificar parametros: $idRecurso\n" var_export($parametros,true));
        
$atributos $this->procesarAtributos($parametros);
        try {
            if(
$versionar){
                
$checkedOut false;
                
$this->conector->checkOut($idRecurso);
                
$checkedOut true;
            }        
            
$this->conector->modificarAtributos($idRecurso$atributos);
            if(
$versionar){
                
$this->conector->checkIn($idRecurso);
            }            
        } catch (
RDIExcepcion $ex) {
            if(
$versionar && $checkedOut){
                
$this->conector->cancelCheckOut($idRecurso);
            }
            throw 
$ex;
        }
    }
    
    
/**
     * Atencion, el parametro versionar en false es SOLO para los casos
     * en que se esta utilizando este metodo dentro de una "transaccion"
     * manejada desde afuera. Si la modificacion no se completa con el 
     * checkIN el objeto queda en el limbo de la no-version.
     */
    
function modificarContenido($idRecurso$contenido$versionar=true$mimeType="")
    {
        
$this->log('RECURSO',"modificar CONTENIDO: $idRecurso");
        try {
            if(
$versionar){
                
$checkedOut false;
                
$this->conector->checkOut($idRecurso);
                
$checkedOut true;
            }        
            
$this->conector->modificarContenido($idRecurso$contenido$mimeType);
            if(
$versionar){
                
$this->conector->checkIn($idRecurso);
            }            
        } catch (
RDIExcepcion $ex) {
            if(
$versionar && $checkedOut){
                
$this->conector->cancelCheckOut($idRecurso);
            }
            throw 
$ex;
        }        
    }
    
    function 
publicar($idRecurso$publico=1$versionar=true)
    {
        
$desc $publico "PUBLICAR" "DESPUBLICAR";
        
$this->log('RECURSO',"Publicar recurso: $idRecurso ($desc)");
        
$this->modificarAtributos($idRecurso, array('publicado'=> $publico), $versionar);        
    }    
    
    function 
checkOut($idRecurso)
    {        
        
$this->log('RECURSO','CheckOUT recurso: '$idRecurso);
        
$this->conector->checkOut($idRecurso);
    }
    
    function 
cancelCheckOut($idRecurso)
    {        
        
$this->log('RECURSO','CANCEL CheckOUT recurso: ' $idRecurso);
        
$this->conector->cancelCheckOut($idRecurso);
    }
    
    function 
checkIn($idRecurso)
    {        
        
$this->log('RECURSO','CheckIN recurso: ' $idRecurso);
        
$this->conector->checkIn($idRecurso);
    }    
    
    function 
versionar($idRecurso$contenido$parametros=array(), $mimeType="")
    {   
        
$checkedOut false;    
        
$this->log('RECURSO',"Versionar recurso: $idRecurso\n" var_export($parametros,true));
        if(! empty(
$parametros)){
            
$atributos $this->procesarAtributos($parametros);            
        } else {
            
$atributos = array();
        }
        try {
            
$this->conector->checkOut($idRecurso);
            
$checkedOut true;
            
$this->conector->modificarContenido($idRecurso$contenido$mimeType);
            if(! empty(
$atributos)) {
                
$this->conector->modificarAtributos($idRecurso$atributosfalse);
            }
            
$this->conector->checkIn($idRecurso);
        } catch (
RDIExcepcion $ex) {
            if(
$checkedOut){
                
$this->conector->cancelCheckOut($idRecurso);
            }
            throw 
$ex;
        }
    }
    
    function 
eliminar($idRecurso)
    {
        
$this->log('RECURSO',"ELIMINAR $idRecurso");        
        return 
$this->conector->eliminarDocumento($idRecurso);
    }    
    
    
//-------------------------------------------------
    // BUSQUEDA
    //-------------------------------------------------        
    /**
     * Esto a futuro se podria convertir en un motorcito de consultas
     * (sobre todo para proveer mejores posibilidades de filtrado, lo demas esta OK)
     */
    
function buscar($columnas=array(), $criterioFiltrado=array(), $orden=array(), $opciones=array())
    {
        
$this->log('RECURSO',"Buscar -- \nCOLUMNAS: \n" var_export($columnastrue) .
                
"\nFILTRO: \n" var_export($criterioFiltradotrue) .
                
"\nORDEN: \n" var_export($ordentrue));
        
        
//----- COLUMNAS ----------------
        
$cols_predeterminadas = array('id','version','nombre','creacion','idVersion');
        if(empty(
$columnas)) {$columnas $cols_predeterminadas;}
        
$definicionColumnas $this->getListaColumnasPosibles();
        
        
//1)-- Verificar validez
        
$listaValidas array_values($definicionColumnas);
        
$invalidos array_diff($columnas$listaValidas);        
        if (! empty(
$invalidos)) {
            throw new 
RDIExcepcion('Buscar: existen columnas no definidas: ' implode(','$invalidos));
        }        
        
//2)-- resolver parametros externos a nombre de atributos
        
$columnasQuery = array();
        
$claves array_flip($definicionColumnas);
        foreach(
$columnas as $etiqueta) {
            
$columnasQuery[$etiqueta] = $claves[$etiqueta];
        }
        if(empty(
$columnasQuery)){
            throw new 
RDIExcepcion('La busqueda no tiene columnas!');
        }
        
        
//----- FILTRADO ----------------
        
$where "";
        if(! empty(
$criterioFiltrado)) {
            
$wh = array();
            foreach(
$criterioFiltrado as $col => $valor) {
                if(! isset(
$claves[$col])){
                    throw new 
RDIExcepcion('BUSCAR - CRITERIO FILTRADO: No existe la columna: ' $col);
                }
                if(
trim($col) == 'id'){
                    throw new 
RDIExcepcion('BUSCAR - CRITERIO FILTRADO: CMIS no permite utilizar la columna "id". Utilice  $servicio->recuperarAtributos($id)');
                }
                
$wh[] = $claves[$col] ." = '$valor'";        //Doesn't have or need a quote?
            
}
            
$where .= ' WHERE ' implode(' AND '$wh);            
        }
        
        
//----- ORDEN -----------------
        
$orderby "";
        if(! empty(
$orden)) {
            
$or = array();
            foreach(
$orden as $col => $valor) {
                if(!isset(
$claves[$col])){
                    throw new 
RDIExcepcion('BUSCAR - ORDEN: No existe la columna: ' $col);
                }
                if(
trim($col) == 'id'){
                    throw new 
RDIExcepcion('BUSCAR - ORDEN: CMIS no permite utilizar la columna "id".');
                }
                
$or[] = $claves[$col] .' '$valor;
            }
            
$orderby .= ' ORDER BY ' implode(', '$or);
        }
        
        
//----- Armado CMISQL -------
        
$CMISQL 'SELECT ' implode(', '$columnasQuery) . "\n" .
                    
' FROM ' $this->getTipo() . "\n" .
                    
$where \n" .
                    
$orderby;\n";
        
$datos $this->conector->consultaDirecta($CMISQL$columnasQuery$opciones);
        return 
$datos;
    }

    function 
getListaColumnasPosibles()
    {
        
$posibles array_merge($this->getAtributosInternos(),
                                
$this->getParametrosObligatoriosImplicitos(),
                                
$this->getParametrosObligatorios(), 
                                
$this->getParametrosOpcionales());
        return 
$posibles;
    }    
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.4952 ]--