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
}