PluginProbe ʕ •ᴥ•ʔ
WP Job Manager / 2.4.7
WP Job Manager v2.4.7
2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.1.3 1.10.0 1.11.0 1.11.1 1.12.0 1.12.1 1.13.0 1.14.0 1.15.0 1.16.0 1.16.1 1.17.0 1.18.0 1.19.0 1.2.0 1.20.0 1.20.1 1.21.0 1.21.1 1.21.2 1.21.3 1.21.4 1.22.0 1.22.1 1.22.2 1.22.3 1.23.0 1.23.1 1.23.10 1.23.11 1.23.12 1.23.13 1.23.2 1.23.3 1.23.4 1.23.5 1.23.6 1.23.7 1.23.8 1.23.9 1.24.0 1.24.0.1 1.25.0 1.25.0.1 1.25.1 1.25.1.1 1.25.2 1.25.2.1 1.25.3 1.25.3.1 1.26.0 1.26.0.1 1.26.1 1.26.1.1 1.26.2 1.26.2.1 1.27.0 1.27.0.1 1.28.0 1.28.0.1 1.29.0 1.29.0.1 1.29.1 1.29.1.1 1.29.2 1.29.2.1 1.29.3 1.29.3.1 1.3.0 1.3.1 1.30.0 1.30.0.1 1.30.1 1.30.1.1 1.30.2 1.30.2.1 1.31.0 1.31.0.1 1.31.1 1.31.1.1 1.31.2 1.31.3 1.32.0 1.32.1 1.32.2 1.32.3 1.33.0 1.33.1 1.33.2 1.33.3 1.33.4 1.33.5 1.34.0 1.34.1 1.34.2 1.34.3 1.34.4 1.34.5 1.35.0 1.35.1 1.35.2 1.35.3 1.36.0 1.36.1 1.36.2 1.37.0 1.38.0 1.38.1 1.39.0 1.4.0 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.7.1 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.1.0 2.1.1 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.4.1
wp-job-manager / includes / class-wp-job-manager-com-api.php
wp-job-manager / includes Last commit date
3rd-party 3 days ago abstracts 3 months ago admin 2 weeks ago emails 2 weeks ago forms 3 days ago helper 3 months ago promoted-jobs 3 days ago ui 2 weeks ago widgets 2 weeks ago class-access-token.php 2 years ago class-dev-tools.php 2 years ago class-guest-session.php 2 years ago class-guest-user.php 2 years ago class-job-dashboard-shortcode.php 6 months ago class-job-listing-stats.php 2 years ago class-job-overlay.php 2 years ago class-stats-dashboard.php 2 years ago class-stats-script.php 3 months ago class-stats.php 3 months ago class-wp-job-manager-ajax.php 2 months ago class-wp-job-manager-api.php 6 years ago class-wp-job-manager-blocks.php 2 weeks ago class-wp-job-manager-cache-helper.php 3 months ago class-wp-job-manager-category-walker.php 6 years ago class-wp-job-manager-com-api.php 2 years ago class-wp-job-manager-data-cleaner.php 2 years ago class-wp-job-manager-data-exporter.php 3 months ago class-wp-job-manager-dependency-checker.php 2 years ago class-wp-job-manager-email-notifications.php 2 years ago class-wp-job-manager-forms.php 5 years ago class-wp-job-manager-geocode.php 2 weeks ago class-wp-job-manager-install.php 2 years ago class-wp-job-manager-post-types.php 3 days ago class-wp-job-manager-recaptcha.php 6 months ago class-wp-job-manager-rest-api.php 2 months ago class-wp-job-manager-shortcodes.php 2 weeks ago class-wp-job-manager-usage-tracking-data.php 2 years ago class-wp-job-manager-usage-tracking.php 2 years ago class-wp-job-manager-widget.php 2 weeks ago class-wp-job-manager.php 3 months ago trait-singleton.php 2 years ago
class-wp-job-manager-com-api.php
162 lines
1 <?php
2 /**
3 * File containing the class \WP_Job_Manager\WP_Job_Manager_Com_API.
4 *
5 * @package wp-job-manager
6 * @since 1.40.0
7 */
8
9 namespace WP_Job_Manager;
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13 }
14
15 /**
16 * \WP_Job_Manager\WP_Job_Manager_Com_API
17 */
18 class WP_Job_Manager_Com_API {
19
20 /**
21 * The single instance of the class.
22 *
23 * @var self
24 */
25 private static $instance = null;
26
27 /**
28 * Get the main instance.
29 *
30 * @return self Main instance.
31 */
32 public static function instance() {
33 if ( is_null( self::$instance ) ) {
34 self::$instance = new self();
35 }
36 return self::$instance;
37 }
38
39 /**
40 * Get notices.
41 *
42 * @param int|null $max_age The max age (seconds) of the source data.
43 *
44 * @return array
45 */
46 public function get_notices( $max_age = null ) {
47 $response = $this->request(
48 'wpjmcom-notices/v1/notices',
49 [
50 'version' => JOB_MANAGER_VERSION,
51 'lang' => determine_locale(),
52 ],
53 DAY_IN_SECONDS,
54 $max_age
55 );
56
57 if ( is_wp_error( $response ) || ! is_array( $response ) ) {
58 return [];
59 }
60
61 return $response['notices'];
62 }
63
64 /**
65 * Make a GET request to the API and caches content.
66 *
67 * @param string $path The request path.
68 * @param array $args The request GET parameters.
69 * @param int $cache_ttl The cache TTL.
70 * @param int|null $max_age The max age (seconds) of the source data. If older than this the data will be fetched again.
71 * @return array|\WP_Error
72 */
73 protected function request( $path, $args, $cache_ttl = DAY_IN_SECONDS, $max_age = null ) {
74 $transient_key = $this->get_request_transient_key( $path, $args );
75 $cached_data = get_transient( $transient_key );
76
77 // If the cached data is too old, ignore it.
78 if ( $max_age && is_array( $cached_data ) ) {
79 $age = time() - ( $cached_data['_fetched'] ?? 0 );
80 if ( $age > $max_age ) {
81 $cached_data = false;
82 }
83 }
84
85 // If no cached data or malformed, fetch it.
86 if ( false === $cached_data || ! is_array( $cached_data ) || ! isset( $cached_data['_remote_data'] ) ) {
87 $response = wp_safe_remote_get(
88 add_query_arg(
89 $args,
90 $this->get_api_base_url() . $path
91 ),
92 [
93 'timeout' => 10,
94 'headers' => [
95 'Accept' => 'application/json',
96 'Content-Type' => 'application/json',
97 ],
98 ]
99 );
100
101 // If WP_Error return without caching.
102 if ( is_wp_error( $response ) ) {
103 return $response;
104 }
105
106 // If HTTP error return without caching.
107 if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
108 $error_code = wp_remote_retrieve_response_code( $response );
109 return new \WP_Error( $error_code, 'Error code: ' . $error_code );
110 }
111
112 $remote_data = json_decode( wp_remote_retrieve_body( $response ), true );
113
114 if ( ! is_null( $remote_data ) ) {
115 $cached_data = [
116 '_fetched' => time(),
117 '_remote_data' => $remote_data,
118 ];
119 set_transient( $transient_key, $cached_data, $cache_ttl );
120 }
121
122 return $remote_data;
123 }
124
125 return $cached_data['_remote_data'];
126 }
127
128 /**
129 * Returns the API base URL.
130 *
131 * @return string
132 */
133 private function get_api_base_url() {
134 /**
135 * Filters the wpjobmanager.com API URL (which by default is https://wpjobmanager.com/wp-json/).
136 *
137 * @since 1.40.0
138 *
139 * @param string $api_url The API url.
140 *
141 * @return string The API url.
142 */
143 return apply_filters( 'wpjm_wpjmcom_api_url', \WP_Job_Manager_Helper_API::get_wpjmcom_url() . '/wp-json/' );
144 }
145
146 /**
147 * Generates the transient key for a given request.
148 *
149 * @param string $path The request path.
150 * @param array $args The request parameters.
151 *
152 * @return string The transient key.
153 */
154 private function get_request_transient_key( string $path, array $args ) {
155 $data = [
156 'path' => $path,
157 'args' => $args,
158 ];
159 return 'wpjmcom_' . md5( wp_json_encode( $data ) );
160 }
161 }
162