Changeset 5406
- Timestamp:
- 04/21/2017 12:53:45 PM (8 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-cli
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-cli/inc/class-markdown-import.php
r4786 r5406 8 8 class Markdown_Import { 9 9 10 private static $handbook_manifest = 'https://raw.githubusercontent.com/wp-cli/handbook/master/handbook-manifest.json'; 10 11 private static $input_name = 'wporg-cli-markdown-source'; 11 12 private static $meta_key = 'wporg_cli_markdown_source'; … … 13 14 private static $submit_name = 'wporg-cli-markdown-import'; 14 15 private static $supported_post_types = array( 'handbook' ); 16 private static $posts_per_page = 100; 15 17 16 18 /** … … 18 20 */ 19 21 public static function action_init() { 22 if ( ! wp_next_scheduled( 'wporg_cli_manifest_import' ) ) { 23 wp_schedule_event( time(), '15_minutes', 'wporg_cli_manifest_import' ); 24 } 20 25 if ( ! wp_next_scheduled( 'wporg_cli_markdown_import' ) ) { 21 26 wp_schedule_event( time(), '15_minutes', 'wporg_cli_markdown_import' ); 22 27 } 28 } 29 30 public static function action_wporg_cli_manifest_import() { 31 $response = wp_remote_get( self::$handbook_manifest ); 32 if ( is_wp_error( $response ) ) { 33 return $response; 34 } elseif ( 200 !== wp_remote_retrieve_response_code( $response ) ) { 35 return new WP_Error( 'invalid-http-code', 'Markdown source returned non-200 http code.' ); 36 } 37 $manifest = json_decode( wp_remote_retrieve_body( $response ), true ); 38 if ( ! $manifest ) { 39 return new WP_Error( 'invalid-manifest', 'Manifest did not unfurl properly.' );; 40 } 41 // Fetch all handbook posts for comparison 42 $q = new WP_Query( array( 43 'post_type' => 'handbook', 44 'post_status' => 'publish', 45 'posts_per_page' => self::$posts_per_page, 46 ) ); 47 $existing = $q->posts; 48 $created = 0; 49 foreach( $manifest as $doc ) { 50 // Already exists 51 if ( wp_filter_object_list( $existing, array( 'post_name' => $doc['slug'] ) ) ) { 52 continue; 53 } 54 $post_parent = null; 55 if ( ! empty( $doc['parent'] ) ) { 56 // Find the parent in the existing set 57 $parents = wp_filter_object_list( $existing, array( 'post_name' => $doc['parent'] ) ); 58 if ( ! empty( $parents ) ) { 59 $parent = array_shift( $parents ); 60 } else { 61 // Create the parent and add it to the stack 62 if ( isset( $manifest[ $doc['parent'] ] ) ) { 63 $parent_doc = $manifest[ $doc['parent'] ]; 64 $parent = self::create_post_from_manifest_doc( $parent_doc ); 65 if ( $parent ) { 66 $created++; 67 $existing[] = $parent; 68 } else { 69 continue; 70 } 71 } else { 72 continue; 73 } 74 } 75 $post_parent = $parent->ID; 76 } 77 $post = self::create_post_from_manifest_doc( $doc, $post_parent ); 78 if ( $post ) { 79 $created++; 80 $existing[] = $post; 81 } 82 } 83 if ( class_exists( 'WP_CLI' ) ) { 84 \WP_CLI::success( "Successfully created {$created} handbook pages." ); 85 } 86 } 87 88 /** 89 * Create a new handbook page from the manifest document 90 */ 91 private static function create_post_from_manifest_doc( $doc, $post_parent = null ) { 92 $post_data = array( 93 'post_type' => 'handbook', 94 'post_status' => 'publish', 95 'post_parent' => $post_parent, 96 'post_title' => $doc['title'], // Can contain slashes 97 'post_name' => sanitize_title_with_dashes( $doc['slug'] ), 98 ); 99 $post_data = wp_slash( $post_data ); 100 $post_id = wp_insert_post( $post_data ); 101 if ( ! $post_id ) { 102 return false; 103 } 104 if ( class_exists( 'WP_CLI' ) ) { 105 \WP_CLI::log( "Created post {$post_id} for {$doc['title']}." ); 106 } 107 update_post_meta( $post_id, self::$meta_key, esc_url_raw( $doc['markdown_source'] ) ); 108 return get_post( $post_id ); 23 109 } 24 110 … … 28 114 'post_status' => 'publish', 29 115 'fields' => 'ids', 30 'posts_per_page' => 100,116 'posts_per_page' => self::$posts_per_page, 31 117 ) ); 32 118 $ids = $q->posts; -
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-cli/wporg-cli.php
r5150 r5406 16 16 */ 17 17 add_action( 'init', array( 'WPOrg_Cli\Markdown_Import', 'action_init' ) ); 18 add_action( 'wporg_cli_manifest_import', array( 'WPOrg_Cli\Markdown_Import', 'action_wporg_cli_manifest_import' ) ); 18 19 add_action( 'wporg_cli_markdown_import', array( 'WPOrg_Cli\Markdown_Import', 'action_wporg_cli_markdown_import' ) ); 19 20 add_action( 'load-post.php', array( 'WPOrg_Cli\Markdown_Import', 'action_load_post_php' ) );
Note: See TracChangeset
for help on using the changeset viewer.