Ahora KumbiaPHP está en Slack!!

Si deseas contactar con nosotros y de forma rápida, estamos en Slack:

http://slack.kumbiaphp.com/

como hacer un log de usuario en linea

edited julio 2008 in FAQ
el proposito es generar una tabla
con el id del usuario y fecha hora de inicio y termino.

para esto lo vamos hacer con una clase.
version: Kumbia 0.47
paso 1
tener una variable de session con el id del usuario, para esto se puede obtener del login.

// $this->Usuarios->id obtiengo el id de la Tabla usuarios
Session::set_data('usuarios_id', $this->Usuarios->id);

paso 2
crear la siguiente tabla:

CREATE TABLE `logs` (
`id` int(4) NOT NULL auto_increment,
`usuarios_id` int(4) default NULL,
`fecha_at` datetime default NULL,
`fecha_in` datetime default NULL,
`ip` varchar(16) default NULL,
PRIMARY KEY (`id`)
)

Paso 3
crear una carpeta en lib/
llamada Fidelio
y una archivo llamado online.php

lib/Fidelio/online.php

y en el archivo
forms\config\core.ini
agregar la libreria

; Cargar los modulos de Kumbia en lib
[modules]
extensions = kumbia.tags, kumbia.logger, kumbia.utils, fpdf.main, excel.main, Fidelio.online

[kumbia]
dbdate = YYYY-MM-DD
controller_dir = controllers
models_dir = models
views_dir = views



paso 4
online.php

<?php
class Online{
public function __construct(){

}
public function saveUser($id){
$lastid = Session::get("logs_id");
$rec = new Logs();
$rec->find($lastid);
$rec->usuarios_id = $id;
$rec->ip = $_SERVER['REMOTE_ADDR'];
$rec->save();
if($rec->select_one("LAST_INSERT_ID()")!=0)
Session::set("logs_id", $rec->select_one("LAST_INSERT_ID()"));
}
}
?>


ahora en todas las paginas colocar el sigte codigo:

Online::saveUser(Session::get("usuarios_id"));

ej:

function index(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}
function insert(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}
function before_insert(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}
function delete(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}
function buscar(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}
function etc(){
Online::saveUser(Session::get("usuarios_id"));
/* codigo */
}

paso 5
visualizar el reporte:

craer un ApplicationController
logs_controller.php

<?php
class LogsController extends ApplicationController {
//static public $force = true;
public $scaffold = true;
public $template = "menu";
function __construct(){

}
function index(){
$this->fecha = fentrada($this->request("fecha"));
if($this->fecha!="//"){
$this->items = $this->Logs->find("fecha_in BETWEEN '$this->fecha 00:00:00' AND '$this->fecha 23:59:59'", "order: id desc");
}else{
$this->fecha = date("Y/m/d");
$this->items = $this->Logs->find("fecha_in BETWEEN '$this->fecha 00:00:00' AND '$this->fecha 23:59:59'", "order: id desc");
}
}
}
?>


vista
view/index.phtml

<span class="label"><?= date("d/m/Y H:m:s")?></span>


<?= form_tag("logs") ?>
<div align="center">
<? $fecha = fsalida($fecha); ?>
<?= text_field_tag("fecha", "class: label", "size: 10", "value: $fecha") ?>
<?= submit_tag("Ir")?>
</div>
<?= end_form_tag() ?>
<p>
</p>
<table align="center" width="80%">
<tr class="tabla_grupos">
<th>Usuario</th>
<th>Fec. y hora de inicio</th>
<th>Fec. y hora de término</th>
</tr>
<?
$class = "browse_primary";
foreach ($items as $item):
$aTmp_1 = explode(" ",$item->fecha_at);
$aTmp_2 = explode(" ",$item->fecha_in);
$fecha_ini = fsalida($aTmp_1[0])." ".$aTmp_1[1];
$fecha_fin = fsalida($aTmp_2[0])." ".$aTmp_2[1];
$usuarios = $Usuarios->find($item->usuarios_id);
?>
<tr class="<?= $class ?>">
<td><?= $usuarios->nombre ?></td>
<td align="center"><?= $fecha_ini ?></td>
<td align="center"><?= $fecha_fin ?></td>
</tr>
<?
if($class=="browse_primary")
$class = "browse_secondary";
else
$class = "browse_primary";
endforeach; ?>
</table>

Comentarios

  • edited noviembre -1
    se me olvidaba.
    en las librerias de kumbia agrege como cambiar el formato de las fechas.

    ej:
    fsalida($cad) = fecha de salida (como debe ser vista por el usuaro
    "d/m/Y)

    fentrada($cad2) = fecha de entrada (como debe la fecha para la base de datos mysql "Y/m/d")

    copiar y agregar en el archivo

    lib/kumbia/utils.php


    function fentrada($cad){
    $uno=substr($cad, 0, 2);
    $dos=substr($cad, 3, 2);
    $tres=substr($cad, 6, 4);
    $cad2 = ($tres."/".$dos."/".$uno);
    return $cad2;
    }
    function fsalida($cad2){
    $tres=substr($cad2, 0, 4);
    $dos=substr($cad2, 5, 2);
    $uno=substr($cad2, 8, 2);
    $cad = ($uno."/".$dos."/".$tres);
    return $cad;
    }
  • edited noviembre -1
    Buena FiDeLio, te invito a que descargues la versión 0.5-RC1 para que pruebes las nuevas funcionalidades que ofrecen mayor flexibilidad por ejemplo todo este procedimiento lo puedes cargar como un helpers...

    Gracias...
  • edited noviembre -1
    la descarge me parece perfecta, pero todavia estoy esperando la documentacion.

    Ya que en estos momentos estoy haciendo una app con la version 0.47 y es bastante robusta, he aprendido y hecho varias cosas interesantes y las estaré pubicando en el FAQ.
  • edited noviembre -1
    Sería interesante que en el título de cada post indicaras a qué versión de Kumbia pertenece.

    Otra cosa, aclaro que no soy un experto de POO en php, pero veo que usas esto:

    Online::saveUser(Session::get("usuarios_id"));
    ¿No deberías declarar el método como static para usarlo así? Tal como lo tienes ahora, el acceso al método debería ser así:

    Online.saveUser(Session::get("usuarios_id"));
  • edited noviembre -1
    me parece buena tu idea, yo tambien estoy aprendiendo.
    lo voy a cambiar a static, pero lo utilizo con :: por que el ide con el que trabajo me autocompleta (zend studio).
Sign In or Register to comment.