GravityView  2.1.1
The best, easiest way to display Gravity Forms entries on your website.
class-gv-renderer-view.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 \GV\View_Renderer class.
11  *
12  * Houses some preliminary \GV\View rendering functionality.
13  */
14 class View_Renderer extends Renderer {
15 
16  /**
17  * Renders a \GV\View instance.
18  *
19  * @param \GV\View $view The View instance to render.
20  * @param \GV\Request $request The request context we're currently in. Default: `gravityview()->request`
21  *
22  * @api
23  * @since 2.0
24  *
25  * @return string The rendered View.
26  */
27  public function render( View $view, Request $request = null ) {
28  if ( is_null( $request ) ) {
29  $request = &gravityview()->request;
30  }
31 
32  if ( ! in_array( get_class( $request ), array( 'GV\Frontend_Request', 'GV\Mock_Request', 'GV\REST\Request' ) ) ) {
33  gravityview()->log->error( 'Renderer unable to render View in {request_class} context', array( 'request_class' => get_class( $request ) ) );
34  return null;
35  }
36 
37  /**
38  * @filter `gravityview_template_slug_{$template_id}` Modify the template slug about to be loaded in directory views.
39  * @since 1.6
40  * @param deprecated
41  * @see The `gravityview_get_template_id` filter
42  * @param string $slug Default: 'table'
43  * @param string $view The current view context: directory.
44  */
45  $template_slug = apply_filters( 'gravityview_template_slug_' . $view->settings->get( 'template' ), 'table', 'directory' );
46 
47  /**
48  * Figure out whether to get the entries or not.
49  *
50  * Some contexts don't need initial entries, like the DataTables directory type.
51  *
52  * @filter `gravityview_get_view_entries_{$template_slug}` Whether to get the entries or not.
53  * @param boolean $get_entries Get entries or not, default: true.
54  */
55  $get_entries = apply_filters( 'gravityview_get_view_entries_' . $template_slug, true );
56 
57  $hide_until_searched = $view->settings->get( 'hide_until_searched' );
58 
59  /**
60  * Hide View data until search is performed.
61  */
62  $get_entries = ( $hide_until_searched && ! $request->is_search() ) ? false : $get_entries;
63 
64  /**
65  * Fetch entries for this View.
66  */
67  if ( $get_entries ) {
68  $entries = $view->get_entries( $request );
69  } else {
70  $entries = new \GV\Entry_Collection();
71  }
72 
73  /**
74  * Load a legacy override template if exists.
75  */
76  $override = new \GV\Legacy_Override_Template( $view, null, null, $request );
77  foreach ( array( 'header', 'body', 'footer' ) as $part ) {
78  if ( ( $path = $override->get_template_part( $template_slug, $part ) ) && strpos( $path, '/deprecated' ) === false ) {
79  /**
80  * We have to bail and call the legacy renderer. Crap!
81  */
82  gravityview()->log->notice( 'Legacy templates detected in theme {path}', array( 'path' => $path ) );
83 
84  /**
85  * Show a warning at the top, if View is editable by the user.
86  */
87  add_action( 'gravityview_before', $this->legacy_template_warning( $view, $path ) );
88 
89  return $override->render( $template_slug );
90  }
91  }
92 
93  /**
94  * @filter `gravityview/template/view/class` Filter the template class that is about to be used to render the view.
95  * @since 2.0
96  * @param string $class The chosen class - Default: \GV\View_Table_Template.
97  * @param \GV\View $view The view about to be rendered.
98  * @param \GV\Request $request The associated request.
99  */
100  $class = apply_filters( 'gravityview/template/view/class', sprintf( '\GV\View_%s_Template', ucfirst( $template_slug ) ), $view, $request );
101  if ( ! $class || ! class_exists( $class ) ) {
102  gravityview()->log->notice( '{template_class} not found, falling back to legacy', array( 'template_class' => $class ) );
103  $class = '\GV\View_Legacy_Template';
104  }
105  $template = new $class( $view, $entries, $request );
106 
107  /** @todo Deprecate this! */
108  $parameters = \GravityView_frontend::get_view_entries_parameters( $view->settings->as_atts(), $view->form->ID );
109 
110  global $post;
111 
112  /** Mock the legacy state for the widgets and whatnot */
113  \GV\Mocks\Legacy_Context::push( array_merge( array(
114  'view' => $view,
115  'entries' => $entries,
116  'request' => $request,
117  ), empty( $parameters ) ? array() : array(
118  'paging' => $parameters['paging'],
119  'sorting' => $parameters['sorting'],
120  ), empty( $post ) ? array() : array(
121  'post' => $post,
122  ) ) );
123 
124  add_action( 'gravityview/template/after', $view_id_output = function( $context ) {
125  printf( '<input type="hidden" class="gravityview-view-id" value="%d">', $context->view->ID );
126  } );
127 
128  ob_start();
129  $template->render();
130 
131  remove_action( 'gravityview/template/after', $view_id_output );
132 
134  return ob_get_clean();
135  }
136 }
If this file is called directly, abort.
If this file is called directly, abort.
$class
$entries
gravityview()
Definition: _stubs.php:26
render(View $view, Request $request=null)
Renders a instance.
static pop()
Restores last saved state and context.
Definition: _mocks.php:409
static push( $configuration)
Set the state depending on the provided configuration.
Definition: _mocks.php:399
$template
The entry loop for the list output.
If this file is called directly, abort.
global $post
If this file is called directly, abort.
get_entries( $request=null)
Retrieve the entries for the current view and request.