__( 'MasterStudy LMS', 'advanced-form-integration' ), 'tasks' => array( 'enroll_course' => __( 'Enroll User in Course', 'advanced-form-integration' ), ), ); return $actions; } add_action( 'adfoin_action_fields', 'adfoin_masterstudyac_action_fields' ); function adfoin_masterstudyac_action_fields() { ?> 'stm-courses', 'post_status' => 'publish', 'posts_per_page' => 999, 'orderby' => 'title', 'order' => 'ASC', ) ); $courses = array(); foreach ( $posts as $post ) { $courses[ $post->ID ] = $post->post_title; } wp_send_json_success( $courses ); } add_action( 'wp_ajax_adfoin_get_masterstudyac_fields', 'adfoin_get_masterstudyac_fields', 10, 0 ); function adfoin_get_masterstudyac_fields() { adfoin_verify_nonce(); $fields = array( array( 'key' => 'email', 'value' => __( 'User Email', 'advanced-form-integration' ), 'description' => __( 'Required. Existing user is matched by email, otherwise a new one is created.', 'advanced-form-integration' ) ), array( 'key' => 'name', 'value' => __( 'User Display Name', 'advanced-form-integration' ), 'description' => __( 'Only used if a new user is created.', 'advanced-form-integration' ) ), ); wp_send_json_success( $fields ); } /** * Find an existing user by email, or create one. * * Mirrors platforms/wordpress/wordpress.php's create_user task: a random * password is generated since these are non-interactive, local integrations. */ function adfoin_masterstudyac_find_or_create_user( $email, $name ) { if ( ! is_email( $email ) ) { return 0; } $user = get_user_by( 'email', $email ); if ( $user ) { return $user->ID; } $username = sanitize_user( current( explode( '@', $email ) ), true ); if ( username_exists( $username ) ) { $username .= wp_rand( 100, 999 ); } $user_id = wp_insert_user( array( 'user_login' => $username, 'user_email' => $email, 'user_pass' => wp_generate_password( 24 ), 'display_name' => $name ? $name : $email, ) ); return is_wp_error( $user_id ) ? 0 : $user_id; } add_action( 'adfoin_masterstudyac_job_queue', 'adfoin_masterstudyac_job_queue', 10, 1 ); function adfoin_masterstudyac_job_queue( $data ) { adfoin_masterstudyac_send_data( $data['record'], $data['posted_data'] ); } /* * Handles enrolling a user into a MasterStudy LMS course */ function adfoin_masterstudyac_send_data( $record, $posted_data ) { if ( ! class_exists( 'STM_LMS_Course' ) ) { return; } $record_data = json_decode( $record['data'], true ); if ( isset( $record_data['action_data']['cl'] ) && adfoin_check_conditional_logic( $record_data['action_data']['cl'], $posted_data ) ) { return; } $field_data = isset( $record_data['field_data'] ) ? $record_data['field_data'] : array(); $task = isset( $record['task'] ) ? $record['task'] : ''; if ( 'enroll_course' !== $task ) { return; } $course_id = isset( $field_data['courseId'] ) ? absint( $field_data['courseId'] ) : 0; unset( $field_data['courseId'] ); $prepared_data = array(); foreach ( $field_data as $key => $value ) { if ( '' === $key ) { continue; } $parsed_value = adfoin_get_parsed_values( $value, $posted_data ); if ( '' === $parsed_value || null === $parsed_value ) { continue; } $prepared_data[ $key ] = $parsed_value; } $request_payload = $prepared_data; $response_body = array( 'success' => false ); $status_code = 400; if ( empty( $prepared_data['email'] ) || ! is_email( $prepared_data['email'] ) ) { $response_body['message'] = __( 'A valid user email is required.', 'advanced-form-integration' ); } elseif ( ! $course_id ) { $response_body['message'] = __( 'A course is required.', 'advanced-form-integration' ); } else { $user_id = adfoin_masterstudyac_find_or_create_user( $prepared_data['email'], isset( $prepared_data['name'] ) ? $prepared_data['name'] : '' ); if ( ! $user_id ) { $response_body['message'] = __( 'Failed to find or create the WordPress user.', 'advanced-form-integration' ); } else { STM_LMS_Course::add_user_course( $course_id, $user_id, 0 ); $status_code = 200; $response_body['success'] = true; $response_body['message'] = __( 'User enrolled in course successfully.', 'advanced-form-integration' ); $response_body['id'] = $user_id; } } $log_args = array( 'method' => 'LOCAL', 'body' => $request_payload, ); $log_response = array( 'response' => array( 'code' => $status_code, 'message' => $response_body['message'], ), 'body' => $response_body, ); adfoin_add_to_log( $log_response, 'masterstudyac', $log_args, $record ); }