public static function sync_courses() { // Variables de configuración $api_key = 'key_b20ffc5be8fe8160264704323305a'; // Reemplaza con tu clave real $api_secret = 'secret_9626a27b857c85029564d2be6715274f0a'; // Reemplaza con tu secreto real $tutor_api_url = 'https://tu-sitio-tutor-lms.com/wp-json/tutor/v1/courses'; // Reemplaza con la URL real $moodle_token = 'fee8f70b252bfd17272b57bcbb2d4bd1'; // Reemplaza con tu token real $moodle_url = 'https://tu-sitio-moodle.com/webservice/rest/server.php'; // Reemplaza con la URL real // Solicitud a la API de Tutor LMS $response = wp_remote_get($tutor_api_url, array( 'headers' => array( 'Authorization' => 'Bearer ' . base64_encode($api_key . ':' . $api_secret), ), )); // Verificar si hubo un error en la solicitud if (is_wp_error($response)) { error_log('Grok Debug: Error al conectar con Tutor LMS: ' . $response->get_error_message()); self::log_action('Sincronización', 'Error al conectar con Tutor LMS: ' . $response->get_error_message()); return; } // Obtener el código de respuesta HTTP $response_code = wp_remote_retrieve_response_code($response); if ($response_code !== 200) { $error_message = wp_remote_retrieve_response_message($response); error_log('Grok Debug: Error Tutor LMS (Código: ' . $response_code . '): ' . $error_message); self::log_action('Sincronización', 'Error Tutor LMS (Código: ' . $response_code . '): ' . $error_message); return; } // Obtener el cuerpo de la respuesta $body = wp_remote_retrieve_body($response); error_log('Grok Debug: Respuesta de Tutor LMS: ' . $body); // Depuración $courses = json_decode($body, true); // Verificar si la decodificación falló o si no es un array if (json_last_error() !== JSON_ERROR_NONE || !is_array($courses)) { error_log('Grok Debug: Error al decodificar la respuesta de Tutor LMS: ' . $body); self::log_action('Sincronización', 'Error al decodificar la respuesta de Tutor LMS: ' . $body); return; } // Verificar si la respuesta tiene el formato esperado if (empty($courses['data'])) { self::log_action('Sincronización', 'No se encontraron cursos en la respuesta de Tutor LMS.'); return; } // Procesar cada curso y sincronizar con Moodle foreach ($courses['data'] as $course) { if (!isset($course['id']) || !isset($course['title']) || !isset($course['description'])) { self::log_action('Sincronización', 'Curso incompleto (ID: ' . ($course['id'] ?? 'desconocido') . ').'); continue; } $course_data = array( 'courses' => array( array( 'fullname' => $course['title'], 'shortname' => 'TUTOR_' . $course['id'], 'categoryid' => 1, // Ajusta el ID de categoría de Moodle 'summary' => $course['description'], 'visible' => 1, ), ), ); $payload = array( 'wstoken' => $moodle_token, 'wsfunction' => 'core_course_create_courses', 'moodlewsrestformat' => 'json', 'courses' => json_encode($course_data['courses']), ); $moodle_response = wp_remote_post($moodle_url, array('body' => $payload)); if (is_wp_error($moodle_response)) { error_log('Grok Debug: Error al conectar con Moodle para ' . $course['title'] . ': ' . $moodle_response->get_error_message()); self::log_action('Sincronización', 'Error al conectar con Moodle para ' . $course['title'] . ': ' . $moodle_response->get_error_message()); continue; } $moodle_body = wp_remote_retrieve_body($moodle_response); error_log('Grok Debug: Respuesta de Moodle: ' . $moodle_body); // Depuración $moodle_result = json_decode($moodle_body, true); if (is_array($moodle_result) && isset($moodle_result[0]['id'])) { self::log_action('Sincronización', 'Curso ' . $course['title'] . ' creado en Moodle (ID: ' . $moodle_result[0]['id'] . ').'); } else { $error_message = isset($moodle_result['exception']) ? $moodle_result['exception'] : 'Desconocido'; error_log('Grok Debug: Error al crear ' . $course['title'] . ' en Moodle: ' . $error_message); self::log_action('Sincronización', 'Error al