/** * Move entries from parent form to child form * * @since 2.0.09 */ private static function move_entries_to_child_form($args) { global $wpdb; // get the ids of the entries saved in these fields $item_ids = FrmDb::get_col('frm_item_metas', array('field_id' => $args['children']), 'item_id', array('group_by' => 'item_id')); foreach ($item_ids as $old_id) { // Create a new entry in the child form $new_id = FrmEntry::create(array('form_id' => $args['form_id'], 'parent_item_id' => $old_id)); // Move the parent item_metas to the child form $where = array('item_id' => $old_id, 'field_id' => $args['children']); FrmDb::get_where_clause_and_values($where); array_unshift($where['values'], $new_id); $c = $wpdb->query($wpdb->prepare('UPDATE ' . $wpdb->prefix . 'frm_item_metas SET item_id = %d ' . $where['where'], $where['values'])); if ($c) { // update the section field meta with the new entry ID $u = FrmEntryMeta::update_entry_meta($old_id, $args['field_id'], null, $new_id); if (!$u) { // add the row if it wasn't there to update FrmEntryMeta::add_entry_meta($old_id, $args['field_id'], null, $new_id); } } } }
/** * @covers FrmEntry::create * @covers FrmEntry::is_duplicate */ function test_is_duplicate() { $form = $this->factory->form->get_object_by_id($this->contact_form_key); $entry_data = $this->factory->field->generate_entry_array($form); $entry = FrmEntry::create($entry_data); $this->assertNotEmpty($entry); $this->assertTrue(is_numeric($entry)); $entry = FrmEntry::create($entry_data); $this->assertEmpty($entry, 'Failed to detect duplicate entry'); }
function create_object($args) { $default_values = array('form_id' => $args['form_id'], 'item_meta' => array()); $args = array_merge($default_values, $args); return FrmEntry::create($args); }
public static function process_entry($errors = '', $ajax = false) { $form_id = FrmAppHelper::get_post_param('form_id', '', 'absint'); if (FrmAppHelper::is_admin() || empty($_POST) || empty($form_id) || !isset($_POST['item_key'])) { return; } global $frm_vars; $form = FrmForm::getOne($form_id); if (!$form) { return; } $params = FrmForm::get_params($form); if (!isset($frm_vars['form_params'])) { $frm_vars['form_params'] = array(); } $frm_vars['form_params'][$form->id] = $params; if (isset($frm_vars['created_entries'][$form_id])) { return; } if ($errors == '') { $errors = FrmEntryValidate::validate($_POST); } /** * Use this filter to add trigger actions and add errors after * all other errors have been processed * @since 2.0.6 */ $errors = apply_filters('frm_entries_before_create', $errors, $form); $frm_vars['created_entries'][$form_id] = array('errors' => $errors); if (empty($errors)) { $_POST['frm_skip_cookie'] = 1; if ($params['action'] == 'create') { if (apply_filters('frm_continue_to_create', true, $form_id) && !isset($frm_vars['created_entries'][$form_id]['entry_id'])) { $frm_vars['created_entries'][$form_id]['entry_id'] = FrmEntry::create($_POST); } } do_action('frm_process_entry', $params, $errors, $form, array('ajax' => $ajax)); unset($_POST['frm_skip_cookie']); } }
public static function create() { if (!current_user_can('frm_create_entries')) { return FrmEntriesController::display_list(); } $params = FrmForm::get_admin_params(); $form = $record = false; if ($params['form']) { $form = FrmForm::getOne($params['form']); } if (!$form) { return; } $errors = FrmEntryValidate::validate($_POST); if (count($errors) > 0) { self::get_new_vars($errors, $form); return; } if ((isset($_POST['frm_page_order_' . $form->id]) || FrmProFormsHelper::going_to_prev($form->id)) && !FrmProFormsHelper::saving_draft()) { self::get_new_vars('', $form); return; } $_SERVER['REQUEST_URI'] = str_replace('&frm_action=new', '', FrmAppHelper::get_server_value('REQUEST_URI')); global $frm_vars; if (!isset($frm_vars['created_entries'][$form->id]) || !$frm_vars['created_entries'][$form->id]) { $frm_vars['created_entries'][$form->id] = array(); } if (!isset($frm_vars['created_entries'][$_POST['form_id']]['entry_id'])) { $record = $frm_vars['created_entries'][$form->id]['entry_id'] = FrmEntry::create($_POST); } if ($record) { if (FrmProFormsHelper::saving_draft()) { $message = __('Draft was Successfully Created', 'formidable'); } else { $message = __('Entry was Successfully Created', 'formidable'); } self::get_edit_vars($record, $errors, $message); } else { self::get_new_vars($errors, $form); } }
/** * Save the entry after checking if it should be created or updated */ private static function save_or_edit_entry($values) { $editing = false; if (isset($values['id']) && $values['item_key']) { global $wpdb; //check for updating by entry ID $editing = FrmDb::get_var('frm_items', array('form_id' => $values['form_id'], 'id' => $values['id'])); } if ($editing) { FrmEntry::update($values['id'], $values); } else { FrmEntry::create($values); } }
public static function import_xml_entries($entries, $imported) { global $frm_duplicate_ids, $wpdb, $frm_field; $frm_entry = new FrmEntry(); $saved_entries = array(); foreach ($entries as $item) { $entry = array('id' => (int) $item->id, 'item_key' => (string) $item->item_key, 'name' => (string) $item->name, 'description' => FrmAppHelper::maybe_json_decode((string) $item->description), 'ip' => (string) $item->ip, 'form_id' => isset($imported['forms'][(int) $item->form_id]) ? $imported['forms'][(int) $item->form_id] : (int) $item->form_id, 'post_id' => isset($imported['posts'][(int) $item->post_id]) ? $imported['posts'][(int) $item->post_id] : (int) $item->post_id, 'user_id' => FrmProAppHelper::get_user_id_param((string) $item->user_id), 'parent_item_id' => (int) $item->parent_item_id, 'is_draft' => (int) $item->is_draft, 'updated_by' => FrmProAppHelper::get_user_id_param((string) $item->updated_by), 'created_at' => (string) $item->created_at, 'updated_at' => (string) $item->updated_at); $metas = array(); foreach ($item->item_meta as $meta) { $field_id = (int) $meta->field_id; if (is_array($frm_duplicate_ids) && isset($frm_duplicate_ids[$field_id])) { $field_id = $frm_duplicate_ids[$field_id]; } $field = $frm_field->getOne($field_id); if (!$field) { continue; } $metas[$field_id] = FrmAppHelper::maybe_json_decode((string) $meta->meta_value); $metas[$field_id] = apply_filters('frm_import_val', $metas[$field_id], $field); switch ($field->type) { case 'user_id': $metas[$field_id] = FrmProAppHelper::get_user_id_param($metas[$field_id]); if ($metas[$field_id] && is_numeric($metas[$field_id])) { $entry['frm_user_id'] = $metas[$field_id]; } break; case 'file': $metas[$field_id] = self::get_file_id($metas[$field_id]); break; case 'date': $metas[$field_id] = self::get_date($metas[$field_id]); break; case 'data': $metas[$field_id] = self::get_dfe_id($metas[$field_id], $field, $saved_entries, $metas); break; case 'select': case 'checkbox': $metas[$field_id] = self::get_multi_opts($metas[$field_id], $field); break; } unset($field); unset($meta); } unset($item); $entry['item_meta'] = $metas; unset($metas); // edit entry if the key and created time match $editing = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}frm_items WHERE item_key=%s AND created_at=%s", $entry['item_key'], date('Y-m-d H:i:s', strtotime($entry['created_at'])))); if ($editing) { $frm_entry->update($entry['id'], $entry); $imported['updated']['items']++; $saved_entries[$entry['id']] = $entry['id']; } else { if ($e = $frm_entry->create($entry)) { $saved_entries[$entry['id']] = $e; $imported['imported']['items']++; } } unset($entry); } unset($entries); return $imported; }
public static function save_sub_entries($values, $action = 'create') { $form_id = isset($values['form_id']) ? (int) $values['form_id'] : 0; if (!$form_id || !isset($values['item_meta'])) { return $values; } $form_fields = FrmProFormsHelper::has_field('form', $form_id, false); $section_fields = FrmProFormsHelper::has_field('divider', $form_id, false); if (!$form_fields && !$section_fields) { // only continue if there could be sub entries return $values; } $form_fields = array_merge($section_fields, $form_fields); $new_values = $values; unset($new_values['item_meta']); // allow for multiple embeded forms foreach ($form_fields as $field) { if (!isset($values['item_meta'][$field->id]) || !isset($field->field_options['form_select']) || !isset($values['item_meta'][$field->id]['form'])) { // don't continue if we don't know which form to insert the sub entries into unset($values['item_meta'][$field->id]); continue; } if ('divider' == $field->type && !FrmField::is_repeating_field($field)) { // only create sub entries for repeatable sections continue; } $field_values = $values['item_meta'][$field->id]; $sub_form_id = $field->field_options['form_select']; unset($field_values['form']); if ($action != 'create' && isset($field_values['id'])) { $old_ids = FrmEntryMeta::get_entry_meta_by_field($values['id'], $field->id); $old_ids = array_filter((array) $old_ids, 'is_numeric'); unset($field_values['id']); } else { $old_ids = array(); } $sub_ids = array(); foreach ($field_values as $k => $v) { $entry_values = $new_values; $entry_values['form_id'] = $sub_form_id; $entry_values['item_meta'] = (array) $v; $entry_values['parent_item_id'] = isset($values['id']) ? $values['id'] : 0; $entry_values['parent_form_id'] = $form_id; // include a nonce just to be sure the parent_form_id is legit $entry_values['parent_nonce'] = wp_create_nonce('parent'); // set values for later user (file upload and tags fields) $_POST['item_meta']['key_pointer'] = $k; $_POST['item_meta']['parent_field'] = $field->id; if (!is_numeric($k) && in_array(str_replace('i', '', $k), $old_ids)) { // update existing sub entries $entry_values['id'] = str_replace('i', '', $k); FrmEntry::update($entry_values['id'], $entry_values); $sub_id = $entry_values['id']; } else { // create new sub entries $sub_id = FrmEntry::create($entry_values); } if ($sub_id) { $sub_ids[] = $sub_id; } unset($k, $v, $entry_values, $sub_id); } $values['item_meta'][$field->id] = $sub_ids; // array of sub entry ids $old_ids = array_diff($old_ids, $sub_ids); if (!empty($old_ids)) { // delete entries that were removed from section foreach ($old_ids as $old_id) { FrmEntry::destroy($old_id); } } unset($field); } return $values; }