// includes/class-ctms-api.php class CTMS_API { public static function moodle_request($endpoint, $data) { $url = get_option('ctms_moodle_url') . '/webservice/rest/server.php'; $token = get_option('ctms_moodle_token'); $response = wp_remote_post($url, [ 'body' => [ 'wstoken' => $token, 'wsfunction' => $endpoint, 'moodlewsrestformat' => 'json', ...$data ], 'sslverify' => true ]); return json_decode(wp_remote_retrieve_body($response)); } public static function tutor_request($endpoint, $method = 'GET', $data = []) { $api_url = get_option('ctms_tutor_api'); $token = get_option('ctms_tutor_token'); $args = [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json' ], 'method' => $method, 'sslverify' => true ]; if ($method === 'POST') { $args['body'] = json_encode($data); } $response = wp_remote_request($api_url . $endpoint, $args); return json_decode(wp_remote_retrieve_body($response)); } } // includes/class-ctms-moodle.php class CTMS_Moodle { public static function create_user($user) { return CTMS_API::moodle_request('core_user_create_users', [ 'users' => json_encode([[ 'username' => $user->user_login, 'password' => wp_generate_password(), 'firstname' => $user->first_name, 'lastname' => $user->last_name, 'email' => $user->user_email ]]) ]); } public static function enroll_user($user_id, $course_id) { return CTMS_API::moodle_request('enrol_manual_enrol_users', [ 'enrolments' => json_encode([[ 'roleid' => 5, 'userid' => $user_id, 'courseid' => $course_id ]]) ]); } public static function create_course($course) { return CTMS_API::moodle_request('core_course_create_courses', [ 'courses' => json_encode([[ 'fullname' => $course->post_title, 'shortname' => $course->post_name, 'summary' => $course->post_content, 'format' => 'topics' ]]) ]); } } // includes/class-ctms-tutor.php class CTMS_Tutor { public static function get_courses() { $response = CTMS_API::tutor_request('/wp-json/tutor/v2/courses'); return $response->data ?? []; } public static function get_course_content($course_id) { return CTMS_API::tutor_request("/wp-json/tutor/v2/courses/{$course_id}/content"); } } // includes/class-ctms-pmpro.php class CTMS_PMPro { public static function init() { add_action('pmpro_after_checkout', [__CLASS__, 'handle_checkout'], 10, 2); } public static function handle_checkout($user_id, $order) { $user = get_userdata($user_id); $membership = pmpro_getMembershipLevelForUser($user_id); // Lógica de sincronización basada en membresía CTMS_Sync::sync_user($user); CTMS_Sync::sync_membership_courses($user_id, $membership->id); } } // includes/class-ctms-sync.php class CTMS_Sync { public static function init() { add_action('wp_ajax_ctms_sync_courses', [__CLASS__, 'ajax_sync_courses']); add_action('wp_ajax_ctms_sync_users', [__CLASS__, 'ajax_sync_users']); add_action('wp_ajax_ctms_get_logs', [__CLASS__, 'ajax_get_logs']); } public static function sync_user($user) { $existing = CTMS_API::moodle_request('core_user_get_users_by_field', [ 'field' => 'email', 'values' => [$user->user_email] ]); if (empty($existing)) { $result = CTMS_Moodle::create_user($user); self::log('Usuario creado: ' . $user->user_email, $result); } } public static function sync_course($course_id) { $course = get_post($course_id); $moodle_course = CTMS_Moodle::create_course($course); self::log('Curso sincronizado: ' . $course->post_title, $moodle_course); // Sincronizar contenido del curso $content = CTMS_Tutor::get_course_content($course_id); foreach ($content->lessons as $lesson) { // Lógica para crear lecciones en Moodle } } public static function ajax_sync_courses() { check_ajax_referer('ctms_nonce', 'nonce'); $courses = CTMS_Tutor::get_courses(); foreach ($courses as $course) { self::sync_course($course->ID); } wp_send_json_success(__('Sincronización de cursos completada', 'ctms')); } public static function log($message, $data = null) { $logs = get_option('ctms_sync_logs', []); $logs[] = [ 'timestamp' => current_time('timestamp'), 'message' => $message, 'data' => $data ]; update_option('ctms_sync_logs', array_slice($logs, -100)); } } // admin/class-ctms-admin.php class CTMS_Admin { public static function init() { add_action('admin_init', [__CLASS__, 'settings_fields']); add_action('admin_post_ctms_save_settings', [__CLASS__, 'save_settings']); } public static function render_dashboard() { include CTMS_PATH . 'admin/partials/admin-main.php'; } public static function render_settings() { include CTMS_PATH . 'admin/partials/admin-settings.php'; } public static function render_sync() { include CTMS_PATH . 'admin/partials/admin-sync.php'; } public static function render_logs() { include CTMS_PATH . 'admin/partials/admin-logs.php'; } public static function settings_fields() { register_setting('ctms_settings_group', 'ctms_moodle_url'); register_setting('ctms_settings_group', 'ctms_moodle_token'); register_setting('ctms_settings_group', 'ctms_tutor_api'); register_setting('ctms_settings_group', 'ctms_tutor_token'); } public static function save_settings() { check_admin_referer('ctms_settings_nonce'); update_option('ctms_moodle_url', sanitize_text_field($_POST['moodle_url'])); update_option('ctms_moodle_token', sanitize_text_field($_POST['moodle_token'])); update_option('ctms_tutor_api', esc_url_raw($_POST['tutor_api'])); update_option('ctms_tutor_token', sanitize_text_field($_POST['tutor_token'])); wp_redirect(admin_url('admin.php?page=ctms-settings')); exit; } } // admin/partials/admin-settings.php

Configuración de Sincronización