PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
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 week ago abstract-admin-list-table.php 1 week ago abstract-data.php 1 week ago abstract-factory.php 1 week ago abstract-group.php 6 days ago abstract-placement-type.php 1 week ago abstract-placement.php 3 months ago abstract-screen.php 3 months ago abstract-types.php 1 week ago index.php 2 years ago
abstract-types.php
215 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
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
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 * Create missing type
68 *
69 * @param string $type Missing type.
70 *
71 * @return mixed
72 */
73 public function create_missing( $type ) {
74 $this->types[ $type ] = new $this->type_unknown(
75 [
76 'id' => $type,
77 'title' => Str::capitalize( $type ),
78 ]
79 );
80
81 return $this->types[ $type ];
82 }
83
84 /**
85 * Register custom type.
86 *
87 * @param string $classname Type class name.
88 *
89 * @return void
90 */
91 public function register_type( $classname ): void {
92 $type = new $classname();
93 $this->types[ $type->get_id() ] = $type;
94 }
95
96 /**
97 * Register custom types.
98 *
99 * @return void
100 */
101 public function register_types(): void {
102 $this->register_default_types();
103 /**
104 * Developers can add new types using this filter
105 */
106 do_action( $this->hook . '-manager', $this );
107 $this->types = apply_filters( $this->hook, $this->types );
108
109 $this->validate_types();
110 }
111
112 /**
113 * Has type.
114 *
115 * @param string $type Type to check.
116 *
117 * @return bool
118 */
119 public function has_type( $type ): bool {
120 return array_key_exists( $type, $this->types );
121 }
122
123 /**
124 * Get the registered type.
125 *
126 * @param string $type Type to get.
127 *
128 * @return mixed|bool
129 */
130 public function get_type( $type ) {
131 return $this->types[ $type ] ?? false;
132 }
133
134 /**
135 * Resolve the entity class for a type id, with lazy registration and default fallback.
136 *
137 * @param string $entity_type Entity type id.
138 * @param string $default_type Fallback type id when $entity_type is unknown.
139 *
140 * @return string Entity class name.
141 */
142 public function get_classname_for_type( $entity_type, $default_type = 'default' ): string {
143 if ( empty( $this->types ) || ! $this->has_type( $default_type ) ) {
144 $this->register_types();
145 }
146
147 $type = $this->has_type( $entity_type )
148 ? $this->get_type( $entity_type )
149 : $this->get_type( $default_type );
150
151 return $type->get_classname();
152 }
153
154 /**
155 * Get the registered types.
156 *
157 * @param bool $with_unknown Include unknown type placements.
158 *
159 * @return array
160 */
161 public function get_types( $with_unknown = true ): array {
162 return $with_unknown ? $this->types : array_filter( $this->types, fn( $type ) => ! is_a( $type, $this->type_unknown ) );
163 }
164
165 /**
166 * Check if has premium types.
167 *
168 * @return bool
169 */
170 public function has_premium(): bool {
171 if ( null !== $this->has_premium ) {
172 return $this->has_premium;
173 }
174
175 $this->has_premium = false;
176
177 foreach ( $this->get_types() as $type ) {
178 if ( $type->is_premium() ) {
179 $this->has_premium = true;
180 break;
181 }
182 }
183
184 return $this->has_premium;
185 }
186
187 /**
188 * Register default types.
189 *
190 * @return void
191 */
192 abstract protected function register_default_types(): void;
193
194 /**
195 * Validate types by type interface
196 *
197 * @return void
198 */
199 private function validate_types(): void {
200 // Early bail!!
201 if ( empty( $this->type_unknown ) || empty( $this->type_interface ) ) {
202 return;
203 }
204
205 foreach ( $this->types as $slug => $type ) {
206 if ( ! is_array( $type ) || is_a( $type, $this->type_interface ) ) {
207 continue;
208 }
209
210 $type['id'] = $slug;
211 $this->types[ $slug ] = new $this->type_unknown( $type );
212 }
213 }
214 }
215