Ejemplo n.º 1
0
    echo $onchange;
    ?>
"<?php 
}
?>
>
    <option value=""><?php 
_e('&mdash; Select &mdash;');
?>
</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 
Ejemplo n.º 2
0
 /**
  * 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);
 }
Ejemplo n.º 3
0
 /**
  * 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;
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }
Ejemplo n.º 6
0
 public static function duplicate($values)
 {
     $frmpro_field = new FrmProField();
     return $frmpro_field->duplicate($values);
 }
Ejemplo n.º 7
0
 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();
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
?>
,<?php 
echo esc_attr($meta_name);
?>
,'<?php 
echo esc_attr($field['type']);
?>
')">
    <option value=""><?php 
_e('&mdash; Select &mdash;');
?>
</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;
 }