Changeset 47921
- Timestamp:
- 06/07/2020 06:44:08 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php
r47432 r47921 116 116 $fields = $this->get_fields_for_response( $request ); 117 117 118 if ( in_array( 'theme_supports', $fields, true ) ) { 118 if ( rest_is_field_included( 'stylesheet', $fields ) ) { 119 $data['stylesheet'] = $theme->get_stylesheet(); 120 } 121 122 if ( rest_is_field_included( 'template', $fields ) ) { 123 /** 124 * Use the get_template() method, not the 'Template' header, for finding the template. 125 * The 'Template' header is only good for what was written in the style.css, while 126 * get_template() takes into account where WordPress actually located the theme and 127 * whether it is actually valid. 128 */ 129 $data['template'] = $theme->get_template(); 130 } 131 132 $plain_field_mappings = array( 133 'requires_php' => 'RequiresPHP', 134 'requires_wp' => 'RequiresWP', 135 'textdomain' => 'TextDomain', 136 'version' => 'Version', 137 ); 138 139 foreach ( $plain_field_mappings as $field => $header ) { 140 if ( rest_is_field_included( $field, $fields ) ) { 141 $data[ $field ] = $theme->get( $header ); 142 } 143 } 144 145 if ( rest_is_field_included( 'screenshot', $fields ) ) { 146 // Using $theme->get_screenshot() with no args to get absolute URL. 147 $data['screenshot'] = $theme->get_screenshot() ?: ''; 148 } 149 150 $rich_field_mappings = array( 151 'author' => 'Author', 152 'author_uri' => 'AuthorURI', 153 'description' => 'Description', 154 'name' => 'Name', 155 'tags' => 'Tags', 156 'theme_uri' => 'ThemeURI', 157 ); 158 159 foreach ( $rich_field_mappings as $field => $header ) { 160 if ( rest_is_field_included( "{$field}.raw", $fields ) ) { 161 $data[ $field ]['raw'] = $theme->display( $header, false, true ); 162 } 163 164 if ( rest_is_field_included( "{$field}.rendered", $fields ) ) { 165 $data[ $field ]['rendered'] = $theme->display( $header ); 166 } 167 } 168 169 if ( rest_is_field_included( 'theme_supports', $fields ) ) { 119 170 $item_schemas = $this->get_item_schema(); 120 171 $theme_supports = $item_schemas['properties']['theme_supports']['properties']; 121 172 foreach ( $theme_supports as $name => $schema ) { 173 if ( ! rest_is_field_included( "theme_supports.{$name}", $fields ) ) { 174 continue; 175 } 176 122 177 if ( 'formats' === $name ) { 123 178 continue; … … 193 248 'type' => 'object', 194 249 'properties' => array( 250 'stylesheet' => array( 251 'description' => __( 'The theme\'s stylesheet. This uniquely identifies the theme.' ), 252 'type' => 'string', 253 'readonly' => true, 254 ), 255 'template' => array( 256 'description' => __( 'The theme\'s template. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet.' ), 257 'type' => 'string', 258 'readonly' => true, 259 ), 260 'author' => array( 261 'description' => __( 'The theme author.' ), 262 'type' => 'object', 263 'readonly' => true, 264 'properties' => array( 265 'raw' => array( 266 'description' => __( 'The theme author\'s name, as found in the theme header.' ), 267 'type' => 'string', 268 ), 269 'rendered' => array( 270 'description' => __( 'HTML for the theme author, transformed for display.' ), 271 'type' => 'string', 272 ), 273 ), 274 ), 275 'author_uri' => array( 276 'description' => __( 'The website of the theme author.' ), 277 'type' => 'object', 278 'readonly' => true, 279 'properties' => array( 280 'raw' => array( 281 'description' => __( 'The website of the theme author, as found in the theme header.' ), 282 'type' => 'string', 283 'format' => 'uri', 284 ), 285 'rendered' => array( 286 'description' => __( 'The website of the theme author, transformed for display.' ), 287 'type' => 'string', 288 'format' => 'uri', 289 ), 290 ), 291 ), 292 'description' => array( 293 'description' => __( 'A description of the theme.' ), 294 'type' => 'object', 295 'readonly' => true, 296 'properties' => array( 297 'raw' => array( 298 'description' => __( 'The theme description, as found in the theme header.' ), 299 'type' => 'string', 300 ), 301 'rendered' => array( 302 'description' => __( 'The theme description, transformed for display.' ), 303 'type' => 'string', 304 ), 305 ), 306 ), 307 'name' => array( 308 'description' => __( 'The name of the theme.' ), 309 'type' => 'object', 310 'readonly' => true, 311 'properties' => array( 312 'raw' => array( 313 'description' => __( 'The theme name, as found in the theme header.' ), 314 'type' => 'string', 315 ), 316 'rendered' => array( 317 'description' => __( 'The theme name, transformed for display.' ), 318 'type' => 'string', 319 ), 320 ), 321 ), 322 'requires_php' => array( 323 'description' => __( 'The minimum PHP version required for the theme to work.' ), 324 'type' => 'string', 325 'readonly' => true, 326 ), 327 'requires_wp' => array( 328 'description' => __( 'The minimum WordPress version required for the theme to work.' ), 329 'type' => 'string', 330 'readonly' => true, 331 ), 332 'screenshot' => array( 333 'description' => __( 'The theme\'s screenshot URL.' ), 334 'type' => 'string', 335 'format' => 'uri', 336 'readonly' => true, 337 ), 338 'tags' => array( 339 'description' => __( 'Tags indicating styles and features of the theme.' ), 340 'type' => 'object', 341 'readonly' => true, 342 'properties' => array( 343 'raw' => array( 344 'description' => __( 'The theme tags, as found in the theme header.' ), 345 'type' => 'array', 346 'items' => array( 347 'type' => 'string', 348 ), 349 ), 350 'rendered' => array( 351 'description' => __( 'The theme tags, transformed for display.' ), 352 'type' => 'string', 353 ), 354 ), 355 ), 356 'textdomain' => array( 357 'description' => __( 'The theme\'s textdomain.' ), 358 'type' => 'string', 359 'readonly' => true, 360 ), 195 361 'theme_supports' => array( 196 362 'description' => __( 'Features supported by this theme.' ), … … 459 625 ), 460 626 ), 627 'theme_uri' => array( 628 'description' => __( 'The URI of the theme\'s webpage.' ), 629 'type' => 'object', 630 'readonly' => true, 631 'properties' => array( 632 'raw' => array( 633 'description' => __( 'The URI of the theme\'s webpage, as found in the theme header.' ), 634 'type' => 'string', 635 'format' => 'uri', 636 ), 637 'rendered' => array( 638 'description' => __( 'The URI of the theme\'s webpage, transformed for display.' ), 639 'type' => 'string', 640 'format' => 'uri', 641 ), 642 ), 643 ), 644 'version' => array( 645 'description' => __( 'The theme\'s current version.' ), 646 'type' => 'string', 647 'readonly' => true, 648 ), 461 649 ), 462 650 ); -
trunk/tests/phpunit/tests/rest-api/rest-themes-controller.php
r47361 r47921 126 126 127 127 wp_set_current_user( self::$contributor_id ); 128 switch_theme( 'rest-api' ); 128 129 } 129 130 … … 151 152 $this->check_get_theme_response( $response ); 152 153 $fields = array( 154 'author', 155 'author_uri', 156 'description', 157 'name', 158 'requires_php', 159 'requires_wp', 160 'screenshot', 161 'stylesheet', 162 'tags', 163 'template', 164 'textdomain', 153 165 'theme_supports', 166 'theme_uri', 167 'version', 154 168 ); 155 169 $this->assertEqualSets( $fields, array_keys( $data[0] ) ); … … 208 222 $data = $response->get_data(); 209 223 $properties = $data['schema']['properties']; 210 $this->assertEquals( 1, count( $properties ) ); 224 $this->assertEquals( 14, count( $properties ) ); 225 226 $this->assertArrayHasKey( 'author', $properties ); 227 $this->assertArrayHasKey( 'raw', $properties['author']['properties'] ); 228 $this->assertArrayHasKey( 'rendered', $properties['author']['properties'] ); 229 230 $this->assertArrayHasKey( 'author_uri', $properties ); 231 $this->assertArrayHasKey( 'raw', $properties['author_uri']['properties'] ); 232 $this->assertArrayHasKey( 'rendered', $properties['author_uri']['properties'] ); 233 234 $this->assertArrayHasKey( 'description', $properties ); 235 $this->assertArrayHasKey( 'raw', $properties['description']['properties'] ); 236 $this->assertArrayHasKey( 'rendered', $properties['description']['properties'] ); 237 238 $this->assertArrayHasKey( 'name', $properties ); 239 $this->assertArrayHasKey( 'raw', $properties['name']['properties'] ); 240 $this->assertArrayHasKey( 'rendered', $properties['name']['properties'] ); 241 242 $this->assertArrayHasKey( 'requires_php', $properties ); 243 $this->assertArrayHasKey( 'requires_wp', $properties ); 244 $this->assertArrayHasKey( 'screenshot', $properties ); 245 $this->assertArrayHasKey( 'stylesheet', $properties ); 246 247 $this->assertArrayHasKey( 'tags', $properties ); 248 $this->assertArrayHasKey( 'raw', $properties['tags']['properties'] ); 249 $this->assertArrayHasKey( 'items', $properties['tags']['properties']['raw'] ); 250 $this->assertArrayHasKey( 'rendered', $properties['tags']['properties'] ); 251 252 $this->assertArrayHasKey( 'template', $properties ); 253 $this->assertArrayHasKey( 'textdomain', $properties ); 211 254 $this->assertArrayHasKey( 'theme_supports', $properties ); 255 256 $this->assertArrayHasKey( 'theme_uri', $properties ); 257 $this->assertArrayHasKey( 'raw', $properties['theme_uri']['properties'] ); 258 $this->assertArrayHasKey( 'rendered', $properties['theme_uri']['properties'] ); 259 260 $this->assertArrayHasKey( 'version', $properties ); 261 212 262 $theme_supports = $properties['theme_supports']['properties']; 213 263 $this->assertEquals( 20, count( $theme_supports ) ); … … 235 285 236 286 /** 287 * @ticket 49906 288 */ 289 public function test_theme_author() { 290 $response = self::perform_active_theme_request(); 291 $result = $response->get_data(); 292 $this->assertArrayHasKey( 'author', $result[0] ); 293 $this->assertSame( 'Michael Heilemann', $result[0]['author']['raw'] ); 294 $this->assertSame( 295 '<a href="http://binarybonsai.com/?search=1&term=2">Michael Heilemann</a>', 296 $result[0]['author']['rendered'] 297 ); 298 } 299 300 /** 301 * @ticket 49906 302 */ 303 public function test_theme_author_uri() { 304 $response = self::perform_active_theme_request(); 305 $result = $response->get_data(); 306 $this->assertArrayHasKey( 'author_uri', $result[0] ); 307 $this->assertSame( 'http://binarybonsai.com/?search=1&term=2', $result[0]['author_uri']['raw'] ); 308 $this->assertSame( 'http://binarybonsai.com/?search=1&term=2', $result[0]['author_uri']['rendered'] ); 309 } 310 311 /** 312 * @ticket 49906 313 */ 314 public function test_theme_description() { 315 $response = self::perform_active_theme_request(); 316 $result = $response->get_data(); 317 $this->assertArrayHasKey( 'description', $result[0] ); 318 $this->assertSame( 319 'The 9\' foot tall theme.', 320 $result[0]['description']['raw'] 321 ); 322 $this->assertSame( 323 'The 9′ foot tall theme.', 324 $result[0]['description']['rendered'] 325 ); 326 } 327 328 /** 329 * @ticket 49906 330 */ 331 public function test_theme_requires_php() { 332 $response = self::perform_active_theme_request(); 333 $result = $response->get_data(); 334 $this->assertArrayHasKey( 'requires_php', $result[0] ); 335 $this->assertSame( '5.6', $result[0]['requires_php'] ); 336 } 337 338 /** 339 * @ticket 49906 340 */ 341 public function test_theme_requires_wp() { 342 $response = self::perform_active_theme_request(); 343 $result = $response->get_data(); 344 $this->assertArrayHasKey( 'requires_wp', $result[0] ); 345 $this->assertSame( '5.3', $result[0]['requires_wp'] ); 346 } 347 348 /** 349 * @ticket 49906 350 */ 351 public function test_theme_name() { 352 $response = self::perform_active_theme_request(); 353 $result = $response->get_data(); 354 $this->assertArrayHasKey( 'name', $result[0] ); 355 $this->assertSame( 'REST Theme', $result[0]['name']['raw'] ); 356 $this->assertSame( 'REST Theme', $result[0]['name']['rendered'] ); 357 } 358 359 /** 360 * @ticket 49906 361 */ 362 public function test_theme_screenshot() { 363 $response = self::perform_active_theme_request(); 364 $result = $response->get_data(); 365 $this->assertArrayHasKey( 'screenshot', $result[0] ); 366 $this->assertSame( '', $result[0]['screenshot'] ); // No screenshot for default theme 367 } 368 369 /** 370 * @ticket 49906 371 */ 372 public function test_theme_stylesheet() { 373 $response = self::perform_active_theme_request(); 374 $result = $response->get_data(); 375 $this->assertArrayHasKey( 'stylesheet', $result[0] ); 376 $this->assertSame( 'rest-api', $result[0]['stylesheet'] ); 377 } 378 379 /** 380 * @ticket 49906 381 */ 382 public function test_theme_tags() { 383 $response = self::perform_active_theme_request(); 384 $result = $response->get_data(); 385 $this->assertArrayHasKey( 'tags', $result[0] ); 386 $this->assertSame( array( 'holiday', 'custom-menu' ), $result[0]['tags']['raw'] ); 387 $this->assertSame( 'holiday, custom-menu', $result[0]['tags']['rendered'] ); 388 } 389 390 /** 391 * @ticket 49906 392 */ 393 public function test_theme_template() { 394 $response = self::perform_active_theme_request(); 395 $result = $response->get_data(); 396 $this->assertArrayHasKey( 'template', $result[0] ); 397 $this->assertSame( 'default', $result[0]['template'] ); 398 } 399 400 /** 401 * @ticket 49906 402 */ 403 public function test_theme_textdomain() { 404 $response = self::perform_active_theme_request(); 405 $result = $response->get_data(); 406 $this->assertArrayHasKey( 'textdomain', $result[0] ); 407 $this->assertSame( 'rest-api', $result[0]['textdomain'] ); 408 } 409 410 public function test_theme_theme_uri() { 411 $response = self::perform_active_theme_request(); 412 $result = $response->get_data(); 413 $this->assertArrayHasKey( 'theme_uri', $result[0] ); 414 $this->assertSame( 'http://wordpress.org/?search=1&term=2', $result[0]['theme_uri']['raw'] ); 415 $this->assertSame( 'http://wordpress.org/?search=1&term=2', $result[0]['theme_uri']['rendered'] ); 416 } 417 418 /** 419 * @ticket 49906 420 */ 421 public function test_theme_version() { 422 $response = self::perform_active_theme_request(); 423 $result = $response->get_data(); 424 $this->assertArrayHasKey( 'version', $result[0] ); 425 $this->assertSame( '1.6', $result[0]['version'] ); 426 } 427 428 /** 237 429 * @ticket 49037 238 430 */ -
trunk/tests/phpunit/tests/theme/themeDir.php
r47122 r47921 164 164 'Internationalized Theme', 165 165 'camelCase', 166 'REST Theme', 166 167 ); 167 168
Note: See TracChangeset
for help on using the changeset viewer.