From c2a613422c9b8b81c4a499bc8f10185e52f61af4 Mon Sep 17 00:00:00 2001 From: ryan Date: Tue, 25 Jul 2006 06:36:10 +0000 Subject: [PATCH] Category Ajax improvements from mdawaffe. fixes #2803 git-svn-id: http://svn.automattic.com/wordpress/trunk@4041 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/admin-ajax.php | 18 +++++------- wp-admin/admin-db.php | 2 +- wp-admin/admin-functions.php | 57 +++++++++++++++++++----------------- wp-admin/categories.js | 17 +++++++++-- 4 files changed, 52 insertions(+), 42 deletions(-) diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index 088ce31b51..9c5ac65219 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -144,26 +144,22 @@ case 'add-cat' : // From Manage->Categories die('0'); if ( !$cat = get_category( $cat ) ) die('0'); - $pad = 0; + $level = 0; + $cat_full_name = $cat->cat_name; $_cat = $cat; while ( $_cat->category_parent ) { $_cat = get_category( $_cat->category_parent ); - $pad++; + $cat_full_name = $_cat->cat_name . ' — ' . $cat_full_name; + $level++; } - $pad = str_repeat('— ', $pad); + $cat_full_name = wp_specialchars( $cat_full_name, 1 ); $r = ""; - $r .= "$cat->cat_ID"; - $r .= "$cat->cat_ID$pad $cat->cat_name"; - $r .= "$cat->category_description$cat->category_count$cat->link_count"; - $r .= "" . __('Edit') . ""; - $r .= "cat_name)); - $r .= "\" );' class='delete'>".__('Delete').""; + $r .= "$cat->cat_ID$cat_full_name"; + $r .= _cat_row( $cat, $level, $cat_full_name ); $r .= "]]>"; header('Content-type: text/xml'); die($r); - break; case 'add-meta' : if ( !current_user_can( 'edit_post', $id ) ) diff --git a/wp-admin/admin-db.php b/wp-admin/admin-db.php index 63d4a8ceac..6f57a1005f 100644 --- a/wp-admin/admin-db.php +++ b/wp-admin/admin-db.php @@ -108,7 +108,7 @@ function wp_insert_category($catarr) { $category_description = apply_filters('pre_category_description', $category_description); $category_parent = (int) $category_parent; - if (empty ($category_parent)) + if ( empty($category_parent) || !get_category( $category_parent ) ) $category_parent = 0; if ( isset($posts_private) ) diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index b35214f599..5e7a54c508 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -684,39 +684,13 @@ function dropdown_link_categories($default = 0) { // Dandy new recursive multiple category stuff. function cat_rows($parent = 0, $level = 0, $categories = 0) { - global $wpdb, $class; - if (!$categories) $categories = get_categories('hide_empty=0'); if ($categories) { foreach ($categories as $category) { if ($category->category_parent == $parent) { - $category->cat_name = wp_specialchars($category->cat_name,'double'); - $pad = str_repeat('— ', $level); - if ( current_user_can('manage_categories') ) { - $edit = "".__('Edit').""; - $default_cat_id = get_option('default_category'); - $default_link_cat_id = 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, '" . sprintf(__("You are about to delete the category "%s".\\nAll of its posts will go into the default category of "%s"\\nAll of its bookmarks will go into the default category of "%s".\\n"OK" to delete, "Cancel" to stop."), js_escape($category->cat_name), js_escape(get_catname($default_cat_id)), js_escape(get_catname($default_link_cat_id))) . "' );\" class='delete'>".__('Delete').""; - else - $edit .= "".__("Default"); - } - else - $edit = ''; - - $class = ('alternate' == $class) ? '' : 'alternate'; - - $category->category_count = number_format( $category->category_count ); - $category->link_count = number_format( $category->link_count ); - echo "$category->cat_ID$pad $category->cat_name - $category->category_description - $category->category_count - $category->link_count - $edit - "; + echo "\t" . _cat_row( $category, $level ); cat_rows($category->cat_ID, $level +1, $categories); } } @@ -725,6 +699,35 @@ function cat_rows($parent = 0, $level = 0, $categories = 0) { } } +function _cat_row( $category, $level, $name_override = false ) { + global $class; + + $pad = str_repeat('— ', $level); + if ( current_user_can('manage_categories') ) { + $edit = "".__('Edit').""; + $default_cat_id = get_option('default_category'); + $default_link_cat_id = 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, '" . sprintf(__("You are about to delete the category "%s".\\nAll of its posts will go into the default category of "%s"\\nAll of its bookmarks will go into the default category of "%s".\\n"OK" to delete, "Cancel" to stop."), js_escape($category->cat_name), js_escape(get_catname($default_cat_id)), js_escape(get_catname($default_link_cat_id))) . "' );\" class='delete'>".__('Delete').""; + else + $edit .= "".__("Default"); + } else + $edit = ''; + + $class = ( ( defined('DOING_AJAX') && DOING_AJAX ) || " class='alternate'" == $class ) ? '' : " class='alternate'"; + + $category->category_count = number_format( $category->category_count ); + $category->link_count = number_format( $category->link_count ); + return " + $category->cat_ID + " . ( $name_override ? $name_override : $pad . ' ' . $category->cat_name ) . " + $category->category_description + $category->category_count + $category->link_count + $edit\n\t\n"; +} + function page_rows($parent = 0, $level = 0, $pages = 0, $hierarchy = true) { global $wpdb, $class, $post; diff --git a/wp-admin/categories.js b/wp-admin/categories.js index 5be5a6251a..7555182631 100644 --- a/wp-admin/categories.js +++ b/wp-admin/categories.js @@ -1,5 +1,16 @@ -addLoadEvent(newCategoryAddIn); -function newCategoryAddIn() { +addLoadEvent(function() { if (!theList.theList) return false; document.forms.addcat.submit.onclick = function(e) {return killSubmit('theList.ajaxAdder("cat", "addcat");', e); }; -} + theList.addComplete = function(what, where, update) { + var name = getNodeValue(theList.ajaxAdd.responseXML, 'name'); + var id = getNodeValue(theList.ajaxAdd.responseXML, 'id'); + var options = document.forms['addcat'].category_parent.options; + options[options.length] = new Option(name, id); + }; + theList.delComplete = function(what, id) { + var options = document.forms['addcat'].category_parent.options; + for ( var o = 0; o < options.length; o++ ) + if ( id == options[o].value ) + options[o] = null; + }; +});