← All changes
|
json-endpoints/class.wpcom-json-api-get-site-endpoint.php
+183
-10
13.7.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. |
| @@ -84,8 +93,18 @@ | ||
| 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.', |
| 87 | 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.', | |
| 88 | 107 | ); |
| 89 | 108 | |
| 90 | 109 | /** |
| 91 | 110 | * No member fields. |
| @@ -118,9 +137,14 @@ | ||
| 118 | 137 | 'is_core_site_editor_enabled', |
| 119 | 138 | 'is_wpcom_atomic', |
| 120 | 139 | 'is_wpcom_staging_site', |
| 121 | 140 | 'is_deleted', |
| 141 | + 'is_wpcom_flex', | |
| 122 | 142 | 'is_a4a_client', |
| 143 | + 'is_a4a_dev_site', | |
| 144 | + 'is_garden', | |
| 145 | + 'big_sky_enabled', | |
| 146 | + 'garden_name', | |
| 123 | 147 | ); |
| 124 | 148 | |
| 125 | 149 | /** |
| 126 | 150 | * Site options. |
| @@ -200,15 +224,18 @@ | ||
| 200 | 224 | 'anchor_podcast', |
| 201 | 225 | 'was_created_with_blank_canvas_design', |
| 202 | 226 | 'videopress_storage_used', |
| 203 | 227 | 'is_difm_lite_in_progress', |
| 228 | + 'difm_lite_site_options', | |
| 229 | + 'is_gating_business_q1', | |
| 204 | 230 | 'site_intent', |
| 205 | - 'site_goals', | |
| 231 | + 'site_partner_bundle', | |
| 206 | 232 | 'onboarding_segment', |
| 207 | 233 | 'site_vertical_id', |
| 208 | 234 | 'blogging_prompts_settings', |
| 209 | 235 | 'launchpad_screen', |
| 210 | 236 | 'launchpad_checklist_tasks_statuses', |
| 237 | + 'migration_source_site_domain', | |
| 211 | 238 | 'wpcom_production_blog_id', |
| 212 | 239 | 'wpcom_staging_blog_ids', |
| 213 | 240 | 'can_blaze', |
| 214 | 241 | 'wpcom_site_setup', |
| @@ -215,8 +242,13 @@ | ||
| 215 | 242 | 'is_commercial', |
| 216 | 243 | 'is_commercial_reasons', |
| 217 | 244 | 'wpcom_admin_interface', |
| 218 | 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', | |
| 219 | 251 | ); |
| 220 | 252 | |
| 221 | 253 | /** |
| 222 | 254 | * Jetpack response fields. |
| @@ -223,8 +255,9 @@ | ||
| 223 | 255 | * |
| 224 | 256 | * @var array $jetpack_response_field_additions |
| 225 | 257 | */ |
| 226 | 258 | protected static $jetpack_response_field_additions = array( |
| 259 | + 'slug', | |
| 227 | 260 | 'subscribers_count', |
| 228 | 261 | 'site_migration', |
| 229 | 262 | 'site_owner', |
| 230 | 263 | 'is_wpcom_staging_site', |
| @@ -231,8 +264,16 @@ | ||
| 231 | 264 | 'was_ecommerce_trial', |
| 232 | 265 | 'was_migration_trial', |
| 233 | 266 | 'was_hosting_trial', |
| 234 | 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', | |
| 235 | 276 | ); |
| 236 | 277 | |
| 237 | 278 | /** |
| 238 | 279 | * Jetpack response field member additions. |
| @@ -248,9 +289,9 @@ | ||
| 248 | 289 | |
| 249 | 290 | /** |
| 250 | 291 | * Jetpack response option additions. |
| 251 | 292 | * |
| 252 | - * @var array $jetpack_response_field_member_additions | |
| 293 | + * @var array $jetpack_response_option_additions | |
| 253 | 294 | */ |
| 254 | 295 | protected static $jetpack_response_option_additions = array( |
| 255 | 296 | 'publicize_permanently_disabled', |
| 256 | 297 | 'ak_vp_bundle_enabled', |
| @@ -277,8 +318,10 @@ | ||
| 277 | 318 | 'is_commercial', |
| 278 | 319 | 'is_commercial_reasons', |
| 279 | 320 | 'wpcom_admin_interface', |
| 280 | 321 | 'wpcom_classic_early_release', |
| 322 | + 'jetpack_recovery_mode_status', | |
| 323 | + 'apm_enabled', | |
| 281 | 324 | ); |
| 282 | 325 | |
| 283 | 326 | /** |
| 284 | 327 | * Current enabled trials. |
| @@ -291,9 +334,9 @@ | ||
| 291 | 334 | 'was_hosting_trial' => 'hosting', |
| 292 | 335 | ); |
| 293 | 336 | |
| 294 | 337 | /** |
| 295 | - * Site | |
| 338 | + * Site. | |
| 296 | 339 | * |
| 297 | 340 | * @var SAL_Site $site. |
| 298 | 341 | */ |
| 299 | 342 | private $site; |
| @@ -318,10 +361,12 @@ | ||
| 318 | 361 | * |
| 319 | 362 | * /sites/mine |
| 320 | 363 | * /sites/%s -> $blog_id\ |
| 321 | 364 | * |
| 322 | - * @param string $path - the path. | |
| 323 | - * @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. | |
| 324 | 369 | */ |
| 325 | 370 | public function callback( $path = '', $blog_id = 0 ) { |
| 326 | 371 | if ( 'mine' === $blog_id ) { |
| 327 | 372 | $api = WPCOM_JSON_API::init(); |
| @@ -457,8 +502,11 @@ | ||
| 457 | 502 | switch ( $key ) { |
| 458 | 503 | case 'ID': |
| 459 | 504 | $response[ $key ] = $this->site->blog_id; |
| 460 | 505 | break; |
| 506 | + case 'slug': | |
| 507 | + $response[ $key ] = $this->site->get_slug(); | |
| 508 | + break; | |
| 461 | 509 | case 'name': |
| 462 | 510 | $response[ $key ] = $this->site->get_name(); |
| 463 | 511 | break; |
| 464 | 512 | case 'description': |
| @@ -611,8 +659,48 @@ | ||
| 611 | 659 | break; |
| 612 | 660 | case 'is_a4a_client': |
| 613 | 661 | $response[ $key ] = $this->site->is_a4a_client(); |
| 614 | 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; | |
| 615 | 703 | } |
| 616 | 704 | |
| 617 | 705 | do_action( 'post_render_site_response_key', $key ); |
| 618 | 706 | } |
| @@ -868,11 +956,23 @@ | ||
| 868 | 956 | break; |
| 869 | 957 | case 'is_difm_lite_in_progress': |
| 870 | 958 | $options[ $key ] = $site->is_difm_lite_in_progress(); |
| 871 | 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; | |
| 872 | 969 | case 'site_intent': |
| 873 | 970 | $options[ $key ] = $site->get_site_intent(); |
| 874 | 971 | break; |
| 972 | + case 'site_partner_bundle': | |
| 973 | + $options[ $key ] = $site->get_site_partner_bundle(); | |
| 974 | + break; | |
| 875 | 975 | case 'site_goals': |
| 876 | 976 | $options[ $key ] = $site->get_site_goals(); |
| 877 | 977 | break; |
| 878 | 978 | case 'onboarding_segment': |
| @@ -891,8 +991,11 @@ | ||
| 891 | 991 | break; |
| 892 | 992 | case 'launchpad_checklist_tasks_statuses': |
| 893 | 993 | $options[ $key ] = $site->get_launchpad_checklist_tasks_statuses(); |
| 894 | 994 | break; |
| 995 | + case 'migration_source_site_domain': | |
| 996 | + $options[ $key ] = $site->get_migration_source_site_domain(); | |
| 997 | + break; | |
| 895 | 998 | case 'wpcom_production_blog_id': |
| 896 | 999 | $options[ $key ] = $site->get_wpcom_production_blog_id(); |
| 897 | 1000 | break; |
| 898 | 1001 | case 'wpcom_staging_blog_ids': |
| @@ -915,8 +1018,23 @@ | ||
| 915 | 1018 | break; |
| 916 | 1019 | case 'wpcom_classic_early_release': |
| 917 | 1020 | $options[ $key ] = $site->get_wpcom_classic_early_release(); |
| 918 | 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; | |
| 919 | 1037 | } |
| 920 | 1038 | } |
| 921 | 1039 | |
| 922 | 1040 | return $options; |
| @@ -948,14 +1066,20 @@ | ||
| 948 | 1066 | |
| 949 | 1067 | /** |
| 950 | 1068 | * Apply any WPCOM-only response components to a Jetpack site response. |
| 951 | 1069 | * |
| 952 | - * @param array $response - the response. | |
| 1070 | + * @param object $response - the response. | |
| 953 | 1071 | */ |
| 954 | 1072 | public function decorate_jetpack_response( &$response ) { |
| 1073 | + $this->filter_fields_and_options(); | |
| 955 | 1074 | $this->site = $this->get_platform()->get_site( $response->ID ); |
| 956 | 1075 | switch_to_blog( $this->site->get_id() ); |
| 957 | 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 | + | |
| 958 | 1082 | $wpcom_response = $this->render_response_keys( self::$jetpack_response_field_additions ); |
| 959 | 1083 | |
| 960 | 1084 | foreach ( $wpcom_response as $key => $value ) { |
| 961 | 1085 | $response->{ $key } = $value; |
| @@ -960,9 +1084,11 @@ | ||
| 960 | 1084 | foreach ( $wpcom_response as $key => $value ) { |
| 961 | 1085 | $response->{ $key } = $value; |
| 962 | 1086 | } |
| 963 | 1087 | |
| 964 | - 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 ) { | |
| 965 | 1091 | $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions ); |
| 966 | 1092 | |
| 967 | 1093 | foreach ( $wpcom_member_response as $key => $value ) { |
| 968 | 1094 | $response->{ $key } = $value; |
| @@ -981,8 +1107,9 @@ | ||
| 981 | 1107 | unset( $response->site_owner ); |
| 982 | 1108 | unset( $response->plan ); |
| 983 | 1109 | unset( $response->products ); |
| 984 | 1110 | unset( $response->zendesk_site_meta ); |
| 1111 | + unset( $response->atomic_email_block ); | |
| 985 | 1112 | } |
| 986 | 1113 | |
| 987 | 1114 | // render additional options. |
| 988 | 1115 | if ( isset( $response->options ) && $response->options ) { |
| @@ -990,13 +1117,18 @@ | ||
| 990 | 1117 | |
| 991 | 1118 | // Remove heic from jetpack (and atomic) sites so that the iOS app know to convert the file format into a JPEG. |
| 992 | 1119 | // heic fromat is currently not supported by for uploading. |
| 993 | 1120 | // See https://jetpackp2.wordpress.com/2020/08/19/image-uploads-in-the-wp-ios-app-broken |
| 994 | - 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']; | |
| 995 | 1127 | $remove_file_types = array( |
| 996 | 1128 | 'heic', |
| 997 | 1129 | ); |
| 998 | - $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 ) ); | |
| 999 | 1131 | } |
| 1000 | 1132 | |
| 1001 | 1133 | foreach ( $wpcom_options_response as $key => $value ) { |
| 1002 | 1134 | $response->options[ $key ] = $value; |
| @@ -1002,11 +1134,44 @@ | ||
| 1002 | 1134 | $response->options[ $key ] = $value; |
| 1003 | 1135 | } |
| 1004 | 1136 | } |
| 1005 | 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 | + | |
| 1006 | 1149 | restore_current_blog(); |
| 1007 | 1150 | return $response; // possibly no need since it's modified in place. |
| 1008 | 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 | + } | |
| 1009 | 1174 | } |
| 1010 | 1175 | |
| 1011 | 1176 | new WPCOM_JSON_API_List_Post_Formats_Endpoint( |
| 1012 | 1177 | array( |
| @@ -1032,9 +1197,11 @@ | ||
| 1032 | 1197 | ) |
| 1033 | 1198 | ); |
| 1034 | 1199 | |
| 1035 | 1200 | /** |
| 1036 | - * List Post Formates endpoint class. | |
| 1201 | + * List Post Formats endpoint class. | |
| 1202 | + * | |
| 1203 | + * @phan-constructor-used-for-side-effects | |
| 1037 | 1204 | */ |
| 1038 | 1205 | class WPCOM_JSON_API_List_Post_Formats_Endpoint extends WPCOM_JSON_API_Endpoint { // phpcs:ignore |
| 1039 | 1206 | /** |
| 1040 | 1207 | * |
| @@ -1043,8 +1210,10 @@ | ||
| 1043 | 1210 | * /sites/%s/post-formats -> $blog_id |
| 1044 | 1211 | * |
| 1045 | 1212 | * @param string $path - the path. |
| 1046 | 1213 | * @param int $blog_id - the blog ID. |
| 1214 | + * | |
| 1215 | + * @return array|\WP_Error Array with 'formats' on success, or WP_Error on failure. | |
| 1047 | 1216 | */ |
| 1048 | 1217 | public function callback( $path = '', $blog_id = 0 ) { |
| 1049 | 1218 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
| 1050 | 1219 | if ( is_wp_error( $blog_id ) ) { |
| @@ -1098,8 +1267,10 @@ | ||
| 1098 | 1267 | ); |
| 1099 | 1268 | |
| 1100 | 1269 | /** |
| 1101 | 1270 | * List page templates endpoint class. |
| 1271 | + * | |
| 1272 | + * @phan-constructor-used-for-side-effects | |
| 1102 | 1273 | */ |
| 1103 | 1274 | class WPCOM_JSON_API_List_Page_Templates_Endpoint extends WPCOM_JSON_API_Endpoint { // phpcs:ignore |
| 1104 | 1275 | /** |
| 1105 | 1276 | * |
| @@ -1107,8 +1278,10 @@ | ||
| 1107 | 1278 | * /sites/%s/page-templates -> $blog_id |
| 1108 | 1279 | * |
| 1109 | 1280 | * @param string $path - the path. |
| 1110 | 1281 | * @param int $blog_id - the blog ID. |
| 1282 | + * | |
| 1283 | + * @return array|\WP_Error Array with 'templates' on success, or WP_Error on failure. | |
| 1111 | 1284 | */ |
| 1112 | 1285 | public function callback( $path = '', $blog_id = 0 ) { |
| 1113 | 1286 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
| 1114 | 1287 | if ( is_wp_error( $blog_id ) ) { |