Make WordPress Core

Changeset 11943


Ignore:
Timestamp:
09/17/2009 08:17:33 PM (17 years ago)
Author:
westi
Message:

First pass commentmeta implementation. See #2659 props scribu.

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/schema.php

    r11883 r11943  
    5454 PRIMARY KEY  (object_id,term_taxonomy_id),
    5555 KEY term_taxonomy_id (term_taxonomy_id)
     56) $charset_collate;
     57CREATE TABLE $wpdb->commentmeta (
     58  meta_id bigint(20) unsigned NOT NULL auto_increment,
     59  comment_id bigint(20) unsigned NOT NULL default '0',
     60  meta_key varchar(255) default NULL,
     61  meta_value longtext,
     62  PRIMARY KEY  (meta_id),
     63  KEY post_id (comment_id),
     64  KEY meta_key (meta_key)
    5665) $charset_collate;
    5766CREATE TABLE $wpdb->comments (
  • trunk/wp-includes/comment.php

    r11930 r11943  
    362362}
    363363
     364//
     365// Comment meta functions
     366//
     367
     368/**
     369 * Add meta data field to a comment.
     370 *
     371 * Post meta data is called "Custom Fields" on the Administration Panels.
     372 *
     373 * @since 2.9
     374 * @uses add_metadata
     375 * @link http://codex.wordpress.org/Function_Reference/add_comment_meta
     376 *
     377 * @param int $comment_id Post ID.
     378 * @param string $key Metadata name.
     379 * @param mixed $value Metadata value.
     380 * @param bool $unique Optional, default is false. Whether the same key should not be added.
     381 * @return bool False for failure. True for success.
     382 */
     383function add_comment_meta($comment_id, $meta_key, $meta_value, $unique = false) {
     384        return add_metadata('comment', $comment_id, $meta_key, $meta_value, $unique);
     385}
     386
     387/**
     388 * Remove metadata matching criteria from a comment.
     389 *
     390 * You can match based on the key, or key and value. Removing based on key and
     391 * value, will keep from removing duplicate metadata with the same key. It also
     392 * allows removing all metadata matching key, if needed.
     393 *
     394 * @since 2.9
     395 * @uses delete_metadata
     396 * @link http://codex.wordpress.org/Function_Reference/delete_comment_meta
     397 *
     398 * @param int $comment_id comment ID
     399 * @param string $meta_key Metadata name.
     400 * @param mixed $meta_value Optional. Metadata value.
     401 * @return bool False for failure. True for success.
     402 */
     403function delete_comment_meta($comment_id, $meta_key, $meta_value = '') {
     404        return delete_metadata('comment', $comment_id, $meta_key, $meta_value);
     405}
     406
     407/**
     408 * Retrieve comment meta field for a comment.
     409 *
     410 * @since 2.9
     411 * @uses get_metadata
     412 * @link http://codex.wordpress.org/Function_Reference/get_comment_meta
     413 *
     414 * @param int $comment_id Post ID.
     415 * @param string $key The meta key to retrieve.
     416 * @param bool $single Whether to return a single value.
     417 * @return mixed Will be an array if $single is false. Will be value of meta data field if $single
     418 *  is true.
     419 */
     420function get_comment_meta($comment_id, $key, $single = false) {
     421        return get_metadata('comment', $comment_id, $key, $single);
     422}
     423
     424/**
     425 * Update comment meta field based on comment ID.
     426 *
     427 * Use the $prev_value parameter to differentiate between meta fields with the
     428 * same key and comment ID.
     429 *
     430 * If the meta field for the comment does not exist, it will be added.
     431 *
     432 * @since 2.9
     433 * @uses update_metadata
     434 * @link http://codex.wordpress.org/Function_Reference/update_comment_meta
     435 *
     436 * @param int $comment_id Post ID.
     437 * @param string $key Metadata key.
     438 * @param mixed $value Metadata value.
     439 * @param mixed $prev_value Optional. Previous value to check before removing.
     440 * @return bool False on failure, true if success.
     441 */
     442function update_comment_meta($comment_id, $meta_key, $meta_value, $prev_value = '') {
     443        return update_metadata('comment', $comment_id, $meta_key, $meta_value, $prev_value);
     444}
     445
    364446/**
    365447 * Sanitizes the cookies sent to the user already.
  • trunk/wp-includes/post.php

    r11930 r11943  
    512512 */
    513513function add_post_meta($post_id, $meta_key, $meta_value, $unique = false) {
    514         if ( !$meta_key )
    515                 return false;
    516 
    517         global $wpdb;
    518 
    519514        // make sure meta is added to the post, not a revision
    520515        if ( $the_post = wp_is_post_revision($post_id) )
    521516                $post_id = $the_post;
    522517
    523         // expected_slashed ($meta_key)
    524         $meta_key = stripslashes($meta_key);
    525 
    526         if ( $unique && $wpdb->get_var( $wpdb->prepare( "SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = %s AND post_id = %d", $meta_key, $post_id ) ) )
    527                 return false;
    528 
    529         $meta_value = maybe_serialize( stripslashes_deep($meta_value) );
    530 
    531         $wpdb->insert( $wpdb->postmeta, compact( 'post_id', 'meta_key', 'meta_value' ) );
    532 
    533         wp_cache_delete($post_id, 'post_meta');
    534 
    535         do_action( 'added_post_meta', $wpdb->insert_id, $post_id, $meta_key, $meta_value );
    536 
    537         return true;
     518        return add_metadata('post', $post_id, $meta_key, $meta_value, $unique);
    538519}
    539520
     
    555536 */
    556537function delete_post_meta($post_id, $meta_key, $meta_value = '') {
    557         global $wpdb;
    558 
    559538        // make sure meta is added to the post, not a revision
    560539        if ( $the_post = wp_is_post_revision($post_id) )
    561540                $post_id = $the_post;
    562541
    563         // expected_slashed ($meta_key, $meta_value)
    564         $meta_key = stripslashes( $meta_key );
    565         $meta_value = maybe_serialize( stripslashes_deep($meta_value) );
    566 
    567         if ( !$meta_key )
    568                 return false;
    569 
    570         if ( empty( $meta_value ) )
    571                 $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", $post_id, $meta_key ) );
    572         else
    573                 $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s AND meta_value = %s", $post_id, $meta_key, $meta_value ) );
    574 
    575         if ( !$meta_id )
    576                 return false;
    577 
    578         do_action( 'delete_post_meta', $meta_id, $post_id, $meta_key, $meta_value );
    579 
    580         if ( empty( $meta_value ) )
    581                 $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", $post_id, $meta_key ) );
    582         else
    583                 $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s AND meta_value = %s", $post_id, $meta_key, $meta_value ) );
    584 
    585         wp_cache_delete($post_id, 'post_meta');
    586 
    587         do_action( 'deleted_post_meta', $meta_id, $post_id, $meta_key, $meta_value );
    588 
    589         return true;
     542        return delete_metadata('post', $post_id, $meta_key, $meta_value);
    590543}
    591544
     
    604557 */
    605558function get_post_meta($post_id, $key, $single = false) {
    606         if ( !$key )
    607                 return '';
    608 
    609         $post_id = (int) $post_id;
    610 
    611         $meta_cache = wp_cache_get($post_id, 'post_meta');
    612 
    613         if ( !$meta_cache ) {
    614                 update_postmeta_cache($post_id);
    615                 $meta_cache = wp_cache_get($post_id, 'post_meta');
    616         }
    617 
    618         if ( isset($meta_cache[$key]) ) {
    619                 if ( $single ) {
    620                         return maybe_unserialize( $meta_cache[$key][0] );
    621                 } else {
    622                         return array_map('maybe_unserialize', $meta_cache[$key]);
    623                 }
    624         }
    625 
    626         return '';
     559        return get_metadata('post', $post_id, $key, $single);
    627560}
    628561
     
    646579 */
    647580function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '') {
    648         global $wpdb;
    649 
    650581        // make sure meta is added to the post, not a revision
    651582        if ( $the_post = wp_is_post_revision($post_id) )
    652583                $post_id = $the_post;
    653584
    654         // expected_slashed ($meta_key)
    655         $meta_key = stripslashes($meta_key);
    656 
    657         if ( !$meta_key )
    658                 return false;
    659 
    660         $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = %s AND post_id = %d", $meta_key, $post_id ) );
    661         if ( ! $meta_id )
    662                 return add_post_meta($post_id, $meta_key, $meta_value);
    663 
    664         $meta_value = maybe_serialize( stripslashes_deep($meta_value) );
    665 
    666         $data  = compact( 'meta_value' );
    667         $where = compact( 'meta_key', 'post_id' );
    668 
    669         if ( !empty( $prev_value ) ) {
    670                 $prev_value = maybe_serialize($prev_value);
    671                 $where['meta_value'] = $prev_value;
    672         }
    673 
    674         do_action( 'update_post_meta', $meta_id, $post_id, $meta_key, $meta_value );
    675 
    676         $wpdb->update( $wpdb->postmeta, $data, $where );
    677         wp_cache_delete($post_id, 'post_meta');
    678 
    679         do_action( 'updated_post_meta', $meta_id, $post_id, $meta_key, $meta_value );
    680 
    681         return true;
     585        return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value);
    682586}
    683587
     
    33053209 */
    33063210function update_postmeta_cache($post_ids) {
    3307         global $wpdb;
    3308 
    3309         if ( empty( $post_ids ) )
    3310                 return false;
    3311 
    3312         if ( !is_array($post_ids) ) {
    3313                 $post_ids = preg_replace('|[^0-9,]|', '', $post_ids);
    3314                 $post_ids = explode(',', $post_ids);
    3315         }
    3316 
    3317         $post_ids = array_map('intval', $post_ids);
    3318 
    3319         $ids = array();
    3320         foreach ( (array) $post_ids as $id ) {
    3321                 if ( false === wp_cache_get($id, 'post_meta') )
    3322                         $ids[] = $id;
    3323         }
    3324 
    3325         if ( empty( $ids ) )
    3326                 return false;
    3327 
    3328         // Get post-meta info
    3329         $id_list = join(',', $ids);
    3330         $cache = array();
    3331         if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN ($id_list)", ARRAY_A) ) {
    3332                 foreach ( (array) $meta_list as $metarow) {
    3333                         $mpid = (int) $metarow['post_id'];
    3334                         $mkey = $metarow['meta_key'];
    3335                         $mval = $metarow['meta_value'];
    3336 
    3337                         // Force subkeys to be array type:
    3338                         if ( !isset($cache[$mpid]) || !is_array($cache[$mpid]) )
    3339                                 $cache[$mpid] = array();
    3340                         if ( !isset($cache[$mpid][$mkey]) || !is_array($cache[$mpid][$mkey]) )
    3341                                 $cache[$mpid][$mkey] = array();
    3342 
    3343                         // Add a value to the current pid/key:
    3344                         $cache[$mpid][$mkey][] = $mval;
    3345                 }
    3346         }
    3347 
    3348         foreach ( (array) $ids as $id ) {
    3349                 if ( ! isset($cache[$id]) )
    3350                         $cache[$id] = array();
    3351         }
    3352 
    3353         foreach ( (array) array_keys($cache) as $post)
    3354                 wp_cache_set($post, $cache[$post], 'post_meta');
    3355 
    3356         return $cache;
     3211        return update_meta_cache('post', $post_ids);
    33573212}
    33583213
  • trunk/wp-includes/version.php

    r11883 r11943  
    1616 * @global int $wp_db_version
    1717 */
    18 $wp_db_version = 11557;
     18$wp_db_version = 11943;
    1919
    2020/**
  • trunk/wp-includes/wp-db.php

    r11930 r11943  
    210210
    211211        /**
     212         * WordPress Comment Metadata table
     213         *
     214         * @since 2.9
     215         * @access public
     216         * @var string
     217         */
     218        var $commentmeta;
     219
     220        /**
    212221         * WordPress User Metadata table
    213222         *
     
    253262         */
    254263        var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',
    255                         'postmeta', 'terms', 'term_taxonomy', 'term_relationships');
     264                        'postmeta', 'terms', 'term_taxonomy', 'term_relationships', 'commentmeta');
    256265
    257266        /**
  • trunk/wp-settings.php

    r11820 r11943  
    333333require (ABSPATH . WPINC . '/theme.php');
    334334require (ABSPATH . WPINC . '/user.php');
     335require (ABSPATH . WPINC . '/meta.php');
    335336require (ABSPATH . WPINC . '/general-template.php');
    336337require (ABSPATH . WPINC . '/link-template.php');
Note: See TracChangeset for help on using the changeset viewer.