PluginProbe
MooWoodle – WordPress Moodle LMS Integration, Sell Moodle Courses via WooCommerce / 3.4.6
MooWoodle – WordPress Moodle LMS Integration, Sell Moodle Courses via WooCommerce v3.4.6
3.4.9 3.4.8 3.4.7 3.4.6 3.4.5 3.4.4 3.4.3 3.4.1 3.4.2 trunk 1.1.0 1.2 1.2.1 1.2.2 1.3.0 2.0 2.0.1 2.1 2.2 2.3 2.4 3.0 3.0.1 3.0.2 3.0.3 All 57 releases
moowoodle / classes / ExternalService.php

ExternalService.php in MooWoodle – WordPress Moodle LMS Integration, Sell Moodle Courses via WooCommerce 3.4.6, at classes/ExternalService.php

147 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * ExternalService class file.
4 *
5 * @package MooWoodle
6 */
7
8 namespace MooWoodle;
9
10 defined( 'ABSPATH' ) || exit;
11
12 /**
13 * MooWoodle ExternalService class
14 *
15 * @version 3.3.0
16 * @package MooWoodle
17 * @author DualCube
18 */
19 class ExternalService {
20
21 /**
22 * Get moodle core function
23 *
24 * @return string[] core functions
25 */
26 public function get_registered_core_functions() {
27 return apply_filters(
28 'moowoodle_registered_core_functions',
29 array(
30 'get_site_info' => 'core_webservice_get_site_info',
31 'get_categories' => 'core_course_get_categories',
32 'get_courses' => 'core_course_get_courses',
33 'get_moodle_users' => 'core_user_get_users',
34 'create_users' => 'core_user_create_users',
35 'update_users' => 'core_user_update_users',
36 'delete_users' => 'core_user_delete_users',
37 'enrol_users' => 'enrol_manual_enrol_users',
38 'unenrol_users' => 'enrol_manual_unenrol_users',
39 )
40 );
41 }
42
43 /**
44 * Call to moodle core functions.
45 *
46 * @param string $function_key Key name for the Moodle function to call. Default: ''.
47 * @param array $request_args Parameters to send with the request. Default: empty array.
48 * @return mixed
49 */
50 public function do_request( $function_key = '', $request_args = array() ) {
51 // Get register core functions.
52 $moodle_core_functions = $this->get_registered_core_functions();
53
54 if ( empty( $moodle_core_functions[ $function_key ] ) ) {
55 MooWoodle()->util->log( 'Invalid Moodle function key.' );
56 return;
57 }
58
59 $moodle_url = untrailingslashit( MooWoodle()->setting->get_setting( 'moodle_url' ) );
60 $access_token = MooWoodle()->setting->get_setting( 'moodle_access_token' );
61
62 if ( empty( $moodle_url ) || empty( $access_token ) ) {
63 return array(
64 'error' => __( 'Moodle credentials are missing.', 'moowoodle' ),
65 );
66 }
67
68 $request_url = add_query_arg(
69 array(
70 'wstoken' => $access_token,
71 'wsfunction' => $moodle_core_functions[ $function_key ],
72 'moodlewsrestformat' => 'json',
73 ),
74 $moodle_url . '/webservice/rest/server.php'
75 );
76
77 $timeout = (int) MooWoodle()->setting->get_setting( 'moodle_timeout', 10 );
78
79 $response = wp_remote_post(
80 $request_url,
81 array(
82 'body' => $request_args,
83 'timeout' => $timeout,
84 )
85 );
86
87 // Log the response result.
88 if ( MooWoodle()->show_advanced_log ) {
89 MooWoodle()->util->log( 'moowoodle moodle_url:' . $request_url . '&' . wp_json_encode( $request_args ) . "\n\t\tmoowoodle response:" . wp_json_encode( $response ) . "\n\n" );
90 }
91
92 return $this->parse_moodle_response( $response );
93 }
94
95 /**
96 * Check server response result .
97 *
98 * @param object | null $response response.
99 * @return array $response
100 */
101 private function parse_moodle_response( $response ) {
102 if ( null === $response ) {
103 return array( 'error' => 'Response is not available' );
104 }
105
106 // if server response contains error.
107 if ( is_wp_error( $response ) || 200 !== $response['response']['code'] ) {
108 // if response is object and multiple error codes.
109 if ( is_object( $response ) && is_array( $response->get_error_code() ) ) {
110 return array( 'error' => implode( ' | ', $response->get_error_code() ) . $response->get_error_message() );
111 }
112
113 // if response is associative array.
114 if ( is_array( $response ) ) {
115 return array( 'error' => $response['response']['code'] . $response['response']['message'] );
116 }
117
118 return array( 'error' => $response->get_error_code() . $response->get_error_message() );
119 }
120
121 // convert moodle response to array.
122 $response = json_decode( $response['body'], true );
123
124 // if array convertion failed.
125 if ( json_last_error() !== JSON_ERROR_NONE ) {
126 return array( 'error' => __( 'Response is not JSON-decodable', 'moowoodle' ) );
127 }
128
129 // if moodle response contains error.
130 if ( $response && ! empty( $response['exception'] ) ) {
131 if ( str_contains( $response['message'], 'Access control exception' ) ) {
132 return array( 'error' => $response['message'] . ' <a href="' . MooWoodle()->setting->get_setting( 'moodle_url' ) . '/admin/settings.php?section=externalservices">Link</a>' );
133 }
134 if ( str_contains( $response['message'], 'Invalid moodle_access_token' ) ) {
135 return array( 'error' => $response['message'] . ' <a href="' . MooWoodle()->setting->get_setting( 'moodle_url' ) . '/admin/webservice/tokens.php">Link</a>' );
136 }
137 return array( 'error' => $response['message'] . ' <a href="' . MooWoodle()->setting->get_setting( 'moodle_url' ) . '/admin/webservice/tokens.php">Link</a>' );
138 }
139
140 // success.
141 return array(
142 'data' => $response,
143 'success' => true,
144 );
145 }
146 }
147