From 675cc0d029bc2fcd34bbfee9c9e35694db158eea Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 23 May 2007 17:28:13 +0000 Subject: [PATCH] wp_insert_category(), cat_rows(), and others using taxonomy. see #4189 git-svn-id: http://svn.automattic.com/wordpress/trunk@5528 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/admin-db.php | 85 ++++++--------------- wp-admin/admin-functions.php | 29 ++++---- wp-admin/categories.php | 1 - wp-includes/category.php | 16 +--- wp-includes/taxonomy.php | 139 +++++++++++++++++++++-------------- 5 files changed, 122 insertions(+), 148 deletions(-) diff --git a/wp-admin/admin-db.php b/wp-admin/admin-db.php index 07b7881baa..8cd708b9b5 100644 --- a/wp-admin/admin-db.php +++ b/wp-admin/admin-db.php @@ -84,83 +84,46 @@ function wp_insert_category($catarr) { extract($catarr); - if( trim( $cat_name ) == '' ) + if ( trim( $cat_name ) == '' ) return 0; $cat_ID = (int) $cat_ID; // Are we updating or creating? - if (!empty ($cat_ID)) + if ( !empty ($cat_ID) ) $update = true; else $update = false; - $cat_name = apply_filters('pre_category_name', $cat_name); + $name = $cat_name; + $description = $category_description; + $slug = $category_nicename; + $parent = $category_parent; - if (empty ($category_nicename)) - $category_nicename = sanitize_title($cat_name); + $name = apply_filters('pre_category_name', $name); + + if ( empty ($slug) ) + $slug = sanitize_title($slug); else - $category_nicename = sanitize_title($category_nicename); - $category_nicename = apply_filters('pre_category_nicename', $category_nicename); + $slug = sanitize_title($slug); + $slug = apply_filters('pre_category_nicename', $slug); - if (empty ($category_description)) - $category_description = ''; - $category_description = apply_filters('pre_category_description', $category_description); + if ( empty ($description) ) + $description = ''; + $description = apply_filters('pre_category_description', $description); - $category_parent = (int) $category_parent; - if ( empty($category_parent) || !get_category( $category_parent ) || ($cat_ID && cat_is_ancestor_of($cat_ID, $category_parent) ) ) - $category_parent = 0; + $parent = (int) $parent; + if ( empty($parent) || !get_category( $parent ) || ($cat_ID && cat_is_ancestor_of($cat_ID, $parent) ) ) + $parent = 0; - if ( isset($posts_private) ) - $posts_private = (int) $posts_private; + $args = compact('slug', 'parent', 'description'); + + if ( $update ) + $cat_ID = wp_update_term($cat_ID, 'category', $args); else - $posts_private = 0; + $cat_ID = wp_insert_term($cat_name, 'category', $args); - if ( isset($links_private) ) - $links_private = (int) $links_private; - else - $links_private = 0; - - if ( empty($type) ) - $type = TAXONOMY_CATEGORY; - - // Let's check if we have this category already, if so just do an update - if ( !$update && $cat_ID = category_object_exists( $category_nicename ) ) - $update = true; - - if (!$update) { - $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')"); - $cat_ID = (int) $wpdb->insert_id; - } else { - $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'"); - } - - if ( $category_nicename == '' ) { - $category_nicename = sanitize_title($cat_name, $cat_ID ); - $wpdb->query( "UPDATE $wpdb->categories SET category_nicename = '$category_nicename' WHERE cat_ID = '$cat_ID'" ); - } - - // Keep in mind when using this filter and altering the cat_ID that the two queries above - // have already taken place with the OLD cat_ID - // Also note that you may have post2cat entries with the old cat_ID if this is an update - - if ($update) { - do_action('edit_category', $cat_ID); - } else { - do_action('create_category', $cat_ID); - do_action('add_category', $cat_ID); - } - - $cat_ID = apply_filters('cat_id_filter', $cat_ID, $update); - - clean_category_cache($cat_ID); - - if ($update) - do_action('edited_category', $cat_ID); - else - do_action('created_category', $cat_ID); - - return $cat_ID; + return $cat_ID['term_id']; } function wp_update_category($catarr) { diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index ac57888988..53130e4dd8 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -769,7 +769,7 @@ function dropdown_link_categories( $default = 0 ) { // Dandy new recursive multiple category stuff. function cat_rows( $parent = 0, $level = 0, $categories = 0 ) { - if (!$categories ) + if ( !$categories ) $categories = get_categories( 'hide_empty=0' ); $children = _get_category_hierarchy(); @@ -777,10 +777,10 @@ function cat_rows( $parent = 0, $level = 0, $categories = 0 ) { if ( $categories ) { ob_start(); foreach ( $categories as $category ) { - if ( $category->category_parent == $parent) { + if ( $category->parent == $parent) { echo "\t" . _cat_row( $category, $level ); - if ( isset($children[$category->cat_ID]) ) - cat_rows( $category->cat_ID, $level +1, $categories ); + if ( isset($children[$category->term_id]) ) + cat_rows( $category->term_id, $level +1, $categories ); } } $output = ob_get_contents(); @@ -799,12 +799,11 @@ function _cat_row( $category, $level, $name_override = false ) { $pad = str_repeat( '— ', $level ); if ( current_user_can( 'manage_categories' ) ) { - $edit = "".__( 'Edit' ).""; + $edit = "".__( 'Edit' ).""; $default_cat_id = (int) get_option( 'default_category' ); - $default_link_cat_id = (int) get_option( 'default_link_category' ); - if ( ($category->cat_ID != $default_cat_id ) && ($category->cat_ID != $default_link_cat_id ) ) - $edit .= "cat_ID ) . "' onclick=\"return deleteSomething( 'cat', $category->cat_ID, '" . js_escape(sprintf( __("You are about to delete the category '%s'.\nAll posts that were only assigned to this category will be assigned to the '%s' category.\nAll links that were only assigned to this category will be assigned to the '%s' category.\n'OK' to delete, 'Cancel' to stop." ), $category->cat_name, get_catname( $default_cat_id ), get_catname( $default_link_cat_id ) )) . "' );\" class='delete'>".__( 'Delete' ).""; + if ( $category->term_id != $default_cat_id ) + $edit .= "term_id ) . "' onclick=\"return deleteSomething( 'cat', $category->term_id, '" . js_escape(sprintf( __("You are about to delete the category '%s'.\nAll posts that were only assigned to this category will be assigned to the '%s' category.\nAll links that were only assigned to this category will be assigned to the '%s' category.\n'OK' to delete, 'Cancel' to stop." ), $category->name, get_catname( $default_cat_id ), get_catname( $default_link_cat_id ) )) . "' );\" class='delete'>".__( 'Delete' ).""; else $edit .= "".__( "Default" ); } else @@ -812,15 +811,13 @@ function _cat_row( $category, $level, $name_override = false ) { $class = ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || " class='alternate'" == $class ) ? '' : " class='alternate'"; - $category->category_count = number_format_i18n( $category->category_count ); - $category->link_count = number_format_i18n( $category->link_count ); - $posts_count = ( $category->category_count > 0 ) ? "$category->category_count" : $category->category_count; - return " - $category->cat_ID - " . ( $name_override ? $name_override : $pad . ' ' . $category->cat_name ) . " - $category->category_description + $category->count = number_format_i18n( $category->count ); + $posts_count = ( $category->count > 0 ) ? "$category->count" : $category->count; + return " + $category->term_id + " . ( $name_override ? $name_override : $pad . ' ' . $category->name ) . " + $category->description $posts_count - $category->link_count $edit\n\t\n"; } diff --git a/wp-admin/categories.php b/wp-admin/categories.php index 18249cb7d6..41caea2255 100644 --- a/wp-admin/categories.php +++ b/wp-admin/categories.php @@ -99,7 +99,6 @@ $messages[5] = __('Category not updated.'); - diff --git a/wp-includes/category.php b/wp-includes/category.php index 9faa09ae37..75245ad32f 100644 --- a/wp-includes/category.php +++ b/wp-includes/category.php @@ -84,7 +84,7 @@ function get_catname($cat_ID) { function get_cat_name($cat_id) { $cat_id = (int) $cat_id; $category = &get_category($cat_id); - return $category->cat_name; + return $category->name; } function cat_is_ancestor_of($cat1, $cat2) { @@ -174,19 +174,7 @@ function _pad_category_counts($type, &$categories) { } function _get_category_hierarchy() { - $children = get_option('category_children'); - if ( is_array($children) ) - return $children; - - $children = array(); - $categories = get_categories('hide_empty=0&hierarchical=0'); - foreach ( $categories as $cat ) { - if ( $cat->category_parent > 0 ) - $children[$cat->category_parent][] = $cat->cat_ID; - } - update_option('category_children', $children); - - return $children; + return _get_term_hierarchy('category'); } // Tags diff --git a/wp-includes/taxonomy.php b/wp-includes/taxonomy.php index a053e09be2..f8f1e2d1ba 100644 --- a/wp-includes/taxonomy.php +++ b/wp-includes/taxonomy.php @@ -39,14 +39,84 @@ function wp_insert_term( $term, $taxonomy, $args = array() ) { if ( ! is_taxonomy($taxonomy) ) return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); - $update = false; - if ( is_int($term) ) { - $update = true; - $term_id = $term; - } else { - $name = $term; + $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => ''); + $args = wp_parse_args($args, $defaults); + extract($args); + + $name = $term; + $parent = (int) $parent; + + if ( empty($slug) ) + $slug = sanitize_title($name); + else + $slug = sanitize_title($slug); + + $term_group = 0; + if ( $alias_of ) { + $alias = $wpdb->fetch_row("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = '$alias_of'"); + if ( $alias->term_group ) { + // The alias we want is already in a group, so let's use that one. + $term_group = $alias->term_group; + } else { + // The alias isn't in a group, so let's create a new one and firstly add the alias term to it. + $term_group = $wpdb->get_var("SELECT MAX() term_group FROM $wpdb->terms GROUP BY term_group") + 1; + $wpdb->query("UPDATE $wpdb->terms SET term_group = $term_group WHERE term_id = $alias->term_id"); + } } + if ( ! $term_id = is_term($slug) ) { + $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$name', '$slug', '$term_group')"); + $term_id = (int) $wpdb->insert_id; + } + + if ( empty($slug) ) { + $slug = sanitize_title($slug, $term_id); + $wpdb->query("UPDATE $wpdb->terms SET slug = '$slug' WHERE term_id = '$term_id'"); + } + + $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = '$taxonomy' AND t.term_id = $term_id"); + + if ( !empty($tt_id) ) + return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); + + $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('$term_id', '$taxonomy', '$description', '$parent', '0')"); + $tt_id = (int) $wpdb->insert_id; + + do_action("create_term", $term_id, $tt_id); + do_action("create_$taxonomy", $term_id, $tt_id); + + $term_id = apply_filters('term_id_filter', $term_id, $tt_id); + + //clean_term_cache($term_id); + + do_action("created_term", $term_id, $tt_id); + do_action("created_$taxonomy", $term_id, $tt_id); + + return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); +} + +/** + * Removes a term from the database. + */ +function wp_delete_term() {} + +function wp_update_term( $term, $taxonomy, $args = array() ) { + global $wpdb; + + if ( ! is_taxonomy($taxonomy) ) + return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); + + $term_id = (int) $term; + + // First, get all of the original args + $term = get_term ($term_id, $taxonomy, ARRAY_A); + + // Escape data pulled from DB. + $term = add_magic_quotes($term); + + // Merge old and new args with new args overwriting old ones. + $args = array_merge($term, $args); + $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => ''); $args = wp_parse_args($args, $defaults); extract($args); @@ -71,12 +141,7 @@ function wp_insert_term( $term, $taxonomy, $args = array() ) { } } - if ( $update ) { - $wpdb->query("UPDATE $wpdb->terms SET name = '$name', slug = '$slug', term_group = '$term_group' WHERE term_id = '$term_id'"); - } else if ( ! $term_id = is_term($slug) ) { - $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$name', '$slug', '$term_group')"); - $term_id = (int) $wpdb->insert_id; - } + $wpdb->query("UPDATE $wpdb->terms SET name = '$name', slug = '$slug', term_group = '$term_group' WHERE term_id = '$term_id'"); if ( empty($slug) ) { $slug = sanitize_title($slug, $term_id); @@ -85,59 +150,21 @@ function wp_insert_term( $term, $taxonomy, $args = array() ) { $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = '$taxonomy' AND t.term_id = $term_id"); - if ( !$update && !empty($tt_id) ) - return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); + $wpdb->query("UPDATE $wpdb->term_taxonomy SET term_id = '$term_id', taxonomy = '$taxonomy', description = '$description', parent = '$parent', count = 0 WHERE term_taxonomy_id = '$tt_id'"); - if ( $update ) { - $wpdb->query("UPDATE $wpdb->term_taxonomy SET term_id = '$term_id', taxonomy = '$taxonomy', description = '$description', parent = '$parent', count = 0 WHERE term_taxonomy_id = '$tt_id'"); - } else { - $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('$term_id', '$taxonomy', '$description', '$parent', '0')"); - $tt_id = (int) $wpdb->insert_id; - } + do_action("edit_term", $term_id, $tt_id); + do_action("edit_$taxonomy", $term_id, $tt_id); - if ($update) { - do_action("edit_term", $term_id, $tt_id); - do_action("edit_$taxonomy", $term_id, $tt_id); - } else { - do_action("create_term", $term_id, $tt_id); - do_action("create_$taxonomy", $term_id, $tt_id); - } - - $term_id = apply_filters('term_id_filter', $term_id, $tt_id, $update); + $term_id = apply_filters('term_id_filter', $term_id, $tt_id); //clean_term_cache($term_id); - if ($update) { - do_action("edited_term", $term_id, $tt_id); - do_action("edited_$taxonomy", $term_id, $tt_id); - } else { - do_action("created_term", $term_id, $tt_id); - do_action("created_$taxonomy", $term_id, $tt_id); - } + do_action("edited_term", $term_id, $tt_id); + do_action("edited_$taxonomy", $term_id, $tt_id); return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); } -/** - * Removes a term from the database. - */ -function wp_delete_term() {} - -function wp_update_term( $term, $taxonomy, $fields = array() ) { - $term = (int) $term; - - // First, get all of the original fields - $term = get_term ($term, $taxonomy, ARRAY_A); - - // Escape data pulled from DB. - $term = add_magic_quotes($term); - - // Merge old and new fields with new fields overwriting old ones. - $fields = array_merge($term, $fields); - - return wp_insert_term($term, $taxonomy, $fields); -} - /** * Returns the index of a defined term, or 0 (false) if the term doesn't exist. */