PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.0.2
JetFormBuilder — Dynamic Blocks Form Builder v3.0.2
3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.10 2.1.11 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.0 3.0.0.1 3.0.0.2 3.0.0.3 3.0.1 3.0.1.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.0.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.3.1 3.3.4 3.3.4.1 3.3.4.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.5.1 3.4.5.2 3.4.6 3.4.7 3.4.7.1 3.5.0 3.5.1 3.5.1.1 3.5.1.2 3.5.2 3.5.2.1 3.5.3 3.5.4 3.5.5 3.5.6 3.5.6.1 3.5.6.2 3.5.6.3 3.6.0
jetformbuilder / includes / admin / single-pages / base-single-page.php
jetformbuilder / includes / admin / single-pages Last commit date
actions 3 years ago meta-boxes 3 years ago meta-containers 3 years ago base-page-updater.php 3 years ago base-single-page.php 3 years ago
base-single-page.php
152 lines
1 <?php
2
3
4 namespace Jet_Form_Builder\Admin\Single_Pages;
5
6 use Jet_Form_Builder\Admin\Admin_Page_Interface;
7 use Jet_Form_Builder\Admin\Admin_Page_Trait;
8 use Jet_Form_Builder\Admin\Exceptions\Not_Found_Page_Exception;
9 use Jet_Form_Builder\Admin\Notices\With_Notices_Trait;
10 use Jet_Form_Builder\Admin\Pages\Base_Page;
11 use Jet_Form_Builder\Admin\Pages\Pages_Manager;
12 use Jet_Form_Builder\Admin\Single_Pages\Meta_Containers\Base_Meta_Container;
13 use Jet_Form_Builder\Classes\Arrayable\Array_Convert_Once;
14 use Jet_Form_Builder\Classes\Arrayable\Array_Tools;
15 use Jet_Form_Builder\Classes\Repository\Repository_Item_Instance_Trait;
16 use Jet_Form_Builder\Classes\Theme\With_Theme_Info;
17 use Jet_Form_Builder\Db_Queries\Execution_Builder;
18
19 abstract class Base_Single_Page implements Admin_Page_Interface, Repository_Item_Instance_Trait {
20
21 use Admin_Page_Trait;
22 use With_Theme_Info;
23
24 protected $id;
25 protected $storage;
26
27 /** @var Base_Meta_Container[] */
28 protected $containers = array();
29
30 abstract public function parent_slug(): string;
31
32 public function __construct() {
33 $this->storage = new Array_Convert_Once();
34 }
35
36 public function rep_item_id() {
37 return $this->parent_slug();
38 }
39
40 /**
41 * @return Base_Meta_Container[]
42 */
43 public function meta_containers(): array {
44 return array();
45 }
46
47
48 /**
49 * @return Base_Single_Page
50 * @throws Not_Found_Page_Exception
51 */
52 public function make(): Base_Single_Page {
53 $id = $this->query_id();
54
55 $this->set_id( $id )->query_config();
56
57 return $this;
58 }
59
60 public function query_id(): int {
61 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
62 return absint( $_GET['item_id'] ?? 0 );
63 }
64
65
66 /**
67 * @param int $id
68 *
69 * @return Base_Single_Page
70 * @throws Not_Found_Page_Exception
71 */
72 public function set_id( int $id ): Base_Single_Page {
73 if ( ! $id ) {
74 throw new Not_Found_Page_Exception( 'Item id is empty: ' . $id . ' in ' . static::class );
75 }
76 $this->id = $id;
77
78 return $this;
79 }
80
81 /**
82 * @return array
83 */
84 public function page_config(): array {
85 return array(
86 'title' => $this->title(),
87 'containers' => Array_Tools::to_array( $this->get_prepared_containers() ),
88 'actions' => Array_Tools::to_array( $this->get_actions() ),
89 );
90 }
91
92 /**
93 * @return Base_Meta_Container[]
94 */
95 public function get_prepared_containers(): array {
96 if ( count( $this->containers ) ) {
97 return $this->containers;
98 }
99
100 /** @var Base_Meta_Container[] $containers */
101 $containers = apply_filters( "jet-form-builder/page-containers/{$this->slug()}", $this->meta_containers() );
102
103 foreach ( $containers as $index => $container ) {
104 $this->containers[] = $container->set_index( $index );
105 }
106
107 return $this->containers;
108 }
109
110 /**
111 * @return null|\Generator
112 */
113 public function get_migrations(): \Generator {
114 foreach ( $this->get_prepared_containers() as $container ) {
115 yield from $container->get_migrations();
116 }
117 }
118
119 public function slug(): string {
120 return $this->parent_slug() . '-single';
121 }
122
123 /**
124 * Returns current page url
125 *
126 * @param array $query_args
127 *
128 * @return string
129 */
130 public function get_url( $query_args = array() ): string {
131 return $this->get_parent()->get_url(
132 array_merge(
133 array( 'item_id' => $this->id ),
134 $query_args
135 )
136 );
137 }
138
139 public function get_parent(): Base_Page {
140 return Pages_Manager::instance()->stable()->rep_get_item_or_die( $this->parent_slug() );
141 }
142
143 public function get_id(): int {
144 return $this->id;
145 }
146
147 public function get_storage(): Array_Convert_Once {
148 return $this->storage;
149 }
150
151 }
152