Journal des actions utilisateur
From Joomla! Documentation
Comment utiliser le nouveau système de journalisation des actions
Dans Joomlaǃ 3.9, Joomla introduit un système de journalisation des actions.
Ce système est la finalisation de "Recording Action Logs" project from GSoC 2016. Ce système apporte une infrastructure pour créer un journal d'audit des activités effectuées sur un site web et peut être ajusté finement suivant les préférences de l’administrateur du site. Les extensions peuvent se raccrocher (hook) à ce système et ajouter leurs messages personnalisés ou utiliser le processus système standard d'actions CRUD.
Dans ce didacticiel, vous trouverez les informations sur comment paramétrer ce nouveau système.
A noter : Seuls les Super Utilisateurs ont accès au système de journalisation des actions.
Composant
Tableau de bord du journal des actions utilisateur
Aller à Utilisateurs → Log des actions utilisateur pour accéder au tableau de bord.
Depuis cet écran un Super Utilisateur a une vue globale des activités effectuées sur le site par les utilisateurs et peut les visualiser, les exporter, les supprimer et purger les entrées.
Pour en savoir plus, veuillez lire :
Plugin
Système - Journal des actions utilisateur
Une fois activé, ce plugin permet de définir le nombre de jours après lesquels les entrées du journal seront effacées.
Journal des actions - Joomla
Une fois activé, ce plugin permet d'enregistrer les actions des utilisateurs pour les extensions du noyau.
Confidentialité - Journaux des actions
Une fois activé, ce plugin permet d'exporter les entrées du journal des actions pour répondre à une requête de confidentialité d'un utilisateur.
Module
Derniers journaux des actions
Ce module d'administration affiche sur le panneau d'administration une liste des dernières actions effectuées sur le site.
Remarque : Ce module n'est pas affiché par défaut sur les sites mis à jour vers Joomlaǃ 3.9. Afin de l'afficher dans la panneau de configuration, utilisez Extensions → Gérer → Gestion → Activer le plugin Système - Journal des actions utilisateur puis aller dans Extensions → Modules → Administration → Nouveau → Derniers journaux des actions.
Pour une information complète, lise : Module d'administration Derniers journaux des actions.
Comment connecter une extension à ce système
Vous pouvez éditer cette section pour l'améliorer ou la corriger.
Component Installation Script
Ajouter l'extension dans la table (#__action_logs_extensions) afin qu'elle apparaisse dans la configuration du journal d'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;
}
Ajouter la configuration de l'extension dans la table (#__action_log_config) afin que les entré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 {
// If it fails, it will throw a RuntimeException
// Insert the object into the table.
$result = Factory::getDbo()->insertObject('#__action_log_config', $logConf);
} catch (RuntimeException $e) {
Factory::getApplication()->enqueueMessage($e->getMessage());
return false;
}
Bien sûr, il serait mieux d'effectuer des vérifications afin de s'assurer que l'enregistrement n'existe pas déjà.
Helper du Composant
Dans cet exemple, le helper du composant est utilisé pour effectuer l'enregistrement des actions.
/**
* Record transaction details in log record
* @param object $user Saves getting the current user again.
* @param int $tran_id The transaction id just created or updated
* @param int $id Passed id reference from the form to identify if new record
* @return boolean True
*/
public static function recordActionLog($user = null, $tran_id = 0, $id = 0)
{
// get the component details such as the id
$extension = MycomponentHelper::getExtensionDetails('com_mycomponent');
// get the transaction details for use in the log for easy reference
$tran = MycomponentHelper::getTransaction($tran_id);
$con_type = "transaction";
if ($id === 0) { $type = 'New '; } else { $type = 'Update '; }
$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;
}
/**
* Get the Model from another component for use
* @param string $name The model name. Optional. Default to my own for safety.
* @param string $prefix The class prefix. Optional
* @param array $config Configuration array for model. Optional
* @return object The model
*/
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 du site public
Étant donné que les fondements sont établis, nous avons juste à démarrer le processus. Nous capturons des informations sur la transaction créée ou modifiée et nous avons un modèle appelé transactionform.php. Dans la méthode Save de ce modèle, nous devons capturer l'entrée de log.
// So the code above this point checks and does what it should do and then after the successful save of the record, we check for the parameter setting to see if logging is required, we pass key elements to recordActionLog.
$table = $this->getTable();
if ($table->save($data) === true) {
/* ---------------------------------------------------------------- */
// trigger transaction log if required
$act_log = $params->get('act_log', 0);
if ($act_log && $table->id) {
// gather information and log in a new action log record
MycomponentHelper::recordActionLog($user, $table->id, $data['id']);
}
/* ---------------------------------------------------------------- */
return $table->id;
} else {
return false;
}
Fichier de langue
Finalement, pour faciliter l'affichage du journal des actions dans le site d'administration de Joomlaǃ, nous devons ajouter des éléments clés de données à afficher dans les fichiers de langue en-GB.com_moncomposant.ini et fr-FR.com_moncomposant.ini.
COM_MYCOMPONENT_TRANSACTION_LINK="L'utilisateur <a href='{accountlink}'>{username}</a> a créé une transaction ( <a href='{itemlink}'>{type}</a> )"
En espérant vous avoir aidé.