PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / abstracts / abstract-types.php
advanced-ads / includes / abstracts Last commit date
abstract-ad.php 1 day ago abstract-admin-list-table.php 1 week ago abstract-data.php 1 week ago abstract-factory.php 1 day ago abstract-group.php 1 day ago abstract-placement-type.php 1 week ago abstract-placement.php 1 day ago abstract-screen.php 3 months ago abstract-types.php 1 day ago index.php 2 years ago
abstract-types.php
229 lines
1 <?php
2 /**
3 * Abstracts Types.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.47.0
8 */
9
10 namespace AdvancedAds\Abstracts;
11
12 use AdvancedAds\Framework\Utilities\Str;
13 use AdvancedAds\Framework\Interfaces\Integration_Interface;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Abstracts Types.
19 */
20 abstract class Types implements Integration_Interface {
21
22 /**
23 * Hold types.
24 *
25 * @var array<string, object>
26 */
27 protected $types = [];
28
29 /**
30 * Hook to filter types.
31 *
32 * @var string
33 */
34 protected $hook = 'advanced-ads-none-types';
35
36 /**
37 * Class for unknown type.
38 *
39 * @var string
40 */
41 protected $type_unknown = '';
42
43 /**
44 * Type interface to check.
45 *
46 * @var string
47 */
48 protected $type_interface = '';
49
50 /**
51 * Check if has premium types.
52 *
53 * @var bool|null
54 */
55 private $has_premium = null;
56
57 /**
58 * Hook into WordPress.
59 *
60 * @return void
61 */
62 public function hooks(): void {
63 add_action( 'init', [ $this, 'register_types' ], 25 );
64 }
65
66 /**
67 * Built-in type classes for this manager.
68 *
69 * @return string[]
70 */
71 abstract protected function default_type_classes(): array;
72
73 /**
74 * Create missing type
75 *
76 * @param string $type Missing type.
77 *
78 * @return mixed
79 */
80 public function create_missing( $type ) {
81 $this->types[ $type ] = new $this->type_unknown(
82 [
83 'id' => $type,
84 'title' => Str::capitalize( $type ),
85 ]
86 );
87
88 return $this->types[ $type ];
89 }
90
91 /**
92 * Register custom type.
93 *
94 * @param string $classname Type class name.
95 *
96 * @return void
97 */
98 public function register_type( $classname ): void {
99 $type = new $classname();
100 $this->types[ $type->get_id() ] = $type;
101 }
102
103 /**
104 * Register custom types.
105 *
106 * @return void
107 */
108 public function register_types(): void {
109 $this->register_default_types();
110 /**
111 * Developers can add new types using this action.
112 */
113 do_action( $this->hook . '-manager', $this );
114 /**
115 * Developers can add or replace types using this filter.
116 */
117 $this->types = apply_filters( $this->hook, $this->types );
118
119 $this->validate_types();
120 }
121
122 /**
123 * Has type.
124 *
125 * @param string $type Type to check.
126 *
127 * @return bool
128 */
129 public function has_type( $type ): bool {
130 return array_key_exists( $type, $this->types );
131 }
132
133 /**
134 * Get the registered type.
135 *
136 * @param string $type Type to get.
137 *
138 * @return mixed|bool
139 */
140 public function get_type( $type ) {
141 return $this->types[ $type ] ?? false;
142 }
143
144 /**
145 * Resolve the entity class for a type id, with lazy registration and default fallback.
146 *
147 * @param string $entity_type Entity type id.
148 * @param string $default_type Fallback type id when $entity_type is unknown.
149 *
150 * @return string Entity class name.
151 */
152 public function get_classname_for_type( $entity_type, $default_type = 'default' ): string {
153 if ( empty( $this->types ) || ! $this->has_type( $default_type ) ) {
154 $this->register_types();
155 }
156
157 $type = $this->has_type( $entity_type )
158 ? $this->get_type( $entity_type )
159 : $this->get_type( $default_type );
160
161 return $type->get_classname();
162 }
163
164 /**
165 * Get the registered types.
166 *
167 * @param bool $with_unknown Include unknown type placements.
168 *
169 * @return array
170 */
171 public function get_types( $with_unknown = true ): array {
172 return $with_unknown ? $this->types : array_filter( $this->types, fn( $type ) => ! is_a( $type, $this->type_unknown ) );
173 }
174
175 /**
176 * Check if has premium types.
177 *
178 * @return bool
179 */
180 public function has_premium(): bool {
181 if ( null !== $this->has_premium ) {
182 return $this->has_premium;
183 }
184
185 $this->has_premium = false;
186
187 foreach ( $this->get_types() as $type ) {
188 if ( $type->is_premium() ) {
189 $this->has_premium = true;
190 break;
191 }
192 }
193
194 return $this->has_premium;
195 }
196
197 /**
198 * Register default types.
199 *
200 * @return void
201 */
202 protected function register_default_types(): void {
203 foreach ( $this->default_type_classes() as $classname ) {
204 $this->register_type( $classname );
205 }
206 }
207
208 /**
209 * Validate types by type interface
210 *
211 * @return void
212 */
213 private function validate_types(): void {
214 // Early bail!!
215 if ( empty( $this->type_unknown ) || empty( $this->type_interface ) ) {
216 return;
217 }
218
219 foreach ( $this->types as $slug => $type ) {
220 if ( ! is_array( $type ) || is_a( $type, $this->type_interface ) ) {
221 continue;
222 }
223
224 $type['id'] = $slug;
225 $this->types[ $slug ] = new $this->type_unknown( $type );
226 }
227 }
228 }
229