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; }