Changeset 5184

Show
Ignore:
Timestamp:
04/05/07 21:16:02 (1 year ago)
Author:
ryan
Message:

Bit twiddling. Add type bitfield to categories table. see #3723

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wp-admin/admin-db.php

    r5177 r5184  
    122122        $links_private = 0; 
    123123 
     124    if ( empty($type) ) 
     125        $type = TAXONOMY_CATEGORY; 
     126 
    124127    // Let's check if we have this category already, if so just do an update 
    125     if ( $cat_ID = category_exists( $category_nicename ) ) 
     128    if ( $cat_ID = category_exists( $category_nicename ) ) { 
    126129        $update = true; 
     130        $category = get_category($cat_ID); 
     131        // If inserting a category that already exists, OR in the new type rather 
     132        // than replacing the entire value. 
     133        $type = $category->type | $type; 
     134    } 
    127135 
    128136    if (!$update) { 
    129         $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_description, category_parent, links_private, posts_private) VALUES ('0', '$cat_name', '$category_nicename', '$category_description', '$category_parent', '$links_private', '$posts_private')"); 
     137        $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_description, category_parent, links_private, posts_private, type) VALUES ('0', '$cat_name', '$category_nicename', '$category_description', '$category_parent', '$links_private', '$posts_private', '$type')"); 
    130138        $cat_ID = (int) $wpdb->insert_id; 
    131139    } else { 
    132         $wpdb->query ("UPDATE $wpdb->categories SET cat_name = '$cat_name', category_nicename = '$category_nicename', category_description = '$category_description', category_parent = '$category_parent', links_private = '$links_private', posts_private = '$posts_private' WHERE cat_ID = '$cat_ID'"); 
     140        $wpdb->query ("UPDATE $wpdb->categories SET cat_name = '$cat_name', category_nicename = '$category_nicename', category_description = '$category_description', category_parent = '$category_parent', links_private = '$links_private', posts_private = '$posts_private', type = '$type' WHERE cat_ID = '$cat_ID'"); 
    133141    } 
    134142 
     
    196204    $parent = $category->category_parent; 
    197205 
    198     // Delete the category 
    199     if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = '$cat_ID'") ) 
    200         return 0; 
    201  
     206    // Delete the category if it is not also a tag. 
     207    if ( 0 == ($category->type & TAXONOMY_TAG) ) { 
     208        if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = '$cat_ID'") ) 
     209            return 0; 
     210    } else { 
     211        $wpdb->query("UPDATE $wpdb->categories SET type = type & ~" . TAXONOMY_CATEGORY . " WHERE cat_ID = '$cat_ID'"); 
     212    } 
    202213    // Update children to point to new parent 
    203214    $wpdb->query("UPDATE $wpdb->categories SET category_parent = '$parent' WHERE category_parent = '$cat_ID'"); 
    204215 
    205216    // Only set posts and links to the default category if they're not in another category already 
    206     $posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id='$cat_ID'"); 
     217    $posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id='$cat_ID' AND rel_type = 'category'"); 
    207218    foreach ( (array) $posts as $post_id ) { 
    208219        $cats = wp_get_post_categories($post_id); 
     
    256267 
    257268    return (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE category_nicename = '$category_nicename'"); 
     269} 
     270 
     271function wp_create_tag($tag_name) { 
     272    $tag_array = array('cat_name' => $tag_name, 'type' => TAXONOMY_TAG); 
     273    return wp_insert_category($tag_array); 
    258274} 
    259275 
  • trunk/wp-admin/admin-functions.php

    r5178 r5184  
    648648function return_categories_list( $parent = 0 ) { 
    649649    global $wpdb; 
    650     return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent AND ( ( link_count = 0 AND tag_count = 0 ) OR category_count != 0 OR ( link_count = 0 AND category_count = 0 AND tag_count = 0 ) ) ORDER BY category_count DESC" ); 
     650    return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent AND ( type & " . TAXONOMY_CATEGORY . " != 0 ) AND ( link_count = 0 OR category_count != 0 ) ORDER BY category_count DESC" ); 
    651651} 
    652652 
     
    745745function return_link_categories_list( $parent = 0 ) { 
    746746    global $wpdb; 
    747     return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent AND ( ( category_count = 0 AND tag_count = 0 ) OR link_count != 0 OR ( link_count = 0 AND category_count = 0 AND tag_count = 0 ) ) ORDER BY link_count DESC" ); 
     747    return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent AND ( type & " . TAXONOMY_CATEGORY . " != 0 ) AND ( category_count = 0 OR link_count != 0 ) ORDER BY link_count DESC" ); 
    748748} 
    749749 
  • trunk/wp-admin/upgrade-schema.php

    r5150 r5184  
    2222  posts_private tinyint(1) NOT NULL default '0', 
    2323  links_private tinyint(1) NOT NULL default '0', 
     24  type tinyint NOT NULL default '1', 
    2425  PRIMARY KEY  (cat_ID), 
    2526  KEY category_nicename (category_nicename) 
  • trunk/wp-includes/category.php

    r5179 r5184  
    11<?php 
     2 
     3define('TAXONOMY_CATEGORY', 1); 
     4define('TAXONOMY_TAG', 2); 
    25 
    36function get_all_category_ids() { 
     
    7982            $where .= ' AND category_count > 0'; 
    8083    } else { 
    81         $where .= ' AND ( tag_count = 0 OR ( tag_count != 0 AND ( link_count > 0 OR category_count > 0 ) ) ) '; 
     84        $where .= ' AND ( type & ' . TAXONOMY_CATEGORY . ' != 0 ) '; 
    8285    } 
    8386 
  • trunk/wp-includes/post.php

    r5158 r5184  
    788788            continue; // discard 
    789789        if ( !$tag_id = category_exists( $tag ) ) 
    790             $tag_id = wp_create_category( $tag ); 
     790            $tag_id = wp_create_tag( $tag ); 
    791791        $tag_ids[] = $tag_id; 
    792792    } 
     
    838838    foreach ( $all_affected_tags as $tag_id ) { 
    839839        $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = '$tag_id' AND rel_type = 'tag'" ); 
    840         $wpdb->query( "UPDATE $wpdb->categories SET tag_count = '$count' WHERE cat_ID = '$tag_id'" ); 
     840        $wpdb->query( "UPDATE $wpdb->categories SET tag_count = '$count', type = type | " . TAXONOMY_TAG . " WHERE cat_ID = '$tag_id'" ); 
    841841        if ( $count == 0 ) 
    842             $wpdb->query( "UPDATE $wpdb->categories SET tag_count = '-1' WHERE cat_ID = '$tag_id'" ); 
     842            $wpdb->query( "UPDATE $wpdb->categories SET type = type & ~". TAXONOMY_TAG . " WHERE cat_ID = '$tag_id'" ); 
    843843        clean_category_cache( $tag_id ); 
    844844        do_action( 'edit_category', $tag_id ); 
     
    877877                DELETE FROM $wpdb->post2cat 
    878878                WHERE category_id = '$del' 
    879                     AND post_id = '$post_ID' 
     879                    AND post_id = '$post_ID' AND rel_type = 'category' 
    880880                "); 
    881881        } 
     
    899899    foreach ( $all_affected_cats as $cat_id ) { 
    900900        $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = '$cat_id' AND rel_type = 'category'"); 
    901         $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = '$cat_id'"); 
     901        $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count', type = type | " . TAXONOMY_CATEGORY . " WHERE cat_ID = '$cat_id'"); 
    902902        clean_category_cache($cat_id); 
    903903        do_action('edit_category', $cat_id); 
  • trunk/wp-includes/version.php

    r5110 r5184  
    44 
    55$wp_version = '2.2-bleeding'; 
    6 $wp_db_version = 4865
     6$wp_db_version = 5183
    77 
    88?>