HEX
Server: Apache/2.4.65 (Debian)
System: Linux 88f31f35b0b8 6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/microsoft-start/services/LogService.php
<?php
// © Microsoft Corporation. All rights reserved.

namespace microsoft_start\services;

use microsoft_start\infrastructure\Registration;
use microsoft_start\services\MSNClient;

class LoggerTelemetryType {
    const Log = 0;
    const Counter = 1;
    const ErrorCounter = 2;
}

class LoggerFeatureSet {
    const PartnerOnboarding = "Partner Onboarding";
    const ContentOnboarding = "Content Onboarding";
    const HelpCenter = "Help Center";
}

class LogService extends Registration
{
    private static $logBaseArray = array(
        'wpVersion' => MSPH_WP_VERSION,
        "pluginVersion" => MSPH_PLUGIN_VERSION
    );

    private static $maxActionCount = array(
        LoggerTelemetryType::Log => 1000,
        LoggerTelemetryType::Counter => 500,
        LoggerTelemetryType::ErrorCounter => 500,
    );

    public function register_dependencies()
    {
        add_action( 'msphLogTask', [ $this, 'batch_send_logs' ] );
    }

    public static function add_log(/*LoggerTelemetryType*/ int $type, /*LoggerFeatureSet*/ string $featureSet, string $feature, $logFieldArray = array(), $forceSyncSendLog = false) {
        $logItem = static::compose_log($type, $featureSet, $feature, json_encode(array_merge(static::$logBaseArray, $logFieldArray)));
        $cachedLogs = Options::get_cached_user_action_logs($type);
        if ($cachedLogs == false) {
            $cachedLogs = array();
        }
        if (count($cachedLogs) >= static::$maxActionCount[$type]) {
            array_shift($cachedLogs);
        }
        $cachedLogs = array_merge($cachedLogs, array($logItem));
        Options::set_cached_user_action_logs($type, $cachedLogs);

        if ($forceSyncSendLog) {
            static::batch_send_logs($type);
        } else {
            static::schedule_logs_sending($type);
        }
    }

    public static function batch_send_logs(/*LoggerTelemetryType*/ int $type) {
        try {
            $cachedLogs = Options::get_cached_user_action_logs($type);
            if (count($cachedLogs) == 0) {
                return;
            }
            $response = MSNClient::send_logs($cachedLogs);

            if ($response && $response['response']['code'] == 200) {
                Options::set_cached_user_action_logs($type, array());
            }
        } catch (\Exception $e) {
        }
    }

    private static function compose_log(/*LoggerTelemetryType*/ int $type, /*LoggerFeatureSet*/ string $featureSet, $feature, $logMessage) {
        $logModel = array(
            'TimeStamp' => date('c', time()), // Use PascalCase since backend accepts it
            'tenant' => 'WordPress',
            'instance' => 'WordPress',
            'featureSet' => $featureSet,
            'feature' => $feature,
            'accountId' => Options::get_CID(),
            'userInfo' => Options::get_app_id(),
            'customD1' => date('c', time())
        );

        if ($type == LoggerTelemetryType::Log) {
            $logModel['logMessage'] = $logMessage;
        }

        if ($type == LoggerTelemetryType::Counter || $type == LoggerTelemetryType::ErrorCounter) {
            $logModel['count'] = 1;
            $logModel['customD2'] = $logMessage;
        }

        return [$type, $logModel];
    }
    
    private static function schedule_logs_sending(/*LoggerTelemetryType*/ int $type) {
		if ( ! wp_next_scheduled( 'msphLogTask', [$type] ) ) {
			wp_schedule_single_event( time() + 15 * MINUTE_IN_SECONDS, 'msphLogTask', [$type] );
		}
    }
}