/** * @covers GravityView_Entry_Link_Shortcode::delete_shortcode */ function _test_delete($view, $entry, $atts) { // NO CAPS $this->factory->user->create_and_set(array('user_login' => 'zero', 'role' => 'zero')); $zero_link = $this->object->delete_shortcode($atts); $this->assertNull($zero_link, 'user without caps shouldn\'t see delete link'); // ADMIN $this->factory->user->create_and_set(array('user_login' => 'administrator', 'role' => 'administrator')); $delete_entry_delete_link = GravityView_Delete_Entry::get_delete_link($entry, $view->ID, $atts['post_id']); $atts['return'] = 'html'; $delete_link = $this->object->delete_shortcode($atts); $atts['action'] = 'delete'; $delete_link_backward_compat = $this->object->read_shortcode($atts); $this->assertEquals('<a onclick="return window.confirm('Are you sure you want to delete this entry? This cannot be undone.');" href="' . esc_url_raw($delete_entry_delete_link) . '">Delete Entry</a>', $delete_link, 'delete link'); $this->assertEquals($delete_link, $delete_link_backward_compat); $atts['return'] = 'url'; $delete_link_return_url = $this->object->delete_shortcode($atts); $this->assertEquals($delete_entry_delete_link, $delete_link_return_url, 'delete link URL only'); }
/** * @param array $atts { * @type string $view_id Define the ID for the View where the entry will * @type string $entry_id ID of the entry to edit. If undefined, uses the current entry ID * @type string $post_id ID of the base post or page to use for an embedded View * @type string $link_atts Whether to open Edit Entry link in a new window or the same window * @type string $return What should the shortcode return: link HTML (`html`) or the URL (`url`). Default: `html` * @type string $field_values Parameters to pass in to the Edit Entry form to prefill data. Uses the same format as Gravity Forms "Allow field to be populated dynamically" {@see https://www.gravityhelp.com/documentation/article/allow-field-to-be-populated-dynamically/ } * } * @param string $content * @param string $context * * @return string|void */ public function shortcode($atts = array(), $content = '', $context = 'gv_edit_entry') { // Make sure GV is loaded if (!class_exists('GravityView_frontend') || !class_exists('GravityView_View')) { return null; } $defaults = array('view_id' => 0, 'entry_id' => 0, 'post_id' => 0, 'link_atts' => '', 'return' => 'html', 'field_values' => ''); $settings = shortcode_atts($defaults, $atts, $context); if (empty($settings['view_id'])) { $view_id = GravityView_View::getInstance()->getViewId(); } else { $view_id = absint($settings['view_id']); } if (empty($view_id)) { do_action('gravityview_log_debug', __METHOD__ . ' A View ID was not defined'); return null; } $post_id = empty($settings['post_id']) ? $view_id : absint($settings['post_id']); $form_id = gravityview_get_form_id($view_id); $backup_entry_id = GravityView_frontend::getInstance()->getSingleEntry() ? GravityView_frontend::getInstance()->getSingleEntry() : GravityView_View::getInstance()->getCurrentEntry(); $entry_id = empty($settings['entry_id']) ? $backup_entry_id : absint($settings['entry_id']); if (empty($entry_id)) { do_action('gravityview_log_debug', __METHOD__ . ' No entry defined'); return null; } // By default, show only current user $user = wp_get_current_user(); if (!$user) { do_action('gravityview_log_debug', __METHOD__ . ' No user defined; edit entry requires logged in user'); return null; } $entry = $this->get_entry($entry_id, $form_id); // No search results if (false === $entry) { do_action('gravityview_log_debug', __METHOD__ . ' No entries match the entry ID defined', $entry_id); return null; } // Check permissions if (false === GravityView_Edit_Entry::check_user_cap_edit_entry($entry, $view_id)) { do_action('gravityview_log_debug', __METHOD__ . ' User does not have the capability to edit this entry: ' . $entry_id); return null; } $href = GravityView_Delete_Entry::get_delete_link($entry, $view_id, $post_id, $settings); // Get just the URL, not the tag if ('url' === $settings['return']) { return $href; } $link_text = empty($content) ? __('Delete Entry', 'gravityview') : $content; return gravityview_get_link($href, $link_text, $settings['link_atts']); }
/** * Get the URL for the entry. * * Uses the `post_id`, `view_id` params as defined in the shortcode attributes. * * @since 1.15 * * @param string|null $content Content inside shortcode, if defined * * @return string|boolean If URL is fetched, the URL to the entry link. If not found, returns false. */ private function get_url() { // if post_id is not defined, default to view_id $post_id = empty($this->settings['post_id']) ? $this->view_id : absint($this->settings['post_id']); switch ($this->settings['action']) { case 'edit': $url = GravityView_Edit_Entry::get_edit_link($this->entry, $this->view_id, $post_id); break; case 'delete': $url = GravityView_Delete_Entry::get_delete_link($this->entry, $this->view_id, $post_id); break; case 'read': default: $url = GravityView_API::entry_link($this->entry, $post_id); } $url = $this->maybe_add_field_values_query_args($url); return $url; }
<?php $gravityview_view = GravityView_View::getInstance(); $view_id = $gravityview_view->getViewId(); extract($gravityview_view->getCurrentField()); // Only show the link to logged-in users with the rigth caps. if (!GravityView_Delete_Entry::check_user_cap_delete_entry($entry, $field_settings)) { return; } $link_text = empty($field_settings['delete_link']) ? __('Delete Entry', 'gravityview') : $field_settings['delete_link']; $link_text = apply_filters('gravityview_entry_link', GravityView_API::replace_variables($link_text, $form, $entry)); $href = GravityView_Delete_Entry::get_delete_link($entry, $view_id); $attributes = array('onclick' => GravityView_Delete_Entry::get_confirm_dialog()); echo gravityview_get_link($href, $link_text, $attributes);