Changeset 3430267
- Timestamp:
- 12/31/2025 09:09:36 PM (3 months ago)
- Location:
- letterhead/trunk
- Files:
-
- 6 edited
-
app/Controllers/AdminNetworkController.php (modified) (1 diff)
-
app/Controllers/AdminSingleController.php (modified) (1 diff)
-
app/Services/ApiService.php (modified) (5 diffs)
-
app/Services/OptionsService.php (modified) (5 diffs)
-
letterhead.php (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
letterhead/trunk/app/Controllers/AdminNetworkController.php
r3418708 r3430267 237 237 OptionsService::set_api_key($key); 238 238 OptionsService::set_server_prefix($prefix); 239 240 // Detect and store the correct API version 241 ApiService::detect_and_store_api_version(); 239 242 240 243 /** -
letterhead/trunk/app/Controllers/AdminSingleController.php
r3418708 r3430267 149 149 OptionsService::set_api_key($key); 150 150 OptionsService::set_server_prefix($prefix); 151 152 // Detect and store the correct API version 153 ApiService::detect_and_store_api_version(); 151 154 152 155 wp_safe_redirect(add_query_arg([ -
letterhead/trunk/app/Services/ApiService.php
r3400659 r3430267 6 6 /** 7 7 * Base URL for the Letterhead API, constructed from the server prefix option. 8 */ 9 private static function base_url(): string 8 * 9 * @param string|null $version API version to use ('v2' or 'v3'). If null, uses stored version. 10 */ 11 private static function base_url(?string $version = null): string 10 12 { 11 13 $prefix = OptionsService::get_server_prefix(); … … 14 16 return ''; 15 17 } 16 return 'https://' . $prefix . '.api.tryletterhead.com/api/v3'; 17 } 18 18 19 if ($version === null) { 20 $version = OptionsService::get_api_version(); 21 } 22 23 // Ensure we always have a version, defaulting to v3 for existing users 24 if ($version === '') { 25 $version = 'v3'; 26 } 27 28 return 'https://' . $prefix . '.api.tryletterhead.com/api/' . $version; 29 } 30 31 32 /** 33 * Detect and store the correct API version by trying v3 first, then v2. 34 * Should be called after setting API key and server prefix. 35 */ 36 public static function detect_and_store_api_version(): void 37 { 38 $key = OptionsService::get_api_key(); 39 $prefix = OptionsService::get_server_prefix(); 40 41 if ($key === '' || $prefix === '') { 42 return; 43 } 44 45 // Try v3 first 46 $url = self::base_url('v3') . '/channels?api=true'; 47 $response = wp_remote_get($url, [ 48 'headers' => [ 49 'Accept' => 'application/json', 50 'Authorization' => 'Bearer ' . $key, 51 ], 52 'timeout' => 15, 53 'sslverify' => true, 54 ]); 55 56 $status_code = wp_remote_retrieve_response_code($response); 57 58 // If v3 works, store it 59 if (!is_wp_error($response) && $status_code >= 200 && $status_code < 300) { 60 OptionsService::set_api_version('v3'); 61 return; 62 } 63 64 // If v3 returns 403, try v2 65 if ($status_code === 403) { 66 $url = self::base_url('v2') . '/channels?api=true'; 67 $response = wp_remote_get($url, [ 68 'headers' => [ 69 'Accept' => 'application/json', 70 'Authorization' => 'Bearer ' . $key, 71 ], 72 'timeout' => 15, 73 'sslverify' => true, 74 ]); 75 76 $status_code = wp_remote_retrieve_response_code($response); 77 78 // If v2 works, store it 79 if (!is_wp_error($response) && $status_code >= 200 && $status_code < 300) { 80 OptionsService::set_api_version('v2'); 81 return; 82 } 83 } 84 85 // If neither works, keep default v3 86 OptionsService::set_api_version('v3'); 87 } 19 88 20 89 /** … … 64 133 } 65 134 66 $url = ApiService::base_url() . '/channels?api=true';135 $url = self::base_url() . '/channels?api=true'; 67 136 68 137 /** … … 80 149 'timeout' => 15, 81 150 82 'sslverify' => false,151 'sslverify' => true, 83 152 ]); 84 153 … … 98 167 * @see https://developer.wordpress.org/reference/functions/is_wp_error/ 99 168 */ 100 if (is_wp_error($response) || $status_code !== 200) {169 if (is_wp_error($response) || !($status_code >= 200 && $status_code < 300)) { 101 170 $errorCode = is_wp_error($response) ? $response->get_error_code() : $status_code; 102 171 -
letterhead/trunk/app/Services/OptionsService.php
r3418708 r3430267 87 87 self::delete('letterhead_api_key'); 88 88 self::delete_transient('letterhead_channels_cache'); 89 self::delete('letterhead_api_version'); 89 90 } 90 91 … … 92 93 { 93 94 self::delete('letterhead_server_prefix'); 95 self::delete('letterhead_api_version'); 96 } 97 98 public static function delete_api_version(): void 99 { 100 self::delete('letterhead_api_version'); 94 101 } 95 102 … … 116 123 self::add('letterhead_channel_map', []); 117 124 self::add('letterhead_server_prefix', ''); 125 self::add('letterhead_api_version', 'v3'); 118 126 } 119 127 … … 182 190 self::update('letterhead_api_key', trim($key)); 183 191 self::delete_transient('letterhead_channels_cache'); 192 self::delete('letterhead_api_version'); 184 193 } 185 194 … … 216 225 { 217 226 self::update('letterhead_server_prefix', trim($prefix)); 227 self::delete('letterhead_api_version'); 228 } 229 230 public static function get_api_version(): string 231 { 232 return (string) self::get('letterhead_api_version', 'v3'); 233 } 234 235 public static function set_api_version(string $version): void 236 { 237 self::update('letterhead_api_version', trim($version)); 218 238 } 219 239 } -
letterhead/trunk/letterhead.php
r3423425 r3430267 3 3 * Plugin Name: Letterhead 4 4 * Description: Curate your posts for your Letterhead newsletters. 5 * Version: 0. 2.25 * Version: 0.3.0 6 6 * Author: Letterhead 7 7 * Requires PHP: 7.4 -
letterhead/trunk/readme.txt
r3423425 r3430267 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 0. 2.27 Stable tag: 0.3.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 19 19 20 20 == Changelog == 21 = 0.3.0= 22 * We introduced support for organization administrators to connect with WordPress. Prior to this release, only customers on certain plans could connect. This introduces no end-user facing changes to our plugin, but it makes it available to everyone - hence the version bump. 23 21 24 = 0.2.2 = 22 25 * Updated to include the author's name in curated posts.
Note: See TracChangeset
for help on using the changeset viewer.