echo $onchange; ?> "<?php } ?> > <option value=""><?php _e('— Select —'); ?> </option> <?php foreach ($form_fields as $ff) { if (is_array($ff)) { $ff = (object) $ff; } if (in_array($ff->type, $exclude_fields) || FrmProField::is_list_field($ff)) { continue; } $selected = isset($condition['hide_field']) && $ff->id == $condition['hide_field'] ? ' selected="selected"' : ''; ?> <option value="<?php echo esc_attr($ff->id); ?> "<?php echo $selected; ?> ><?php echo FrmAppHelper::truncate($ff->name, 25); ?> </option> <?php
/** * Replace a text value where_val with the matching entry IDs for Dynamic Field filters * * @param array $args * @param object $where_field */ private static function prepare_dfe_text(&$args, $where_field) { // Only proceed if we have a non-category dynamic field with a string where_val if ($where_field->type != 'data' || !$args['where_val'] || !is_string($args['where_val']) || isset($where_field->field_options['post_field']) && $where_field->field_options['post_field'] == 'post_category') { return; } $linked_id = FrmProField::get_dynamic_field_entry_id($where_field->field_options['form_select'], $args['where_val'], $args['temp_where_is']); // If text doesn't return any entry IDs, get entry IDs from entry key // Note: Keep for reverse compatibility if (!$linked_id) { $linked_field = FrmField::getOne($where_field->field_options['form_select']); if (!$linked_field) { return; } $filter_args = array(); self::add_group_by($filter_args, $args, 'item_key'); $linked_id = FrmDb::get_col('frm_items', array('form_id' => $linked_field->form_id, 'item_key ' . FrmDb::append_where_is($args['temp_where_is']) => $args['where_val'])); } if (!$linked_id) { return; } //Change $args['where_val'] to linked entry IDs $args['where_val'] = (array) $linked_id; // Don't use old where_val_esc value for filtering unset($args['where_val_esc']); $args['where_val'] = apply_filters('frm_filter_dfe_where_val', $args['where_val'], $args); }
/** * Get the values for Dynamic List fields based on the conditional logic settings * * @since 2.0.08 * @param object $field * @param object $entry * @param string|array|int $field_value, pass by reference */ public static function get_dynamic_list_values($field, $entry, &$field_value) { // Exit now if a value is already set, field type is not Dynamic List, or conditional logic is not set if ($field_value || $field->type != 'data' || !FrmProField::is_list_field($field) || !isset($field->field_options['hide_field'])) { return; } $field_value = array(); foreach ((array) $field->field_options['hide_field'] as $hfield) { if (isset($entry->metas[$hfield])) { // Check if field in conditional logic is a Dynamic field $cl_field_type = FrmField::get_type($hfield); if ($cl_field_type == 'data') { $cl_field_val = maybe_unserialize($entry->metas[$hfield]); if (is_array($cl_field_val)) { $field_value += $cl_field_val; } else { $field_value[] = $cl_field_val; } } } } }
public static function &filter_display_value($value, $field, $atts = array()) { $defaults = array('html' => 0, 'type' => $field->type, 'keepjs' => 0); $atts = array_merge($defaults, $atts); switch ($atts['type']) { case 'user_id': $value = FrmProFieldsHelper::get_display_name($value); break; case 'date': $value = FrmProFieldsHelper::get_date($value); break; case 'file': $old_value = $value; if ($atts['html']) { $value = '<div class="frm_file_container">'; } else { $value = ''; } foreach ((array) $old_value as $mid) { if ($atts['html']) { $img = FrmProFieldsHelper::get_file_icon($mid); $value .= $img; if ($atts['show_filename'] && $img && preg_match('/wp-includes\\/images\\/(crystal|media)/', $img)) { //prevent two filenames $atts['show_filename'] = $show_filename = false; } unset($img); if ($atts['html'] && $atts['show_filename']) { $value .= '<br/>' . FrmProFieldsHelper::get_file_name($mid) . '<br/>'; } if (isset($show_filename)) { //if skipped filename, show it for the next file $atts['show_filename'] = true; unset($show_filename); } } else { if ($mid) { $value .= FrmProFieldsHelper::get_file_name($mid) . $atts['sep']; } } } $value = rtrim($value, $atts['sep']); if ($atts['html']) { $value .= '</div>'; } break; case 'data': if (!is_numeric($value)) { if (!is_array($value)) { $value = explode($atts['sep'], $value); } if (is_array($value)) { $new_value = ''; foreach ($value as $entry_id) { if (!empty($new_value)) { $new_value .= $atts['sep']; } if (is_numeric($entry_id)) { $new_value .= FrmProFieldsHelper::get_data_value($entry_id, $field, $atts); } else { $new_value .= $entry_id; } } $value = $new_value; } } else { //replace item id with specified field $new_value = FrmProFieldsHelper::get_data_value($value, $field, $atts); if (FrmProField::is_list_field($field)) { $linked_field = FrmField::getOne($field->field_options['form_select']); if ($linked_field && $linked_field->type == 'file') { $old_value = explode(', ', $new_value); $new_value = ''; foreach ($old_value as $v) { $new_value .= '<img src="' . esc_url($v) . '" class="frm_image_from_url" alt="" />'; if ($atts['show_filename']) { $new_value .= '<br/>' . $v; } unset($v); } } else { $new_value = $value; } } $value = $new_value; } break; case 'image': $value = FrmProFieldsHelper::get_image_display_value($value, array('html' => true)); break; } if (!$atts['keepjs']) { $value = FrmAppHelper::recursive_function_map($value, 'wp_kses_post'); } return FrmEntriesController::filter_display_value($value, $field, $atts); }
/** * Get the entry ID or category ID to autopopulate a Dynamic field * * @since 2.0.15 * @param object $field * @param string $value * @return int $value */ private static function get_id_for_dynamic_field($field, $value) { if (isset($field->field_options['post_field']) && $field->field_options['post_field'] == 'post_category') { // Category fields $id = FrmProField::get_cat_id_from_text($value); } else { // Non post fields $id = FrmProField::get_dynamic_field_entry_id($field->field_options['form_select'], $value, '='); } return $id; }
public static function duplicate($values) { $frmpro_field = new FrmProField(); return $frmpro_field->duplicate($values); }
public static function duplicate_section($section_field, $form_id) { check_ajax_referer('frm_ajax', 'nonce'); global $wpdb; if (isset($_POST['children'])) { $children = array_filter((array) $_POST['children'], 'is_numeric'); $fields = FrmField::getAll(array('fi.id' => $children), 'field_order'); } else { $fields = array(); } array_unshift($fields, $section_field); $field_count = FrmDb::get_count($wpdb->prefix . 'frm_fields fi LEFT JOIN ' . $wpdb->prefix . 'frm_forms fr ON (fi.form_id = fr.id)', array('or' => 1, 'fr.id' => $form_id, 'fr.parent_form_id' => $form_id)); $ended = false; if (isset($section_field->field_options['repeat']) && $section_field->field_options['repeat']) { // create the repeatable form $new_form_id = FrmProField::create_repeat_form(0, array('parent_form_id' => $form_id, 'field_name' => $section_field->name)); } else { $new_form_id = $form_id; } foreach ($fields as $field) { // keep the current form id or give it the id of the newly created form $this_form_id = $field->form_id == $form_id ? $form_id : $new_form_id; $values = array(); FrmFieldsHelper::fill_field($values, $field, $this_form_id); if (FrmField::is_repeating_field($field)) { $values['field_options']['form_select'] = $new_form_id; } $field_count++; $values['field_order'] = $field_count; $field_id = FrmField::create($values); if (!$field_id) { continue; } if ('end_divider' == $field->type) { $ended = true; } $values['id'] = $this_form_id; FrmFieldsController::include_single_field($field_id, $values); } if (!$ended) { //make sure the section is ended self::create_multiple_fields((array) $section_field, $form_id); } // Prevent the function in the free version from completing wp_die(); }
public static function get_dfe_id($value, $field, $ids = array()) { global $wpdb; if (!$field || FrmProField::is_list_field($field)) { return $value; } if (!empty($ids) && is_numeric($value) && isset($ids[$value])) { // the entry was just imported, so we have the id return $ids[$value]; } if (!is_array($value)) { $new_id = FrmDb::get_var('frm_item_metas', array('field_id' => $field->field_options['form_select'], 'meta_value' => $value), 'item_id'); if ($new_id && is_numeric($new_id)) { return $new_id; } unset($new_id); } if (!is_array($value) && strpos($value, ',')) { $checked = maybe_unserialize($value); if (!is_array($checked)) { $checked = explode(',', $checked); } } else { $checked = $value; } if (!$checked || !is_array($checked)) { return $value; } $value = array_map('trim', $checked); foreach ($value as $dfe_k => $dfe_id) { $query = array('field_id' => $field->field_options['form_select'], 'meta_value' => $dfe_id); $new_id = FrmDb::get_var('frm_item_metas', $query, 'item_id'); if ($new_id) { $value[$dfe_k] = $new_id; } unset($new_id); } unset($checked); return $value; }
?> ,<?php echo esc_attr($meta_name); ?> ,'<?php echo esc_attr($field['type']); ?> ')"> <option value=""><?php _e('— Select —'); ?> </option> <?php $sel = false; foreach ($form_fields as $ff) { if ($ff->id == $field['id'] || FrmField::is_no_save_field($ff->type) || in_array($ff->type, array('file', 'rte', 'date')) || FrmProField::is_list_field($ff)) { continue; } $selected = $ff->id == $hide_field ? ' selected="selected"' : ''; if (!empty($selected)) { $sel = true; } ?> <option value="<?php echo esc_attr($ff->id); ?> "<?php echo $selected; ?> ><?php echo esc_html(FrmAppHelper::truncate($ff->name, 24));
function validate($errors, $field, $value) { global $frm_field, $frm_show_fields; $field->field_options = maybe_unserialize($field->field_options); if (($field->type != 'tag' and $value == 0 or $field->type == 'tag' and $value == '') and isset($field->field_options['post_field']) and $field->field_options['post_field'] == 'post_category' and $field->required == '1') { $errors['field' . $field->id] = (!isset($field->field_options['blank']) or $field->field_options['blank'] == '' or $field->field_options['blank'] == 'Untitled cannot be blank') ? __('This field cannot be blank', 'formidable') : $field->field_options['blank']; } //Don't require fields hidden with shortcode fields="25,26,27" if (!empty($frm_show_fields) and is_array($frm_show_fields) and $field->required == '1' and isset($errors['field' . $field->id]) and !in_array($field->id, $frm_show_fields) and !in_array($field->field_key, $frm_show_fields)) { unset($errors['field' . $field->id]); } //Don't require a conditionally hidden field if (isset($field->field_options['hide_field']) and !empty($field->field_options['hide_field'])) { $hidden = FrmProField::is_field_hidden($field, $_POST); if ($hidden) { unset($errors['field' . $field->id]); $_POST['item_meta'][$field->id] = $value = ''; } } if ($value and !empty($value) and isset($field->field_options['unique']) and $field->field_options['unique']) { $entry_id = (isset($_POST) and isset($_POST['id'])) ? $_POST['id'] : false; if ($field->type == 'time') { //TODO: add server-side validation for unique date-time } else { if ($field->type == 'date') { global $frmpro_settings; $old_value = $value; if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', trim($value))) { $value = FrmProAppHelper::convert_date($value, $frmpro_settings->date_format, 'Y-m-d'); } if ($this->value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = $field->name . ' ' . __('must be unique', 'formidable'); } $value = $old_value; } else { if ($this->value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = $field->name . ' ' . __('must be unique', 'formidable'); } } } unset($entry_id); } //make sure the [auto_id] is still unique if (!empty($field->default_value) and !empty($value) and is_numeric($value) and strpos($field->default_value, '[auto_id') !== false) { //make sure we are not editing if (isset($_POST) and !isset($_POST['id']) or !is_numeric($_POST['id'])) { $_POST['item_meta'][$field->id] = $value = FrmProFieldsHelper::get_default_value($field->default_value, $field); } } if (isset($field->field_options['admin_only']) and $field->field_options['admin_only'] and !(current_user_can('administrator') or !is_admin())) { unset($errors['field' . $field->id]); } $errors = $this->set_post_fields($field, $value, $errors); //if the field is a file upload, check for a file if ($field->type == 'file' and isset($_FILES['file' . $field->id]) and !empty($_FILES['file' . $field->id]['name'])) { unset($errors['field' . $field->id]); if (isset($field->field_options['restrict']) and $field->field_options['restrict'] and isset($field->field_options['ftypes']) and !empty($field->field_options['ftypes'])) { $mimes = $field->field_options['ftypes']; } else { $mimes = null; } //check allowed mime types for this field $file_type = wp_check_filetype($_FILES['file' . $field->id]['name'], $mimes); if (!$file_type['ext']) { $errors['field' . $field->id] = ($field->field_options['invalid'] == __('This field is invalid', 'formidable') or $field->field_options['invalid'] == '' or $field->field_options['invalid'] == $field->name . ' ' . __('is invalid', 'formidable')) ? __('Sorry, this file type is not permitted for security reasons.', 'formidable') : $field->field_options['invalid']; } } else { if ($field->type == 'user_id') { //add user id to post variables to be saved with entry $_POST['frm_user_id'] = $value; } } //Don't validate the format if field is blank if ($value == '' or is_array($value)) { return $errors; } $value = trim($value); //validate the format if ($field->type == 'number' and !is_numeric($value) or $field->type == 'email' and !is_email($value) or ($field->type == 'website' or $field->type == 'url' or $field->type == 'image') and !preg_match('/^http.?:\\/\\/.*\\..*$/', $value) or $field->type == 'phone' and !preg_match('/^((\\+\\d{1,3}(-|.| )?\\(?\\d\\)?(-| |.)?\\d{1,5})|(\\(?\\d{2,6}\\)?))(-|.| )?(\\d{3,4})(-|.| )?(\\d{4})(( x| ext)\\d{1,5}){0,1}$/', $value)) { $errors['field' . $field->id] = $field->field_options['invalid'] == __('This field is invalid', 'formidable') || $field->field_options['invalid'] == '' ? $field->name . ' ' . __('is invalid', 'formidable') : $field->field_options['invalid']; } if ($field->type == 'date') { if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $value)) { global $frmpro_settings; $value = FrmProAppHelper::convert_date($value, $frmpro_settings->date_format, 'Y-m-d'); } $date = explode('-', $value); if (count($date) != 3 or !checkdate((int) $date[1], (int) $date[2], (int) $date[0])) { $errors['field' . $field->id] = $field->field_options['invalid'] == __('This field is invalid', 'formidable') || $field->field_options['invalid'] == '' ? $field->name . ' ' . __('is invalid', 'formidable') : $field->field_options['invalid']; } } return $errors; }