public static function RelatedTypeInterface($customField, $inputName, $groupCounter, $fieldCounter) { global $mf_domain, $wpdb; $mf_post_id = apply_filters('mf_source_post_data', @$_REQUEST['post']); $customFieldId = ''; if (isset($mf_post_id)) { $customFieldId = $customField->id; $value = esc_attr(RCCWP_CustomField::GetCustomFieldValues(true, $mf_post_id, $customField->name, $groupCounter, $fieldCounter)); } else { $value = $customField->default_value[0]; } //get id of related type / panel $panel_id = (int) $customField->properties['panel_id']; $requiredClass = ""; if ($customField->required_field) { $requiredClass = "field_required"; } ?> <div class="mf_custom_field"> <select tabindex="3" <?php if ($customField->required_field) { echo 'validate="required:true"'; } ?> class="<?php echo $requiredClass; ?> listbox_mf" name="<?php echo $inputName; ?> "> <option value=""><?php _e('--Select--', $mf_domain); ?> </option> <?php $pn_cache = array(); // setup a panel name cache (so we only look up the panel name ONCe for each panel ID) if ($panel_id == -4) { $options = get_posts("post_type=post&numberposts=-1&order=ASC&orderby=title"); } elseif ($panel_id == -3) { $options = get_posts("post_type=page&numberposts=-1&order=ASC&orderby=title"); } elseif ($panel_id == -2) { $options = get_posts("post_type=post&meta_key=_mf_write_panel_id&numberposts=-1&order=ASC&orderby=title"); } elseif ($panel_id == -1) { $options = get_posts("post_type=page&meta_key=_mf_write_panel_id&numberposts=-1&order=ASC&orderby=title"); } elseif ($panel_id == -6) { $options = get_posts("post_type=any&numberposts=-1"); } elseif ($panel_id == -7) { $options = get_categories("hide_empty=0"); $options = RCCWP_WritePostPage::mf_category_order($options, 0, 0); } elseif ($panel_id == -5) { remove_filter('posts_where', array('RCCWP_Query', 'ExcludeWritepanelsPosts')); add_filter('posts_fields', 'RelatedTypeFieldsFilter'); add_filter('posts_orderby', 'RelatedTypeOrderByFilter'); $options = get_posts(array('suppress_filters' => false, 'post_type' => 'any', 'meta_key' => '_mf_write_panel_id', 'nopaging' => true, 'order' => 'ASC')); remove_filter('posts_fields', 'RelatedTypeFieldsFilter'); remove_filter('posts_orderby', 'RelatedTypeOrderByFilter'); add_filter('posts_where', array('RCCWP_Query', 'ExcludeWritepanelsPosts')); } else { $options = get_posts("post_type=any&meta_key=_mf_write_panel_id&numberposts=-1&meta_value={$panel_id}&order=ASC&orderby=title"); } $last_panel_name = ""; // traversal (for grouping) foreach ($options as $option) { /* TRAVERSAL ADDITION - Adds grouping of related type fields when all write panels are listed -- */ $panel_name = ""; $display_panel_name = ""; if ($panel_id == -5 || $panel_id == -2 || $panel_id == -1) { $panel_name = $pn_cache[$option->meta_value]; if (!$panel_name) { // look it up $sql = $wpdb->prepare("SELECT name FROM " . MF_TABLE_PANELS . " WHERE id = %d", array($option->meta_value)); $panel_name = $wpdb->get_var($sql); if ($panel_name) { $pn_cache[$option->meta_value] = $panel_name; } } $panel = RCCWP_CustomWritePanel::Get($option->meta_value); if (!$panel_name) { $panel_name = ""; $display_panel_name = ""; } else { if ($panel->single) { $display_panel_name = ""; } else { $display_panel_name = " " . Inflect::singularize($panel_name) . " - "; } } if ($panel_name != "" && $panel_name != $last_panel_name) { if ($last_panel_name != "") { echo "</optgroup>"; } if ($panel->single) { $last_panel_name = ""; } else { echo '<optgroup label="' . Inflect::pluralize($panel_name) . '">'; $last_panel_name = $panel_name; } } } /* END TRAVERSAL ADDITION */ if ($panel_id == -7) { $selected = $option->term_id == $value ? 'selected="selected"' : ''; ?> <option value="<?php echo $option->term_id; ?> " <?php echo $selected; ?> ><?php echo $display_panel_name . $option->name; ?> </option><!-- TRAVERSAL UPDATE, adds display panel name as prefix --> <?php } else { $selected = $option->ID == $value ? 'selected="selected"' : ''; ?> <option value="<?php echo $option->ID; ?> " <?php echo $selected; ?> ><?php echo $display_panel_name . $option->post_title; ?> </option><!-- TRAVERSAL UPDATE, adds display panel name as prefix --> <?php } } // TRAVERSAL ADDITION, closes optgroup if ($last_panel_name != "") { echo "</optgroup>"; } // END TRAVERSAL ADDITION ?> </select></div> <?php if ($customField->required_field) { ?> <div class="mf_message_error"><label for="<?php echo $inputName; ?> " class="error_magicfields error"><?php _e("This field is required", $mf_domain); ?> </label></div> <?php } ?> <?php }