GravityView  2.17
The best, easiest way to display Gravity Forms entries on your website.
class-gv-entry-multi.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 multi-entry Entry implementation.
11  *
12  * An entry that is really a join of 2+ entries.
13  * Used for JOINS in the \GF_Query component.
14  */
15 class Multi_Entry extends Entry implements \ArrayAccess {
16  /**
17  * The entries in this form.
18  */
19  public $entries = array();
20 
21  /**
22  * @var string The identifier of the backend used for this entry.
23  * @api
24  * @since 2.0
25  */
26  public static $backend = 'multi';
27 
28  /**
29  * Initialization.
30  */
31  private function __construct() {
32  }
33 
34  /**
35  * Construct a multientry from an array of entries.
36  *
37  * @param \GV\Entry[] $entries The entries.
38  *
39  * @return \GV\Multi_Entry A multientry object.
40  */
41  public static function from_entries( $entries ) {
42  $_entry = new self();
43  foreach ( $entries as &$entry ) {
44  if ( ! $entry instanceof Entry ) {
45  continue;
46  }
47  $_entry->entries[ $entry['form_id'] ] = &$entry;
48  }
49  return $_entry;
50  }
51 
52  /**
53  * Fake legacy template support.
54  *
55  * Take the first entry and set it as the current entry.
56  * But support nesting.
57  *
58  * @return array See \GV\Entry::as_entry()
59  */
60  public function as_entry() {
61  $_entry = array();
62 
63  if ( $entry = reset( $this->entries ) ) {
64  $_entry = $entry->as_entry();
65 
66  foreach ( $this->entries as $entry ) {
67  $entry = $entry->as_entry();
68  $_entry['_multi'][ $entry['form_id'] ] = $entry;
69  }
70  }
71 
72  return $_entry;
73  }
74 
75  /**
76  * Return the link to this multi entry in the supplied context.
77  *
78  * @api
79  * @since 2.2
80  *
81  * @param \GV\View|null $view The View context.
82  * @param \GV\Request $request The Request (current if null).
83  * @param boolean $track_directory Keep the housing directory arguments intact (used for breadcrumbs, for example). Default: true.
84  *
85  * @return string The permalink to this entry.
86  */
87  public function get_permalink( \GV\View $view = null, \GV\Request $request = null, $track_directory = true ) {
88  $slugs = array();
89  add_filter( 'gravityview/entry/slug', $callback = function( $slug ) use ( &$slugs ) {
90  $slugs[] = $slug;
91  return implode( ',', $slugs );
92  }, 10, 1 );
93 
94  foreach ( $this->entries as $entry ) {
95  $permalink = call_user_func_array( array( $entry, __FUNCTION__ ), func_get_args() );
96  }
97 
98  remove_filter( 'gravityview/entry/slug', $callback );
99 
100  return $permalink;
101  }
102 
103  /**
104  * ArrayAccess compatibility layer with a Gravity Forms entry array.
105  *
106  * @internal
107  * @deprecated
108  * @since 2.0
109  * @return bool Whether the offset exists or not.
110  */
111  #[\ReturnTypeWillChange]
112  public function offsetExists( $offset ) {
113  return isset( $this->entries[ $offset ] );
114  }
115 
116  /**
117  * ArrayAccess compatibility layer with a Gravity Forms entry array.
118  *
119  * Maps the old keys to the new data;
120  *
121  * @internal
122  * @deprecated
123  * @since 2.0
124  *
125  * @return mixed The value of the requested entry data.
126  */
127  #[\ReturnTypeWillChange]
128  public function offsetGet( $offset ) {
129  if ( ! $this->offsetExists( $offset ) ) {
130  return null;
131  }
132  return $this->entries[ $offset ];
133  }
134 
135  /**
136  * ArrayAccess compatibility layer with a Gravity Forms entry array.
137  *
138  * @internal
139  * @deprecated
140  * @since 2.0
141  *
142  * @return void
143  */
144  #[\ReturnTypeWillChange]
145  public function offsetSet( $offset, $value ) {
146  gravityview()->log->error( 'The underlying multi entry is immutable. This is a \GV\Entry object and should not be accessed as an array.' );
147  }
148 
149  /**
150  * ArrayAccess compatibility layer with a Gravity Forms entry array.
151  *
152  * @internal
153  * @deprecated
154  * @since 2.0
155  * @return void
156  */
157  #[\ReturnTypeWillChange]
158  public function offsetUnset( $offset ) {
159  gravityview()->log->error( 'The underlying multi entry is immutable. This is a \GV\Entry object and should not be accessed as an array.' );
160  }
161 }
If this file is called directly, abort.
__construct()
Initialization.
get_permalink(\GV\View $view=null, \GV\Request $request=null, $track_directory=true)
Return the link to this multi entry in the supplied context.
offsetGet( $offset)
ArrayAccess compatibility layer with a Gravity Forms entry array.
offsetSet( $offset, $value)
ArrayAccess compatibility layer with a Gravity Forms entry array.
offsetExists( $offset)
ArrayAccess compatibility layer with a Gravity Forms entry array.
as_entry()
Fake legacy template support.
$entries
offsetUnset( $offset)
ArrayAccess compatibility layer with a Gravity Forms entry array.
If this file is called directly, abort.
static from_entries( $entries)
Construct a multientry from an array of entries.
If this file is called directly, abort.
If this file is called directly, abort.
gravityview()
The main GravityView wrapper function.
$entry
Definition: notes.php:27