GravityView  2.17
The best, easiest way to display Gravity Forms entries on your website.
class-gv-template-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  * Load up the Gamajo Template Loader.
11  *
12  * @see https://github.com/GaryJones/Gamajo-Template-Loader
13  */
14 if ( ! class_exists( '\GV\Gamajo_Template_Loader' ) ) {
15  require gravityview()->plugin->dir( 'future/lib/class-gamajo-template-loader.php' );
16 }
17 
18 /**
19  * The Entry Template class .
20  *
21  * Renders a \GV\Entry using a \GV\Entry_Renderer.
22  */
23 abstract class Entry_Template extends Template {
24  /**
25  * Prefix for filter names.
26  * @var string
27  */
28  protected $filter_prefix = 'gravityview/template/entries';
29 
30  /**
31  * Directory name where custom templates for this plugin should be found in the theme.
32  * @var string
33  */
34  protected $theme_template_directory = 'gravityview/entries/';
35 
36  /**
37  * Directory name where the default templates for this plugin are found.
38  * @var string
39  */
40  protected $plugin_template_directory = 'templates/entries/';
41 
42  /**
43  * @var \GV\Entry The entry that need to be rendered.
44  */
45  public $entry;
46 
47  /**
48  * @var \GV\View The view context.
49  */
50  public $view;
51 
52  /**
53  * @var \GV\Request The request context.
54  */
55  public $request;
56 
57  /**
58  * @var string The template slug to be loaded (like "table", "list")
59  */
60  public static $slug;
61 
62  /**
63  * Initializer.
64  *
65  * @param \GV\View $view The View connected to this template.
66  * @param \GV\Entry_Collection $entries A collection of entries for this view.
67  * @param \GV\Request $request The request context.
68  */
69  public function __construct( Entry $entry, View $view, Request $request ) {
70  $this->entry = $entry;
71  $this->view = $view;
72  $this->request = $request;
73 
74  /** Add granular overrides. */
75  add_filter( $this->filter_prefix . '_get_template_part', array( $this, 'add_id_specific_templates' ), 10, 3 );
76 
77  parent::__construct();
78  }
79 
80  public function __destruct() {
81  remove_filter( $this->filter_prefix . '_get_template_part', array( $this, 'add_id_specific_templates' ) );
82  }
83 
84  /**
85  * Enable granular template overrides based on current post, view, form, etc.
86  *
87  * The loading order is:
88  *
89  * - post-[ID of post or page where view is embedded]-view-[View ID]-entry-[Entry ID]-table-footer.php
90  * - post-[ID of post or page where view is embedded]-entry-[Entry ID]-table-footer.php
91  * - post-[ID of post or page where view is embedded]-view-[View ID]-table-footer.php
92  * - post-[ID of post or page where view is embedded]-table-footer.php
93  * - view-[View ID]-entry-[Entry ID]-table-footer.php
94  * - form-[Form ID]-entry-[Entry ID]-table-footer.php
95  * - view-[View ID]-table-footer.php
96  * - form-[Form ID]-table-footer.php
97  * - entry-[Entry ID]-table-footer.php
98  * - table-footer.php
99  *
100  * @see Gamajo_Template_Loader::get_template_file_names() Where the filter is
101  * @param array $templates Existing list of templates.
102  * @param string $slug Name of the template base, example: `table`, `list`, `datatables`, `map`
103  * @param string $name Name of the template part, example: `body`, `footer`, `head`, `single`
104  *
105  * @return array $templates Modified template array, merged with existing $templates values
106  */
107  public function add_id_specific_templates( $templates, $slug, $name ) {
108 
109  $specifics = array();
110 
111  list( $slug_dir, $slug_name ) = self::split_slug( $slug, $name );
112 
113  global $post;
114 
115  if ( ! $this->request->is_view( false ) && $post ) {
116  $specifics []= sprintf( '%spost-%d-view-%d-entry-%d-%s.php', $slug_dir, $post->ID, $this->view->ID, $this->entry->ID, $slug_name );
117  $specifics []= sprintf( '%spost-%d-entry-%d-%s.php', $slug_dir, $post->ID, $this->entry->ID, $slug_name );
118  $specifics []= sprintf( '%spost-%d-view-%d-%s.php', $slug_dir, $post->ID, $this->view->ID, $slug_name );
119  $specifics []= sprintf( '%spost-%d-%s.php', $slug_dir, $post->ID, $slug_name );
120  }
121 
122  $specifics []= sprintf( '%sview-%d-entry-%d-%s.php', $slug_dir, $this->view->ID, $this->entry->ID, $slug_name );
123  $specifics []= sprintf( '%sform-%d-entry-%d-%s.php', $slug_dir, $this->view->form->ID, $this->entry->ID, $slug_name );
124  $specifics []= sprintf( '%sview-%d-%s.php', $slug_dir, $this->view->ID, $slug_name );
125  $specifics []= sprintf( '%sform-%d-%s.php', $slug_dir, $this->view->form->ID, $slug_name );
126 
127  $specifics []= sprintf( '%sentry-%d-%s.php', $slug_dir, $this->entry->ID, $slug_name );
128 
129  return array_merge( $specifics, $templates );
130  }
131 
132  /**
133  * Output some HTML.
134  *
135  * @return void
136  */
137  public function render() {
138  $context = Template_Context::from_template( $this );
139 
140  /**
141  * Make various pieces of data available to the template
142  * under the $gravityview scoped variable.
143  *
144  * @filter `gravityview/template/entry/context`
145  * @param \GV\Template_Context $context The context for this template.
146  * @param \GV\Entry_Template $template The current template.
147  * @since 2.0
148  */
149  $this->push_template_data( apply_filters( 'gravityview/template/entry/context', $context, $this ), 'gravityview' );
150 
151  /** Load the template. */
152  $this->get_template_part( static::$slug );
153  $this->pop_template_data( 'gravityview' );
154  }
155 
156  /**
157  * Fetch the back link label for an entry context.
158  *
159  * @param boolean $do_replace Whether to perform merge tag replacements, etc.
160  *
161  * @see `gravityview/template/links/back/label` filter
162  *
163  * @return string The link label
164  */
165  public function get_back_label( $do_replace = true ) {
166  if ( ! $this->view ) {
167  return '';
168  }
169 
170  $back_link_label = $this->view->settings->get( 'back_link_label', null );
171 
172  if ( $do_replace ) {
173  $back_link_label = \GravityView_API::replace_variables( $back_link_label, Utils::get( $this->view, 'form/form' ), $this->entry->as_entry() );
174  return do_shortcode( $back_link_label );
175  }
176  return $back_link_label;
177  }
178 }
179 
180 /** Load implementations. */
181 require gravityview()->plugin->dir( 'future/includes/class-gv-template-entry-table.php' );
182 require gravityview()->plugin->dir( 'future/includes/class-gv-template-entry-list.php' );
183 require gravityview()->plugin->dir( 'future/includes/class-gv-template-entry-legacy.php' );
If this file is called directly, abort.
If this file is called directly, abort.
$entry
__destruct()
render()
Output some HTML.
$templates
global $post
Definition: delete-entry.php:7
add_id_specific_templates( $templates, $slug, $name)
Enable granular template overrides based on current post, view, form, etc.
__construct(Entry $entry, View $view, Request $request)
Initializer.
static $slug
static replace_variables( $text, $form=array(), $entry=array(), $url_encode=false, $esc_html=true, $nl2br=true, $format='html', $aux_data=array())
Alias for GravityView_Merge_Tags::replace_variables()
Definition: class-api.php:118
If this file is called directly, abort.
If this file is called directly, abort.
get_back_label( $do_replace=true)
Fetch the back link label for an entry context.
If this file is called directly, abort.
gravityview()
The main GravityView wrapper function.
$request
$entry
Definition: notes.php:27
$view