Changeset 7747 for trunk/wp-includes/post.php
- Timestamp:
- 04/18/2008 11:38:21 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/post.php
r7746 r7747 2991 2991 } 2992 2992 2993 /* Post Revisions */ 2994 2995 /** 2996 * _wp_revision_fields() - determines which fields of posts are to be saved in revisions 2997 * 2998 * Does two things. If passed a postn *array*, it will return a post array ready to be 2999 * insterted into the posts table as a post revision. 3000 * Otherwise, returns an array whose keys are the post fields to be saved post revisions. 3001 * 3002 * @package WordPress 3003 * @subpackage Post Revisions 3004 * @since 2.6 3005 * 3006 * @param array $post optional a post array to be processed for insertion as a post revision 3007 * @return array post array ready to be inserted as a post revision or array of fields that can be versioned 3008 */ 3009 function _wp_revision_fields( $post = null ) { 3010 static $fields = false; 3011 3012 if ( !$fields ) { 3013 // Allow these to be versioned 3014 $fields = array( 3015 'post_title' => __( 'Title' ), 3016 'post_author' => __( 'Author' ), 3017 'post_content' => __( 'Content' ), 3018 'post_excerpt' => __( 'Excerpt' ), 3019 ); 3020 3021 // WP uses these internally either in versioning or elsewhere - they cannot be versioned 3022 foreach ( array( 'ID', 'post_name', 'post_parent', 'post_date', 'post_date_gmt', 'post_status', 'post_type', 'comment_count' ) as $protect ) 3023 unset( $fields[$protect] ); 3024 } 3025 3026 if ( !is_array($post) ) 3027 return $fields; 3028 3029 $return = array(); 3030 foreach ( array_intersect( array_keys( $post ), array_keys( $fields ) ) as $field ) 3031 $return[$field] = $post[$field]; 3032 3033 $return['post_parent'] = $post['ID']; 3034 $return['post_status'] = 'inherit'; 3035 $return['post_type'] = 'revision'; 3036 $return['post_name'] = "$post[ID]-revision"; 3037 $return['post_date'] = $post['post_modified']; 3038 $return['post_date_gmt'] = $post['post_modified_gmt']; 3039 3040 return $return; 3041 } 3042 3043 /** 3044 * wp_save_revision() - Saves an already existing post as a post revision. Typically used immediately prior to post updates. 3045 * 3046 * @package WordPress 3047 * @subpackage Post Revisions 3048 * @since 2.6 3049 * 3050 * @uses _wp_put_revision() 3051 * 3052 * @param int $post_id The ID of the post to save as a revision 3053 * @return mixed null or 0 if error, new revision ID if success 3054 */ 3055 function wp_save_revision( $post_id ) { 3056 // TODO: rework autosave to use special type of post revision 3057 if ( @constant( 'DOING_AUTOSAVE' ) ) 3058 return; 3059 3060 if ( !$post = get_post( $post_id, ARRAY_A ) ) 3061 return; 3062 3063 // TODO: open this up for pages also 3064 if ( 'post' != $post->post_type ) 3065 retun; 3066 3067 return _wp_put_revision( $post ); 3068 } 3069 3070 /** 3071 * _wp_put_revision() - Inserts post data into the posts table as a post revision 3072 * 3073 * @package WordPress 3074 * @subpackage Post Revisions 3075 * @since 2.6 3076 * 3077 * @uses wp_insert_post() 3078 * 3079 * @param int|object|array $post post ID, post object OR post array 3080 * @return mixed null or 0 if error, new revision ID if success 3081 */ 3082 function _wp_put_revision( $post = null ) { 3083 if ( is_object($post) ) 3084 $post = get_object_vars( $post ); 3085 elseif ( !is_array($post) ) 3086 $post = get_post($post, ARRAY_A); 3087 3088 if ( !$post || empty($post['ID']) ) 3089 return; 3090 3091 if ( isset($post['post_type']) && 'revision' == $post_post['type'] ) 3092 return new WP_Error( 'post_type', __( 'Cannot create a revision of a revision' ) ); 3093 3094 $post = _wp_revision_fields( $post ); 3095 3096 if ( $revision_id = wp_insert_post( $post ) ) 3097 do_action( '_wp_put_revision', $revision_id ); 3098 3099 return $revision_id; 3100 } 3101 3102 /** 3103 * wp_get_revision() - Gets a post revision 3104 * 3105 * @package WordPress 3106 * @subpackage Post Revisions 3107 * @since 2.6 3108 * 3109 * @uses get_post() 3110 * 3111 * @param int|object $post post ID or post object 3112 * @param $output optional OBJECT, ARRAY_A, or ARRAY_N 3113 * @param string $filter optional sanitation filter. @see sanitize_post() 3114 * @return mixed null if error or post object if success 3115 */ 3116 function &wp_get_revision(&$post, $output = OBJECT, $filter = 'raw') { 3117 $null = null; 3118 if ( !$revision = get_post( $post, OBJECT, $filter ) ) 3119 return $revision; 3120 if ( 'revision' !== $revision->post_type ) 3121 return $null; 3122 3123 if ( $output == OBJECT ) { 3124 return $revision; 3125 } elseif ( $output == ARRAY_A ) { 3126 $_revision = get_object_vars($revision); 3127 return $_revision; 3128 } elseif ( $output == ARRAY_N ) { 3129 $_revision = array_values(get_object_vars($revision)); 3130 return $_revision; 3131 } 3132 3133 return $revision; 3134 } 3135 3136 /** 3137 * wp_restore_revision() - Restores a post to the specified revision 3138 * 3139 * Can restore a past using all fields of the post revision, or only selected fields. 3140 * 3141 * @package WordPress 3142 * @subpackage Post Revisions 3143 * @since 2.6 3144 * 3145 * @uses wp_get_revision() 3146 * @uses wp_update_post() 3147 * 3148 * @param int|object $revision_id revision ID or revision object 3149 * @param array $fields optional What fields to restore from. Defaults to all. 3150 * @return mixed null if error, false if no fields to restore, (int) post ID if success 3151 */ 3152 function wp_restore_revision( $revision_id, $fields = null ) { 3153 if ( !$revision = wp_get_revision( $revision_id, ARRAY_A ) ) 3154 return $revision; 3155 3156 if ( !is_array( $fields ) ) 3157 $fields = array_keys( _wp_revision_fields() ); 3158 3159 $update = array(); 3160 foreach( array_intersect( array_keys( $revision ), $fields ) as $field ) 3161 $update[$field] = $revision[$field]; 3162 3163 if ( !$update ) 3164 return false; 3165 3166 $update['ID'] = $revision['post_parent']; 3167 3168 if ( $post_id = wp_update_post( $update ) ) 3169 do_action( 'wp_restore_revision', $post_id, $revision['ID'] ); 3170 3171 return $post_id; 3172 } 3173 3174 /** 3175 * wp_delete_revision() - Deletes a revision. 3176 * 3177 * Deletes the row from the posts table corresponding to the specified revision 3178 * 3179 * @package WordPress 3180 * @subpackage Post Revisions 3181 * @since 2.6 3182 * 3183 * @uses wp_get_revision() 3184 * @uses wp_delete_post() 3185 * 3186 * @param int|object $revision_id revision ID or revision object 3187 * @param array $fields optional What fields to restore from. Defaults to all. 3188 * @return mixed null if error, false if no fields to restore, (int) post ID if success 3189 */ 3190 function wp_delete_revision( $revision_id ) { 3191 if ( !$revision = wp_get_revision( $revision_id ) ) 3192 return $revision; 3193 3194 if ( $delete = wp_delete_post( $revision->ID ) ) 3195 do_action( 'wp_delete_revision', $revision->ID, $revision ); 3196 3197 return $delete; 3198 } 3199 3200 /** 3201 * wp_get_post_revisions() - Returns all revisions of specified post 3202 * 3203 * @package WordPress 3204 * @subpackage Post Revisions 3205 * @since 2.6 3206 * 3207 * @uses get_children() 3208 * 3209 * @param int|object $post_id post ID or post object 3210 * @return array empty if no revisions 3211 */ 3212 function wp_get_post_revisions( $post_id = 0 ) { 3213 if ( ( !$post = get_post( $post_id ) ) || empty( $post->ID ) ) 3214 return array(); 3215 3216 if ( !$revisions = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'revision' ) ) ) 3217 return array(); 3218 return $revisions; 3219 } 3220 2993 3221 ?>
Note: See TracChangeset
for help on using the changeset viewer.