Make WordPress Core

Changeset 13925


Ignore:
Timestamp:
04/02/2010 01:26:44 AM (14 years ago)
Author:
wpmuguru
Message:

rework syncing of global terms, see #12663

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/ms-functions.php

    r13884 r13925  
    12061206 */
    12071207function global_terms( $term_id, $deprecated = '' ) {
    1208     global $wpdb;
     1208    global $wpdb, $global_terms_recurse;
    12091209
    12101210    if ( !global_terms_enabled() )
    12111211        return $term_id;
    12121212
     1213    // prevent a race condition
     1214    if ( !isset( $global_terms_recurse ) ) {
     1215        $recurse_start = true;
     1216        $global_terms_recurse = 1;
     1217    } elseif ( 10 < $global_terms_recurse++ ) {
     1218        return $term_id;
     1219        $recurse_start = false;
     1220    }
     1221
    12131222    $term_id = intval( $term_id );
    12141223    $c = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->terms WHERE term_id = %d", $term_id ) );
     
    12161225    $global_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM $wpdb->sitecategories WHERE category_nicename = %s", $c->slug ) );
    12171226    if ( $global_id == null ) {
    1218         $wpdb->insert( $wpdb->sitecategories, array('cat_name' => $c->name, 'category_nicename' => $c->slug) );
    1219         $global_id = $wpdb->insert_id;
    1220     }
    1221 
    1222     if ( $global_id == $term_id )
    1223         return $global_id;
    1224 
    1225     if ( get_option( 'default_category' ) == $term_id )
    1226         update_option( 'default_category', $global_id );
    1227 
    1228     $wpdb->update( $wpdb->terms, array('term_id' => $global_id), array('term_id' => $term_id) );
    1229     $wpdb->update( $wpdb->term_taxonomy, array('term_id' => $global_id), array('term_id' => $term_id) );
    1230     $wpdb->update( $wpdb->term_taxonomy, array('parent' => $global_id), array('parent' => $term_id) );
    1231 
    1232     clean_term_cache($term_id);
     1227        $used_global_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM $wpdb->sitecategories WHERE cat_ID = %d", $c->term_id ) );
     1228        if ( null == $used_global_id ) {
     1229            $wpdb->insert( $wpdb->sitecategories, array( 'cat_ID' => $term_id, 'cat_name' => $c->name, 'category_nicename' => $c->slug ) );
     1230            $global_id = $wpdb->insert_id;
     1231        } else {
     1232            $max_global_id = $wpdb->get_var( "SELECT MAX(cat_ID) FROM $wpdb->sitecategories" );
     1233            $max_global_id += mt_rand( 100, 400 );
     1234            $wpdb->insert( $wpdb->sitecategories, array( 'cat_ID' => $global_id, 'cat_name' => $c->name, 'category_nicename' => $c->slug ) );
     1235            $global_id = $wpdb->insert_id;
     1236        }
     1237    } elseif ( $global_id != $term_id ) {
     1238        $local_id = $wpdb->get_row( $wpdb->prepare( "SELECT term_id FROM $wpdb->terms WHERE term_id = %d", $global_id ) );
     1239        if ( null != $local_id )
     1240            $local_id = global_terms( $local_id );
     1241            if ( 10 < $global_terms_recurse )
     1242                $global_id = $term_id;
     1243    }
     1244
     1245    if ( $global_id != $term_id ) {
     1246        if ( get_option( 'default_category' ) == $term_id )
     1247            update_option( 'default_category', $global_id );
     1248
     1249        $wpdb->update( $wpdb->terms, array('term_id' => $global_id), array('term_id' => $term_id) );
     1250        $wpdb->update( $wpdb->term_taxonomy, array('term_id' => $global_id), array('term_id' => $term_id) );
     1251        $wpdb->update( $wpdb->term_taxonomy, array('parent' => $global_id), array('parent' => $term_id) );
     1252
     1253        clean_term_cache($term_id);
     1254    }
     1255    if( $recurse_start )
     1256        unset( $global_terms_recurse );
    12331257
    12341258    return $global_id;
  • trunk/wp-includes/taxonomy.php

    r13924 r13925  
    15461546        // Make sure the slug is unique accross all taxonomies.
    15471547        $slug = wp_unique_term_slug($slug, (object) $args);
    1548         if ( !is_multisite() ) {
    1549             if ( false === $wpdb->insert( $wpdb->terms, compact( 'name', 'slug', 'term_group' ) ) )
    1550                 return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
    1551             $term_id = (int) $wpdb->insert_id;
    1552         } else {
    1553             $maxterm = $wpdb->get_var( "SELECT max(term_id) FROM {$wpdb->terms}" );
    1554             $term_id = mt_rand( $maxterm+100, $maxterm+4000 );
    1555             if ( false === $wpdb->insert( $wpdb->terms, compact( 'term_id', 'name', 'slug', 'term_group' ) ) )
    1556                 return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
    1557         }
     1548        if ( false === $wpdb->insert( $wpdb->terms, compact( 'name', 'slug', 'term_group' ) ) )
     1549            return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
     1550        $term_id = (int) $wpdb->insert_id;
    15581551    } else if ( is_taxonomy_hierarchical($taxonomy) && !empty($parent) ) {
    15591552        // If the taxonomy supports hierarchy and the term has a parent, make the slug unique
    15601553        // by incorporating parent slugs.
    15611554        $slug = wp_unique_term_slug($slug, (object) $args);
    1562         if ( !is_multisite() ) {
    1563             if ( false === $wpdb->insert( $wpdb->terms, compact( 'name', 'slug', 'term_group' ) ) )
    1564                 return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
    1565             $term_id = (int) $wpdb->insert_id;
    1566         } else {
    1567             $maxterm = $wpdb->get_var( "SELECT max(term_id) FROM {$wpdb->terms}" );
    1568             $term_id = mt_rand( $maxterm+100, $maxterm+4000 );
    1569             if ( false === $wpdb->insert( $wpdb->terms, compact( 'term_id','name', 'slug', 'term_group' ) ) )
    1570                 return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
    1571         }
     1555        if ( false === $wpdb->insert( $wpdb->terms, compact( 'name', 'slug', 'term_group' ) ) )
     1556            return new WP_Error('db_insert_error', __('Could not insert term into the database'), $wpdb->last_error);
     1557        $term_id = (int) $wpdb->insert_id;
    15721558    }
    15731559
Note: See TracChangeset for help on using the changeset viewer.