Agregar un Log o bitacora en Inventio Lite o en otro Sistema


Un log o bitacora nos sirve para ver los moviemientos o acciones que realizan otros usuarios en el sistema.

La funcionalidad de la bitacora es en caso de que alguien haga algo indebido en el sistema, nosotros como administradores vamos a saber que usuario realizo la accion y la fecha y hora de los eventos.

Este modulo de log o bitacora que vamos a crear lo vamos a implementar en Inventio Lite, pero puede funcionar en cualquier sistema de los creados por Evilnapsis.

Ademas cada quien es libre de personalizarlo a sus necesidades.

El sistema Inventio Lite lo pueden descargar desde la pagina de la publicacion.

Una vez instalado el Inventio Lite empezamos.

Base de datos

Para el modulo de bitacora vamos a necesitar una tabla en la base de datos donde se agreguen todos los registros.

create table bitacora(
	id int not null auto_increment primary key,
	description varchar(255),
	user_id int,
	module varchar(255),
	action varchar(255),
	created_at datetime
);

El campo description lo vamos a usar para agregar una descripcion de la accion que se esta haciendo.

El campo user_id vamos a agregar el id del usuario logueado que realiza la accion.

El campo modulo vamos a agregar el modulo en una sola palabra donde se estan realizando las acciones por ejemplo: “productos”, “ventas”,”clientes”, etc…

El campo action vamos a aagregar la accion que se esta realizando en una sola palabra por ejemplo: “agregar”, “actualizar”,”eliminar”, etc…

Por ultimo el campo created_at el cual almacena la fecha actual automatica en la que se realiza la accion.

Modelo

El modelo es un archivo o clase que integra todas las consultas SQL o acciones para despues llamarlas desde nuestras acciones.

<?php
class BitacoraData {
	public static $tablename = "bitacora";
	public $id, $description, $user_id, $module, $action, $created_at ;

	public function __construct(){

		$this->created_at = "NOW()";
	}

	public function add(){
		$sql = "insert into ".self::$tablename." (description,user_id,module,action,created_at) ";
		$sql .= "value (\"$this->description\",\"$this->user_id\",\"$this->module\",\"$this->action\",$this->created_at)";
		Executor::doit($sql);
	}

	public static function delById($id){
		$sql = "delete from ".self::$tablename." where id=$id";
		Executor::doit($sql);
	}
	public function del(){
		$sql = "delete from ".self::$tablename." where id=$this->id";
		Executor::doit($sql);
	}

	public function update(){
		$sql = "update ".self::$tablename." set description=\"$this->description\" where id=$this->id";
		Executor::doit($sql);
	}

	public static function getById($id){
		$sql = "select * from ".self::$tablename." where id=$id";
		$query = Executor::doit($sql);
		return Model::one($query[0],new BitacoraData());

	}

	public static function getAll(){
		$sql = "select * from ".self::$tablename;
		$query = Executor::doit($sql);
		return Model::many($query[0],new BitacoraData());
	}

	public static function getLike($q){
		$sql = "select * from ".self::$tablename." where module like '%$q%'";
		$query = Executor::doit($sql);
		return Model::many($query[0],new BitacoraData());

	}

}

?>

Los metodos que vamos a usar de este modelo son los metodos add y getAll que sirven para agregar registro y mostrar todos los registros.

Agregar un registro a la bitacora

Para agregar un registro a la bitacora vamos a usar el siguiente pedazo de codigo.

$bitacora = new BitacoraData();
$bitacora->description = "Agrego un nuevo cliente"; // una descripcion para la bitacora
$bitacora->user_id= $_SESSION["user_id"]; // El id del usuario se toma de la session
$bitacora->module = "products"; // El modulo donde se aplica la accion
$bitacora->action= "agregar"; // el tipo de accion que estamos realizando
$bitacora->add();

Este codigo lo podemos agregar en todas las acciones donde queremos que se guarde un registro en la bitacora.

Los campos description, module y action los debemos modificar de acuerdo a la accion que se este realizando.

El campo fecha o created_at se toma automaticamente de la base de datos usando el comando NOW().

Mostrar los Registros de la bitacora

Para mostrar los registros de la bitacora creamos el archivo log-view.php y lo agregamos en la carpeta de vistas “view” y le agregamos el siguiente codigo.

<div class="row">
	<div class="col-md-12">
		<h1>Bitacora</h1>
<div class="card">
	<div class="card-header">
		BITACORA
	</div>
		<div class="card-body">
		<?php
		// Obtener todos los registro de la bitacora
		$logs = BitacoraData::getAll();
		if(count($logs)>0): ?>

			<table class="table table-bordered table-hover">
			<thead>
			<th>Descripcion</th>
			<th>Usuario</th>
			<th>Modulo  / Accion</th>
			<th>Fecha</th>
			</thead>
			<?php
			foreach($logs as $log):
				$user = UserData::getById($log->user_id); // Obtener los datos del usuario
				?>
				<tr>
				<td><?php echo $log->description; // mostrar descripcion  ?></td>
				<td><?php echo $user->name." ".$user->lastname; // mostrar el nombre del usuario ?></td>
				<td><?php echo $log->module." / ".$log->action; // mostrar el modulo y la accion ?></td>
				<td><?php echo $log->created_at; // Mostrar la fecha de creacion ?></td>
				</tr>
				<?php
			endforeach; ?>
</table>
<?php else:?>
			echo "<p class='alert alert-danger'>No hay Registros en la bitacora</p>";
<?php endif; ?>
		</div>
</div>
	</div>
</div>

Resultado

Una ez que agregamos varios registros a la bitacora podremos ver el resultado.

Y listo ahora ya podemos implementar la bitacora en cualquiera de nuestros sistemas.

Nota: Se ha actualizado el repositorio de descarga del sistema Inventio Lite con estas nuesvas funciones de Bitacora.

Leave a comment