Changeset 36533
- Timestamp:
- 02/16/2016 02:18:34 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/rest-api/class-wp-rest-response.php
r35671 r36533 257 257 return $error; 258 258 } 259 260 /** 261 * Get the CURIEs (compact URIs) used for relations. 262 * 263 * @return array 264 */ 265 public function get_curies() { 266 $curies = array( 267 array( 268 'name' => 'wp', 269 'href' => 'https://api.w.org/{rel}', 270 'templated' => true, 271 ), 272 ); 273 274 /** 275 * Filter extra CURIEs available on API responses. 276 * 277 * CURIEs allow a shortened version of URI relations. This allows a more 278 * usable form for custom relations than using the full URI. These work 279 * similarly to how XML namespaces work. 280 * 281 * Registered CURIES need to specify a name and URI template. This will 282 * automatically transform URI relations into their shortened version. 283 * The shortened relation follows the format `{name}:{rel}`. `{rel}` in 284 * the URI template will be replaced with the `{rel}` part of the 285 * shortened relation. 286 * 287 * For example, a CURIE with name `example` and URI template 288 * `http://w.org/{rel}` would transform a `http://w.org/term` relation 289 * into `example:term`. 290 * 291 * Well-behaved clients should expand and normalise these back to their 292 * full URI relation, however some naive clients may not resolve these 293 * correctly, so adding new CURIEs may break backwards compatibility. 294 * 295 * @param array $additional Additional CURIEs to register with the API. 296 */ 297 $additional = apply_filters( 'rest_response_link_curies', array() ); 298 return array_merge( $curies, $additional ); 299 } 259 300 } -
trunk/src/wp-includes/rest-api/class-wp-rest-server.php
r35773 r36533 461 461 // Convert links to part of the data. 462 462 $data = array(); 463 $curies = $response->get_curies(); 464 $used_curies = array(); 465 463 466 foreach ( $links as $rel => $items ) { 467 468 // Convert $rel URIs to their compact versions if they exist. 469 foreach ( $curies as $curie ) { 470 $href_prefix = substr( $curie['href'], 0, strpos( $curie['href'], '{rel}' ) ); 471 if ( strpos( $rel, $href_prefix ) !== 0 ) { 472 continue; 473 } 474 $used_curies[ $curie['name'] ] = $curie; 475 476 // Relation now changes from '$uri' to '$curie:$relation' 477 $rel_regex = str_replace( '\{rel\}', '([\w]+)', preg_quote( $curie['href'], '!' ) ); 478 preg_match( '!' . $rel_regex . '!', $rel, $matches ); 479 if ( $matches ) { 480 $rel = $curie['name'] . ':' . $matches[1]; 481 } 482 break; 483 } 484 464 485 $data[ $rel ] = array(); 465 486 … … 469 490 $data[ $rel ][] = $attributes; 470 491 } 492 } 493 494 // Push the curies onto the start of the links array. 495 if ( $used_curies ) { 496 $data = array_merge( array( 'curies' => array_values( $used_curies ) ), $data ); 471 497 } 472 498 -
trunk/tests/phpunit/tests/rest-api/rest-server.php
r36531 r36533 401 401 } 402 402 403 public function test_link_curies() { 404 $response = new WP_REST_Response(); 405 $response->add_link( 'https://api.w.org/term', 'http://example.com/' ); 406 407 $data = $this->server->response_to_data( $response, false ); 408 $links = $data['_links']; 409 410 $this->assertArrayHasKey( 'wp:term', $links ); 411 $this->assertArrayHasKey( 'curies', $links ); 412 } 413 414 public function test_custom_curie_link() { 415 $response = new WP_REST_Response(); 416 $response->add_link( 'http://mysite.com/contact.html', 'http://example.com/' ); 417 418 add_filter( 'rest_response_link_curies', array( $this, 'add_custom_curie' ) ); 419 420 $data = $this->server->response_to_data( $response, false ); 421 $links = $data['_links']; 422 423 $this->assertArrayHasKey( 'my_site:contact', $links ); 424 $this->assertArrayHasKey( 'curies', $links ); 425 } 426 427 /** 428 * Helper callback to add a new custom curie via a filter. 429 * 430 * @param array $curies 431 * @return array 432 */ 433 public function add_custom_curie( $curies ) { 434 $curies[] = array( 435 'name' => 'my_site', 436 'href' => 'http://mysite.com/{rel}.html', 437 'templated' => true, 438 ); 439 return $curies; 440 } 441 403 442 /** 404 443 * @depends test_link_embedding
Note: See TracChangeset
for help on using the changeset viewer.