| Server IP : 172.173.179.141 / Your IP : 216.73.216.196 Web Server : Apache System : Linux mail.lomejor.cr 6.8.0-1059-azure #65~22.04.1-Ubuntu SMP Thu May 28 16:59:19 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.2.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/dev/htdocs/core/triggers/ |
Upload File : |
<?php
/* Copyright (C) 2005-2009 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2009-2017 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2014 Marcos GarcĂa <marcosgdf@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/core/triggers/interface_20_all_Logevents.class.php
* \ingroup core
* \brief Trigger file for
*/
require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
/**
* Class of triggers for security audit events
*/
class InterfaceLogevents extends DolibarrTriggers
{
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
public function __construct($db)
{
$this->db = $db;
$this->name = preg_replace('/^Interface/i', '', get_class($this));
$this->family = "core";
$this->description = "Triggers of this module allows to add security event records inside Dolibarr.";
// 'development', 'experimental', 'dolibarr' or version
$this->version = self::VERSION_DOLIBARR;
$this->picto = 'technic';
}
/**
* Function called when a Dolibarrr security audit event is done.
* All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared)
*
* @param string $action Event action code
* @param Object $object Object
* @param User $user Object user
* @param Translate $langs Object langs
* @param conf $conf Object conf
* @return int <0 if KO, 0 if no triggered ran, >0 if OK
*/
public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
{
if (!empty($conf->global->MAIN_LOGEVENTS_DISABLE_ALL)) {
return 0; // Log events is disabled (hidden features)
}
$key = 'MAIN_LOGEVENTS_'.$action;
//dol_syslog("xxxxxxxxxxx".$key);
if (empty($conf->global->$key)) {
return 0; // Log events not enabled for this action
}
if (empty($conf->entity)) {
$conf->entity = $entity; // forcing of the entity if it's not defined (ex: in login form)
}
$date = dol_now();
// Actions
if ($action == 'USER_LOGIN') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = "(UserLogged,".$object->login.")";
$text .= (empty($object->trigger_mesg) ? '' : ' - '.$object->trigger_mesg);
$desc = "(UserLogged,".$object->login.")";
$desc .= (empty($object->trigger_mesg) ? '' : ' - '.$object->trigger_mesg);
} elseif ($action == 'USER_LOGIN_FAILED') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
// Initialisation donnees (date,duree,texte,desc)
$text = $object->trigger_mesg; // Message direct
$desc = $object->trigger_mesg; // Message direct
} elseif ($action == 'USER_LOGOUT') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = "(UserLogoff,".$object->login.")";
$desc = "(UserLogoff,".$object->login.")";
} elseif ($action == 'USER_CREATE') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("NewUserCreated", $object->login);
$desc = $langs->transnoentities("NewUserCreated", $object->login);
} elseif ($action == 'USER_MODIFY') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("EventUserModified", $object->login);
$desc = $langs->transnoentities("EventUserModified", $object->login);
} elseif ($action == 'USER_NEW_PASSWORD') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("NewUserPassword", $object->login);
$desc = $langs->transnoentities("NewUserPassword", $object->login);
} elseif ($action == 'USER_ENABLEDISABLE') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
if ($object->statut == 0) {
$text = $langs->transnoentities("UserEnabled", $object->login);
$desc = $langs->transnoentities("UserEnabled", $object->login);
}
if ($object->statut == 1) {
$text = $langs->transnoentities("UserDisabled", $object->login);
$desc = $langs->transnoentities("UserDisabled", $object->login);
}
} elseif ($action == 'USER_DELETE') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("UserDeleted", $object->login);
$desc = $langs->transnoentities("UserDeleted", $object->login);
} elseif ($action == 'USERGROUP_CREATE') {
// Groups
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("NewGroupCreated", $object->name);
$desc = $langs->transnoentities("NewGroupCreated", $object->name);
} elseif ($action == 'USERGROUP_MODIFY') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("GroupModified", $object->name);
$desc = $langs->transnoentities("GroupModified", $object->name);
} elseif ($action == 'USERGROUP_DELETE') {
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
$langs->load("users");
// Initialisation donnees (date,duree,texte,desc)
$text = $langs->transnoentities("GroupDeleted", $object->name);
$desc = $langs->transnoentities("GroupDeleted", $object->name);
}
// If not found
/*
else
{
dol_syslog("Trigger '".$this->name."' for action '$action' was ran by ".__FILE__." but no handler found for this action.");
return 0;
}
*/
// Add more information into desc from the context property
if (!empty($desc) && !empty($object->context['audit'])) {
$desc .= ' - '.$object->context['audit'];
}
// Add entry in event table
include_once DOL_DOCUMENT_ROOT.'/core/class/events.class.php';
$event = new Events($this->db);
$event->type = $action;
$event->dateevent = $date;
$event->label = $text;
$event->description = $desc;
$event->user_agent = (empty($_SERVER["HTTP_USER_AGENT"]) ? '' : $_SERVER["HTTP_USER_AGENT"]);
$result = $event->create($user);
if ($result > 0) {
return 1;
} else {
$error = "Failed to insert security event: ".$event->error;
$this->errors[] = $error;
$this->error = $error;
dol_syslog(get_class($this).": ".$error, LOG_ERR);
return -1;
}
}
}