← All changes
|
json-endpoints/class.wpcom-json-api-get-site-endpoint.php
+199
-9
13.5.2
→
16.3-a.1
View file →
| @@ -1,6 +1,10 @@ | ||
| 1 | 1 | <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName |
| 2 | 2 | |
| 3 | +if ( ! defined( 'ABSPATH' ) ) { | |
| 4 | + exit( 0 ); | |
| 5 | +} | |
| 6 | + | |
| 3 | 7 | new WPCOM_JSON_API_GET_Site_Endpoint( |
| 4 | 8 | array( |
| 5 | 9 | 'description' => 'Get information about a site.', |
| 6 | 10 | 'group' => 'sites', |
| @@ -12,8 +16,10 @@ | ||
| 12 | 16 | 'path' => '/sites/%s', |
| 13 | 17 | 'path_labels' => array( |
| 14 | 18 | '$site' => '(int|string) Site ID or domain', |
| 15 | 19 | ), |
| 20 | + 'rest_route' => '/site', | |
| 21 | + 'rest_min_jp_version' => '15.9', | |
| 16 | 22 | 'allow_jetpack_site_auth' => true, |
| 17 | 23 | |
| 18 | 24 | 'allow_fallback_to_jetpack_blog_token' => true, |
| 19 | 25 | |
| @@ -29,8 +35,10 @@ | ||
| 29 | 35 | ); |
| 30 | 36 | |
| 31 | 37 | /** |
| 32 | 38 | * GET Site endpoint class. |
| 39 | + * | |
| 40 | + * @phan-constructor-used-for-side-effects | |
| 33 | 41 | */ |
| 34 | 42 | class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint { |
| 35 | 43 | |
| 36 | 44 | /** |
| @@ -39,8 +47,9 @@ | ||
| 39 | 47 | * @var array $site_format |
| 40 | 48 | */ |
| 41 | 49 | public static $site_format = array( |
| 42 | 50 | 'ID' => '(int) Site ID', |
| 51 | + 'slug' => '(string) Slug of site', | |
| 43 | 52 | 'name' => '(string) Title of site', |
| 44 | 53 | 'description' => '(string) Tagline or description of site', |
| 45 | 54 | 'URL' => '(string) Full URL to the site', |
| 46 | 55 | 'user_can_manage' => '(bool) The current user can manage this site', // deprecated. |
| @@ -83,8 +92,19 @@ | ||
| 83 | 92 | 'was_migration_trial' => '(bool) If the site ever used a migration trial.', |
| 84 | 93 | 'was_hosting_trial' => '(bool) If the site ever used a hosting trial.', |
| 85 | 94 | 'wpcom_site_setup' => '(string) The WP.com site setup identifier.', |
| 86 | 95 | 'is_deleted' => '(bool) If the site flagged as deleted.', |
| 96 | + 'is_a4a_client' => '(bool) If the site is an A4A client site.', | |
| 97 | + 'is_a4a_dev_site' => '(bool) If the site is an A4A dev site.', | |
| 98 | + 'is_garden' => '(bool) If the site is a Garden site.', | |
| 99 | + 'garden_name' => '(string) The name of the Garden site.', | |
| 100 | + 'garden_partner' => '(string) The partner of the Garden site.', | |
| 101 | + 'garden_is_provisioned' => '(bool) If the Garden site is provisioned.', | |
| 102 | + 'is_wpcom_flex' => '(bool) If the site is a Flex site', | |
| 103 | + 'big_sky_enabled' => '(bool) Whether the Big Sky AI assistant is enabled for this site.', | |
| 104 | + 'atomic_email_block' => '(object) State of the block on the site\'s outgoing email, with `status` (`blocked` while a block is active, `at_risk` once it has expired), `reason` and `expires_on` keys, or null when the site has no block history. WordPress.com platform only.', | |
| 105 | + 'hosting_provider_guess' => '(string) Guess of the hosting provider. WordPress.com platform only; only returned when explicitly requested via the fields parameter.', | |
| 106 | + 'environment_type' => '(string) The WP_ENVIRONMENT_TYPE of the site as synced by Jetpack. WordPress.com platform only; only returned when explicitly requested via the fields parameter.', | |
| 87 | 107 | ); |
| 88 | 108 | |
| 89 | 109 | /** |
| 90 | 110 | * No member fields. |
| @@ -117,8 +137,14 @@ | ||
| 117 | 137 | 'is_core_site_editor_enabled', |
| 118 | 138 | 'is_wpcom_atomic', |
| 119 | 139 | 'is_wpcom_staging_site', |
| 120 | 140 | 'is_deleted', |
| 141 | + 'is_wpcom_flex', | |
| 142 | + 'is_a4a_client', | |
| 143 | + 'is_a4a_dev_site', | |
| 144 | + 'is_garden', | |
| 145 | + 'big_sky_enabled', | |
| 146 | + 'garden_name', | |
| 121 | 147 | ); |
| 122 | 148 | |
| 123 | 149 | /** |
| 124 | 150 | * Site options. |
| @@ -137,8 +163,9 @@ | ||
| 137 | 163 | 'is_redirect', |
| 138 | 164 | 'unmapped_url', |
| 139 | 165 | 'featured_images_enabled', |
| 140 | 166 | 'theme_slug', |
| 167 | + 'theme_errors', | |
| 141 | 168 | 'header_image', |
| 142 | 169 | 'background_color', |
| 143 | 170 | 'image_default_link_type', |
| 144 | 171 | 'image_thumbnail_width', |
| @@ -197,13 +224,18 @@ | ||
| 197 | 224 | 'anchor_podcast', |
| 198 | 225 | 'was_created_with_blank_canvas_design', |
| 199 | 226 | 'videopress_storage_used', |
| 200 | 227 | 'is_difm_lite_in_progress', |
| 228 | + 'difm_lite_site_options', | |
| 229 | + 'is_gating_business_q1', | |
| 201 | 230 | 'site_intent', |
| 231 | + 'site_partner_bundle', | |
| 232 | + 'onboarding_segment', | |
| 202 | 233 | 'site_vertical_id', |
| 203 | 234 | 'blogging_prompts_settings', |
| 204 | 235 | 'launchpad_screen', |
| 205 | 236 | 'launchpad_checklist_tasks_statuses', |
| 237 | + 'migration_source_site_domain', | |
| 206 | 238 | 'wpcom_production_blog_id', |
| 207 | 239 | 'wpcom_staging_blog_ids', |
| 208 | 240 | 'can_blaze', |
| 209 | 241 | 'wpcom_site_setup', |
| @@ -210,8 +242,13 @@ | ||
| 210 | 242 | 'is_commercial', |
| 211 | 243 | 'is_commercial_reasons', |
| 212 | 244 | 'wpcom_admin_interface', |
| 213 | 245 | 'wpcom_classic_early_release', |
| 246 | + 'jetpack_recovery_mode_status', | |
| 247 | + 'apm_enabled', | |
| 248 | + 'wpcom_ai_launchpad_enabled', | |
| 249 | + 'wpcom_ai_launchpad_dismissed', | |
| 250 | + 'wpcom_ai_launchpad_completed', | |
| 214 | 251 | ); |
| 215 | 252 | |
| 216 | 253 | /** |
| 217 | 254 | * Jetpack response fields. |
| @@ -218,8 +255,9 @@ | ||
| 218 | 255 | * |
| 219 | 256 | * @var array $jetpack_response_field_additions |
| 220 | 257 | */ |
| 221 | 258 | protected static $jetpack_response_field_additions = array( |
| 259 | + 'slug', | |
| 222 | 260 | 'subscribers_count', |
| 223 | 261 | 'site_migration', |
| 224 | 262 | 'site_owner', |
| 225 | 263 | 'is_wpcom_staging_site', |
| @@ -226,8 +264,16 @@ | ||
| 226 | 264 | 'was_ecommerce_trial', |
| 227 | 265 | 'was_migration_trial', |
| 228 | 266 | 'was_hosting_trial', |
| 229 | 267 | 'was_upgraded_from_trial', |
| 268 | + 'is_a4a_dev_site', | |
| 269 | + 'is_garden', | |
| 270 | + 'garden_name', | |
| 271 | + 'garden_partner', | |
| 272 | + 'garden_is_provisioned', | |
| 273 | + 'is_wpcom_flex', | |
| 274 | + 'big_sky_enabled', | |
| 275 | + 'atomic_email_block', | |
| 230 | 276 | ); |
| 231 | 277 | |
| 232 | 278 | /** |
| 233 | 279 | * Jetpack response field member additions. |
| @@ -243,9 +289,9 @@ | ||
| 243 | 289 | |
| 244 | 290 | /** |
| 245 | 291 | * Jetpack response option additions. |
| 246 | 292 | * |
| 247 | - * @var array $jetpack_response_field_member_additions | |
| 293 | + * @var array $jetpack_response_option_additions | |
| 248 | 294 | */ |
| 249 | 295 | protected static $jetpack_response_option_additions = array( |
| 250 | 296 | 'publicize_permanently_disabled', |
| 251 | 297 | 'ak_vp_bundle_enabled', |
| @@ -272,8 +318,10 @@ | ||
| 272 | 318 | 'is_commercial', |
| 273 | 319 | 'is_commercial_reasons', |
| 274 | 320 | 'wpcom_admin_interface', |
| 275 | 321 | 'wpcom_classic_early_release', |
| 322 | + 'jetpack_recovery_mode_status', | |
| 323 | + 'apm_enabled', | |
| 276 | 324 | ); |
| 277 | 325 | |
| 278 | 326 | /** |
| 279 | 327 | * Current enabled trials. |
| @@ -286,9 +334,9 @@ | ||
| 286 | 334 | 'was_hosting_trial' => 'hosting', |
| 287 | 335 | ); |
| 288 | 336 | |
| 289 | 337 | /** |
| 290 | - * Site | |
| 338 | + * Site. | |
| 291 | 339 | * |
| 292 | 340 | * @var SAL_Site $site. |
| 293 | 341 | */ |
| 294 | 342 | private $site; |
| @@ -313,10 +361,12 @@ | ||
| 313 | 361 | * |
| 314 | 362 | * /sites/mine |
| 315 | 363 | * /sites/%s -> $blog_id\ |
| 316 | 364 | * |
| 317 | - * @param string $path - the path. | |
| 318 | - * @param int $blog_id - the blog ID. | |
| 365 | + * @param string $path - the path. | |
| 366 | + * @param int|string $blog_id - the blog ID or the string 'mine'. | |
| 367 | + * | |
| 368 | + * @return array|\WP_Error Site response array on success, or WP_Error on failure. | |
| 319 | 369 | */ |
| 320 | 370 | public function callback( $path = '', $blog_id = 0 ) { |
| 321 | 371 | if ( 'mine' === $blog_id ) { |
| 322 | 372 | $api = WPCOM_JSON_API::init(); |
| @@ -452,8 +502,11 @@ | ||
| 452 | 502 | switch ( $key ) { |
| 453 | 503 | case 'ID': |
| 454 | 504 | $response[ $key ] = $this->site->blog_id; |
| 455 | 505 | break; |
| 506 | + case 'slug': | |
| 507 | + $response[ $key ] = $this->site->get_slug(); | |
| 508 | + break; | |
| 456 | 509 | case 'name': |
| 457 | 510 | $response[ $key ] = $this->site->get_name(); |
| 458 | 511 | break; |
| 459 | 512 | case 'description': |
| @@ -603,8 +656,51 @@ | ||
| 603 | 656 | break; |
| 604 | 657 | case 'is_deleted': |
| 605 | 658 | $response[ $key ] = $this->site->is_deleted(); |
| 606 | 659 | break; |
| 660 | + case 'is_a4a_client': | |
| 661 | + $response[ $key ] = $this->site->is_a4a_client(); | |
| 662 | + break; | |
| 663 | + case 'is_a4a_dev_site': | |
| 664 | + $response[ $key ] = $this->site->is_a4a_dev_site(); | |
| 665 | + break; | |
| 666 | + case 'is_garden': | |
| 667 | + $response[ $key ] = $this->site->is_garden(); | |
| 668 | + break; | |
| 669 | + case 'garden_name': | |
| 670 | + $response[ $key ] = $this->site->garden_name(); | |
| 671 | + break; | |
| 672 | + case 'garden_partner': | |
| 673 | + $response[ $key ] = $this->site->garden_partner(); | |
| 674 | + break; | |
| 675 | + case 'garden_is_provisioned': | |
| 676 | + $response[ $key ] = $this->site->garden_is_provisioned(); | |
| 677 | + break; | |
| 678 | + case 'is_wpcom_flex': | |
| 679 | + $response[ $key ] = $this->site->is_wpcom_flex(); | |
| 680 | + break; | |
| 681 | + case 'big_sky_enabled': | |
| 682 | + $response[ $key ] = $this->site->is_big_sky_enabled(); | |
| 683 | + break; | |
| 684 | + case 'atomic_email_block': | |
| 685 | + $response[ $key ] = $this->site->get_atomic_email_block(); | |
| 686 | + break; | |
| 687 | + case 'hosting_provider_guess': | |
| 688 | + // WordPress.com platform decoration, computed only when explicitly requested | |
| 689 | + // via `fields` so default `_all` responses are unchanged. | |
| 690 | + if ( $this->is_wpcom() | |
| 691 | + && function_exists( 'get_jetpack_hosting_provider' ) | |
| 692 | + && is_array( $this->fields_to_include ) ) { | |
| 693 | + $response[ $key ] = get_jetpack_hosting_provider( get_current_blog_id() ); | |
| 694 | + } | |
| 695 | + break; | |
| 696 | + case 'environment_type': | |
| 697 | + // WordPress.com platform decoration, computed only when explicitly requested | |
| 698 | + // via `fields` so default `_all` responses are unchanged. | |
| 699 | + if ( $this->is_wpcom() && is_array( $this->fields_to_include ) ) { | |
| 700 | + $response[ $key ] = $this->get_site_environment_type(); | |
| 701 | + } | |
| 702 | + break; | |
| 607 | 703 | } |
| 608 | 704 | |
| 609 | 705 | do_action( 'post_render_site_response_key', $key ); |
| 610 | 706 | } |
| @@ -654,8 +750,11 @@ | ||
| 654 | 750 | break; |
| 655 | 751 | case 'theme_slug': |
| 656 | 752 | $options[ $key ] = $site->get_theme_slug(); |
| 657 | 753 | break; |
| 754 | + case 'theme_errors': | |
| 755 | + $options[ $key ] = $site->get_theme_errors(); | |
| 756 | + break; | |
| 658 | 757 | case 'header_image': |
| 659 | 758 | $options[ $key ] = $site->get_header_image(); |
| 660 | 759 | break; |
| 661 | 760 | case 'background_color': |
| @@ -857,11 +956,29 @@ | ||
| 857 | 956 | break; |
| 858 | 957 | case 'is_difm_lite_in_progress': |
| 859 | 958 | $options[ $key ] = $site->is_difm_lite_in_progress(); |
| 860 | 959 | break; |
| 960 | + case 'difm_lite_site_options': | |
| 961 | + $difm_lite_site_options = $site->get_difm_lite_site_options(); | |
| 962 | + if ( null !== $difm_lite_site_options ) { | |
| 963 | + $options[ $key ] = (object) $difm_lite_site_options; | |
| 964 | + } | |
| 965 | + break; | |
| 966 | + case 'is_gating_business_q1': | |
| 967 | + $options[ $key ] = $site->is_gating_business_q1(); | |
| 968 | + break; | |
| 861 | 969 | case 'site_intent': |
| 862 | 970 | $options[ $key ] = $site->get_site_intent(); |
| 863 | 971 | break; |
| 972 | + case 'site_partner_bundle': | |
| 973 | + $options[ $key ] = $site->get_site_partner_bundle(); | |
| 974 | + break; | |
| 975 | + case 'site_goals': | |
| 976 | + $options[ $key ] = $site->get_site_goals(); | |
| 977 | + break; | |
| 978 | + case 'onboarding_segment': | |
| 979 | + $options[ $key ] = $site->get_onboarding_segment(); | |
| 980 | + break; | |
| 864 | 981 | case 'site_vertical_id': |
| 865 | 982 | $options[ $key ] = $site->get_site_vertical_id(); |
| 866 | 983 | break; |
| 867 | 984 | case 'blogging_prompts_settings': |
| @@ -874,8 +991,11 @@ | ||
| 874 | 991 | break; |
| 875 | 992 | case 'launchpad_checklist_tasks_statuses': |
| 876 | 993 | $options[ $key ] = $site->get_launchpad_checklist_tasks_statuses(); |
| 877 | 994 | break; |
| 995 | + case 'migration_source_site_domain': | |
| 996 | + $options[ $key ] = $site->get_migration_source_site_domain(); | |
| 997 | + break; | |
| 878 | 998 | case 'wpcom_production_blog_id': |
| 879 | 999 | $options[ $key ] = $site->get_wpcom_production_blog_id(); |
| 880 | 1000 | break; |
| 881 | 1001 | case 'wpcom_staging_blog_ids': |
| @@ -898,8 +1018,23 @@ | ||
| 898 | 1018 | break; |
| 899 | 1019 | case 'wpcom_classic_early_release': |
| 900 | 1020 | $options[ $key ] = $site->get_wpcom_classic_early_release(); |
| 901 | 1021 | break; |
| 1022 | + case 'jetpack_recovery_mode_status': | |
| 1023 | + $options[ $key ] = $site->get_jetpack_recovery_mode_status(); | |
| 1024 | + break; | |
| 1025 | + case 'apm_enabled': | |
| 1026 | + $options[ $key ] = $site->get_apm_enabled(); | |
| 1027 | + break; | |
| 1028 | + case 'wpcom_ai_launchpad_enabled': | |
| 1029 | + $options[ $key ] = $site->is_ai_launchpad_enabled(); | |
| 1030 | + break; | |
| 1031 | + case 'wpcom_ai_launchpad_dismissed': | |
| 1032 | + $options[ $key ] = $site->is_ai_launchpad_dismissed(); | |
| 1033 | + break; | |
| 1034 | + case 'wpcom_ai_launchpad_completed': | |
| 1035 | + $options[ $key ] = $site->is_ai_launchpad_completed(); | |
| 1036 | + break; | |
| 902 | 1037 | } |
| 903 | 1038 | } |
| 904 | 1039 | |
| 905 | 1040 | return $options; |
| @@ -931,14 +1066,20 @@ | ||
| 931 | 1066 | |
| 932 | 1067 | /** |
| 933 | 1068 | * Apply any WPCOM-only response components to a Jetpack site response. |
| 934 | 1069 | * |
| 935 | - * @param array $response - the response. | |
| 1070 | + * @param object $response - the response. | |
| 936 | 1071 | */ |
| 937 | 1072 | public function decorate_jetpack_response( &$response ) { |
| 1073 | + $this->filter_fields_and_options(); | |
| 938 | 1074 | $this->site = $this->get_platform()->get_site( $response->ID ); |
| 939 | 1075 | switch_to_blog( $this->site->get_id() ); |
| 940 | 1076 | |
| 1077 | + // Allow the SAL site to apply its own overrides to the proxied response. | |
| 1078 | + if ( method_exists( $this->site, 'decorate_jetpack_response' ) ) { | |
| 1079 | + $this->site->decorate_jetpack_response( $response ); // @phan-suppress-current-line PhanUndeclaredMethod -- checked via method_exists(). | |
| 1080 | + } | |
| 1081 | + | |
| 941 | 1082 | $wpcom_response = $this->render_response_keys( self::$jetpack_response_field_additions ); |
| 942 | 1083 | |
| 943 | 1084 | foreach ( $wpcom_response as $key => $value ) { |
| 944 | 1085 | $response->{ $key } = $value; |
| @@ -943,9 +1084,11 @@ | ||
| 943 | 1084 | foreach ( $wpcom_response as $key => $value ) { |
| 944 | 1085 | $response->{ $key } = $value; |
| 945 | 1086 | } |
| 946 | 1087 | |
| 947 | - if ( $this->has_user_access() || $this->has_blog_access( $this->api->token_details ) ) { | |
| 1088 | + $has_site_access = $this->has_user_access() || $this->has_blog_access( $this->api->token_details ); | |
| 1089 | + | |
| 1090 | + if ( $has_site_access ) { | |
| 948 | 1091 | $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions ); |
| 949 | 1092 | |
| 950 | 1093 | foreach ( $wpcom_member_response as $key => $value ) { |
| 951 | 1094 | $response->{ $key } = $value; |
| @@ -964,8 +1107,9 @@ | ||
| 964 | 1107 | unset( $response->site_owner ); |
| 965 | 1108 | unset( $response->plan ); |
| 966 | 1109 | unset( $response->products ); |
| 967 | 1110 | unset( $response->zendesk_site_meta ); |
| 1111 | + unset( $response->atomic_email_block ); | |
| 968 | 1112 | } |
| 969 | 1113 | |
| 970 | 1114 | // render additional options. |
| 971 | 1115 | if ( isset( $response->options ) && $response->options ) { |
| @@ -973,13 +1117,18 @@ | ||
| 973 | 1117 | |
| 974 | 1118 | // Remove heic from jetpack (and atomic) sites so that the iOS app know to convert the file format into a JPEG. |
| 975 | 1119 | // heic fromat is currently not supported by for uploading. |
| 976 | 1120 | // See https://jetpackp2.wordpress.com/2020/08/19/image-uploads-in-the-wp-ios-app-broken |
| 977 | - if ( $this->site->is_jetpack() && isset( $response->options['allowed_file_types'] ) ) { | |
| 1121 | + if ( | |
| 1122 | + $this->site->is_jetpack() | |
| 1123 | + && isset( $response->options['allowed_file_types'] ) | |
| 1124 | + && is_array( $response->options['allowed_file_types'] ) | |
| 1125 | + ) { | |
| 1126 | + $allowed_file_types = (array) $response->options['allowed_file_types']; | |
| 978 | 1127 | $remove_file_types = array( |
| 979 | 1128 | 'heic', |
| 980 | 1129 | ); |
| 981 | - $response->options['allowed_file_types'] = array_values( array_diff( $response->options['allowed_file_types'], $remove_file_types ) ); | |
| 1130 | + $response->options['allowed_file_types'] = array_values( array_diff( $allowed_file_types, $remove_file_types ) ); | |
| 982 | 1131 | } |
| 983 | 1132 | |
| 984 | 1133 | foreach ( $wpcom_options_response as $key => $value ) { |
| 985 | 1134 | $response->options[ $key ] = $value; |
| @@ -985,11 +1134,44 @@ | ||
| 985 | 1134 | $response->options[ $key ] = $value; |
| 986 | 1135 | } |
| 987 | 1136 | } |
| 988 | 1137 | |
| 1138 | + // WordPress.com platform fields are not part of proxied Jetpack responses; | |
| 1139 | + // add them only when explicitly requested. | |
| 1140 | + if ( $this->is_wpcom() && $has_site_access && is_array( $this->fields_to_include ) ) { | |
| 1141 | + if ( function_exists( 'get_jetpack_hosting_provider' ) && in_array( 'hosting_provider_guess', $this->fields_to_include, true ) ) { | |
| 1142 | + $response->hosting_provider_guess = get_jetpack_hosting_provider( get_current_blog_id() ); | |
| 1143 | + } | |
| 1144 | + if ( in_array( 'environment_type', $this->fields_to_include, true ) ) { | |
| 1145 | + $response->environment_type = $this->get_site_environment_type(); | |
| 1146 | + } | |
| 1147 | + } | |
| 1148 | + | |
| 989 | 1149 | restore_current_blog(); |
| 990 | 1150 | return $response; // possibly no need since it's modified in place. |
| 991 | 1151 | } |
| 1152 | + | |
| 1153 | + /** | |
| 1154 | + * Whether this request is running on the WordPress.com platform. | |
| 1155 | + * | |
| 1156 | + * @return bool | |
| 1157 | + */ | |
| 1158 | + protected function is_wpcom() { | |
| 1159 | + return ( new \Automattic\Jetpack\Status\Host() )->is_wpcom_platform(); | |
| 1160 | + } | |
| 1161 | + | |
| 1162 | + /** | |
| 1163 | + * Get the site's synced WP_ENVIRONMENT_TYPE. | |
| 1164 | + * | |
| 1165 | + * @return string|null | |
| 1166 | + */ | |
| 1167 | + protected function get_site_environment_type() { | |
| 1168 | + if ( function_exists( 'get_blog_option' ) ) { | |
| 1169 | + return get_blog_option( get_current_blog_id(), 'jetpack_callable_wp_get_environment_type', null ); | |
| 1170 | + } | |
| 1171 | + | |
| 1172 | + return get_option( 'jetpack_callable_wp_get_environment_type', null ); | |
| 1173 | + } | |
| 992 | 1174 | } |
| 993 | 1175 | |
| 994 | 1176 | new WPCOM_JSON_API_List_Post_Formats_Endpoint( |
| 995 | 1177 | array( |
| @@ -1015,9 +1197,11 @@ | ||
| 1015 | 1197 | ) |
| 1016 | 1198 | ); |
| 1017 | 1199 | |
| 1018 | 1200 | /** |
| 1019 | - * List Post Formates endpoint class. | |
| 1201 | + * List Post Formats endpoint class. | |
| 1202 | + * | |
| 1203 | + * @phan-constructor-used-for-side-effects | |
| 1020 | 1204 | */ |
| 1021 | 1205 | class WPCOM_JSON_API_List_Post_Formats_Endpoint extends WPCOM_JSON_API_Endpoint { // phpcs:ignore |
| 1022 | 1206 | /** |
| 1023 | 1207 | * |
| @@ -1026,8 +1210,10 @@ | ||
| 1026 | 1210 | * /sites/%s/post-formats -> $blog_id |
| 1027 | 1211 | * |
| 1028 | 1212 | * @param string $path - the path. |
| 1029 | 1213 | * @param int $blog_id - the blog ID. |
| 1214 | + * | |
| 1215 | + * @return array|\WP_Error Array with 'formats' on success, or WP_Error on failure. | |
| 1030 | 1216 | */ |
| 1031 | 1217 | public function callback( $path = '', $blog_id = 0 ) { |
| 1032 | 1218 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
| 1033 | 1219 | if ( is_wp_error( $blog_id ) ) { |
| @@ -1081,8 +1267,10 @@ | ||
| 1081 | 1267 | ); |
| 1082 | 1268 | |
| 1083 | 1269 | /** |
| 1084 | 1270 | * List page templates endpoint class. |
| 1271 | + * | |
| 1272 | + * @phan-constructor-used-for-side-effects | |
| 1085 | 1273 | */ |
| 1086 | 1274 | class WPCOM_JSON_API_List_Page_Templates_Endpoint extends WPCOM_JSON_API_Endpoint { // phpcs:ignore |
| 1087 | 1275 | /** |
| 1088 | 1276 | * |
| @@ -1090,8 +1278,10 @@ | ||
| 1090 | 1278 | * /sites/%s/page-templates -> $blog_id |
| 1091 | 1279 | * |
| 1092 | 1280 | * @param string $path - the path. |
| 1093 | 1281 | * @param int $blog_id - the blog ID. |
| 1282 | + * | |
| 1283 | + * @return array|\WP_Error Array with 'templates' on success, or WP_Error on failure. | |
| 1094 | 1284 | */ |
| 1095 | 1285 | public function callback( $path = '', $blog_id = 0 ) { |
| 1096 | 1286 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
| 1097 | 1287 | if ( is_wp_error( $blog_id ) ) { |