Changeset 8868
- Timestamp:
- 05/24/2019 02:49:21 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php
r8729 r8868 67 67 $stable_tag = $data['stable_tag']; 68 68 $tagged_versions = $data['tagged_versions']; 69 $blocks = $data['blocks']; 69 70 70 71 $content = ''; … … 167 168 } 168 169 update_post_meta( $plugin->ID, 'assets_banners_color', wp_slash( $banner_average_color ) ); 170 171 // Store the block data, if known 172 if ( count( $blocks ) ) { 173 update_post_meta( $plugin->ID, 'all_blocks', $blocks ); 174 } else { 175 delete_post_meta( $plugin->ID, 'all_blocks' ); 176 } 169 177 170 178 $current_stable_tag = get_post_meta( $plugin->ID, 'stable_tag', true ) ?: 'trunk'; … … 400 408 } 401 409 402 return compact( 'readme', 'stable_tag', 'tmp_dir', 'plugin_headers', 'assets', 'tagged_versions' ); 410 // Find blocks 411 $blocks = array(); 412 foreach ( Filesystem::list_files( "$tmp_dir/export/", false, '!\.(?:php|js|jsx|json)$!i' ) as $filename ) { 413 $file_blocks = $this->find_blocks_in_file( $filename ); 414 if ( $file_blocks ) { 415 foreach ( $file_blocks as $block ) { 416 // If the info came from a block.json file with more metadata (like description) then we want it to override less detailed info scraped from php/js. 417 if ( empty( $blocks[ $block->name ]->title ) || isset( $block->description ) ) { 418 $blocks[ $block->name ] = $block; 419 } 420 } 421 } 422 } 423 424 return compact( 'readme', 'stable_tag', 'tmp_dir', 'plugin_headers', 'assets', 'tagged_versions', 'blocks' ); 403 425 } 404 426 … … 462 484 return false; 463 485 } 486 487 /** 488 * Look for Gutenberg blocks registered within a single file. 489 * 490 * @param string $filename Pathname of the file. 491 * 492 * @return array An array of objects representing blocks, corresponding to the block.json format where possible. 493 */ 494 protected function find_blocks_in_file( $filename ) { 495 496 $ext = strtolower( pathinfo($filename, PATHINFO_EXTENSION) ); 497 498 $blocks = array(); 499 500 if ( 'js' === $ext || 'jsx' === $ext ) { 501 // Parse a js-style registerBlockType() call. 502 // Note that this only works with literal strings for the block name and title, and assumes that order. 503 $contents = file_get_contents( $filename ); 504 if ( $contents && preg_match_all( "#registerBlockType\s*[(]\s*'([-\w]+/[-\w]+)'\s*,\s*[{]\s*title\s*:[\s_(]*'([^']*)'#ms", $contents, $matches, PREG_SET_ORDER ) ) { 505 foreach ( $matches as $match ) { 506 $blocks[] = (object) [ 507 'name' => $match[1], 508 'title' => $match[2], 509 ]; 510 } 511 } 512 } 513 if ( 'php' === $ext ) { 514 // Parse a php-style register_block_type() call. 515 // Again this assumes literal strings, and only parses the name and title. 516 $contents = file_get_contents( $filename ); 517 if ( $contents && preg_match_all( "#register_block_type\s*[(]\s*['\"]([-\w]+/[-\w]+)['\"]#ms", $contents, $matches, PREG_SET_ORDER ) ) { 518 foreach ( $matches as $match ) { 519 $blocks[] = (object) [ 520 'name' => $match[1], 521 'title' => null, 522 ]; 523 } 524 } 525 } 526 if ( 'block.json' === basename( $filename ) ) { 527 // A block.json file has everything we want. 528 $blockinfo = json_decode( file_get_contents( $filename ) ); 529 if ( isset( $blockinfo->name ) && isset( $blockinfo->title ) ) { 530 $blocks[] = $blockinfo; 531 } 532 } 533 534 return $blocks; 535 } 464 536 }
Note: See TracChangeset
for help on using the changeset viewer.