J3.x

Journal des actions utilisateur

From Joomla! Documentation

This page is a translated version of the page J3.x:User Action Logs and the translation is 100% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Nederlands • ‎eesti • ‎français • ‎italiano • ‎português do Brasil • ‎Ελληνικά • ‎中文(台灣)‎ • ‎日本語
Joomla! 
3.9
Didacticiel
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.

Joomla-39-action-logs-dashboard-fr.png

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.

Joomla-39-action-logs-latest-module-fr.png

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é.