namespace WPForms\Admin\Tools\Views;
use WPForms\Logger\ListTable;
class Logs extends View {
protected $slug = 'logs';
private $list_table = [];
$this->logs_controller();
public function get_label() {
return esc_html__( 'Logs', 'wpforms-lite' );
* Checking user capability to view.
public function check_capability() {
return wpforms_current_user_can();
* Get ListTable instance.
private function get_list_table(): ListTable {
if ( empty( $this->list_table ) ) {
$log_obj = wpforms()->obj( 'log' );
$this->list_table = $log_obj->get_list_table();
return $this->list_table;
public function display() {
<form action="<?php echo esc_url( $this->get_link() ); ?>" method="POST">
<?php $this->nonce_field(); ?>
<div class="wpforms-setting-row tools">
<h4><?php esc_html_e( 'Log Settings', 'wpforms-lite' ); ?></h4>
<p><?php esc_html_e( 'Enable and configure the logging functionality while debugging behavior of various parts of the plugin, including form and entry processing.', 'wpforms-lite' ); ?></p>
<div class="wpforms-setting-row tools wpforms-setting-row-toggle wpforms-clear" id="wpforms-setting-row-logs-enable">
<div class="wpforms-setting-label">
<label for="wpforms-setting-logs-enable"><?php esc_html_e( 'Enable Logs', 'wpforms-lite' ); ?></label>
<div class="wpforms-setting-field">
<span class="wpforms-toggle-control">
<input type="checkbox" id="wpforms-setting-logs-enable" name="logs-enable" value="1" <?php checked( wpforms_setting( 'logs-enable' ) ); ?>>
<label class="wpforms-toggle-control-icon" for="wpforms-setting-logs-enable"></label>
<label for="wpforms-setting-logs-enable" class="wpforms-toggle-control-status" data-on="On" data-off="Off">
<?php wpforms_setting( 'logs-enable' ) ? esc_html_e( 'On', 'wpforms-lite' ) : esc_html_e( 'Off', 'wpforms-lite' ); ?>
<?php esc_html_e( 'Start logging WPForms-related events. This is recommended only while debugging.', 'wpforms-lite' ); ?>
<div class="wpforms-logs-settings <?php echo wpforms_setting( 'logs-enable' ) ? '' : 'wpforms-hidden'; ?>">
$this->user_roles_block();
<button class="wpforms-btn wpforms-btn-md wpforms-btn-orange" name="wpforms-settings-submit">
<?php esc_html_e( 'Save Settings', 'wpforms-lite' ); ?>
$logs_list_table = $this->get_list_table();
if ( wpforms_setting( 'logs-enable' ) || $logs_list_table->get_total() ) {
$logs_list_table->display_page();
private function types_block() {
class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
id="wpforms-setting-row-log-types">
<div class="wpforms-setting-label">
<label for="wpforms-setting-logs-types"><?php esc_html_e( 'Log Types', 'wpforms-lite' ); ?></label>
<div class="wpforms-setting-field">
<span class="choicesjs-select-wrap">
<select id="wpforms-setting-logs-types" class="choicesjs-select" name="logs-types[]" multiple size="1">
$log_types = wpforms_setting( 'logs-types', [] );
foreach ( Log::get_log_types() as $slug => $name ) {
<option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $log_types, true ) ); ?> >
<?php echo esc_html( $name ); ?>
<p class="desc"><?php esc_html_e( 'Select the types of events you want to log. Everything is logged by default.', 'wpforms-lite' ); ?></p>
private function user_roles_block() {
class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
id="wpforms-setting-row-log-user-roles">
<div class="wpforms-setting-label">
<label for="wpforms-setting-logs-user-roles"><?php esc_html_e( 'User Roles', 'wpforms-lite' ); ?></label>
<div class="wpforms-setting-field">
<span class="choicesjs-select-wrap">
$logs_user_roles = wpforms_setting( 'logs-user-roles', [] );
$roles = wp_list_pluck( get_editable_roles(), 'name' );
<select id="wpforms-setting-logs-user-roles" class="choicesjs-select" name="logs-user-roles[]" multiple size="1">
<?php foreach ( $roles as $slug => $name ) { ?>
<option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $logs_user_roles, true ) ); ?> >
<?php echo esc_html( $name ); ?>
<span class="hidden" id="wpforms-setting-logs-user-roles-selectform-spinner">
<i class="fa fa-cog fa-spin fa-lg"></i>
<?php esc_html_e( 'Select the user roles you want to log. All roles are logged by default.', 'wpforms-lite' ); ?>
private function users_block() {
class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
id="wpforms-setting-row-log-users">
<div class="wpforms-setting-label">
<label for="wpforms-setting-logs-users"><?php esc_html_e( 'Users', 'wpforms-lite' ); ?></label>
<div class="wpforms-setting-field">
<span class="choicesjs-select-wrap">
<select id="wpforms-setting-logs-users" class="choicesjs-select" name="logs-users[]" multiple size="1">
$users = get_users( [ 'fields' => [ 'ID', 'display_name' ] ] );
$users = wp_list_pluck( $users, 'display_name', 'ID' );
$logs_users = wpforms_setting( 'logs-users', [] );
foreach ( $users as $slug => $name ) {
<option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $logs_users, true ) ); ?> >
<?php echo esc_html( $name ); ?>
<span class="hidden" id="wpforms-setting-logs-users-selectform-spinner">
<i class="fa fa-cog fa-spin fa-lg"></i>
<?php esc_html_e( 'Log events for specific users only. All users are logged by default.', 'wpforms-lite' ); ?>
private function logs_controller() {
if ( $this->verify_nonce() ) {
$this->update_settings();
$logs_list_table = $this->get_list_table();
$logs_list_table->process_admin_ui();
public function update_settings() {
$settings = get_option( 'wpforms_settings' );
$was_enabled = ! empty( $settings['logs-enable'] ) ? $settings['logs-enable'] : 0;
$settings['logs-enable'] = filter_input( INPUT_POST, 'logs-enable', FILTER_VALIDATE_BOOLEAN );
$logs_types = filter_input( INPUT_POST, 'logs-types', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_REQUIRE_ARRAY );
$logs_user_roles = filter_input( INPUT_POST, 'logs-user-roles', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_REQUIRE_ARRAY );
$logs_users = filter_input( INPUT_POST, 'logs-users', FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY );
$settings['logs-types'] = $logs_types ? $logs_types : [];
$settings['logs-user-roles'] = $logs_user_roles ? $logs_user_roles : [];
$settings['logs-users'] = $logs_users ? array_map( 'absint', $logs_users ) : [];
wpforms_update_settings( $settings );