/** * Get HTML links relating to a connected form, like Edit, Entries, Settings, Preview * @param array|int $form Gravity Forms forms array, or the form ID * @param boolean $include_form_link Whether to include the bold name of the form in the output * @return string HTML links */ public static function get_connected_form_links($form, $include_form_link = true) { // Either the form is empty or the form ID is 0, not yet set. if (empty($form)) { return ''; } // The $form is passed as the form ID if (!is_array($form)) { $form = gravityview_get_form($form); } $form_id = $form['id']; $links = array(); if (GVCommon::has_cap('gravityforms_edit_forms')) { $form_url = admin_url(sprintf('admin.php?page=gf_edit_forms&id=%d', $form_id)); $form_link = '<strong class="gv-form-title">' . gravityview_get_link($form_url, $form['title'], 'class=row-title') . '</strong>'; $links[] = '<span>' . gravityview_get_link($form_url, __('Edit Form', 'gravityview')) . '</span>'; } else { $form_link = '<strong class="gv-form-title">' . esc_html($form['title']) . '</strong>'; } if (GVCommon::has_cap('gravityforms_view_entries')) { $entries_url = admin_url(sprintf('admin.php?page=gf_entries&id=%d', $form_id)); $links[] = '<span>' . gravityview_get_link($entries_url, __('Entries', 'gravityview')) . '</span>'; } if (GVCommon::has_cap(array('gravityforms_edit_settings', 'gravityview_view_settings'))) { $settings_url = admin_url(sprintf('admin.php?page=gf_edit_forms&view=settings&id=%d', $form_id)); $links[] = '<span>' . gravityview_get_link($settings_url, __('Settings', 'gravityview'), 'title=' . __('Edit settings for this form', 'gravityview')) . '</span>'; } if (GVCommon::has_cap(array("gravityforms_edit_forms", "gravityforms_create_form", "gravityforms_preview_forms"))) { $preview_url = site_url(sprintf('?gf_page=preview&id=%d', $form_id)); $links[] = '<span>' . gravityview_get_link($preview_url, __('Preview Form', 'gravityview'), 'title=' . __('Preview this form', 'gravityview')) . '</span>'; } $output = ''; if (!empty($include_form_link)) { $output .= $form_link; } /** * @filter `gravityview_connected_form_links` Modify the links shown in the Connected Form links * @since 1.6 * @param array $links Links to show * @param array $form Gravity Forms form array */ $links = apply_filters('gravityview_connected_form_links', $links, $form); $output .= '<div class="row-actions">' . implode(' | ', $links) . '</div>'; return $output; }
/** * Generate the script tags necessary for the Gravity Forms Merge Tag picker to work. * * @param mixed $curr_form Form ID * @return null|string Merge tags html; NULL if $curr_form isn't defined. */ public static function render_merge_tags_scripts($curr_form) { if (empty($curr_form)) { return NULL; } $form = gravityview_get_form($curr_form); $get_id_backup = isset($_GET['id']) ? $_GET['id'] : NULL; if (isset($form['id'])) { $form_script = 'var form = ' . GFCommon::json_encode($form) . ';'; // The `gf_vars()` method needs a $_GET[id] variable set with the form ID. $_GET['id'] = $form['id']; } else { $form_script = 'var form = new Form();'; } $output = '<script type="text/javascript" data-gv-merge-tags="1">' . $form_script . "\n" . GFCommon::gf_vars(false) . '</script>'; // Restore previous $_GET setting $_GET['id'] = $get_id_backup; return $output; }
/** * Get the HTML output for the entry list. * * @since 1.7.2 * * @param array $instance The settings for the particular instance of the widget. * * @return string */ private function get_output($instance) { $form_id = gravityview_get_form_id($instance['view_id']); $form = gravityview_get_form($form_id); $entries = $this->get_entries($instance, $form_id); /** * @since 1.6.1 * @var int $entry_link_post_id The ID to use as the parent post for the entry */ $entry_link_post_id = empty($instance['error_post_id']) && !empty($instance['post_id']) ? $instance['post_id'] : $instance['view_id']; /** * Generate list output * @since 1.7.2 */ $List = new GravityView_Entry_List($entries, $entry_link_post_id, $form, $instance['link_format'], $instance['after_link'], 'recent-entries-widget'); $output = $List->get_output(); /** * Modify the HTML before it's echo'd * @param string $output HTML to be displayed * @param array $instance Widget settings */ $output = apply_filters('gravityview/widget/recent-entries/output', $output, $instance); return $output; }
/** * Filter Admin messages * * @param array $messages Existing messages * @return array Messages with GravityView views! */ function post_updated_messages($messages, $bulk_counts = NULL) { global $post; $post_id = isset($_GET['post']) ? intval($_GET['post']) : (is_object($post) && isset($post->ID) ? $post->ID : NULL); // By default, there will only be one item being modified. // When in the `bulk_post_updated_messages` filter, there will be passed a number // of modified items that will override this array. $bulk_counts = is_null($bulk_counts) ? array('updated' => 1, 'locked' => 1, 'deleted' => 1, 'trashed' => 1, 'untrashed' => 1) : $bulk_counts; // If we're starting fresh, a new form was created. // We should let the user know this is the case. $start_fresh = get_post_meta($post_id, '_gravityview_start_fresh', true); $new_form_text = ''; if (!empty($start_fresh)) { // Get the form that was created $connected_form = gravityview_get_form_id($post_id); if (!empty($connected_form)) { $form = gravityview_get_form($connected_form); $form_name = esc_attr($form['title']); $image = self::get_floaty(); $new_form_text .= '<h3>' . $image . sprintf(__('A new form was created for this View: "%s"', 'gravityview'), $form_name) . '</h3>'; $new_form_text .= sprintf(__('%sThere are no entries for the new form, so the View will also be empty.%s To start collecting entries, you can add submissions through %sthe preview form%s and also embed the form on a post or page using this code: %s You can %sedit the form%s in Gravity Forms and the updated fields will be available here. Don’t forget to %scustomize the form settings%s. ', 'gravityview'), '<strong>', '</strong>', '<a href="' . site_url('?gf_page=preview&id=' . $connected_form) . '">', '</a>', '<code>[gravityform id="' . $connected_form . '" name="' . $form_name . '"]</code>', '<a href="' . admin_url('admin.php?page=gf_edit_forms&id=' . $connected_form) . '">', '</a>', '<a href="' . admin_url('admin.php?page=gf_edit_forms&view=settings&id=' . $connected_form) . '">', '</a>'); $new_form_text = wpautop($new_form_text); delete_post_meta($post_id, '_gravityview_start_fresh'); } } $messages['gravityview'] = array(0 => '', 1 => sprintf(__('View updated. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>'), 2 => sprintf(__('View updated. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>'), 3 => __('View deleted.', 'gravityview'), 4 => sprintf(__('View updated. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>'), 5 => isset($_GET['revision']) ? sprintf(__('View restored to revision from %s', 'gravityview'), wp_post_revision_title((int) $_GET['revision'], false)) : false, 6 => sprintf(__('View published. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>') . $new_form_text, 7 => sprintf(__('View saved. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>') . $new_form_text, 8 => __('View submitted.', 'gravityview'), 9 => sprintf(__('View scheduled for: %1$s.', 'gravityview'), date_i18n(__('M j, Y @ G:i', 'gravityview'), strtotime(isset($post->post_date) ? $post->post_date : NULL))) . $new_form_text, 10 => sprintf(__('View draft updated. %sView on website.%s', 'gravityview'), '<a href="' . get_permalink($post_id) . '">', '</a>'), 'updated' => _n('%s View updated.', '%s Views updated.', $bulk_counts['updated'], 'gravityview'), 'locked' => _n('%s View not updated, somebody is editing it.', '%s Views not updated, somebody is editing them.', $bulk_counts['locked'], 'gravityview'), 'deleted' => _n('%s View permanently deleted.', '%s Views permanently deleted.', $bulk_counts['deleted'], 'gravityview'), 'trashed' => _n('%s View moved to the Trash.', '%s Views moved to the Trash.', $bulk_counts['trashed'], 'gravityview'), 'untrashed' => _n('%s View restored from the Trash.', '%s Views restored from the Trash.', $bulk_counts['untrashed'], 'gravityview')); return $messages; }
/** * Override sorting per field * * Currently only modifies sorting ID when sorting by the full name. Sorts by first name. * Use the `gravityview/sorting/full-name` filter to override. * * @todo Filter from GravityView_Field * @since 1.7.4 * * @param int|string $sort_field_id Field used for sorting (`id` or `1.2`) * @param int $form_id GF Form ID * * @return string Possibly modified sorting ID */ private static function _override_sorting_id_by_field_type($sort_field_id, $form_id) { $form = gravityview_get_form($form_id); $sort_field = GFFormsModel::get_field($form, $sort_field_id); switch ($sort_field['type']) { case 'address': // Sorting by full address if (floatval($sort_field_id) === floor($sort_field_id)) { /** * Override how to sort when sorting address * * @since 1.8 * * @param string $address_part `street`, `street2`, `city`, `state`, `zip`, or `country` (default: `city`) * @param string $sort_field_id Field used for sorting * @param int $form_id GF Form ID */ $address_part = apply_filters('gravityview/sorting/address', 'city', $sort_field_id, $form_id); switch (strtolower($address_part)) { case 'street': $sort_field_id .= '.1'; break; case 'street2': $sort_field_id .= '.2'; break; default: case 'city': $sort_field_id .= '.3'; break; case 'state': $sort_field_id .= '.4'; break; case 'zip': $sort_field_id .= '.5'; break; case 'country': $sort_field_id .= '.6'; break; } } break; case 'name': // Sorting by full name, not first, last, etc. if (floatval($sort_field_id) === floor($sort_field_id)) { /** * @filter `gravityview/sorting/full-name` Override how to sort when sorting full name. * @since 1.7.4 * @param[in,out] string $name_part Sort by `first` or `last` (default: `first`) * @param[in] string $sort_field_id Field used for sorting * @param[in] int $form_id GF Form ID */ $name_part = apply_filters('gravityview/sorting/full-name', 'first', $sort_field_id, $form_id); if ('last' === strtolower($name_part)) { $sort_field_id .= '.6'; } else { $sort_field_id .= '.3'; } } break; case 'list': $sort_field_id = false; break; case 'time': /** * @filter `gravityview/sorting/time` Override how to sort when sorting time * @see GravityView_Field_Time * @since 1.14 * @param[in,out] string $name_part Field used for sorting * @param[in] int $form_id GF Form ID */ $sort_field_id = apply_filters('gravityview/sorting/time', $sort_field_id, $form_id); break; } return $sort_field_id; }
static function get_field_filters($post_id) { $form_id = gravityview_get_form_id($post_id); $form = gravityview_get_form($form_id); // Fixes issue on Views screen when deleting a view if (empty($form)) { return; } $field_filters = GFCommon::get_field_filter_settings($form); if ($approved_column = GravityView_Admin_ApproveEntries::get_approved_column($form)) { $approved_column = intval(floor($approved_column)); } // Add currently logged in user option foreach ($field_filters as &$filter) { // Add negative match to approval column if ($approved_column && $filter['key'] === $approved_column) { $filter['operators'][] = 'isnot'; continue; } // Gravity Forms already creates a "User" option. // We don't care about specific user, just the logged in status. if ($filter['key'] === 'created_by') { // Update the default label to be more descriptive $filter['text'] = esc_attr__('Created By', 'gravity-view-advanced-filter'); $current_user_filters = array(array('text' => __('Logged-in User (disabled for Admins)', 'gravity-view-advanced-filter'), 'value' => 'created_by_or_admin'), array('text' => __('Logged-in User', 'gravity-view-advanced-filter'), 'value' => 'created_by')); foreach ($current_user_filters as $user_filter) { // Add to the beginning on the value options array_unshift($filter['values'], $user_filter); } } } $init_field_id = 0; $init_field_operator = "contains"; $default_init_filter_vars = array("mode" => "all", "filters" => array(array("field" => $init_field_id, "operator" => $init_field_operator, "value" => ''))); $view_filter_vars = self::get_view_filter_vars($post_id, true); $init_filter_vars = !empty($view_filter_vars) ? $view_filter_vars : $default_init_filter_vars; /** * allow field filters manipulation * @param array $field_filters configured filters */ $field_filters = apply_filters('gravityview/adv_filter/field_filters', $field_filters, $post_id); return array('field_filters' => $field_filters, 'init_filter_vars' => $init_filter_vars); }
/** * * Add a view to the views array * * @param int|array $view_id View ID or array of View IDs * @param array|string $atts Combine other attributes (eg. from shortcode) with the view settings (optional) * @return type */ function add_view($view_id, $atts = NULL) { // Handle array of IDs if (is_array($view_id)) { foreach ($view_id as $id) { $this->add_view($id, $atts); } return $this->views; } // The view has been set already; returning stored view. if (!empty($this->views[$view_id])) { do_action('gravityview_log_debug', sprintf('GravityView_View_Data[add_view] Returning; View #%s already exists.', $view_id)); return $this->views[$view_id]; } if (!$this->view_exists($view_id)) { do_action('gravityview_log_debug', sprintf('GravityView_View_Data[add_view] Returning; View #%s does not exist.', $view_id)); return false; } $form_id = gravityview_get_form_id($view_id); if (empty($form_id)) { do_action('gravityview_log_debug', sprintf('GravityView_View_Data[add_view] Returning; Post ID #%s does not have a connected form.', $view_id)); return false; } // Get the settings for the View ID $view_settings = gravityview_get_template_settings($view_id); do_action('gravityview_log_debug', sprintf('GravityView_View_Data[add_view] Settings pulled in from View #%s', $view_id), $view_settings); // Merge the view settings with the defaults $view_defaults = wp_parse_args($view_settings, self::get_default_args()); do_action('gravityview_log_debug', 'GravityView_View_Data[add_view] View Defaults after merging View Settings with the default args.', $view_defaults); if (!empty($atts) && is_array($atts)) { do_action('gravityview_log_debug', 'GravityView_View_Data[add_view] $atts before merging with the $view_defaults', $atts); // Get the settings from the shortcode and merge them with defaults. $atts = shortcode_atts($view_defaults, $atts); do_action('gravityview_log_debug', 'GravityView_View_Data[add_view] $atts after merging with the $view_defaults', $atts); } else { // If there are no passed $atts, the defaults will be used. $atts = $view_defaults; } unset($atts['id'], $view_defaults, $view_settings); $data = array('id' => $view_id, 'view_id' => $view_id, 'form_id' => $form_id, 'template_id' => gravityview_get_template_id($view_id), 'atts' => $atts, 'fields' => $this->get_fields($view_id), 'widgets' => get_post_meta($view_id, '_gravityview_directory_widgets', true), 'form' => gravityview_get_form($form_id)); do_action('gravityview_log_debug', sprintf('GravityView_View_Data[add_view] View #%s being added.', $view_id), $data); $this->views[$view_id] = $data; return $this->views[$view_id]; }