J3.x:Registri Azioni Utente
From Joomla! Documentation
Come utilizzare il nuovo sistema di registrazione delle azioni
A partire da Joomla 3.9, Joomla ha introdotto un sistema di registrazione delle azioni.
Questo sistema è la finalizzazione di "Recording Action Logs" project from GSoC 2016. Questo sistema fornisce un'infrastruttura per creare un registro di controllo dell'attività svolta su un sito Web e può essere regolato con precisione sulle preferenze dell'amministratore del sito. Le estensioni sono in grado di collegarsi a questo sistema per aggiungere messaggi personalizzati o far sì che il sistema elabori le azioni CRUD standard.
In questo tutorial, troverai informazioni su come configurare questo nuovo sistema.
Note: Solo i Super User hanno accesso al sistema Action Logging.
Componente
Dashboard del registro delle azioni dell'utente
Passare a Utenti → registro azioni utente per accedere alla dashboard.
Da questa schermata un Super User ha una panoramica globale di tutte le attività eseguite su un sito dagli utenti e ha la possibilità di rivedere, esportare, eliminare ed eliminare le voci.
Per saperne di più, vedere:
Plugin
System - User Actions Log
Una volta abilitato, questo plugin consente di definire il numero di giorni dopo i quali i registri verranno eliminati.
Action Log
Una volta attivato, questo plugin consente di registrare le azioni degli utenti per le estensioni principali.
Privacy - Action Logs
Una volta abilitato, questo plug-in consente di esportare i dati del registro azioni per la richiesta di riservatezza dell'utente.
Modulo
Registro delle azioni - Ultimo modulo
Questo modulo di amministrazione mostra sul pannello di controllo un elenco delle ultime azioni eseguite su un sito.
Note: Il modulo non viene visualizzato per impostazione predefinita sui siti che eseguono l'aggiornamento a Joomla 3.9. Per visualizzarlo sul tuo pannello di controllo, vai aExtensions → Manage → Manage → Enable the System - User Actions Log plugin e poi andare a Extensions → Modules → Administrator → New → Action Logs-Latest
Si prega di vedere anche:Latest Actions Admin Module.
Come agganciare un'estensione al sistema
Non esitate a modificare questa sezione migliorandola o correggendola.
Component Installation Script
Aggiungi l'estensione alla tabella (#__action_logs_extensions) in modo che appaia nella configurazione dei registri delle azioni dell'utente.
$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;
}
Aggiungi la configurazione dell'estensione alla tabella (#__action_log_config) in modo che i dati delle tue azioni vengano acquisiti.
$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;
}
Naturalmente sarebbe meglio eseguire alcuni controlli per assicurarsi che il record non esistesse già.
Componente di supporto
In questo esempio, il supporto del componente viene utilizzato per eseguire la memorizzazione delle azioni.
/**
* 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;
}
Modulo di transazione front-end
Ora che sono state poste le basi, dobbiamo solo innescare il processo. Stiamo acquisendo informazioni su una transazione che viene creata o aggiornata e abbiamo un modello chiamato transactionform.php . È nel metodo Salva che vogliamo acquisire un registro.
// 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;
}
File di lingua
Infine, per aiutare con l'elenco dei registri di azioni nella parte di amministrazione di Joomla, vogliamo impostare alcuni elementi chiave dei dati da visualizzare nel file di lingua en-GB.com_mycomponent.ini.
COM_MYCOMPONENT_TRANSACTION_LINK="L'Utente <a href='{accountlink}'>{username}</a> ha creato una transazione ( <a href='{itemlink}'>{type}</a> )"
Spero che questo ti aiuti.