/** * Don't require a dynamic field that has no options * @since 2.0 */ public static function is_dynamic_field_empty(&$field, $key, $hide_field, $observed_value) { // Get the field that conditional logic is dependent on $observed_field = FrmField::getOne($hide_field); // Leave now if conditional logic field is not a Dynamic field if ($observed_field->type != 'data') { return; } // Check if current posted value is set for conditional logic checking if (empty($field->field_options['hide_opt'][$key])) { $field->field_options['hide_opt'][$key] = $observed_value; // If logic is 'Dynamic parent is equal to anything' and no value // is set in parent field, make sure logic doesn't return true if (empty($observed_value) && $field->field_options['hide_field_cond'][$key] == '==') { $field->field_options['hide_opt'][$key] = 'anything'; return; } else { if ($field->field_options['data_type'] == 'data') { return; } } } // Get linked field data $selected_field_id = isset($field->field_options['form_select']) ? $field->field_options['form_select'] : ''; if ($selected_field_id == 'taxonomy') { self::update_dynamic_category_field_if_empty($field, $key); return; } $data_field = FrmField::getOne($selected_field_id); // Get value from previous Dynamic field $parent_val = $field->field_options['hide_opt'][$key]; // Makes sure this works with multi-select and non multi-select fields if (!is_array($parent_val)) { $parent_val = explode(',', $parent_val); } // If this is a regular dynamic field $metas = array(); FrmProEntryMetaHelper::meta_through_join($hide_field, $data_field, $parent_val, $field, $metas); if (empty($metas)) { // indicate that this field is hidden $field->field_options['hide_opt'][$key] = ''; } $field->field_options['hide_opt'][$key] = apply_filters('frm_is_dynamic_field_empty', $field->field_options['hide_opt'][$key], compact('field', 'key', 'hide_field', 'observed_value')); }
function meta_through_join($hide_field, $selected_field, $observed_field_val) { _deprecated_function(__FUNCTION__, '1.07.05', 'FrmProEntryMetaHelper::meta_through_join'); return FrmProEntryMetaHelper::meta_through_join($hide_field, $selected_field, $observed_field_val); }
public static function ajax_data_options() { $hide_field = FrmAppHelper::get_param('hide_field'); $entry_id = FrmAppHelper::get_param('entry_id'); $selected_field_id = FrmAppHelper::get_param('selected_field_id'); $field_id = FrmAppHelper::get_param('field_id'); global $frm_field; $data_field = $frm_field->getOne($selected_field_id); if ($entry_id == '') { die; } $entry_id = explode(',', $entry_id); $field_data = $frm_field->getOne($field_id); $field_name = "item_meta[{$field_id}]"; if (isset($field_data->field_options['multiple']) and $field_data->field_options['multiple'] and ($field_data->type == 'select' or $field_data->type == 'data' and isset($field_data->field_options['data_type']) and $field_data->field_options['data_type'] == 'select')) { $field_name .= '[]'; } $field = array('id' => $field_id, 'value' => '', 'default_value' => '', 'form_id' => $field_data->form_id, 'type' => apply_filters('frm_field_type', $field_data->type, $field_data, ''), 'options' => $field_data->options, 'size' => isset($field_data->field_options['size']) && $field_data->field_options['size'] != '' ? $field_data->field_options['size'] : '', 'field_key' => $field_data->field_key); if ($field['size'] == '') { global $frm_vars; $field['size'] = isset($frm_vars['sidebar_width']) ? $frm_vars['sidebar_width'] : ''; } if (is_numeric($selected_field_id)) { $field['options'] = array(); $metas = FrmProEntryMetaHelper::meta_through_join($hide_field, $data_field, $entry_id); $metas = stripslashes_deep($metas); if ($metas and (!isset($field_data->field_options['data_type']) or !in_array($field_data->field_options['data_type'], array('radio', 'checkbox'))) and (!isset($field_data->field_options['multiple']) or !$field_data->field_options['multiple'] or isset($field_data->field_options['autocom']) and $field_data->field_options['autocom'])) { $field['options'][''] = ''; } foreach ($metas as $meta) { $field['options'][$meta->item_id] = FrmProEntryMetaHelper::display_value($meta->meta_value, $data_field, array('type' => $data_field->type, 'show_icon' => true, 'show_filename' => false)); unset($meta); } $field = apply_filters('frm_setup_new_fields_vars', $field, $field_data); } else { if ($selected_field_id == 'taxonomy') { if ($entry_id == 0) { die; } if (is_array($entry_id)) { $zero = array_search(0, $entry_id); if ($zero !== false) { unset($entry_id[$zero]); } if (empty($entry_id)) { die; } } $field = apply_filters('frm_setup_new_fields_vars', $field, $field_data); $cat_ids = array_keys($field['options']); $args = array('include' => implode(',', $cat_ids), 'hide_empty' => false); $post_type = FrmProFormsHelper::post_type($field_data->form_id); $args['taxonomy'] = FrmProAppHelper::get_custom_taxonomy($post_type, $field_data); if (!$args['taxonomy']) { die; } $cats = get_categories($args); foreach ($cats as $cat) { if (!in_array($cat->parent, (array) $entry_id)) { unset($field['options'][$cat->term_id]); } } if (count($field['options']) == 1 and reset($field['options']) == '') { die; } } else { $field = apply_filters('frm_setup_new_fields_vars', $field, $field_data); } } $auto_width = isset($field['size']) && $field['size'] > 0 ? 'class="auto_width"' : ''; require FrmAppHelper::plugin_path() . '/pro/classes/views/frmpro-fields/data-options.php'; die; }
public static function get_linked_options($values, $field, $entry_id = false) { global $frm_entry_meta, $user_ID, $frm_field, $frmdb; $metas = array(); $selected_field = $frm_field->getOne($values['form_select']); if (!$selected_field) { return array(); } $linked_posts = (isset($selected_field->field_options['post_field']) and $selected_field->field_options['post_field'] and $selected_field->field_options['post_field'] != '') ? true : false; $post_ids = array(); if (is_numeric($values['hide_field']) and empty($values['hide_opt'])) { if (isset($_POST) and isset($_POST['item_meta'])) { $observed_field_val = isset($_POST['item_meta'][$values['hide_field']]) ? $_POST['item_meta'][$values['hide_field']] : ''; } else { if ($entry_id) { $observed_field_val = $frm_entry_meta->get_entry_meta_by_field($entry_id, $values['hide_field']); } else { $observed_field_val = ''; } } $observed_field_val = maybe_unserialize($observed_field_val); $metas = FrmProEntryMetaHelper::meta_through_join($values['hide_field'], $selected_field, $observed_field_val); } else { if ($values['restrict'] and $user_ID) { $entry_user = $user_ID; if ($entry_id and is_admin() and !defined('DOING_AJAX')) { $entry_user = $frmdb->get_var($frmdb->entries, array('id' => $entry_id), 'user_id'); if (!$entry_user or empty($entry_user)) { $entry_user = $user_ID; } } if (isset($selected_field->form_id)) { $linked_where = array('form_id' => $selected_field->form_id, 'user_id' => $entry_user); if ($linked_posts) { $post_ids = $frmdb->get_records($frmdb->entries, $linked_where, '', '', 'id, post_id'); } else { $entry_ids = $frmdb->get_col($frmdb->entries, $linked_where, 'id'); } unset($linked_where); } if (isset($entry_ids) and !empty($entry_ids)) { $metas = $frm_entry_meta->getAll("it.item_id in (" . implode(',', $entry_ids) . ") and field_id=" . (int) $values['form_select'], ' ORDER BY meta_value', ''); } } else { $limit = ''; if (is_admin() and isset($_GET) and isset($_GET['page']) and $_GET['page'] == 'formidable') { $limit = 500; } $metas = $frmdb->get_records($frmdb->entry_metas, array('field_id' => $values['form_select']), 'meta_value', $limit, 'item_id, meta_value'); $post_ids = $frmdb->get_records($frmdb->entries, array('form_id' => $selected_field->form_id), '', $limit, 'id, post_id'); } } if ($linked_posts and !empty($post_ids)) { foreach ($post_ids as $entry) { $meta_value = FrmProEntryMetaHelper::get_post_value($entry->post_id, $selected_field->field_options['post_field'], $selected_field->field_options['custom_field'], array('type' => $selected_field->type, 'form_id' => $selected_field->form_id, 'field' => $selected_field)); $metas[] = array('meta_value' => $meta_value, 'item_id' => $entry->id); } } $options = array(); foreach ($metas as $meta) { $meta = (array) $meta; if ($meta['meta_value'] == '') { continue; } if ($selected_field->type == 'image') { $options[$meta['item_id']] = $meta['meta_value']; } else { $options[$meta['item_id']] = FrmProEntryMetaHelper::display_value($meta['meta_value'], $selected_field, array('type' => $selected_field->type, 'show_icon' => true, 'show_filename' => false)); } unset($meta); } $options = apply_filters('frm_data_sort', $options, array('metas' => $metas, 'field' => $selected_field)); unset($metas); if (!empty($options) and $field->field_options['data_type'] == 'select' and (!isset($field->field_options['multiple']) or empty($field->field_options['multiple']) or isset($field->field_options['autocom']) and $field->field_options['autocom'])) { $options = array('' => '') + (array) $options; } return stripslashes_deep($options); }
/** * Get the options for a dependent Dynamic field * * @since 2.0.16 * @param array $args * @param array $field */ private static function get_dependent_dynamic_field_options($args, &$field) { $linked_field = FrmField::getOne($args['linked_field_id']); $field['options'] = array(); $metas = array(); FrmProEntryMetaHelper::meta_through_join($args['trigger_field_id'], $linked_field, $args['entry_id'], $args['field_data'], $metas); $metas = stripslashes_deep($metas); if (FrmProFieldsHelper::include_blank_option($metas, $args['field_data'])) { $field['options'][''] = ''; } foreach ($metas as $meta) { $field['options'][$meta->item_id] = FrmEntriesHelper::display_value($meta->meta_value, $linked_field, array('type' => $linked_field->type, 'show_icon' => true, 'show_filename' => false)); unset($meta); } // change the form_select value so the filter doesn't override the values $args['field_data']->field_options['form_select'] = 'filtered_' . $args['field_data']->field_options['form_select']; $field = apply_filters('frm_setup_new_fields_vars', $field, $args['field_data']); // Sort the options $field['options'] = apply_filters('frm_data_sort', $field['options'], array('metas' => $metas, 'field' => $args['linked_field_id'])); }