Esempio n. 1
0
 /**
  * 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'));
 }
Esempio n. 2
0
 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;
 }
Esempio n. 4
0
 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']));
 }