!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_tdfonline/proyectos/toba_referencia/php/tutorial/   drwxr-xr-x
Free 14.77 GB of 61.93 GB (23.85%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     pant_api.php (8.87 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php 
require_once("tutorial/pant_tutorial.php");

class 
pant_fuente extends pant_tutorial
{
    function 
generar_layout()
    {
        
$wiki toba_parser_ayuda::parsear_wiki('Referencia/FuenteDatos'
                                                    
'Fuentes de Datos',
                                                    
'toba_editor');        
        
$api toba_parser_ayuda::parsear_api('Fuentes/toba_db',
                                                 
'toba_db''toba_editor');

        
$codigo1 '<?php
$sql = "SELECT id, nombre FROM tabla..."
$rs = toba::db()->consultar($sql);
if (! empty($rs)) {
    foreach ($rs as $fila) {
        echo "{$fila[\'id\']} es {$fila[\'nombre\']} ";
    } 
} else {
    echo "No hay datos!"
}
//--- Si la consulta falla (por ej. no existe la tabla), tira una excepcion toba_error_db
?>
'
;    
        
$codigo2 '<?php
$sql = "UPDATE tabla SET nombre = id";

toba::db()->abrir_transaccion();
$cant = toba::db()->ejecutar($sql);
....
toba::db()->cerrar_transaccion();

echo "Se modificaron $cant registros";
//--- Si el ejecutar falla (por ej. una restricción de clave foránea), tira una excepcion toba_error_db
?>
'
;
        echo 
"
            <p>Cuando se utilizan los componentes de datos (datos_tabla y datos_relacion)
            se hace uso implícito de la base de negocios definida en el editor. A esta base 
            se la denomina <strong>fuente de datos</strong> y puede ser accedida a través de una 
            clase de toba.
            </p>
            <p>Para obtener el objeto que representa la conexión con la base de datos se utiliza el 
            método <em>toba::db(\$fuente)</em>, si no se brinda el nombre de la fuente se utiliza 
            la predeterminada del proyecto. Veamos un ejemplo de una consulta ad-hoc, donde el formato
            del resultado es una matriz filas x columnas (también llamado RecordSet):
            </p>
            "
.mostrar_php($codigo1)."
            <p>Para los comandos SQL lo que se retorna es el número de registros afectados:</p>
            "
.mostrar_php($codigo2)."
            <h2>Más info</h2>
            <ul><li>
$wiki
            <li>
$api</ul>
        "
;
    }
}

//--------------------------------------------------------------

class pant_vinculacion extends pant_tutorial
{
    function 
generar_layout()
    {
        
$api toba_parser_ayuda::parsear_api('Centrales/toba_vinculador''toba_vinculador''toba_editor');
        
$codigo '<?php
//Forma general
$url = toba::vinculador()->get_url($proyecto, $item, $parametros, $opciones);

//Crea un vínculo al item 23421 de este proyecto con un dato como parámetro
$url = toba::vinculador()->get_url(null, 23421, array("moneda" => "dolar"));

//Crea un vínculo al ítem actual
$url = toba::vinculador()->get_url(null, null, $parametros, $opciones);

echo "<a href=\'$url\'>Navegar</a>";
?>
'
;
        echo 
"
        <p>
        Existe una clase que permite crear links entre items incluso de distintos proyectos, esta
        clase recibe el nombre de <strong>vinculador</strong>. La utilidad es poder navegar hacia otras 
        operaciones pasando parámetros, o hacia la misma operación accediendo de otra forma.
        </p>
        <p>
        Mostramos algunos ejemplos:
        </p> 
        "
.mostrar_php($codigo)."
        <p>La interfaz completa de la API está publicada 
$api</p>
        "
;
    }    
}

//--------------------------------------------------------------

class pant_memoria extends pant_tutorial
{
    function 
generar_layout()
    {
        
$api toba_parser_ayuda::parsear_api('Centrales/toba_memoria''toba_memoria''toba_editor');
        
$codigo '<?php
//--- Guardar el par $clave=>$valor por lo que resta de la sesión
toba::memoria()->set_dato_aplicacion($clave, $valor);        

//--- Guardar el par $clave=>$valor por lo que resta de la operación
toba::memoria()->set_dato_operacion($clave, $valor);

//-- Para estos tipos de almacenamiento se utiliza este método para consultarlos posteriormente
toba::memoria()->get_dato($clave);

//--- Guardar el par $clave=>$valor para el siguiente pedido de página
toba::memoria()->set_dato_sincronizado($clave, $valor);
//--- Recuperar este valor
toba::memoria()->get_dato_sincronizado($clave);
?>
'
;
        echo 
"
            <p>
                Sabemos que las aplicaciones desarrolladas PHP en general no mantienen información
                en memoria entre dos pedidos de página. La forma de recordar información de cada usuario
                es guardarla en un arreglo global de nombre <em>\$_SESSION</em>, garantizando que 
                todo lo que allí se guarda estará disponible a los pedidos siguientes.
            </p>
            <p>
                Otra forma de compartir información entre pedidos es a través de la URL o datos de
                formularios, estos dos conceptos también tienen un arreglo global, <em>\$_GET</em>
                para los datos que provienen de URL y <em>\$_POST</em> para los de formularios. 
                La diferencia principal de estos con respecto a la sesión es que son datos no-seguros 
                (pueden haber sido modificados o leídos por terceros) y que sólo perduran un pedido de página.
            </p>
            <p>
                Lo que propone Toba son mecanismos de almacenamiento de información más sofisticados
                para la aplicación. La idea es dividir los datos según su alcanze, serían tres niveles donde se
                tiene garantizado que la información es segura tanto que no se puede modificar ni leer por 3eros:
            </p>
            <ul>
                <li>Datos <strong>globales a la aplicación</strong>, que por lo general se mantienen durante toda la sesión
                del usuario, como por ejemplo la Universidad a la cual pertenece.
                <li>Datos <strong>globales a una operación</strong>, información que sólo interesa dentro de la operación actual,
                que al cambiar de ítem será descartada.
                <li>Datos que sólo se almacenan para el <strong>siguiente pedido</strong> de página.
            </ul>
            <p>Generalmente en las operaciones el manejo de los datos se hace en forma interna, por ejemplo
            no tenemos que guardar manualmente cual es la solapa actualmente seleccionada sino que el componente es quien
            lo guarda y consulta internamente. La API para almacenar información personalizada tiene razón de ser
            cuando esta información es del propio dominio de la aplicación. Para cubrir estos tres 
            niveles la clase 
$api brinda estas primitivas:
            </p>
            
        "
;    
        echo 
mostrar_php($codigo);
    }    
}

//--------------------------------------------------------------

class pant_logger extends pant_tutorial
{
    function 
generar_layout()
    {
        
$api toba_parser_ayuda::parsear_api('Debug/toba_logger''toba_logger''toba_editor');                
        
$codigo '<?php
//--- Guardar un mensaje de debug
toba::logger()->debug($mensaje);

//--- Guardar un error
toba::logger()->error($mensaje);

//--- Guardar el valor de una variable
toba::logger()->var_dump($variable);

//--- Guardar una traza completa de llamadas
toba::logger()->trace();
?>
'
;
        echo 
"
            <p>
            Toba cuenta con una clase que va recolectando información
            interna y se almacena en un archivo común de logs del proyecto ubicado en
            <em>\$toba_dir/instalacion/i__X/p__Y/logs</em>, donde X es la instancia e
            Y es el proyecto.
            
            Los programadores también pueden utilizar este log para guardar información
            de debug del sistema. Para esto se consume la clase 
$api :
            </p>
        "
;
        echo 
mostrar_php($codigo);
        
$img1 toba_recurso::imagen_toba('logger.gif'true);
        
$img2 toba_recurso::imagen_proyecto('tutorial/logger.png'true);
        echo 
"
            <p>
                El archivo de logs generado puede ser analizado con una operación del editor
                creada para ayudar al desarrollo. Este analizador puede ser accedido a través
                del ícono 
$img1
            </p>
            
$img2
        "
;
    }    
}

//--------------------------------------------------------------

class pant_mensajes extends pant_tutorial
{
    function 
generar_layout()
    {
        
$api1 toba_parser_ayuda::parsear_api('Fuentes/toba_mensajes''toba_mensajes''toba_editor');        
        
$api2 toba_parser_ayuda::parsear_api('SalidaGrafica/toba_notificacion''toba_notificacion''toba_editor');        
        
$img toba_recurso::imagen_proyecto('tutorial/notificacion.png'true);
        
$wiki toba_parser_ayuda::parsear_wiki('Referencia/Mensajes'
                                                    
'Mensajes y Notificaciones',
                                                    
'toba_editor');
        
$ejemplo =     toba::vinculador()->get_url(null1000204, array(), array('celda_memoria'=>'ejemplo'));
        
        
$codigo1 '<?php
//Suponiendo que el mensaje ingresado es: \'Esta es la %1% instancia de un mensaje global de Toba. Fecha de hoy: %2%.\'
$mensaje = toba::mensajes()->get("indice", array("primera", date("d/M/Y"));
echo $mensaje;
//La salida es: \'Esta es la primera instancia de un mensaje global de Toba. Fecha de hoy: 01/02/2007.\'
?>
'
;
        
$codigo2 '<?php
toba::notificacion()->agregar($mensaje);
toba::notificacion()->agregar($mensaje, "info");
?>
'
;        
        echo 
"<p>
            Para centralizar el manejo de mensajes y permitir su posterior personalización
            Toba brinda la posibilidad de definir los mensajes en el mismo editor web y
            posteriormente instanciarlos y notificarlos usando la API.
        </p>
        <p>Una vez creados los mensajes en el editor es posible recuperarlos en ejecución
        usando la clase 
$api1:
        </p>
        "
;
        echo 
mostrar_php($codigo1);
        echo 
"<p>
            En lugar de mostrar el mensaje con un simple <em>echo</em> es posible notificarlo
            utilizando la clase 
$api2
        </p>"
;
        echo 
mostrar_php($codigo2);
        echo 
$img;
        
        echo 
"<h2>Más info</h2>
         <ul><li>
$wiki
            <li><a href='
$ejemplo' target='_blank'>Ejemplo</a>
        </ul>
        "
;
    }
}



?>

:: 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.8021 ]--