Plugin Directory

Changeset 3430267


Ignore:
Timestamp:
12/31/2025 09:09:36 PM (3 months ago)
Author:
tryletterhead
Message:

Release 0.3.0

Location:
letterhead/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • letterhead/trunk/app/Controllers/AdminNetworkController.php

    r3418708 r3430267  
    237237        OptionsService::set_api_key($key);
    238238        OptionsService::set_server_prefix($prefix);
     239
     240        // Detect and store the correct API version
     241        ApiService::detect_and_store_api_version();
    239242
    240243        /**
  • letterhead/trunk/app/Controllers/AdminSingleController.php

    r3418708 r3430267  
    149149        OptionsService::set_api_key($key);
    150150        OptionsService::set_server_prefix($prefix);
     151
     152        // Detect and store the correct API version
     153        ApiService::detect_and_store_api_version();
    151154
    152155        wp_safe_redirect(add_query_arg([
  • letterhead/trunk/app/Services/ApiService.php

    r3400659 r3430267  
    66    /**
    77     * 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
    1012    {
    1113        $prefix = OptionsService::get_server_prefix();
     
    1416            return '';
    1517        }
    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    }
    1988
    2089    /**
     
    64133        }
    65134
    66         $url = ApiService::base_url() . '/channels?api=true';
     135        $url = self::base_url() . '/channels?api=true';
    67136
    68137        /**
     
    80149            'timeout' => 15,
    81150
    82             'sslverify' => false,
     151            'sslverify' => true,
    83152        ]);
    84153
     
    98167         * @see https://developer.wordpress.org/reference/functions/is_wp_error/
    99168         */
    100         if (is_wp_error($response) || $status_code !== 200) {
     169        if (is_wp_error($response) || !($status_code >= 200 && $status_code < 300)) {
    101170            $errorCode = is_wp_error($response) ? $response->get_error_code() : $status_code;
    102171
  • letterhead/trunk/app/Services/OptionsService.php

    r3418708 r3430267  
    8787        self::delete('letterhead_api_key');
    8888        self::delete_transient('letterhead_channels_cache');
     89        self::delete('letterhead_api_version');
    8990    }
    9091
     
    9293    {
    9394        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');
    94101    }
    95102
     
    116123        self::add('letterhead_channel_map', []);
    117124        self::add('letterhead_server_prefix', '');
     125        self::add('letterhead_api_version', 'v3');
    118126    }
    119127
     
    182190        self::update('letterhead_api_key', trim($key));
    183191        self::delete_transient('letterhead_channels_cache');
     192        self::delete('letterhead_api_version');
    184193    }
    185194
     
    216225    {
    217226        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));
    218238    }
    219239}
  • letterhead/trunk/letterhead.php

    r3423425 r3430267  
    33 * Plugin Name:       Letterhead
    44 * Description:       Curate your posts for your Letterhead newsletters.
    5  * Version:           0.2.2
     5 * Version:           0.3.0
    66 * Author:            Letterhead
    77 * Requires PHP:      7.4
  • letterhead/trunk/readme.txt

    r3423425 r3430267  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 0.2.2
     7Stable tag: 0.3.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    1919
    2020== 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
    2124= 0.2.2 =
    2225* Updated to include the author's name in curated posts.
Note: See TracChangeset for help on using the changeset viewer.