function deactive_term_checkboxes()
    {
        if (is_content_administrator_rs()) {
            return;
        }
        global $post;
        if (empty($post)) {
            return;
        }
        require_once dirname(__FILE__) . '/filters-admin-term-selection_rs.php';
        $use_taxonomies = scoper_get_option('use_taxonomies');
        ?>

<script type="text/javascript">
/* <![CDATA[ */
jQuery(document).ready( function($) {
<?php 
        foreach (get_taxonomies(array('public' => true, 'hierarchical' => true)) as $taxonomy) {
            if (empty($use_taxonomies[$taxonomy])) {
                continue;
            }
            $user_terms = array();
            scoper_filter_terms_for_status($taxonomy, array(), $user_terms, array('object_id' => $post->ID, 'object_type' => $post->post_type, 'status' => $post->post_status));
            // jQuery selector will disable all term checkboxes which are not in our okay_terms array
            if ($user_terms) {
                $id_not_equal = "[id!='in-{$taxonomy}-" . implode("'][id!='in-{$taxonomy}-", $user_terms) . "']";
                $id_not_equal_popular = "[id!='in-popular-{$taxonomy}-" . implode("'][id!='in-popular-{$taxonomy}-", $user_terms) . "']";
            } else {
                $id_not_equal = '';
                $id_not_equal_popular = '';
            }
            ?>
		
	$("#<?php 
            echo $taxonomy;
            ?>
checklist input<?php 
            echo $id_not_equal;
            ?>
").attr( 'disabled', 'disabled' );
	$("#<?php 
            echo $taxonomy;
            ?>
checklist-pop input<?php 
            echo $id_not_equal_popular;
            ?>
").attr( 'disabled', 'disabled' );
<?php 
        }
        ?>

});
/* ]]> */
</script>
<?php 
    }
 function flt_default_term($default_term_id, $taxonomy = 'category')
 {
     require_once dirname(__FILE__) . '/filters-admin-term-selection_rs.php';
     // support an array of default IDs (but don't require it)
     $term_ids = (array) $default_term_id;
     $user_terms = array();
     // will be returned by filter_terms_for_status
     $term_ids = scoper_filter_terms_for_status($taxonomy, $term_ids, $user_terms);
     // if the default term is not in user's subset of usable terms, substitute first available
     if ((!$term_ids || !$term_ids[0]) && $user_terms) {
         if ($GLOBALS['scoper']->taxonomies->member_property($taxonomy, 'requires_term')) {
             return $user_terms[0];
         } else {
             return;
         }
     }
     if (count($term_ids) > 1) {
         // won't return an array unless an array was passed in and more than one of its elements is usable by this user
         return $term_ids;
     } elseif ($term_ids) {
         return reset($term_ids);
     }
     // if a single term ID was passed in and is permitted, it is returned here
 }
function scoper_flt_pre_object_terms($selected_terms, $taxonomy, $args = array())
{
    //rs_errlog( "scoper_flt_pre_object_terms input: " . serialize($selected_terms) );
    // strip out fake term_id -1 (if applied)
    if ($selected_terms && is_array($selected_terms)) {
        $selected_terms = array_diff($selected_terms, array(-1, 0, '0', '-1', ''));
    }
    // not sure who is changing empty $_POST['post_category'] array to an array with nullstring element, but we have to deal with that
    if (defined('DISABLE_QUERYFILTERS_RS')) {
        return $selected_terms;
    }
    if (!is_array($selected_terms)) {
        // don't filter term selection for non-hierarchical taxonomies
        if (isset($GLOBALS['wp_taxonomies'][$taxonomy]) && empty($GLOBALS['wp_taxonomies'][$taxonomy]->hierarchical)) {
            return $selected_terms;
        }
    }
    global $scoper, $current_user, $wpdb;
    if (!($src_name = $scoper->taxonomies->member_property($taxonomy, 'object_source'))) {
        return $selected_terms;
    }
    // don't filter selected terms for content administrator, but still need to apply default term as needed when none were selected
    if (is_content_administrator_rs()) {
        $user_terms = $selected_terms;
    } else {
        if (defined('RVY_VERSION')) {
            global $revisionary;
            if (!empty($revisionary->admin->impose_pending_rev)) {
                return $selected_terms;
            }
        }
        $orig_selected_terms = $selected_terms;
        if (!is_array($selected_terms)) {
            $selected_terms = array();
        }
        require_once dirname(__FILE__) . '/filters-admin-term-selection_rs.php';
        $user_terms = array();
        // will be returned by filter_terms_for_status
        $selected_terms = scoper_filter_terms_for_status($taxonomy, $selected_terms, $user_terms);
        if ('post' == $src_name) {
            // TODO: abstract for other data sources
            if ($object_id = (int) $scoper->data_sources->detect('id', $src_name)) {
                $stored_terms = wp_get_object_terms($object_id, $taxonomy, array('fields' => 'ids'));
                if ($deselected_terms = array_diff($stored_terms, $selected_terms)) {
                    if ($unremovable_terms = array_diff($deselected_terms, $user_terms)) {
                        // --- work around storage of autodraft to default category ---
                        $_post = get_post($object_id);
                        if ('category' == $taxonomy && 'draft' == $_post->post_status) {
                            $default_terms = (array) maybe_unserialize(scoper_get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'default_category'"));
                            $unremovable_terms = array_diff($unremovable_terms, $default_terms);
                        }
                        // --- end workaround ---
                        $selected_terms = array_merge($selected_terms, $unremovable_terms);
                    }
                }
            }
        }
    }
    //rs_errlog( "$taxonomy - user terms: " . serialize($user_terms) );
    //rs_errlog( "selected terms: " . serialize($selected_terms) );
    if (empty($selected_terms)) {
        // For now, always check the DB for default terms.  TODO: only if the default_term_option property is set
        if (!($default_term_option = $scoper->taxonomies->member_property($taxonomy, 'default_term_option'))) {
            $default_term_option = "default_{$taxonomy}";
        }
        // avoid recursive filtering.  Todo: use remove_filter so we can call get_option, supporting filtering by other plugins
        $default_terms = (array) maybe_unserialize(scoper_get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = '{$default_term_option}'"));
        //$selected_terms = (array) get_option( $tx->default_term_option );
        // but if the default term is not defined or is not in user's subset of usable terms, substitute first available
        if ($user_terms) {
            $_default_terms = array_intersect($default_terms, $user_terms);
            if (!$_default_terms) {
                if ($default_terms || defined('SCOPER_AUTO_DEFAULT_TERM')) {
                    // substitute 1st available only if default term option is set or constant defined
                    //if ( $scoper->taxonomies->member_property( $taxonomy, 'requires_term' )  )
                    $default_terms = (array) $user_terms[0];
                } else {
                    $use_taxonomies = scoper_get_option('use_taxonomies');
                    // If a 'requires_term' taxonomy (i.e. hierarchical) is enabled for RS filtering, a term must be stored
                    if (!empty($use_taxonomies[$taxonomy])) {
                        $default_terms = (array) $user_terms[0];
                    } else {
                        $default_terms = array();
                    }
                }
            }
        }
        //rs_errlog( "default_terms: " . serialize($default_terms) );
        $selected_terms = $default_terms;
    }
    //rs_errlog( "returning selected terms: " . serialize($selected_terms) );
    return $selected_terms;
}