GravityView  2.1.1
The best, easiest way to display Gravity Forms entries on your website.
class-gv-entry.php
Go to the documentation of this file.
1 <?php
2 namespace GV;
3 
4 /** If this file is called directly, abort. */
5 if ( ! defined( 'GRAVITYVIEW_DIR' ) ) {
6  die();
7 }
8 
9 /**
10  * The base \GV\Entry class.
11  *
12  * Contains all entry data and some processing and logic rules.
13  */
14 abstract class Entry {
15 
16  /**
17  * @var string The identifier of the backend used for this entry.
18  * @api
19  * @since 2.0
20  */
21  public static $backend = null;
22 
23  /**
24  * @var int The ID for this entry.
25  *
26  * @api
27  * @since 2.0
28  */
29  public $ID = null;
30 
31  /**
32  * @var mixed The backing entry.
33  */
34  protected $entry;
35 
36  /**
37  * Adds the necessary rewrites for single Entries.
38  *
39  * @internal
40  * @return void
41  */
42  public static function add_rewrite_endpoint() {
43  global $wp_rewrite;
44 
45  $endpoint = self::get_endpoint_name();
46 
47  /** Let's make sure the endpoint array is not polluted. */
48  if ( in_array( array( EP_ALL, $endpoint, $endpoint ), $wp_rewrite->endpoints ) ) {
49  return;
50  }
51 
52  add_rewrite_endpoint( $endpoint, EP_PAGES | EP_PERMALINK );
53  }
54 
55  /**
56  * Return the endpoint name for a single Entry.
57  *
58  * Also used as the query_var for the time being.
59  *
60  * @internal
61  * @return string The name. Default: "entry"
62  */
63  public static function get_endpoint_name() {
64  /**
65  * @filter `gravityview_directory_endpoint` Change the slug used for single entries
66  * @param[in,out] string $endpoint Slug to use when accessing single entry. Default: `entry`
67  */
68  $endpoint = apply_filters( 'gravityview_directory_endpoint', 'entry' );
69 
70  return sanitize_title( $endpoint );
71  }
72 
73  /**
74  * Construct a \GV\Entry instance by ID.
75  *
76  * @param int|string $entry_id The internal entry ID.
77  *
78  * @api
79  * @since 2.0
80  * @return \GV\Entry|null An instance of this entry or null if not found.
81  */
82  public static function by_id( $entry_id ) {
83  return null;
84  }
85 
86  /**
87  * Return the backing entry object.
88  *
89  * @return array The backing entry object.
90  */
91  public function as_entry() {
92  return $this->entry;
93  }
94 
95  /**
96  * Return the link to this entry in the supplied context.
97  *
98  * @api
99  * @since 2.0
100  *
101  * @param \GV\View|null $view The View context.
102  * @param \GV\Request $request The Request (current if null).
103  * @param boolean $track_directory Keep the housing directory arguments intact (used for breadcrumbs, for example). Default: true.
104  *
105  * @return string The permalink to this entry.
106  */
107  public function get_permalink( \GV\View $view = null, \GV\Request $request = null, $track_directory = true ) {
108  if ( is_null( $request ) ) {
109  $request = &gravityview()->request;
110  }
111 
112  global $post;
113 
114  $args = array();
115 
116  $view_id = is_null ( $view ) ? null : $view->ID;
117 
118  $permalink = null;
119 
120  /** This is not a regular view. */
121  if ( ! $request->is_view() ) {
122 
123  /** Must be an embed of some sort. */
124  if ( is_object( $post ) && is_numeric( $post->ID ) ) {
125  $permalink = get_permalink( $post->ID );
126 
127  $view_collection = View_Collection::from_post( $post );
128 
129  if( 1 < $view_collection->count() ) {
130  $args['gvid'] = $view_id;
131  }
132  }
133  }
134 
135  /** Fallback to regular view base. */
136  if ( is_null( $permalink ) ) {
137  $permalink = get_permalink( $view_id );
138  }
139 
140  /**
141  * @filter `gravityview_directory_link` Modify the URL to the View "directory" context
142  * @since 1.19.4
143  * @param string $link URL to the View's "directory" context (Multiple Entries screen)
144  * @param int $post_id ID of the post to link to. If the View is embedded, it is the post or page ID
145  */
146  $permalink = apply_filters( 'gravityview_directory_link', $permalink, $request->is_view() ? $view_id : ( $post ? $post->ID : null ) );
147 
148  $entry_endpoint_name = \GV\Entry::get_endpoint_name();
149  $entry_slug = \GravityView_API::get_entry_slug( $this->ID, $this->as_entry() );
150 
151  /** Assemble the permalink. */
152  if ( get_option( 'permalink_structure' ) && ! is_preview() ) {
153  /**
154  * Make sure the $directory_link doesn't contain any query otherwise it will break when adding the entry slug.
155  * @since 1.16.5
156  */
157  $link_parts = explode( '?', $permalink );
158 
159  $query = ! empty( $link_parts[1] ) ? '?' . $link_parts[1] : '';
160 
161  $permalink = trailingslashit( $link_parts[0] ) . $entry_endpoint_name . '/'. $entry_slug .'/' . $query;
162  } else {
163  $args[ $entry_endpoint_name ] = $entry_slug;
164  }
165 
166  if ( $track_directory ) {
167  if ( ! empty( $_GET['pagenum'] ) ) {
168  $args['pagenum'] = intval( $_GET['pagenum'] );
169  }
170 
171  if ( $sort = Utils::_GET( 'sort' ) ) {
172  $args['sort'] = $sort;
173  $args['dir'] = Utils::_GET( 'dir' );
174  }
175  }
176 
177  $permalink = add_query_arg( $args, $permalink );
178 
179  /**
180  * @filter `gravityview/entry/permalink` The permalink of this entry.
181  * @since 2.0
182  * @param string $permalink The permalink.
183  * @param \GV\Entry $entry The entry we're retrieving it for.
184  * @param \GV\View|null $view The view context.
185  * @param \GV\Request $reqeust The request context.
186  */
187  return apply_filters( 'gravityview/entry/permalink', $permalink, $this, $view, $request );
188  }
189 }
If this file is called directly, abort.
get_permalink(\GV\View $view=null, \GV\Request $request=null, $track_directory=true)
Return the link to this entry in the supplied context.
gravityview()
Definition: _stubs.php:26
as_entry()
Return the backing entry object.
static get_endpoint_name()
Return the endpoint name for a single Entry.
static by_id( $entry_id)
Construct a instance by ID.
If this file is called directly, abort.
static get_entry_slug( $id_or_string, $entry=array())
Get the entry slug for the entry.
Definition: class-api.php:497
global $post
If this file is called directly, abort.
$entry_slug
Definition: notes.php:30
$entry
Definition: notes.php:27
$entry
static add_rewrite_endpoint()
Adds the necessary rewrites for single Entries.