function get_form_results($atts) { extract(shortcode_atts(array('id' => false, 'cols' => 99, 'style' => true, 'no_entries' => __('No Entries Found', 'formidable'), 'fields' => false, 'clickable' => false, 'user_id' => false, 'google' => false, 'pagesize' => 20, 'sort' => true, 'edit_link' => false, 'page_id' => false), $atts)); if (!$id) { return; } global $frm_form, $frm_field, $frm_entry, $frm_entry_meta, $frmpro_settings; $form = $frm_form->getOne($id); if (!$form) { return; } $where = "fi.type not in ('divider', 'captcha', 'break', 'html') and fi.form_id=" . (int) $form->id; if ($fields) { $fields = explode(',', $fields); $f_list = array(); foreach ($fields as $k => $f) { $f = trim($f); $fields[$k] = $f; $f_list[] = esc_sql(like_escape($f)); unset($k); unset($f); } if (count($fields) == 1 and in_array('id', $fields)) { $where .= ''; } else { $where .= " and (fi.id in ('" . implode("','", $f_list) . "') or fi.field_key in ('" . implode("','", $f_list) . "'))"; } } $fields = (array) $fields; $form_cols = $frm_field->getAll($where, 'field_order ASC', $cols); unset($where); $where = array('it.form_id' => $form->id); if ($user_id) { $where['user_id'] = FrmProAppHelper::get_user_id_param($user_id); } $entries = $frm_entry->getAll($where, '', '', true, false); if ($edit_link) { $anchor = ''; if (!$page_id) { global $post; $page_id = $post->ID; $anchor = '#form_' . $form->form_key; } if ($edit_link === '1') { $edit_link = __('Edit', 'formidable'); } $permalink = get_permalink($page_id); } if ($style) { global $frm_load_css; $frm_load_css = true; } $filename = 'table'; if ($google) { global $frm_google_chart; $filename = 'google_table'; $options = array(); if ($pagesize) { $options = array('page' => 'enable', 'pageSize' => (int) $pagesize); } $options['allowHtml'] = true; $options['sort'] = $sort ? 'enable' : 'disable'; if ($style) { $options['cssClassNames'] = array('oddTableRow' => 'frm_even'); } } ob_start(); include FRMPRO_VIEWS_PATH . '/frmpro-entries/' . $filename . '.php'; $contents = ob_get_contents(); ob_end_clean(); if (!$google and $clickable) { $contents = make_clickable($contents); } return $contents; }
function get_display_data($display, $content = '', $entry_id = false, $extra_atts = array()) { global $frmpro_display, $frm_entry, $frmpro_settings, $frm_entry_meta, $frm_forms_loaded; $frm_forms_loaded[] = true; $defaults = array('filter' => false, 'user_id' => '', 'limit' => '', 'page_size' => '', 'order_by' => '', 'order' => ''); extract(wp_parse_args($extra_atts, $defaults)); if (FrmProAppHelper::rewriting_on() && $frmpro_settings->permalinks) { $this->parse_pretty_entry_url(); } if (is_numeric($display->entry_id) && $display->entry_id > 0 and !$entry_id) { $entry_id = $display->entry_id; } $entry = false; $show = 'all'; if (in_array($display->show_count, array('dynamic', 'calendar', 'one'))) { $one_param = isset($_GET['entry']) ? $_GET['entry'] : $entry_id; $get_param = isset($_GET[$display->param]) ? $_GET[$display->param] : ($display->show_count == 'one' ? $one_param : $entry_id); unset($one_param); if ($get_param) { $where_entry = array('it.form_id' => $display->form_id); if (($display->type == 'id' or $display->show_count == 'one') and is_numeric($get_param)) { $where_entry['it.id'] = $get_param; } else { $where_entry['it.item_key'] = $get_param; } $entry = $frm_entry->getAll($where_entry, '', 1, 0); if ($entry) { $entry = reset($entry); } if ($entry and $entry->post_id) { //redirect to single post page if this entry is a post global $post; if (in_the_loop() and $display->show_count != 'one' and !is_single($entry->post_id) and $post->ID != $entry->post_id) { $this_post = get_post($entry->post_id); if (in_array($this_post->post_status, array('publish', 'private'))) { die('<script type="text/javascript">window.location="' . get_permalink($entry->post_id) . '"</script>'); } } } } unset($get_param); } if ($entry and in_array($display->show_count, array('dynamic', 'calendar'))) { $new_content = stripslashes($display->dyncontent); $show = 'one'; } else { $new_content = stripslashes($display->content); } $show = ($display->show_count == 'one' or $entry_id and is_numeric($entry_id)) ? 'one' : $show; $shortcodes = FrmProDisplaysHelper::get_shortcodes($new_content, $display->form_id); $pagination = ''; if ($entry and $entry->form_id == $display->form_id) { $display_content = FrmProFieldsHelper::replace_shortcodes($new_content, $entry, $shortcodes, $display, $show); } else { global $frmdb, $wpdb; $options = maybe_unserialize($display->options); $empty_msg = '<div class="frm_no_entries">' . (isset($options['empty_msg']) ? stripslashes($options['empty_msg']) : '') . '</div>'; $display_content = ''; if ($show == 'all') { $display_content .= isset($options['before_content']) ? stripslashes($options['before_content']) : ''; } $display_content = apply_filters('frm_before_display_content', $display_content, $display, $show); $where = 'it.form_id=' . $display->form_id; $form_posts = $frmdb->get_records($frmdb->entries, array('form_id' => $display->form_id, 'post_id >' => 1), '', '', 'id,post_id'); $entry_ids = $frmdb->get_col($frmdb->entries, array('form_id' => $display->form_id), 'id'); $after_where = false; if ($user_id and !empty($user_id)) { $user_id = FrmProAppHelper::get_user_id_param($user_id); $uid_used = false; } if (isset($options['where']) and !empty($options['where'])) { $options['where'] = apply_filters('frm_custom_where_opt', $options['where'], array('display' => $display, 'entry' => $entry)); $continue = false; foreach ($options['where'] as $where_key => $where_opt) { $where_val = isset($options['where_val'][$where_key]) ? $options['where_val'][$where_key] : ''; if (preg_match("/\\[(get|get-(.?))\\b(.*?)(?:(\\/))?\\]/s", $where_val)) { $where_val = FrmProFieldsHelper::get_default_value($where_val, false, true, true); //if this param doesn't exist, then don't include it if ($where_val == '') { if (!$after_where) { $continue = true; } continue; } } else { $where_val = FrmProFieldsHelper::get_default_value($where_val, false, true, true); } $continue = false; if ($where_val == 'current_user') { if ($user_id and is_numeric($user_id)) { $where_val = $user_id; $uid_used = true; } else { global $user_ID; $where_val = $user_ID; } } $where_val = do_shortcode($where_val); if (is_array($where_val) and !empty($where_val)) { $new_where = '('; if (strpos($options['where_is'][$where_key], 'LIKE') !== false) { foreach ($where_val as $w) { if ($new_where != '(') { $new_where .= ','; } $new_where .= "'%" . esc_sql(like_escape($w)) . "%'"; unset($w); } } else { foreach ($where_val as $w) { if ($new_where != '(') { $new_where .= ','; } $new_where .= "'" . esc_sql($w) . "'"; unset($w); } } $new_where .= ')'; $where_val = $new_where; unset($new_where); if (strpos($options['where_is'][$where_key], '!') === false and strpos($options['where_is'][$where_key], 'not') === false) { $options['where_is'][$where_key] = ' in '; } else { $options['where_is'][$where_key] = ' not in '; } } if (is_numeric($where_opt)) { $entry_ids = FrmProAppHelper::filter_where($entry_ids, array('where_opt' => $where_opt, 'where_is' => $options['where_is'][$where_key], 'where_val' => $where_val, 'form_id' => $display->form_id, 'form_posts' => $form_posts, 'after_where' => $after_where)); $after_where = true; $continue = false; if (empty($entry_ids)) { break; } } else { if ($where_opt == 'created_at') { if ($where_val == 'NOW') { $where_val = current_time('mysql', 1); } $where_val = date('Y-m-d H:i:s', strtotime($where_val)); $where .= " and it.created_at " . $options['where_is'][$where_key]; if (strpos($options['where_is'][$where_key], 'in')) { $where .= " {$where_val}"; } else { $where .= " '" . esc_sql($where_val) . "'"; } $continue = true; } else { if ($where_opt == 'id' or $where_opt == 'item_key') { $where .= " and it.{$where_opt} " . $options['where_is'][$where_key]; if (strpos($options['where_is'][$where_key], 'in')) { $where .= " {$where_val}"; } else { $where .= " '" . esc_sql($where_val) . "'"; } $continue = true; } } } } if (!$continue and empty($entry_ids)) { return $content . ' ' . $empty_msg; } } if ($user_id and is_numeric($user_id) and !$uid_used) { $where .= " AND it.user_id=" . (int) $user_id; } $s = FrmAppHelper::get_param('frm_search', false); if ($s) { $new_ids = FrmProEntriesHelper::get_search_ids($s, $display->form_id); if ($after_where and isset($entry_ids) and !empty($entry_ids)) { $entry_ids = array_intersect($new_ids, $entry_ids); } else { $entry_ids = $new_ids; } if (empty($entry_ids)) { return $content . ' ' . $empty_msg; } } if (isset($entry_ids) and !empty($entry_ids)) { $where .= ' and it.id in (' . implode(',', $entry_ids) . ')'; } if ($entry_id) { $where .= " and it.id in ({$entry_id})"; } if ($show == 'one') { $limit = ' LIMIT 1'; } else { if (isset($_GET['frm_cat']) and isset($_GET['frm_cat_id'])) { //Get fields with specified field value 'frm_cat' = field key/id, 'frm_cat_id' = order position of selected option global $frm_field; if ($cat_field = $frm_field->getOne($_GET['frm_cat'])) { $categories = maybe_unserialize($cat_field->options); if (isset($categories[$_GET['frm_cat_id']])) { $cat_entry_ids = $frm_entry_meta->getEntryIds("meta_value='" . $categories[$_GET['frm_cat_id']] . "' and fi.field_key='{$_GET['frm_cat']}'"); } if ($cat_entry_ids) { $where .= " and it.id in (" . implode(',', $cat_entry_ids) . ")"; } } } } if (is_array($options)) { if (!empty($limit) and is_numeric($limit)) { $options['limit'] = (int) $limit; } if (is_numeric($options['limit'])) { $num_limit = (int) $options['limit']; $limit = ' LIMIT ' . $options['limit']; } if (!empty($order_by)) { $options['order_by'] = $order_by; } if (!empty($order)) { $options['order'] = $order; } if (isset($options['order_by']) && $options['order_by'] != '') { /*if( $wpdb->has_cap( 'collation' ) ){ $charset_collate = ''; if( !empty($wpdb->charset) ) $charset_collate .= "DEFAULT CHARACTER SET $wpdb->charset"; if( !empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; }*/ $order = isset($options['order']) ? ' ' . $options['order'] : ''; if ($options['order_by'] == 'rand') { $order_by = ' RAND()'; } else { if (is_numeric($options['order_by'])) { global $frm_entry_meta, $frm_field; $order_field = $frm_field->getOne($options['order_by']); $order_field->field_options = maybe_unserialize($order_field->field_options); $meta_order = $order_field->type == 'number' ? ' LENGTH(meta_value),' : ''; if (isset($order_field->field_options['post_field']) and $order_field->field_options['post_field']) { $posts = $form_posts; //$frmdb->get_records($frmdb->entries, array('form_id' => $display->form_id, 'post_id >' => 1), '', '', 'id, post_id'); $linked_posts = array(); foreach ($posts as $post_meta) { $linked_posts[$post_meta->post_id] = $post_meta->id; } if ($order_field->field_options['post_field'] == 'post_custom') { $ordered_ids = $wpdb->get_col("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='" . $order_field->field_options['custom_field'] . "' AND post_id in (" . implode(',', array_keys($linked_posts)) . ") ORDER BY meta_value" . $order); $metas = array(); foreach ($ordered_ids as $ordered_id) { $metas[] = array('item_id' => $linked_posts[$ordered_id]); } } else { if ($order_field->field_options['post_field'] != 'post_category') { $ordered_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE ID in (" . implode(',', array_keys($linked_posts)) . ") ORDER BY " . $order_field->field_options['post_field'] . ' ' . $order); $metas = array(); foreach ($ordered_ids as $ordered_id) { $metas[] = array('item_id' => $linked_posts[$ordered_id]); } } } } else { if ($order_field->type == 'number') { $query = "SELECT it.*, meta_value +0 as odr FROM {$frmdb->entry_metas} it LEFT OUTER JOIN {$frmdb->fields} fi ON it.field_id=fi.id WHERE fi.form_id={$display->form_id} and fi.id={$options['order_by']}"; if (isset($entry_ids) and !empty($entry_ids)) { $query .= " AND it.item_id in (" . implode(',', $entry_ids) . ")"; } $query .= " ORDER BY odr {$order} {$limit}"; if ($limit == ' LIMIT 1') { $metas = $wpdb->get_row($query); } else { $metas = $wpdb->get_results($query); } } else { $metas = $frm_entry_meta->getAll('fi.form_id=' . $display->form_id . ' and fi.id=' . $options['order_by'], ' ORDER BY ' . $meta_order . ' meta_value' . $order); //TODO: add previous $where and $limit } } if (isset($metas) and is_array($metas) and !empty($metas)) { if ($order_field->type == 'time' and (!isset($order_field->field_options['clock']) or $order_field->field_options['clock'] == 12)) { $new_order = array(); foreach ($metas as $key => $meta) { $parts = str_replace(array(' PM', ' AM'), '', $meta->meta_value); $parts = explode(':', $parts); if (is_array($parts)) { if (preg_match('/PM/', $meta->meta_value) and (int) $parts[0] != 12 or (int) $parts[0] == 12 and preg_match('/AM/', $meta->meta_value)) { $parts[0] = (int) $parts[0] + 12; } } $new_order[$key] = (int) $parts[0] . $parts[1]; unset($key); unset($meta); } //array with sorted times asort($new_order); $final_order = array(); foreach ($new_order as $key => $time) { $final_order[] = $metas[$key]; unset($key); unset($time); } $metas = $final_order; unset($final_order); } $rev_order = ($order == 'DESC' or $order == '') ? ' ASC' : ' DESC'; foreach ($metas as $meta) { $meta = (array) $meta; $order_by .= 'it.id=' . $meta['item_id'] . $rev_order . ', '; } $order_by = rtrim($order_by, ', '); } else { $order_by .= 'it.created_at' . $order; } } else { $order_by = 'it.' . $options['order_by'] . $order; } } $order_by = ' ORDER BY ' . $order_by; } } if (!empty($page_size) and is_numeric($page_size)) { $options['page_size'] = (int) $page_size; } if (isset($options['page_size']) && is_numeric($options['page_size'])) { global $frm_app_helper; $current_page = FrmAppHelper::get_param('frm-page', 1); $record_where = $where == "it.form_id={$display->form_id}" ? $display->form_id : $where; $record_count = $frm_entry->getRecordCount($record_where); if (isset($num_limit) and $record_count > (int) $num_limit) { $record_count = (int) $num_limit; } $page_count = $frm_entry->getPageCount($options['page_size'], $record_count); $entries = $frm_entry->getPage($current_page, $options['page_size'], $where, $order_by); $page_last_record = $frm_app_helper->getLastRecordNum($record_count, $current_page, $options['page_size']); $page_first_record = $frm_app_helper->getFirstRecordNum($record_count, $current_page, $options['page_size']); if ($page_count > 1) { $pagination = FrmProDisplaysController::get_pagination_file(FRMPRO_VIEWS_PATH . '/displays/pagination.php', compact('current_page', 'record_count', 'page_count', 'page_last_record', 'page_first_record')); } } else { $entries = $frm_entry->getAll($where, $order_by, $limit, true, false); } $filtered_content = apply_filters('frm_display_entries_content', $new_content, $entries, $shortcodes, $display, $show); if ($filtered_content != $new_content) { $display_content .= $filtered_content; } else { $odd = 'odd'; $count = 0; if (!empty($entries)) { foreach ($entries as $entry) { $count++; //TODO: use the count with conditionals $display_content .= apply_filters('frm_display_entry_content', $new_content, $entry, $shortcodes, $display, $show, $odd); $odd = $odd == 'odd' ? 'even' : 'odd'; unset($entry); } unset($count); } else { $display_content .= $empty_msg; } } if ($show == 'all') { $display_content .= isset($options['after_content']) ? stripslashes($options['after_content']) : ''; } } $display_content .= apply_filters('frm_after_display_content', $pagination, $display, $show); if ($display->insert_loc == 'after') { $content .= $display_content; } else { if ($display->insert_loc == 'before') { $content = $display_content . $content; } else { if ($filter) { $display_content = apply_filters('the_content', $display_content); } $content = $display_content; } } return $content; }
function validate($errors, $field) { if ($field->type == 'user_id') { // make sure we have a user ID if (!is_numeric($_POST['item_meta'][$field->id])) { $_POST['item_meta'][$field->id] = FrmProAppHelper::get_user_id_param($_POST['item_meta'][$field->id]); } //add user id to post variables to be saved with entry $_POST['frm_user_id'] = $_POST['item_meta'][$field->id]; } else { if ($field->type == 'time' and is_array($_POST['item_meta'][$field->id])) { $_POST['item_meta'][$field->id] = $value = $_POST['item_meta'][$field->id]['H'] . ':' . $_POST['item_meta'][$field->id]['m'] . (isset($_POST['item_meta'][$field->id]['A']) ? ' ' . $_POST['item_meta'][$field->id]['A'] : ''); } } // don't validate if going backwards if (FrmProFormsHelper::going_to_prev($field->form_id)) { return array(); } // clear any existing errors if draft if (FrmProFormsHelper::saving_draft($field->form_id) && isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } //if the field is a file upload, check for a file if ($field->type == 'file' && isset($_FILES['file' . $field->id]) && !empty($_FILES['file' . $field->id]['name'])) { $filled = true; if (is_array($_FILES['file' . $field->id]['name'])) { $filled = false; foreach ($_FILES['file' . $field->id]['name'] as $n) { if (!empty($n)) { $filled = true; } } } if ($filled) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } if (isset($field->field_options['restrict']) && $field->field_options['restrict'] && isset($field->field_options['ftypes']) && !empty($field->field_options['ftypes'])) { $mimes = $field->field_options['ftypes']; } else { $mimes = null; } //check allowed mime types for this field if (is_array($_FILES['file' . $field->id]['name'])) { foreach ($_FILES['file' . $field->id]['name'] as $name) { if (empty($name)) { continue; } $file_type = wp_check_filetype($name, $mimes); unset($name); if (!$file_type['ext']) { break; } } } else { $file_type = wp_check_filetype($_FILES['file' . $field->id]['name'], $mimes); } if (isset($file_type) && !$file_type['ext']) { $errors['field' . $field->id] = $field->field_options['invalid'] == __('This field is invalid', 'formidable') || $field->field_options['invalid'] == '' || $field->field_options['invalid'] == $field->name . ' ' . __('is invalid', 'formidable') ? __('Sorry, this file type is not permitted for security reasons.', 'formidable') : $field->field_options['invalid']; } unset($file_type); } unset($filled); } // if saving draft, only check file type since it won't be checked later if (FrmProFormsHelper::saving_draft($field->form_id)) { return $errors; } if (in_array($field->type, array('break', 'html', 'divider'))) { $hidden = FrmProFieldsHelper::is_field_hidden($field, stripslashes_deep($_POST)); global $frm_hidden_break, $frm_hidden_divider; if ($field->type == 'break') { $frm_hidden_break = array('field_order' => $field->field_order, 'hidden' => $hidden); } else { if ($field->type == 'divider') { $frm_hidden_divider = array('field_order' => $field->field_order, 'hidden' => $hidden); } } if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } } $value = $_POST['item_meta'][$field->id]; 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') { global $frm_settings; $errors['field' . $field->id] = (!isset($field->field_options['blank']) or $field->field_options['blank'] == '' or $field->field_options['blank'] == 'Untitled cannot be blank') ? $frm_settings->blank_msg : $field->field_options['blank']; } //Don't require fields hidden with shortcode fields="25,26,27" global $frm_vars; if (isset($frm_vars['show_fields']) and !empty($frm_vars['show_fields']) and is_array($frm_vars['show_fields']) and $field->required == '1' and isset($errors['field' . $field->id]) and !in_array($field->id, $frm_vars['show_fields']) and !in_array($field->field_key, $frm_vars['show_fields'])) { unset($errors['field' . $field->id]); $_POST['item_meta'][$field->id] = $value = ''; } //Don't require a conditionally hidden field if (isset($field->field_options['hide_field']) and !empty($field->field_options['hide_field'])) { if (FrmProFieldsHelper::is_field_hidden($field, stripslashes_deep($_POST))) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } $_POST['item_meta'][$field->id] = $value = ''; } } //Don't require a field hidden in a conditional page or section heading if (isset($errors['field' . $field->id]) or $_POST['item_meta'][$field->id] != '') { global $frm_hidden_break, $frm_hidden_divider; if ($frm_hidden_break and $frm_hidden_break['hidden'] or $frm_hidden_divider and $frm_hidden_divider['hidden'] and (!$frm_hidden_break or $frm_hidden_break['field_order'] < $frm_hidden_divider['field_order'])) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } $_POST['item_meta'][$field->id] = $value = ''; } } //make sure the [auto_id] is still unique if (!empty($field->default_value) and !is_array($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); } } //check uniqueness 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 (FrmProEntryMetaHelper::value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'unique_msg'); } $value = $old_value; } else { if (FrmProEntryMetaHelper::value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'unique_msg'); } } } unset($entry_id); } // validate number settings if ('number' == $field->type && $value != '') { global $frm_settings; // only check if options are available in settings if ($frm_settings->use_html && isset($field->field_options['minnum']) && isset($field->field_options['maxnum'])) { //minnum maxnum if ((double) $value < $field->field_options['minnum']) { $errors['field' . $field->id] = __('Please select a higher number', 'formidable'); } else { if ((double) $value > $field->field_options['maxnum']) { $errors['field' . $field->id] = __('Please select a lower number', 'formidable'); } } } } if (!empty($value) and ($field->type == 'website' or $field->type == 'url' or $field->type == 'image')) { if (trim($value) == 'http://') { $_POST['item_meta'][$field->id] = $value = ''; } else { $value = esc_url_raw($value); $_POST['item_meta'][$field->id] = $value = preg_match('/^(https?|ftps?|mailto|news|feed|telnet):/is', $value) ? $value : 'http://' . $value; } } $errors = FrmProEntryMetaHelper::set_post_fields($field, $value, $errors); if (!FrmProFieldsHelper::is_field_visible_to_user($field)) { //don't validate admin only fields that can't be seen unset($errors['field' . $field->id]); return $errors; } if (false and isset($field->field_options['use_calc']) and !empty($field->field_options['use_calc']) and !empty($field->field_options['calc'])) { $field->field_options['calc'] = trim($field->field_options['calc']); preg_match_all("/\\[(.*?)\\]/s", $field->field_options['calc'], $calc_matches, PREG_PATTERN_ORDER); if (isset($calc_matches[1])) { foreach ($calc_matches[1] as $c) { if (is_numeric($c)) { $c_id = $c; } else { global $frm_field; $c_field = $frm_field->getOne($c); if (!$c_field) { $field->field_options['calc'] = str_replace('[' . $c . ']', 0, $field->field_options['calc']); continue; } $c_id = $c_field->id; unset($c_field); } $c_val = trim($_POST['item_meta'][$c_id]); if (!is_numeric($c_val)) { preg_match_all('/[0-9,]*\\.?[0-9]+/', $c_val, $c_matches); $c_val = $c_matches ? end($c_matches[0]) : 0; unset($c_matches); } if ($c_val == '') { $c_val = 0; } $field->field_options['calc'] = str_replace('[' . $c . ']', $c_val, $field->field_options['calc']); unset($c); unset($c_id); } include FrmAppHelper::plugin_path() . '/pro/classes/helpers/FrmProMathHelper.php'; $m = new EvalMath(); if (strpos($field->field_options['calc'], ').toFixed(')) { $field->field_options['calc'] = str_replace(').toFixed(2', '', $field->field_options['calc']); $round = 2; } $result = $m->evaluate(str_replace('Math.', '', '(' . $field->field_options['calc'] . ')')); if (isset($round) and $round) { $result = sprintf('%.' . $round . 'f', $result); } unset($m); $_POST['item_meta'][$field->id] = $value = $result; unset($result); } unset($calc_matches); } //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(s)?:\\/\\/([\\da-z\\.-]+)\\.([\\da-z\\.-]+)/i', $value)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } if ($field->type == 'phone') { $pattern = (isset($field->field_options['format']) and !empty($field->field_options['format'])) ? $field->field_options['format'] : '^((\\+\\d{1,3}(-|.| )?\\(?\\d\\)?(-| |.)?\\d{1,5})|(\\(?\\d{2,6}\\)?))(-|.| )?(\\d{3,4})(-|.| )?(\\d{4})(( x| ext)\\d{1,5}){0,1}$'; $pattern = apply_filters('frm_phone_pattern', $pattern, $field); //check if format is already a regular expression if (strpos($pattern, '^') !== 0) { //if not, create a regular expression $pattern = preg_replace('/\\d/', '\\d', preg_quote($pattern)); $pattern = '/^' . $pattern . '$/'; } else { $pattern = '/' . $pattern . '/'; } if (!preg_match($pattern, $value)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } unset($pattern); } if ($field->type == 'date') { if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $value)) { global $frmpro_settings; $formated_date = FrmProAppHelper::convert_date($value, $frmpro_settings->date_format, 'Y-m-d'); //check format before converting if ($value != date($frmpro_settings->date_format, strtotime($formated_date))) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } $value = $formated_date; unset($formated_date); } $date = explode('-', $value); if (count($date) != 3 or !checkdate((int) $date[1], (int) $date[2], (int) $date[0])) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } } return $errors; }
public static function get_field_value_shortcode($atts) { extract(shortcode_atts(array('entry_id' => false, 'field_id' => false, 'user_id' => false, 'ip' => false, 'show' => '', 'format' => ''), $atts)); if (!$field_id) { return __('You are missing options in your shortcode. field_id is required.', 'formidable'); } global $frm_field, $wpdb, $frmdb; $field = $frm_field->getOne($field_id); if (!$field) { return ''; } $query = $wpdb->prepare("SELECT post_id, id FROM {$frmdb->entries} WHERE form_id=%d", $field->form_id); if ($user_id) { // make sure we are not getting entries for logged-out users $query .= $wpdb->prepare(' AND user_id=%d AND user_id > 0', (int) FrmProAppHelper::get_user_id_param($user_id)); } if ($entry_id) { if (!is_numeric($entry_id)) { $entry_id = isset($_GET[$entry_id]) ? $_GET[$entry_id] : $entry_id; } if ((int) $entry_id < 1) { // don't run the sql query if we know there will be no results return; } $query .= $wpdb->prepare(' AND id=%d', (int) $entry_id); } if ($ip) { $query .= $wpdb->prepare(' AND ip=%s', $ip == true ? $_SERVER['REMOTE_ADDR'] : $ip); } $query .= " ORDER BY created_at DESC LIMIT 1"; $entry = $wpdb->get_row($query); if (!$entry) { return; } $value = FrmProEntryMetaHelper::get_post_or_meta_value($entry, $field, $atts); $atts['type'] = $field->type; $atts['post_id'] = $entry->post_id; $atts['entry_id'] = $entry->id; if (!isset($atts['show_filename'])) { $atts['show_filename'] = false; } if (isset($show) and !empty($show)) { $atts['show'] = $show; $value = FrmProFieldsHelper::get_display_value($value, $field, $atts); } else { $value = FrmProEntryMetaHelper::display_value($value, $field, $atts); } return $value; }
public static function get_display_data($display, $content = '', $entry_id = false, $extra_atts = array()) { global $frmpro_display, $frm_entry, $frmpro_settings, $frm_entry_meta, $frm_vars, $post; $frm_vars['forms_loaded'][] = true; if (!isset($display->frm_form_id)) { $display = FrmProDisplaysHelper::setup_edit_vars($display, false); } if (!isset($display->frm_form_id) or empty($display->frm_form_id)) { return $content; } // check if entry needs to be deleted before loading entries if (FrmAppHelper::get_param('frm_action') == 'destroy' && isset($_GET['entry'])) { $deleted = FrmProEntriesController::ajax_destroy($display->frm_form_id, false, false); if (!empty($deleted)) { $message = '<div class="with_frm_style"><div class="frm_message">' . $deleted . '</div></div>'; } unset($_GET['entry']); } //for backwards compatability $display->id = $display->frm_old_id; $display->display_key = $display->post_name; $defaults = array('filter' => false, 'user_id' => '', 'limit' => '', 'page_size' => '', 'order_by' => '', 'order' => '', 'drafts' => false, 'auto_id' => ''); extract(wp_parse_args($extra_atts, $defaults)); //if (FrmProAppHelper::rewriting_on() && $frmpro_settings->permalinks ) // self::parse_pretty_entry_url(); if ($display->frm_show_count == 'one' and is_numeric($display->frm_entry_id) and $display->frm_entry_id > 0 and !$entry_id) { $entry_id = $display->frm_entry_id; } $entry = false; $show = 'all'; global $wpdb, $frmpro_entry; $where = $wpdb->prepare('it.form_id=%d', $display->frm_form_id); if (in_array($display->frm_show_count, array('dynamic', 'calendar', 'one'))) { $one_param = isset($_GET['entry']) ? $_GET['entry'] : $auto_id; $get_param = isset($_GET[$display->frm_param]) ? $_GET[$display->frm_param] : ($display->frm_show_count == 'one' ? $one_param : $auto_id); unset($one_param); if ($get_param) { if (($display->frm_type == 'id' or $display->frm_show_count == 'one') and is_numeric($get_param)) { $where .= $wpdb->prepare(' AND it.id=%d', $get_param); } else { $where .= $wpdb->prepare(' AND it.item_key=%s', $get_param); } $entry = $frm_entry->getAll($where, '', 1, 0); if ($entry) { $entry = reset($entry); } if ($entry and $entry->post_id) { //redirect to single post page if this entry is a post if (in_the_loop() and $display->frm_show_count != 'one' and !is_single($entry->post_id) and $post->ID != $entry->post_id) { $this_post = get_post($entry->post_id); if (in_array($this_post->post_status, array('publish', 'private'))) { die(FrmAppHelper::js_redirect(get_permalink($entry->post_id))); } } } } unset($get_param); } if ($entry and in_array($display->frm_show_count, array('dynamic', 'calendar'))) { $new_content = $display->frm_dyncontent; $show = 'one'; } else { $new_content = $display->post_content; } $show = $display->frm_show_count == 'one' ? 'one' : $show; $shortcodes = FrmProDisplaysHelper::get_shortcodes($new_content, $display->frm_form_id); //don't let page size and limit override single entry displays if ($display->frm_show_count == 'one') { $display->frm_page_size = $display->frm_limit = ''; } //don't keep current content if post type is frm_display if ($post and $post->post_type == 'frm_display') { $display->frm_insert_loc = ''; } $pagination = ''; $is_draft = !empty($drafts) ? 1 : 0; $form_query = $wpdb->prepare("SELECT id, post_id FROM {$wpdb->prefix}frm_items WHERE form_id=%d and post_id>%d", $display->frm_form_id, 1); if ($drafts != 'both') { $form_query .= $wpdb->prepare(' AND is_draft=%d', $is_draft); } if ($entry and $entry->form_id == $display->frm_form_id) { $form_query .= $wpdb->prepare(' AND id=%d', $entry->id); $form_posts = $wpdb->get_results($form_query); $entry_ids = array($entry->id); } else { $form_posts = $wpdb->get_results($form_query); //Only get $entry_ids if filters are set or if frm_search parameter is set if (isset($display->frm_where) && !empty($display->frm_where) && (!$entry || !$post || empty($auto_id)) || isset($_GET['frm_search'])) { $entry_query = $wpdb->prepare("SELECT id FROM {$wpdb->prefix}frm_items WHERE form_id=%d", $display->frm_form_id); if ($drafts != 'both') { $entry_query .= $wpdb->prepare(" AND is_draft=%d", $is_draft); } $entry_ids = $wpdb->get_col($entry_query); unset($entry_query); } } unset($form_query); $empty_msg = (isset($display->frm_empty_msg) and !empty($display->frm_empty_msg)) ? '<div class="frm_no_entries">' . FrmProFieldsHelper::get_default_value($display->frm_empty_msg, false, true, true) . '</div>' : ''; if (isset($message)) { // if an entry was deleted above, show a message $empty_msg = $message . $empty_msg; } $after_where = false; if ($user_id and !empty($user_id)) { $user_id = FrmProAppHelper::get_user_id_param($user_id); $uid_used = false; } if (isset($display->frm_where) && !empty($display->frm_where) && (!$entry || !$post || empty($auto_id))) { $display->frm_where = apply_filters('frm_custom_where_opt', $display->frm_where, array('display' => $display, 'entry' => $entry)); $continue = false; foreach ($display->frm_where as $where_key => $where_opt) { $where_val = isset($display->frm_where_val[$where_key]) ? $display->frm_where_val[$where_key] : ''; if (preg_match("/\\[(get|get-(.?))\\b(.*?)(?:(\\/))?\\]/s", $where_val)) { $where_val = FrmProFieldsHelper::get_default_value($where_val, false, true, true); //if this param doesn't exist, then don't include it if ($where_val == '') { if (!$after_where) { $continue = true; } continue; } } else { $where_val = FrmProFieldsHelper::get_default_value($where_val, false, true, true); } $continue = false; if ($where_val == 'current_user') { if ($user_id and is_numeric($user_id)) { $where_val = $user_id; $uid_used = true; } else { $where_val = get_current_user_id(); } } $where_val = do_shortcode($where_val); if (in_array($where_opt, array('id', 'item_key', 'post_id')) && !is_array($where_val) && strpos($where_val, ',')) { $where_val = explode(',', $where_val); } if (is_array($where_val) and !empty($where_val)) { $new_where = '('; if (strpos($display->frm_where_is[$where_key], 'LIKE') !== false) { foreach ($where_val as $w) { if ($new_where != '(') { $new_where .= ','; } $new_where .= $wpdb->prepare('%s', '%' . FrmAppHelper::esc_like($w) . '%'); unset($w); } } else { foreach ($where_val as $w) { if ($new_where != '(') { $new_where .= ','; } $new_where .= $wpdb->prepare('%s', $w); unset($w); } } $new_where .= ')'; $where_val = $new_where; unset($new_where); if (strpos($display->frm_where_is[$where_key], '!') === false && strpos($display->frm_where_is[$where_key], 'not') === false) { $display->frm_where_is[$where_key] = ' in '; } else { $display->frm_where_is[$where_key] = ' not in '; } } if (is_numeric($where_opt)) { $filter_opts = apply_filters('frm_display_filter_opt', array('where_opt' => $where_opt, 'where_is' => $display->frm_where_is[$where_key], 'where_val' => $where_val, 'form_id' => $display->frm_form_id, 'form_posts' => $form_posts, 'after_where' => $after_where, 'display' => $display, 'drafts' => $is_draft)); $entry_ids = FrmProAppHelper::filter_where($entry_ids, $filter_opts); unset($filter_opts); $after_where = true; $continue = false; if (empty($entry_ids)) { break; } } else { if ($where_opt == 'created_at' or $where_opt == 'updated_at') { if ($where_val == 'NOW') { $where_val = current_time('mysql', 1); } if (strpos($display->frm_where_is[$where_key], 'LIKE') === false) { $where_val = date('Y-m-d H:i:s', strtotime($where_val)); } $where .= $wpdb->prepare(" and it.{$where_opt} " . $display->frm_where_is[$where_key] . "%s", ''); if (strpos($display->frm_where_is[$where_key], 'in')) { $where .= " {$where_val}"; } else { if (strpos($display->frm_where_is[$where_key], 'LIKE') !== false) { $where .= $wpdb->prepare(" %s", '%' . FrmAppHelper::esc_like($where_val) . '%'); } else { $where .= $wpdb->prepare(" %s", $where_val); } } $continue = true; } else { if (in_array($where_opt, array('id', 'item_key', 'post_id'))) { $where .= " and it.{$where_opt} " . $display->frm_where_is[$where_key]; if (strpos($display->frm_where_is[$where_key], 'in')) { $where .= " {$where_val}"; } else { $where .= $wpdb->prepare(" %s", $where_val); } $continue = true; } } } } if (!$continue and empty($entry_ids)) { if ($display->frm_insert_loc == 'after') { $content .= $empty_msg; } else { if ($display->frm_insert_loc == 'before') { $content = $empty_msg . $content; } else { if ($filter) { $empty_msg = apply_filters('the_content', $empty_msg); } if ($post->post_type == 'frm_display' and in_the_loop()) { $content = ''; } $content .= $empty_msg; } } return $content; } } if ($user_id && is_numeric($user_id) && !$uid_used) { $where .= $wpdb->prepare(" AND it.user_id=%d", $user_id); } $s = FrmAppHelper::get_param('frm_search', false); if ($s) { $new_ids = FrmProEntriesHelper::get_search_ids($s, $display->frm_form_id); if ($after_where and isset($entry_ids) and !empty($entry_ids)) { $entry_ids = array_intersect($new_ids, $entry_ids); } else { $entry_ids = $new_ids; } if (empty($entry_ids)) { if ($post->post_type == 'frm_display' and in_the_loop()) { $content = ''; } return $content . ' ' . $empty_msg; } } if (isset($entry_ids) && !empty($entry_ids)) { $where .= ' and it.id in (' . implode(',', array_filter($entry_ids, 'is_numeric')) . ')'; } if ($entry_id) { $entry_id_array = explode(',', $entry_id); //Get IDs (if there are any) $numeric_entry_ids = array_filter($entry_id_array, 'is_numeric'); //If there are entry keys, use esc_sql if (empty($numeric_entry_ids)) { $entry_id_array = array_filter($entry_id_array, 'esc_sql'); } $where .= !empty($numeric_entry_ids) ? " and it.id in ('" . implode("','", $numeric_entry_ids) . "')" : " and it.item_key in ('" . implode("','", $entry_id_array) . "')"; } if ($drafts != 'both') { $where .= $wpdb->prepare(' AND is_draft=%d', $is_draft); } unset($is_draft); if ($show == 'one') { $limit = ' LIMIT 1'; } else { if (isset($_GET['frm_cat']) and isset($_GET['frm_cat_id'])) { //Get fields with specified field value 'frm_cat' = field key/id, 'frm_cat_id' = order position of selected option global $frm_field; if ($cat_field = $frm_field->getOne($_GET['frm_cat'])) { $categories = maybe_unserialize($cat_field->options); if (isset($categories[$_GET['frm_cat_id']])) { $cat_entry_ids = $frm_entry_meta->getEntryIds(array('meta_value' => $categories[$_GET['frm_cat_id']], 'fi.field_key' => $_GET['frm_cat'])); if ($cat_entry_ids) { $where .= " and it.id in (" . implode(',', $cat_entry_ids) . ")"; } else { $where .= " and it.id=0"; } } } } } if (!empty($limit) and is_numeric($limit)) { $display->frm_limit = (int) $limit; } if (is_numeric($display->frm_limit)) { $num_limit = (int) $display->frm_limit; $limit = ' LIMIT ' . $display->frm_limit; } if (!empty($order_by)) { $display->frm_order_by = explode(',', $order_by); $order_by = ''; } if (!empty($order)) { $display->frm_order = explode(',', $order); } unset($order); if (!empty($page_size) && is_numeric($page_size)) { $display->frm_page_size = (int) $page_size; } // if limit is lower than page size, ignore the page size if (isset($num_limit) && $display->frm_page_size > $num_limit) { $display->frm_page_size = ''; } if (isset($display->frm_page_size) and is_numeric($display->frm_page_size)) { $page_param = ($_GET and isset($_GET['frm-page-' . $display->ID])) ? 'frm-page-' . $display->ID : 'frm-page'; $current_page = (int) FrmAppHelper::get_param($page_param, 1); $record_where = $where == $wpdb->prepare('it.form_id=%d', $display->frm_form_id) ? $display->frm_form_id : $where; $record_count = $frm_entry->getRecordCount($record_where); if (isset($num_limit) and $record_count > (int) $num_limit) { $record_count = (int) $num_limit; } $page_count = $frm_entry->getPageCount($display->frm_page_size, $record_count); //Get a page of entries $entries = $frmpro_entry->get_view_page($current_page, $display->frm_page_size, $where, array('order_by_array' => $display->frm_order_by, 'order_array' => $display->frm_order, 'posts' => $form_posts)); $page_last_record = FrmAppHelper::getLastRecordNum($record_count, $current_page, $display->frm_page_size); $page_first_record = FrmAppHelper::getFirstRecordNum($record_count, $current_page, $display->frm_page_size); if ($page_count > 1) { $page_param = 'frm-page-' . $display->ID; $pagination = FrmProDisplaysController::get_pagination_file(FrmAppHelper::plugin_path() . '/pro/classes/views/displays/pagination.php', compact('current_page', 'record_count', 'page_count', 'page_last_record', 'page_first_record', 'page_param')); } } else { //Get all entries $entries = $frmpro_entry->get_view_results($where, array('order_by_array' => $display->frm_order_by, 'order_array' => $display->frm_order, 'limit' => $limit, 'posts' => $form_posts)); } $total_count = count($entries); $sc_atts = array(); if (isset($record_count)) { $sc_atts['record_count'] = $record_count; } else { $sc_atts['record_count'] = $total_count; } $display_content = ''; if (isset($message)) { // if an entry was deleted above, show a message $display_content .= $message; } if ($show == 'all') { $display_content .= isset($display->frm_before_content) ? $display->frm_before_content : ''; } if (!isset($entry_ids) || empty($entry_ids)) { $entry_ids = array_keys($entries); } $display_content = apply_filters('frm_before_display_content', $display_content, $display, $show, array('total_count' => $total_count, 'record_count' => $sc_atts['record_count'], 'entry_ids' => $entry_ids)); $filtered_content = apply_filters('frm_display_entries_content', $new_content, $entries, $shortcodes, $display, $show, $sc_atts); if ($filtered_content != $new_content) { $display_content .= $filtered_content; } else { $odd = 'odd'; $count = 0; if (!empty($entries)) { foreach ($entries as $entry) { $count++; //TODO: use the count with conditionals $display_content .= apply_filters('frm_display_entry_content', $new_content, $entry, $shortcodes, $display, $show, $odd, array('count' => $count, 'total_count' => $total_count, 'record_count' => $sc_atts['record_count'], 'pagination' => $pagination, 'entry_ids' => $entry_ids)); $odd = $odd == 'odd' ? 'even' : 'odd'; unset($entry); } unset($count); } else { if ($post->post_type == 'frm_display' and in_the_loop()) { $display_content = ''; } if (!isset($message) || FrmAppHelper::get_param('frm_action') != 'destroy') { $display_content .= $empty_msg; } } } if (isset($message)) { unset($message); } if ($show == 'all') { $display_content .= isset($display->frm_after_content) ? apply_filters('frm_after_content', $display->frm_after_content, $display, $show, array('total_count' => $total_count, 'record_count' => $sc_atts['record_count'], 'entry_ids' => $entry_ids)) : ''; } if (!isset($sc_atts)) { $sc_atts = array('record_count' => 0); } if (!isset($total_count)) { $total_count = 0; } $display_content .= apply_filters('frm_after_display_content', $pagination, $display, $show, array('total_count' => $total_count, 'record_count' => $sc_atts['record_count'], 'entry_ids' => $entry_ids)); unset($sc_atts); $display_content = FrmProFieldsHelper::get_default_value($display_content, false, true, true); if ($display->frm_insert_loc == 'after') { $content .= $display_content; } else { if ($display->frm_insert_loc == 'before') { $content = $display_content . $content; } else { if ($filter) { $display_content = apply_filters('the_content', $display_content); } $content = $display_content; } } return $content; }
/** * Returns stats requested through the [frm-stats] shortcode * * @param array $atts */ function stats_shortcode($atts) { $defaults = array('id' => false, 'type' => 'total', 'user_id' => false, 'value' => false, 'round' => 100, 'limit' => ''); extract(shortcode_atts($defaults, $atts)); if (!$id) { return; } $user_id = FrmProAppHelper::get_user_id_param($user_id); foreach ($defaults as $unset => $val) { unset($atts[$unset]); } return FrmProFieldsHelper::get_field_stats($id, $type, $user_id, $value, $round, $limit, $atts); }
public static function import_csv($path, $form_id, $field_ids, $entry_key = 0, $start_row = 2, $del = ',', $max = 250) { global $importing_fields, $wpdb, $frmpro_settings; if (!defined('WP_IMPORTING')) { define('WP_IMPORTING', true); } $form_id = (int) $form_id; if (!$form_id) { return $start_row; } if (!$importing_fields) { $importing_fields = array(); } if (!ini_get('safe_mode')) { set_time_limit(0); } //Remove time limit to execute this function if ($f = fopen($path, "r")) { unset($path); global $frm_entry, $frmdb, $frm_field; $row = 0; //setlocale(LC_ALL, get_locale()); while (($data = fgetcsv($f, 100000, $del)) !== FALSE) { $row++; if ($start_row > $row) { continue; } $values = array('form_id' => $form_id); $values['item_meta'] = array(); foreach ($field_ids as $key => $field_id) { $data[$key] = isset($data[$key]) ? $data[$key] : ''; if (is_numeric($field_id)) { if (isset($importing_fields[$field_id])) { $field = $importing_fields[$field_id]; } else { $field = $frm_field->getOne($field_id); $importing_fields[$field_id] = $field; } $values['item_meta'][$field_id] = apply_filters('frm_import_val', $data[$key], $field); switch ($field->type) { case 'user_id': $values['item_meta'][$field_id] = FrmProAppHelper::get_user_id_param(trim($values['item_meta'][$field_id])); $_POST['frm_user_id'] = $values['frm_user_id'] = $values['item_meta'][$field_id]; break; case 'checkbox': case 'select': $values['item_meta'][$field_id] = self::get_multi_opts($values['item_meta'][$field_id], $field); break; case 'data': $values['item_meta'][$field_id] = self::get_dfe_id($values['item_meta'][$field_id], $field, array(), $values); break; case 'file': $values['item_meta'][$field_id] = self::get_file_id($values['item_meta'][$field_id]); break; case 'date': $values['item_meta'][$field_id] = self::get_date($values['item_meta'][$field_id]); break; } if (isset($_POST['item_meta'][$field_id]) and ($field->type == 'checkbox' or $field->type == 'data' and $field->field_options['data_type'] != 'checkbox')) { if (empty($values['item_meta'][$field_id])) { $values['item_meta'][$field_id] = $_POST['item_meta'][$field_id]; } else { if (!empty($_POST['item_meta'][$field_id])) { $values['item_meta'][$field_id] = array_merge((array) $_POST['item_meta'][$field_id], (array) $values['item_meta'][$field_id]); } } } $_POST['item_meta'][$field_id] = $values['item_meta'][$field_id]; FrmProEntryMetaHelper::set_post_fields($field, $values['item_meta'][$field_id]); unset($field); } else { if (is_array($field_id)) { $field_type = isset($field_id['type']) ? $field_id['type'] : false; $linked = isset($field_id['linked']) ? $field_id['linked'] : false; $field_id = $field_id['field_id']; if ($field_type == 'data') { if ($linked) { $entry_id = $frmdb->get_var($frmdb->entry_metas, array('meta_value' => $data[$key], 'field_id' => $linked), 'item_id'); } else { //get entry id of entry with item_key == $data[$key] $entry_id = $frmdb->get_var($frmdb->entries, array('item_key' => $data[$key])); } if ($entry_id) { $values['item_meta'][$field_id] = $entry_id; } } unset($field_type); unset($linked); } else { $values[$field_id] = $data[$key]; } } } if (!isset($values['item_key']) or empty($values['item_key'])) { $values['item_key'] = $data[$entry_key]; } $offset = get_option('gmt_offset') * 60 * 60; foreach (array('created_at', 'updated_at') as $stamp) { if (!isset($values[$stamp])) { continue; } // adjust the date format if it starts with the day if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}/', trim($values[$stamp])) && substr($frmpro_settings->date_format, 0, 1) == 'd') { $reg_ex = str_replace(array('/', '.', '-', 'd', 'j', 'm', 'y', 'Y'), array('\\/', '\\.', '\\-', '\\d{2}', '\\d', '\\d{2}', '\\d{2}', '\\d{4}'), $frmpro_settings->date_format); if (preg_match('/^' . $reg_ex . '/', trim($values[$stamp]))) { $values[$stamp] = FrmProAppHelper::convert_date($values[$stamp], $frmpro_settings->date_format, 'Y-m-d H:i:s'); } } $values[$stamp] = date('Y-m-d H:i:s', strtotime($values[$stamp]) - $offset); unset($stamp); } unset($offset); if (isset($values['user_id'])) { $values['user_id'] = FrmProAppHelper::get_user_id_param($values['user_id']); } if (isset($values['updated_by'])) { $values['updated_by'] = FrmProAppHelper::get_user_id_param($values['updated_by']); } if (isset($values['is_draft'])) { $values['is_draft'] = (int) $values['is_draft']; } $editing = false; if (isset($values['id']) && $values['item_key']) { //check for updating by entry ID $editing = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}frm_items WHERE form_id=%d AND id=%d", $values['form_id'], $values['id'])); } if ($editing) { $created = $frm_entry->update($values['id'], $values); } else { $created = $frm_entry->create($values); } unset($_POST); unset($values); unset($created); if ($row - $start_row >= $max) { fclose($f); return $row; } } fclose($f); return $row; } }