public static function load()
 {
     add_action('admin_notices', array(__CLASS__, 'admin_notices'));
     require_once MAINWP_WP_STREAM_INC_DIR . 'connector.php';
     $connectors = array('comments', 'editor', 'installer', 'media', 'menus', 'posts', 'users', 'widgets', 'updraftplus', 'backupwordpress');
     $classes = array();
     foreach ($connectors as $connector) {
         include_once MAINWP_WP_STREAM_DIR . '/connectors/' . $connector . '.php';
         $class = "MainWP_WP_Stream_Connector_{$connector}";
         $classes[] = $class;
     }
     $exclude_all_connector = false;
     // Check if logging action is enable for user or provide a hook for plugin to override on specific cases
     if (!self::is_logging_enabled_for_user()) {
         $exclude_all_connector = true;
     }
     // Check if logging action is enable for ip or provide a hook for plugin to override on specific cases
     if (!self::is_logging_enabled_for_ip()) {
         $exclude_all_connector = true;
     }
     self::$connectors = apply_filters('mainwp_client_reports_connectors', $classes);
     foreach (self::$connectors as $connector) {
         self::$term_labels['stream_connector'][$connector::$name] = $connector::get_label();
     }
     // Get excluded connectors
     $excluded_connectors = MainWP_WP_Stream_Settings::get_excluded_by_key('connectors');
     foreach (self::$connectors as $connector) {
         // Check if the connectors extends the MainWP_WP_Stream_Connector class, if not skip it
         if (!is_subclass_of($connector, 'MainWP_WP_Stream_Connector')) {
             self::$admin_notices[] = sprintf(__("%s class wasn't loaded because it doesn't extends the %s class.", 'mainwp-child-reports'), $connector, 'MainWP_WP_Stream_Connector');
             continue;
         }
         // Store connector label
         if (!in_array($connector::$name, self::$term_labels['stream_connector'])) {
             self::$term_labels['stream_connector'][$connector::$name] = $connector::get_label();
         }
         $is_excluded_connector = apply_filters('mainwp_wp_stream_check_connector_is_excluded', in_array($connector::$name, $excluded_connectors), $connector::$name, $excluded_connectors);
         if ($is_excluded_connector) {
             continue;
         }
         if (!$exclude_all_connector) {
             $connector::register();
         }
         // Add new terms to our label lookup array
         self::$term_labels['stream_action'] = array_merge(self::$term_labels['stream_action'], $connector::get_action_labels());
         self::$term_labels['stream_context'] = array_merge(self::$term_labels['stream_context'], $connector::get_context_labels());
     }
     do_action('mainwp_wp_stream_after_connectors_registration', self::$term_labels['stream_connector']);
 }
 public static function log($message, $args, $object_id, $contexts, $user_id = null)
 {
     // Prevent inserting Excluded Context & Actions
     foreach ($contexts as $context => $action) {
         if (!MainWP_WP_Stream_Connectors::is_logging_enabled('contexts', $context)) {
             unset($contexts[$context]);
         } else {
             if (!MainWP_WP_Stream_Connectors::is_logging_enabled('actions', $action)) {
                 unset($contexts[$context]);
             }
         }
     }
     if (count($contexts) == 0) {
         return;
     }
     $class = get_called_class();
     return MainWP_WP_Stream_Log::get_instance()->log($class::$name, $message, $args, $object_id, $contexts, $user_id);
 }