/**
  * 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&amp;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&amp;view=settings&amp;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&amp;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;
 }
Example #4
0
    /**
     * 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&rsquo;t forget to %scustomize the form settings%s.
					', 'gravityview'), '<strong>', '</strong>', '<a href="' . site_url('?gf_page=preview&amp;id=' . $connected_form) . '">', '</a>', '<code>[gravityform id="' . $connected_form . '" name="' . $form_name . '"]</code>', '<a href="' . admin_url('admin.php?page=gf_edit_forms&amp;id=' . $connected_form) . '">', '</a>', '<a href="' . admin_url('admin.php?page=gf_edit_forms&amp;view=settings&amp;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;
 }
Example #6
0
 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);
 }
Example #7
0
 /**
  *
  * 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];
 }