Making WordPress.org


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-markdown/inc/class-importer.php

    r10140 r10833  
    8686                // Account for potential handbook landing page, which results in an empty $key.
    8787                if ( ! $key ) {
    88                         if ( in_array( $post->post_name, [ 'handbook', $post->post_type, "{$post->post_type}-handbook" ] ) ) {
     88                        if ( in_array( $post->post_name, [ 'handbook', $post->post_type, "{$post->post_type}-handbook", 'welcome' ] ) ) {
    8989                                $key = $post->post_name;
    9090                        }
    … …  
    117117                        }
    118118                        return new WP_Error( 'invalid-http-code', 'Markdown source returned non-200 http code.' );
     119                } else {
     120                        if ( class_exists( 'WP_CLI' ) ) {
     121                                WP_CLI::log( "Importing manifest from " . $this->get_manifest_url() );
     122                        }       
    119123                }
    120124                $manifest = json_decode( wp_remote_retrieve_body( $response ), true );
    … …  
    128132
    129133                // A numeric key suggests the manifest did not explicitly specify keys for each item, so define one.
     134                // Note: not explicitly specifying a key means the slugs defined must be unique.
    130135                $keys = array_keys( $manifest );
    131136                if ( is_int( array_shift( $keys ) ) ) {
    … …  
    162167                foreach ( $manifest as $key => $doc ) {
    163168                        // Already exists, update.
    164                         $existing = $this->existing[ $key ] ?? $this->existing['slug_only'][ $key ] ?? false;
     169                        $existing = $this->existing[ $key ]
     170                                ?? $this->existing['slug_only'][ $key ]
     171                                ?? $this->existing[ $doc['slug'] ]
     172                                ?? $this->existing['slug_only'][ $doc['slug'] ]
     173                                ?? false;
    165174                        if ( ! $existing && 'index' === $key ) {
    166175                                $key = $this->get_post_type();
    … …  
    180189                }
    181190                if ( class_exists( 'WP_CLI' ) ) {
    182                         WP_CLI::success( "Successfully created {$created} and updated {$updated} handbook pages." );
     191                        if ( 0 === $created && 0 === $updated ) {
     192                                WP_CLI::success( "No updates detected for any handbook page." );
     193                        } else {
     194                                WP_CLI::success( "Successfully created {$created} and updated {$updated} handbook pages." );
     195                        }
    183196                }
    184197        }
    … …  
    237250                        $post_data['post_title'] = sanitize_text_field( wp_slash( $doc['title'] ) );
    238251                }
     252
     253                /**
     254                 * Filters the post data used to create a post from the manifest.
     255                 *
     256                 * @param array $post_data Post data.
     257                 */
     258                $post_data = apply_filters( 'wporg_markdown_post_data_pre_insert', $post_data );
     259
    239260                $post_id = wp_insert_post( $post_data );
    240261                if ( ! $post_id ) {
    … …  
    411432                        'headers' => array(),
    412433                );
    413                 $last_etag = get_post_meta( $post_id, $this->etag_meta_key, true );
     434                /**
     435                 * Filters if HTTP ETags should be included in request for remote Markdown
     436                 * source update.
     437                 *
     438                 * @param bool $check_etags Should HTTP ETags be checcked? Default true.
     439                 */
     440                $last_etag = apply_filters( 'wporg_markdown_check_etags', true ) ? get_post_meta( $post_id, $this->etag_meta_key, true ) : false;
    414441                if ( ! empty( $last_etag ) ) {
    415442                        $args['headers']['If-None-Match'] = $last_etag;
    … …  
    459486                $html = apply_filters( 'wporg_markdown_after_transform', $html, $this->get_post_type() );
    460487
     488                add_filter( 'wp_kses_allowed_html', [ $this, 'wp_kses_allow_links' ], 10, 2 );
     489
    461490                $post_data = array(
    462491                        'ID'           => $post_id,
    … …  
    465494                );
    466495
     496                remove_filter( 'wp_kses_allowed_html', [ $this, 'wp_kses_allow_links' ], 10 );
     497
    467498                $fields_from_manifest = $this->update_post_from_manifest( $post_id, $title, false );
    468499                if ( $fields_from_manifest ) {
    … …  
    476507
    477508                return true;
     509        }
     510
     511        /**
     512         * Ensures that the 'a' tag and certain of its attributes are allowed in
     513         * posts if not already.
     514         *
     515         * Supported 'a' attributes are those defined for `$allowedposttags` by default.
     516         *
     517         * This is necessary since the 'a' tag is being removed somewhere along the way.
     518         *
     519         * @param array[]|string $allowed_tags Allowed HTML tags and their attributes
     520         *                                     or the context to judge allowed tags by.
     521         * @param string         $context      Context name.
     522         * @return array[]|string
     523         */
     524        public function wp_kses_allow_links( $allowed_tags, $context ) {
     525                if ( 'post' === $context && is_array( $allowed_tags ) && empty( $allowed_tags[ 'a' ] ) ) {
     526                        $allowed_tags['a'] = [
     527                                'href'     => true,
     528                                'rel'      => true,
     529                                'rev'      => true,
     530                                'name'     => true,
     531                                'target'   => true,
     532                                'download' => [
     533                                                'valueless' => 'y',
     534                                ],
     535                        ];
     536                }
     537
     538                return $allowed_tags;
    478539        }
    479540
Note: See TracChangeset for help on using the changeset viewer.