Surveillez et contrôlez les activités des utilisateurs avec le composant Journal des actions utilisateur. Cette section détaille comment activer la journalisation, consulter les journaux et configurer les paramètres afin de suivre les modifications effectuées par les utilisateurs, ce qui contribue à la sécurité et à la responsabilisation.
Introduction
Le composant Journal des actions utilisateur (com_actionlogs) fournit une infrastructure permettant de créer un journal d'audit des activités du site. Les actions qui sont enregistrées peuvent être réglées finement par l'administrateur du site. Des extensions tierces peuvent se connecter au composant pour ajouter des messages personnalisés ou faire en sorte que le système traite les actions administrateur standard.
Remarque : Seuls les Super Utilisateurs ont accès au composant Journal des actions utilisateur.
Journal des actions utilisateur
Pour afficher la liste du Journal des actions utilisateur :
- Sélectionner Utilisateurs → Journal des actions utilisateur depuis le menu Administration.

Depuis cette page, un Super Utilisateur a une vue d'ensemble globale de toutes les activités utilisateur effectuées sur un site.
- Exporter la sélection au format CSV : ce bouton exporte uniquement les éléments sélectionnés dans la liste visible.
- Exporter tout au format CSV : ce bouton exporte tous les enregistrements. Les filtres sont ignorés.
- Supprimer : ce bouton supprime les éléments sélectionnés.
- Vider le journal : ce bouton supprime toutes les entrées du journal.
- Paramètres : un formulaire de configuration permettant de définir les options de journalisation.
Paramètres
Le formulaire Journal des actions utilisateur : Paramètres permet au Super Utilisateur de sélectionner les événements à journaliser et de choisir d'inclure ou non les adresses IP dans les données du journal.

Plugins
Le système de journalisation des actions utilise un certain nombre de plugins :
Journal des actions - Joomla
Lorsqu'il est activé, ce plugin enregistre les actions principales des utilisateurs, y compris des actions telles que la connexion/déconnexion, la mise à jour d'un article, l'ajout d'un module. Le plugin n'a aucun paramètre,
Système - Journal des actions de l'utilisateur
Lorsqu'il est activé, ce plugin définit le nombre de jours après lequel les journaux seront supprimés. Une valeur de zéro signifie que les journaux ne sont jamais supprimés automatiquement.
Confidentialité - Journaux des actions
Lorsqu'il est activé, ce plugin exporte les données du journal des actions pour une demande d'informations d'un utilisateur.
Module Dernières actions
Ce module est affiché uniquement pour les Super Utilisateurs dans le Panneau d'administration.

Comment connecter une extension au système
N'hésitez pas à modifier cette section en l'améliorant ou en la corrigeant.
Script d'installation du composant
Ajoutez l'extension à la table (#__action_logs_extensions) afin qu'elle apparaisse dans la configuration des Journaux des actions utilisateur.
$extension = 'com_mycomponent';
$db = Factory::getDbo();
$db->setQuery(' INSERT into #__action_logs_extensions (extension) VALUES ('.$db->Quote($extension).') ' );
try {
// If it fails, it will throw a RuntimeException
$result = $db->execute();
} catch (RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage());
return false;
}
Ajoutez la configuration de l'extension à la table (#__action_log_config) afin que les données de vos actions soient capturées.
$logConf = new stdClass();
$logConf->id = 0;
$logConf->type_title = 'transaction';
$logConf->type_alias = $extension;
$logConf->id_holder = 'id';
$logConf->title_holder = 'trans_desc';
$logConf->table_name = '#__mycomponent_transaction';
$logConf->text_prefix = 'COM_MYCOMPONENT_TRANSACTION';
try {
// En cas d'échec, une RuntimeException sera levée
// Insère l'objet dans la table.
$result = Factory::getDbo()->insertObject('#__action_log_config', $logConf);
} catch (RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage());
return false;
}
Bien entendu, il serait préférable d'effectuer quelques vérifications pour s'assurer que l'enregistrement n'existe pas déjà.
Composant Assistant
Dans cet exemple, l'assistant du composant est utilisé pour effectuer l'enregistrement des actions.
/**
* Enregistre les détails de la transaction dans l'enregistrement du journal
* @param object $user Évite de devoir récupérer à nouveau l'utilisateur actuel.
* @param int $tran_id L'Id de la transaction venant d'être créée ou mise à jour
* @param int $id Référence de l'id transmise depuis le formulaire pour identifier s'il s'agit d'un nouvel enregistrement
* @return boolean True
*/
public static function recordActionLog($user = null, $tran_id = 0, $id = 0)
{
// récupère les détails du composant tels que l'id
$extension = MycomponentHelper::getExtensionDetails('com_mycomponent');
// récupère les détails de la transaction pour une référence facile dans le journal
$tran = MycomponentHelper::getTransaction($tran_id);
$con_type = "transaction";
if ($id === 0) { $type = 'Nouveau '; } else { $type = 'Mise à jour '; }
$message = array();
$message['action'] = $con_type;
$message['type'] = $type . $tran->tran_type . ' - '.$tran->tran_desc . ' $' . $tran->tran_amount;
$message['id'] = $tran->id;
$message['title'] = $extension->name;
$message['extension_name'] = $extension->name;
$message['itemlink'] = "index.php?option=com_mycomponent&task=transaction.edit&id=".$tran->id;
$message['userid'] = $user->id;
$message['username'] = $user->username;
$message['accountlink'] = "index.php?option=com_users&task=user.edit&id=".$user->id;
$messages = array($message);
$messageLanguageKey = Text::_('COM_MYCOMPONENT_TRANSACTION_LINK');
$context = $extension->name.'.'.$con_type;
$fmodel = MycomponentHelper::getForeignModel('Actionlog', 'ActionlogsModel');
$fmodel->addLog($messages, $messageLanguageKey, $context, $user->id);
return true;
}
/**
* Récupère le Modèle d'un autre composant pour utilisation
* @param string $name Le nom du modèle. Optionnel. Par défaut, le mien pour plus de sécurité.
* @param string $prefix Le préfixe de classe. Optionnel
* @param array $config Tableau de configuration pour le modèle. Optionnel
* @return object Le modèle
*/
public function getForeignModel($name = 'Transaction', $prefix = 'MycomponentModel', $config = array('ignore_request' => true))
{
\Joomla\CMS\MVC\Model\ItemModel::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_actionlogs/models', 'ActionlogsModelActionlog');
$fmodel = \Joomla\CMS\MVC\Model\ItemModel::getInstance($name, $prefix, $config);
return $fmodel;
}
Formulaire de transaction côté public
Maintenant que les bases sont posées, il ne reste plus qu'à déclencher le processus. Nous capturons des informations sur une transaction qui est créée ou mise à jour et nous disposons d'un modèle appelé transactionform.php. C'est dans la méthode Save que nous voulons capturer un journal.
// Le code ci-dessus vérifie et effectue ce qu'il doit faire, puis après l'enregistrement réussi de l'enregistrement, nous vérifions le paramètre pour voir si la journalisation est requise, nous transmettons les éléments clés à recordActionLog.
$table = $this->getTable();
if ($table->save($data) === true) {
/* ---------------------------------------------------------------- */
// déclenche le journal de transaction si nécessaire
$act_log = $params->get('act_log', 0);
if ($act_log && $table->id) {
// rassemble les informations et les enregistre dans un nouvel enregistrement du journal des actions
MycomponentHelper::recordActionLog($user, $table->id, $data['id']);
}
/* ---------------------------------------------------------------- */
return $table->id;
} else {
return false;
}
Fichier de langue
Enfin, pour faciliter l'affichage de la liste du journal des actions côté administration de Joomla!, nous voulons définir certains éléments clés de données à afficher dans le fichier de langue en-GB/com_mycomponent.ini.
COM_MYCOMPONENT_TRANSACTION_LINK="L'utilisateur {username} a créé une transaction ( {type} )"