function update_object($entry_id, $fields) { return FrmEntry::update($entry_id, $fields); }
public static function process_update_entry($params, $errors, $form, $args) { global $frm_vars; if ($params['action'] == 'update' && isset($frm_vars['saved_entries']) && in_array((int) $params['id'], (array) $frm_vars['saved_entries'])) { return; } if ($params['action'] == 'create' && isset($frm_vars['created_entries'][$form->id]) && isset($frm_vars['created_entries'][$form->id]['entry_id']) && is_numeric($frm_vars['created_entries'][$form->id]['entry_id'])) { $entry_id = $params['id'] = $frm_vars['created_entries'][$form->id]['entry_id']; self::set_cookie($entry_id, $form->id); $conf_method = apply_filters('frm_success_filter', 'message', $form, $form->options, $params['action']); if ($conf_method != 'redirect') { return; } $success_args = array('action' => $params['action']); if (isset($args['ajax'])) { $success_args['ajax'] = $args['ajax']; } do_action('frm_success_action', $conf_method, $form, $form->options, $params['id'], $success_args); } else { if ($params['action'] == 'update') { if (isset($frm_vars['saved_entries']) && in_array((int) $params['id'], (array) $frm_vars['saved_entries'])) { if (isset($_POST['item_meta'])) { unset($_POST['item_meta']); } add_filter('frm_continue_to_new', '__return_false', 15); return; } //don't update if there are validation errors if (!empty($errors)) { return; } //check if user is allowed to update if (!FrmProEntriesHelper::user_can_edit((int) $params['id'], $form)) { $frm_settings = FrmAppHelper::get_settings(); wp_die(do_shortcode($frm_settings->login_msg)); } //update, but don't check for confirmation if saving draft if (FrmProFormsHelper::saving_draft()) { FrmEntry::update($params['id'], $_POST); return; } //don't update if going back if (isset($_POST['frm_page_order_' . $form->id]) || FrmProFormsHelper::going_to_prev($form->id)) { return; } FrmEntry::update($params['id'], $_POST); $success_args = array('action' => $params['action']); if ($params['action'] != 'create' && FrmProEntriesHelper::is_new_entry($params['id'])) { $success_args['action'] = 'create'; } //check confirmation method $conf_method = apply_filters('frm_success_filter', 'message', $form, $success_args['action']); if ($conf_method != 'redirect') { return; } if (isset($args['ajax'])) { $success_args['ajax'] = $args['ajax']; } do_action('frm_success_action', $conf_method, $form, $form->options, $params['id'], $success_args); } else { if ($params['action'] == 'destroy') { //if the user who created the entry is deleting it self::ajax_destroy($form->id, false, false); } } } }
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; }
/** * 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 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; }