activity_types = include plugin_dir_path( ATKAI_PLUGIN_FILE ) . '/activities/types.php'; $this->logger = $logger; add_action( 'wp_mail_succeeded', array( $this, 'atk_email_succeeded' ) ); add_action( 'wp_mail_failed', array( $this, 'atk_email_failed' ) ); } public function atk_email_succeeded( $email_info ) { $activity_type = $this->activity_types['email']['succeeded']; $user_id = get_current_user_id(); // Get the current user ID $description = sprintf( 'Email successfully sent to %s. Subject: "%s".', is_array($email_info['to']) ? implode(', ', $email_info['to']) : $email_info['to'], $email_info['subject'] ); $url_refferer = $this->get_url_source(); $this->logger->insert_log( $user_id, 'Email', $activity_type, $description, 'succeeded', $url_refferer ); } public function atk_email_failed( $error ) { $activity_type = $this->activity_types['email']['failed']; $user_id = get_current_user_id(); // Get the current user ID $description = 'WP mail error: '. $error->get_error_message() .''; $url_refferer = $this->get_url_source(); $this->logger->insert_log( $user_id, 'Email', $activity_type, $description, 'failed', $url_refferer ); } private function get_url_source() { // Grab up to 10 stack frames to find the wp_mail() call // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace $backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 10 ); foreach ( $backtrace as $trace ) { if ( ( isset( $trace['function'] ) && 'wp_mail' === $trace['function'] ) || ( isset( $trace['file'] ) && false !== strpos( $trace['file'], 'wp-includes/pluggable.php' ) ) ) { return $trace['file'] ?? 'Unknown location for failed email'; } } return ''; } }