38217-vm/wp-content/plugins/mainwp/modules/logs/classes/class-log-connectors.php
2026-02-05 17:08:59 +03:00

188 lines
5.8 KiB
PHP

<?php
/**
* MainWP Logs Connectors.
*
* This file handles all interactions with the Client DB.
*
* @package MainWP/Dashboard
*/
namespace MainWP\Dashboard\Module\Log;
/**
* Class Log_Connectors
*/
class Log_Connectors {
/**
* Holds instance of manager object
*
* @var Log_Manager
*/
public $manager;
/**
* Connectors registered
*
* @var array
*/
public $connectors = array();
/**
* Contexts registered to Connectors
*
* @var array
*/
public $contexts = array();
/**
* Action taxonomy terms
* Holds slug to localized label association
*
* @var array
*/
public $term_labels = array(
'logs_connector' => array(),
'logs_context' => array(),
'logs_action' => array(),
);
/**
* Constructor.
*
* Run each time the class is called.
*
* @param Log_Manager $manager The main manager class.
*/
public function __construct( $manager ) {
$this->manager = $manager;
$this->load_connectors();
}
/**
* Load built-in connectors
*
* @uses \MainWP\Dashboard\Module\Log\Log_Connector
*/
public function load_connectors() { //phpcs:ignore -- NOSONAR - complex method.
$connectors = $this->manager->get_internal_connectors();
$enabled_logging = ! empty( $this->manager->settings->options['enabled'] ) ? true : false;
if ( $enabled_logging ) {
$connectors = array_merge(
$connectors,
array(
'site',
'client',
'posts',
'installer',
'user',
'non-mainwp-changes',
)
);
}
$classes = array();
foreach ( $connectors as $connector ) {
include_once $this->manager->locations['dir'] . 'connectors/class-connector-' . $connector . '.php'; // NOSONAR - WP compatible.
$class_name = sprintf( '\MainWP\Dashboard\Module\Log\Connector_%s', str_replace( '-', '_', $connector ) );
if ( ! class_exists( $class_name ) ) {
continue;
}
$class = new $class_name( $this->manager->log );
$classes[ $class->name ] = $class;
}
if ( $enabled_logging ) {
/**
* Allows for adding additional connectors via classes that extend Connector.
*
* @param array $classes An array of Connector objects.
*/
$this->connectors = apply_filters( 'mainwp_module_log_connectors', $classes, $this->manager->log );
} else {
$this->connectors = $classes; // do not load external connectors.
}
if ( empty( $this->connectors ) ) {
return;
}
foreach ( $this->connectors as $connector ) {
if ( ! method_exists( $connector, 'get_label' ) ) {
continue;
}
$this->term_labels['logs_connector'][ $connector->name ] = $connector->get_label();
}
// Get excluded connectors.
$excluded_connectors = array();
foreach ( $this->connectors as $connector ) {
if ( ! method_exists( $connector, 'get_label' ) ) {
continue;
}
if ( ! method_exists( $connector, 'register' ) ) {
continue;
}
if ( ! method_exists( $connector, 'get_context_labels' ) ) {
continue;
}
if ( ! method_exists( $connector, 'get_action_labels' ) ) {
continue;
}
// Check if the connectors extends the Connector class, if not skip it.
if ( ! is_subclass_of( $connector, '\MainWP\Dashboard\Module\Log\Log_Connector' ) ) {
continue;
}
// Store connector label.
if ( ! in_array( $connector->name, $this->term_labels['logs_connector'], true ) ) {
$this->term_labels['logs_connector'][ $connector->name ] = $connector->get_label();
}
$connector_name = $connector->name;
$is_excluded = in_array( $connector_name, $excluded_connectors, true );
/**
* Allows excluded connectors to be overridden and registered.
*
* @param bool $is_excluded True if excluded, otherwise false.
* @param string $connector The current connector's slug.
* @param array $excluded_connectors An array of all excluded connector slugs.
*/
$is_excluded_connector = apply_filters( 'mainwp_module_log_check_connector_is_excluded', $is_excluded, $connector_name, $excluded_connectors );
if ( $is_excluded_connector ) {
continue;
}
$connector->register();
// Link context labels to their connector.
$this->contexts[ $connector->name ] = $connector->get_context_labels();
// Add new terms to our label lookup array.
$this->term_labels['logs_action'] = array_merge(
$this->term_labels['logs_action'],
$connector->get_action_labels()
);
$this->term_labels['logs_context'] = array_merge(
$this->term_labels['logs_context'],
$connector->get_context_labels()
);
}
$labels = $this->term_labels['logs_connector'];
/**
* Fires after all connectors have been registered.
*
* @param array $labels All register connectors labels array
* @param Connectors $connectors The Connectors object
*/
do_action( 'mainwp_module_log_after_connectors_registration', $labels, $this );
}
}