Make WordPress Core

Changeset 28601


Ignore:
Timestamp:
05/28/2014 06:13:55 PM (12 years ago)
Author:
nacin
Message:

Revert [28579] and [28582]. see #21963.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r28582 r28601  
    29262926                'menu_order' => 0, 'to_ping' =>  '', 'pinged' => '', 'post_password' => '',
    29272927                'guid' => '', 'post_content_filtered' => '', 'post_excerpt' => '', 'import_id' => 0,
    2928                 'post_content' => '', 'post_title' => '', 'context' => '');
     2928                'post_content' => '', 'post_title' => '');
    29292929
    29302930        $postarr = wp_parse_args($postarr, $defaults);
     
    29672967        }
    29682968
    2969         $maybe_empty = 'attachment' !== $post_type
    2970                 && ! $post_content && ! $post_title && ! $post_excerpt
    2971                 && post_type_supports( $post_type, 'editor' )
    2972                 && post_type_supports( $post_type, 'title' )
    2973                 && post_type_supports( $post_type, 'excerpt' );
     2969        $maybe_empty = ! $post_content && ! $post_title && ! $post_excerpt && post_type_supports( $post_type, 'editor' )
     2970                && post_type_supports( $post_type, 'title' ) && post_type_supports( $post_type, 'excerpt' );
    29742971
    29752972        /**
     
    29982995
    29992996        $post_status = empty( $postarr['post_status'] ) ? 'draft' : $postarr['post_status'];
    3000         if ( 'attachment' === $post_type && ! in_array( $post_status, array( 'inherit', 'private' ) ) ) {
    3001                 $post_status = 'inherit';
    3002         }
    30032997
    30042998        if ( ! empty( $postarr['post_category'] ) ) {
     
    30773071        }
    30783072
    3079         if ( 'attachment' !== $post_type ) {
    3080                 if ( 'publish' == $post_status ) {
    3081                         $now = gmdate('Y-m-d H:i:59');
    3082                         if ( mysql2date('U', $post_date_gmt, false) > mysql2date('U', $now, false) ) {
    3083                                 $post_status = 'future';
    3084                         }
    3085                 } elseif( 'future' == $post_status ) {
    3086                         $now = gmdate('Y-m-d H:i:59');
    3087                         if ( mysql2date('U', $post_date_gmt, false) <= mysql2date('U', $now, false) ) {
    3088                                 $post_status = 'publish';
    3089                         }
     3073        if ( 'publish' == $post_status ) {
     3074                $now = gmdate('Y-m-d H:i:59');
     3075                if ( mysql2date('U', $post_date_gmt, false) > mysql2date('U', $now, false) ) {
     3076                        $post_status = 'future';
     3077                }
     3078        } elseif( 'future' == $post_status ) {
     3079                $now = gmdate('Y-m-d H:i:59');
     3080                if ( mysql2date('U', $post_date_gmt, false) <= mysql2date('U', $now, false) ) {
     3081                        $post_status = 'publish';
    30903082                }
    30913083        }
     
    31423134        $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent );
    31433135
    3144         // don't unslash
    3145         $post_mime_type = isset( $postarr['post_mime_type'] ) ? $postarr['post_mime_type'] : '';
    3146 
    31473136        // expected_slashed (everything!)
    3148         $data = compact( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'post_mime_type', 'guid' );
    3149 
    3150         if ( 'attachment' === $post_type ) {
    3151                 /**
    3152                  * Filter attachment post data before it is updated in or added to the database.
    3153                  *
    3154                  * @since 3.9.0
    3155                  *
    3156                  * @param array $data    An array of sanitized attachment post data.
    3157                  * @param array $postarr An array of unsanitized attachment post data.
    3158                  */
    3159                 $data = apply_filters( 'wp_insert_attachment_data', $data, $postarr );
    3160         } else {
    3161                 /**
    3162                  * Filter slashed post data just before it is inserted into the database.
    3163                  *
    3164                  * @since 2.7.0
    3165                  *
    3166                  * @param array $data    An array of slashed post data.
    3167                  * @param array $postarr An array of sanitized, but otherwise unmodified post data.
    3168                  */
    3169                 $data = apply_filters( 'wp_insert_post_data', $data, $postarr );
    3170         }
     3137        $data = compact( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'guid' );
     3138
     3139        /**
     3140         * Filter slashed post data just before it is inserted into the database.
     3141         *
     3142         * @since 2.7.0
     3143         *
     3144         * @param array $data    Array of slashed post data.
     3145         * @param array $postarr Array of sanitized, but otherwise unmodified post data.
     3146         */
     3147        $data = apply_filters( 'wp_insert_post_data', $data, $postarr );
    31713148        $data = wp_unslash( $data );
    31723149        $where = array( 'ID' => $post_ID );
     
    31903167                }
    31913168        } else {
     3169                if ( isset( $postarr['post_mime_type'] ) ) {
     3170                        $data['post_mime_type'] = wp_unslash( $postarr['post_mime_type'] ); // This isn't in the update
     3171                }
    31923172                // If there is a suggested ID, use it if not already present
    31933173                if ( ! empty( $import_id ) ) {
     
    32103190        }
    32113191
    3212         if ( empty( $data['post_name'] ) && ! in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {
    3213                 $data['post_name'] = sanitize_title( $data['post_title'], $post_ID );
     3192        if ( empty($data['post_name']) && !in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {
     3193                $data['post_name'] = sanitize_title($data['post_title'], $post_ID);
    32143194                $wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
    32153195        }
     
    32363216        }
    32373217
    3238         if ( 'attachment' !== $postarr['post_type'] ) {
    3239                 $current_guid = get_post_field( 'guid', $post_ID );
    3240 
    3241                 // Set GUID
    3242                 if ( ! $update && '' == $current_guid ) {
    3243                         $wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $post_ID ) ), $where );
    3244                 }
    3245         } else {
    3246                 if ( isset( $postarr['file'] ) ) {
    3247                         update_attached_file( $post_ID, $postarr['file'] );
    3248                 }
    3249 
    3250                 if ( ! empty( $postarr['context'] ) ) {
    3251                         add_post_meta( $post_ID, '_wp_attachment_context', $postarr['context'], true );
    3252                 }
    3253         }
    3254 
     3218        $current_guid = get_post_field( 'guid', $post_ID );
     3219
     3220        // Set GUID
     3221        if ( ! $update && '' == $current_guid ) {
     3222                $wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $post_ID ) ), $where );
     3223        }
    32553224        clean_post_cache( $post_ID );
    32563225
     
    32703239        }
    32713240
    3272         if ( 'attachment' !== $postarr['post_type'] ) {
    3273                 wp_transition_post_status( $data['post_status'], $previous_status, $post );
    3274         } else {
    3275                 if ( $update ) {
    3276                         /**
    3277                          * Fires once an existing attachment has been updated.
    3278                          *
    3279                          * @since 2.0.0
    3280                          *
    3281                          * @param int $post_ID Attachment ID.
    3282                          */
    3283                         do_action( 'edit_attachment', $post_ID );
    3284                 } else {
    3285 
    3286                         /**
    3287                          * Fires once an attachment has been added.
    3288                          *
    3289                          * @since 2.0.0
    3290                          *
    3291                          * @param int $post_ID Attachment ID.
    3292                          */
    3293                         do_action( 'add_attachment', $post_ID );
    3294                 }
    3295 
    3296                 return $post_ID;
    3297         }
     3241        wp_transition_post_status($data['post_status'], $previous_status, $post);
    32983242
    32993243        if ( $update ) {
     
    45044448 * Insert an attachment.
    45054449 *
    4506  * If you set the 'ID' in the $args parameter, it will mean that you are
     4450 * If you set the 'ID' in the $object parameter, it will mean that you are
    45074451 * updating and attempt to update the attachment. You can also set the
    45084452 * attachment name or title by setting the key 'post_name' or 'post_title'.
     
    45154459 * setting the value for the 'comment_status' key.
    45164460 *
     4461 * The $object parameter can have the following:
     4462 *     'post_status'   - Default is 'draft'. Can not be overridden, set the same as parent post.
     4463 *     'post_type'     - Default is 'post', will be set to attachment. Can not override.
     4464 *     'post_author'   - Default is current user ID. The ID of the user, who added the attachment.
     4465 *     'ping_status'   - Default is the value in default ping status option. Whether the attachment
     4466 *                       can accept pings.
     4467 *     'post_parent'   - Default is 0. Can use $parent parameter or set this for the post it belongs
     4468 *                       to, if any.
     4469 *     'menu_order'    - Default is 0. The order it is displayed.
     4470 *     'to_ping'       - Whether to ping.
     4471 *     'pinged'        - Default is empty string.
     4472 *     'post_password' - Default is empty string. The password to access the attachment.
     4473 *     'guid'          - Global Unique ID for referencing the attachment.
     4474 *     'post_content_filtered' - Attachment post content filtered.
     4475 *     'post_excerpt'  - Attachment excerpt.
     4476 *
    45174477 * @since 2.0.0
    4518  *
    4519  * @see wp_insert_post()
    4520  *
    4521  * @param string|array $args   Arguments for inserting an attachment.
    4522  * @param string       $file   Optional. Filename.
    4523  * @param int          $parent Optional. Parent post ID.
     4478 * @uses $wpdb
     4479 *
     4480 * @param string|array $object Arguments to override defaults.
     4481 * @param string $file Optional filename.
     4482 * @param int $parent Parent post ID.
    45244483 * @return int Attachment ID.
    45254484 */
    4526 function wp_insert_attachment( $args, $file = false, $parent = 0 ) {
    4527         $defaults = array(
    4528                 'file'        => $file,
    4529                 'post_parent' => $parent
    4530         );
    4531         $data = wp_parse_args( $args, $defaults );
    4532 
    4533         $data['post_type'] = 'attachment';
    4534 
    4535         return wp_insert_post( $data );
     4485function wp_insert_attachment($object, $file = false, $parent = 0) {
     4486        global $wpdb;
     4487
     4488        $user_id = get_current_user_id();
     4489
     4490        $defaults = array('post_status' => 'inherit', 'post_type' => 'post', 'post_author' => $user_id,
     4491                'ping_status' => get_option('default_ping_status'), 'post_parent' => 0,
     4492                'menu_order' => 0, 'to_ping' =>  '', 'pinged' => '', 'post_password' => '',
     4493                'guid' => '', 'post_content_filtered' => '', 'post_excerpt' => '', 'import_id' => 0,
     4494                'post_title' => '', 'post_content' => '', 'context' => '');
     4495
     4496        $object = wp_parse_args($object, $defaults);
     4497        if ( ! empty( $parent ) ) {
     4498                $object['post_parent'] = $parent;
     4499        }
     4500        unset( $object[ 'filter' ] );
     4501
     4502        $object = sanitize_post($object, 'db');
     4503
     4504        $post_ID = 0;
     4505        $update = false;
     4506        $guid = $object['guid'];
     4507
     4508        // Are we updating or creating?
     4509        if ( ! empty( $object['ID'] ) ) {
     4510                $update = true;
     4511                $post_ID = (int) $object['ID'];
     4512
     4513                // wp_insert_post() checks for the existence of this post....
     4514        }
     4515
     4516        $post_type = 'attachment';
     4517
     4518        $post_title = $object['post_title'];
     4519        $post_content = $object['post_content'];
     4520        $post_excerpt = $object['post_excerpt'];
     4521        if ( isset( $object['post_name'] ) ) {
     4522                $post_name = $object['post_name'];
     4523        }
     4524
     4525        // wp_insert_post() checks $maybe_empty
     4526
     4527        $post_status = $object['post_status'];
     4528        if ( ! in_array( $post_status, array( 'inherit', 'private' ) ) ) {
     4529                $post_status = 'inherit';
     4530        }
     4531
     4532        if ( ! empty( $object['post_category'] ) ) {
     4533                $post_category = array_filter( $object['post_category'] ); // Filter out empty terms
     4534        }
     4535
     4536        // Make sure we set a valid category.
     4537        if ( empty( $post_category ) || 0 == count( $post_category ) || ! is_array( $post_category ) ) {
     4538                // ironically, the default post_type for this function is 'post'
     4539                // as such, this should be probably have the same checks as wp_insert_post(),
     4540                // since all 'post's require a category. BUT, you can't override the post_type, because the
     4541                // variable is explicitly set.
     4542                $post_category = array();
     4543        }
     4544
     4545        // Create a valid post name.
     4546        if ( empty( $post_name ) ) {
     4547                $post_name = sanitize_title($post_title);
     4548        } else {
     4549                // missing check from wp_insert_post on update:
     4550                // "On updates, we need to check to see if it's using the old, fixed sanitization context."
     4551                $post_name = sanitize_title( $post_name );
     4552        }
     4553
     4554        if ( isset( $object['post_parent'] ) ) {
     4555                $post_parent = (int) $object['post_parent'];
     4556        } else {
     4557                $post_parent = 0;
     4558        }
     4559
     4560        if ( empty( $object['post_date'] ) || '0000-00-00 00:00:00' == $object['post_date'] ) {
     4561                $post_date = current_time( 'mysql' );
     4562        } else {
     4563                $post_date = $object['post_date'];
     4564        }
     4565
     4566        // wp_insert_post() validates the date here
     4567
     4568        if ( empty( $object['post_date_gmt'] ) || '0000-00-00 00:00:00' == $object['post_date_gmt'] ) {
     4569                $post_date_gmt = get_gmt_from_date( $post_date );
     4570        } else {
     4571                $post_date_gmt = $object['post_date_gmt'];
     4572        }
     4573
     4574        if ( $update || '0000-00-00 00:00:00' == $post_date ) {
     4575                $post_modified     = current_time( 'mysql' );
     4576                $post_modified_gmt = current_time( 'mysql', 1 );
     4577        } else {
     4578                $post_modified     = $post_date;
     4579                $post_modified_gmt = $post_date_gmt;
     4580        }
     4581
     4582        // wp_insert_post() does "future" checks
     4583
     4584        if ( empty( $object['comment_status'] ) ) {
     4585                if ( $update ) {
     4586                        $comment_status = 'closed';
     4587                } else {
     4588                        $comment_status = get_option('default_comment_status');
     4589                }
     4590        } else {
     4591                $comment_status = $object['comment_status'];
     4592        }
     4593
     4594        // these variables are needed by compact() later
     4595        $post_content_filtered = $object['post_content_filtered'];
     4596        $post_author = empty( $object['post_author'] ) ? $user_id : $object['post_author'];
     4597        $ping_status = empty( $object['ping_status'] ) ? get_option( 'default_ping_status' ) : $object['ping_status'];
     4598        $to_ping = isset( $object['to_ping'] ) ? sanitize_trackback_urls( $object['to_ping'] ) : '';
     4599        $pinged = isset( $object['pinged'] ) ? $object['pinged'] : '';
     4600        $import_id = isset( $object['import_id'] ) ? $object['import_id'] : 0;
     4601
     4602        if ( isset( $object['menu_order'] ) ) {
     4603                $menu_order = (int) $object['menu_order'];
     4604        } else {
     4605                $menu_order = 0;
     4606        }
     4607
     4608        $post_password = isset( $object['post_password'] ) ? $object['post_password'] : '';
     4609
     4610        // skips the 'wp_insert_post_parent' filter, present in wp_insert_post()
     4611
     4612        // expected_slashed ($post_name)
     4613        $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent );
     4614
     4615        // don't unslash
     4616        $post_mime_type = isset( $object['post_mime_type'] ) ? $object['post_mime_type'] : '';
     4617
     4618        // expected_slashed (everything!)
     4619        $data = compact( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'post_mime_type', 'guid' );
     4620
     4621        /**
     4622         * Filter attachment post data before it is updated in or added
     4623         * to the database.
     4624         *
     4625         * @since 3.9.0
     4626         *
     4627         * @param array $data   Array of sanitized attachment post data.
     4628         * @param array $object Array of un-sanitized attachment post data.
     4629         */
     4630        $data = apply_filters( 'wp_insert_attachment_data', $data, $object );
     4631        $data = wp_unslash( $data );
     4632        $where = array( 'ID' => $post_ID );
     4633
     4634        if ( $update ) {
     4635                // skips 'pre_post_update' action
     4636                $wpdb->update( $wpdb->posts, $data, $where );
     4637        } else {
     4638                // If there is a suggested ID, use it if not already present
     4639                if ( ! empty( $import_id ) ) {
     4640                        $import_id = (int) $import_id;
     4641                        if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE ID = %d", $import_id ) ) ) {
     4642                                $data['ID'] = $import_id;
     4643                        }
     4644                }
     4645
     4646                $wpdb->insert( $wpdb->posts, $data );
     4647                $post_ID = (int) $wpdb->insert_id;
     4648                $where = array( 'ID' => $post_ID );
     4649        }
     4650
     4651        if ( empty( $data['post_name'] ) ) {
     4652                $data['post_name'] = sanitize_title( $data['post_title'], $post_ID );
     4653                $wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
     4654        }
     4655
     4656        if ( is_object_in_taxonomy( $data['post_type'], 'category' ) ) {
     4657                wp_set_post_categories( $post_ID, $post_category );
     4658        }
     4659
     4660        if ( isset( $object['tags_input'] ) && is_object_in_taxonomy( $data['post_type'], 'post_tag' ) ) {
     4661                wp_set_post_tags( $post_ID, $object['tags_input'] );
     4662        }
     4663
     4664        // new-style support for all custom taxonomies
     4665        if ( ! empty( $object['tax_input'] ) ) {
     4666                foreach ( $object['tax_input'] as $taxonomy => $tags ) {
     4667                        $taxonomy_obj = get_taxonomy($taxonomy);
     4668                        if ( is_array( $tags ) ) { // array = hierarchical, string = non-hierarchical.
     4669                                $tags = array_filter($tags);
     4670                        }
     4671                        if ( current_user_can( $taxonomy_obj->cap->assign_terms ) ) {
     4672                                wp_set_post_terms( $post_ID, $tags, $taxonomy );
     4673                        }
     4674                }
     4675        }
     4676
     4677        if ( $file ) {
     4678                update_attached_file( $post_ID, $file );
     4679        }
     4680
     4681        // wp_insert_post() fills in guid if it is empty
     4682
     4683        clean_post_cache( $post_ID );
     4684
     4685        if ( ! empty( $object['context'] ) ) {
     4686                add_post_meta( $post_ID, '_wp_attachment_context', $object['context'], true );
     4687        }
     4688
     4689        // skips wp_transition_post_status
     4690
     4691        // the actions completely diverge from wp_insert_post()
     4692
     4693        if ( $update ) {
     4694                /**
     4695                 * Fires once an existing attachment has been updated.
     4696                 *
     4697                 * @since 2.0.0
     4698                 *
     4699                 * @param int $post_ID Attachment ID.
     4700                 */
     4701                do_action( 'edit_attachment', $post_ID );
     4702        } else {
     4703
     4704                /**
     4705                 * Fires once an attachment has been added.
     4706                 *
     4707                 * @since 2.0.0
     4708                 *
     4709                 * @param int $post_ID Attachment ID.
     4710                 */
     4711                do_action( 'add_attachment', $post_ID );
     4712        }
     4713
     4714        return $post_ID;
    45364715}
    45374716
     
    56195798        }
    56205799}
    5621 
    5622 
Note: See TracChangeset for help on using the changeset viewer.