/** * TODO: This seems to be hacky... we should remove it. Entry is set when updating the form using setup_vars()! * Get the current entry and set it if it's not yet set. * @return array Gravity Forms entry array */ private function get_entry() { if (empty($this->entry)) { // Get the database value of the entry that's being edited $this->entry = gravityview_get_entry(GravityView_frontend::is_single_entry()); } return $this->entry; }
/** * Handle the deletion request, if $_GET['action'] is set to "delete" * * 1. Check referrer validity * 2. Make sure there's an entry with the slug of $_GET['entry_id'] * 3. If so, attempt to delete the entry. If not, set the error status * 4. Remove `action=delete` from the URL * 5. Redirect to the page using `wp_safe_redirect()` * * @since 1.5.1 * @uses wp_safe_redirect() * @return void */ function process_delete() { // If the form is submitted if (isset($_GET['action']) && 'delete' === $_GET['action'] && isset($_GET['entry_id'])) { // Make sure it's a GravityView request $valid_nonce_key = wp_verify_nonce($_GET['delete'], self::get_nonce_key($_GET['entry_id'])); if (!$valid_nonce_key) { do_action('gravityview_log_debug', __METHOD__ . ' Delete entry not processed: nonce validation failed.'); return; } // Get the entry slug $entry_slug = esc_attr($_GET['entry_id']); // See if there's an entry there $entry = gravityview_get_entry($entry_slug); if ($entry) { $has_permission = $this->user_can_delete_entry($entry); if (is_wp_error($has_permission)) { $messages = array('message' => urlencode($has_permission->get_error_message()), 'status' => 'error'); } else { // Delete the entry $delete_response = $this->delete_or_trash_entry($entry); if (is_wp_error($delete_response)) { $messages = array('message' => urlencode($delete_response->get_error_message()), 'status' => 'error'); } else { $messages = array('status' => $delete_response); } } } else { do_action('gravityview_log_debug', __METHOD__ . ' Delete entry failed: there was no entry with the entry slug ' . $entry_slug); $messages = array('message' => urlencode(__('The entry does not exist.', 'gravityview')), 'status' => 'error'); } $redirect_to_base = esc_url_raw(remove_query_arg(array('action'))); $redirect_to = add_query_arg($messages, $redirect_to_base); wp_safe_redirect($redirect_to); exit; } // endif action is delete. }
/** * Handle adding a note. * * Verify the request. If valid, add the note. If AJAX request, send response JSON. * * @since 1.17 * * @var array $data { * @type string $action "gv_note_add" * @type string $entry-slug Entry slug or ID to add note to * @type string $gv_note_add Nonce with action "gv_note_add_{entry slug}" and name "gv_note_add" * @type string $_wp_http_referer Relative URL to submitting page ('/view/example/entry/123/') * @type string $gv-note-content Note content * @type string $add_note Submit button value ('Add Note') * } * * @return void */ private function process_add_note($data) { $error = false; $success = false; if (empty($data['entry-slug'])) { $error = self::strings('error-invalid'); do_action('gravityview_log_error', __METHOD__ . ': The note is missing an Entry ID.'); } else { $valid = wp_verify_nonce($data['gv_note_add'], 'gv_note_add_' . $data['entry-slug']); $has_cap = GVCommon::has_cap('gravityview_add_entry_notes'); if (!$has_cap) { $error = self::strings('error-cap-add'); do_action('gravityview_log_error', __METHOD__ . ': Adding a note failed: the user does not have the "gravityview_add_entry_notes" capability.'); } elseif ($valid) { $entry = gravityview_get_entry($data['entry-slug'], true, false); $added = $this->add_note($entry, $data); // Error adding note if (is_wp_error($added)) { $error = $added->get_error_message(); } else { // Confirm the note was added, because GF doesn't return note ID on success $note = GravityView_Entry_Notes::get_note($added); // Possibly email peeps about this great new note $this->maybe_send_entry_notes($note, $entry, $data); if ($note) { $success = self::display_note($note, !empty($data['show-delete'])); do_action('gravityview_log_debug', __METHOD__ . ': The note was successfully created', compact('note', 'data')); } else { $error = self::strings('error-add-note'); do_action('gravityview_log_error', __METHOD__ . ': The note was not successfully created', compact('note', 'data')); } } } else { $error = self::strings('error-invalid'); do_action('gravityview_log_error', __METHOD__ . ': Nonce validation failed; the note was not created'); } } if ($this->doing_ajax) { if ($success) { wp_send_json_success(array('html' => $success)); } else { $error = $error ? $error : self::strings('error-invalid'); wp_send_json_error(array('error' => esc_html($error))); } } }
/** * Handle the deletion request, if $_GET['action'] is set to "delete" * * 1. Check referrer validity * 2. Make sure there's an entry with the slug of $_GET['entry_id'] * 3. If so, attempt to delete the entry. If not, set the error status * 4. Remove `action=delete` from the URL * 5. Redirect to the page using `wp_safe_redirect()` * * @since 1.5.1 * @uses wp_safe_redirect() * @return void */ function process_delete() { // If the form is submitted if (RGForms::get("action") === "delete") { $nonce_key = self::get_nonce_key($_GET['entry_id']); // Make sure it's a valid request check_admin_referer($nonce_key, 'delete'); // Get the entry slug $entry_slug = esc_attr($_GET['entry_id']); // See if there's an entry there $entry = gravityview_get_entry($entry_slug); if ($entry) { $has_permission = $this->user_can_delete_entry($entry); if (is_wp_error($has_permission)) { $messages = array('message' => urlencode($has_permission->get_error_message()), 'status' => 'error'); } else { // Delete the entry $delete_response = $this->delete_or_trash_entry($entry['id']); if (is_wp_error($delete_response)) { $messages = array('message' => urlencode($delete_response->get_error_message()), 'status' => 'error'); } else { $messages = array('status' => $delete_response); } } } else { do_action('gravityview_log_debug', __METHOD__ . ' Delete entry failed: there was no entry with the entry slug ' . $entry_slug); $messages = array('message' => urlencode(__('The entry does not exist.', 'gravityview')), 'status' => 'error'); } $redirect_to_base = esc_url_raw(remove_query_arg(array('action'))); $redirect_to = add_query_arg($messages, $redirect_to_base); wp_safe_redirect($redirect_to); exit; } // endif action is delete. }