PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.17.4
Advanced Ads – Ad Manager & AdSense v1.17.4
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 / classes / utils.php
advanced-ads / classes Last commit date
EDD_SL_Plugin_Updater.php 6 years ago ad-ajax.php 6 years ago ad-debug.php 8 years ago ad-health-notices.php 6 years ago ad-model.php 6 years ago ad-select.php 9 years ago ad.php 6 years ago ad_ajax_callbacks.php 6 years ago ad_group.php 6 years ago ad_placements.php 6 years ago ad_type_abstract.php 6 years ago ad_type_content.php 6 years ago ad_type_dummy.php 6 years ago ad_type_group.php 6 years ago ad_type_image.php 6 years ago ad_type_plain.php 6 years ago checks.php 6 years ago compatibility.php 6 years ago display-conditions.php 6 years ago filesystem.php 8 years ago frontend-notices.php 6 years ago frontend_checks.php 6 years ago plugin.php 6 years ago upgrades.php 7 years ago utils.php 6 years ago visitor-conditions.php 6 years ago widget.php 6 years ago
utils.php
225 lines
1 <?php
2 /**
3 * Class Advanced_Ads_Utils
4 */
5 class Advanced_Ads_Utils {
6 /**
7 * Merges multiple arrays, recursively, and returns the merged array.
8 *
9 * This function is similar to PHP's array_merge_recursive() function, but it
10 * handles non-array values differently. When merging values that are not both
11 * arrays, the latter value replaces the former rather than merging with it.
12 *
13 * Example:
14 * $link_options_1 = array( 'fragment' => 'x', 'class' => array( 'a', 'b' ) );
15 * $link_options_2 = array( 'fragment' => 'y', 'class' => array( 'c', 'd' ) );
16 * // This results in array( 'fragment' => 'y', 'class' => array( 'a', 'b', 'c', 'd' ) ).
17 *
18 * @param array $arrays An arrays of arrays to merge.
19 * @param bool $preserve_integer_keys (optional) If given, integer keys will be preserved and merged instead of appended.
20 * @return array The merged array.
21 * @copyright Copyright 2001 - 2013 Drupal contributors. License: GPL-2.0+. Drupal is a registered trademark of Dries Buytaert.
22 */
23 public static function merge_deep_array( array $arrays, $preserve_integer_keys = false ) {
24 $result = array();
25 foreach ( $arrays as $array ) {
26 if ( ! is_array( $array ) ) {
27 continue; }
28
29 foreach ( $array as $key => $value ) {
30 // Renumber integer keys as array_merge_recursive() does unless
31 // $preserve_integer_keys is set to TRUE. Note that PHP automatically
32 // converts array keys that are integer strings (e.g., '1') to integers.
33 if ( is_integer( $key ) && ! $preserve_integer_keys ) {
34 $result[] = $value;
35 } elseif ( isset( $result[ $key ] ) && is_array( $result[ $key ] ) && is_array( $value ) ) {
36 // recurse when both values are arrays.
37 $result[ $key ] = self::merge_deep_array( array( $result[ $key ], $value ), $preserve_integer_keys );
38 } else {
39 // otherwise, use the latter value, overriding any previous value.
40 $result[ $key ] = $value;
41 }
42 }
43 }
44 return $result;
45 }
46
47 /**
48 * Convert array of html attributes to string.
49 *
50 * @param array $data attributes.
51 * @return string
52 * @since untagged
53 */
54 public static function build_html_attributes( $data ) {
55 $result = '';
56 foreach ( $data as $_html_attr => $_values ) {
57 if ( 'style' === $_html_attr ) {
58 $_style_values_string = '';
59 foreach ( $_values as $_style_attr => $_style_values ) {
60 if ( is_array( $_style_values ) ) {
61 $_style_values_string .= $_style_attr . ': ' . implode( ' ', $_style_values ) . '; ';
62 } else {
63 $_style_values_string .= $_style_attr . ': ' . $_style_values . '; ';
64 }
65 }
66 $result .= " style=\"$_style_values_string\"";
67 } else {
68 if ( is_array( $_values ) ) {
69 $_values_string = esc_attr( implode( ' ', $_values ) ); } else {
70 $_values_string = esc_attr( $_values ); }
71 $result .= " $_html_attr=\"$_values_string\"";
72 }
73 }
74 return $result;
75 }
76
77 /**
78 * Get inline asset.
79 *
80 * @param string $content existing content.
81 * @return string $content
82 */
83 public static function get_inline_asset( $content ) {
84 if ( Advanced_Ads_Checks::active_autoptimize() || Advanced_Ads_Checks::active_wp_rocket() ) {
85 return '<!--noptimize-->' . $content . '<!--/noptimize-->';
86 }
87 // WP Fastest Cache Premium: "Render Blocking Js" feature.
88 if ( class_exists( 'WpFastestCache', false )
89 && '<script' === substr( $content, 0, 7 ) ) {
90 $content = substr_replace( $content, '<script data-wpfc-render="false"', 0, 7 );
91 }
92 return $content;
93 }
94
95 /**
96 * Get nested ads of an ad or a group.
97 *
98 * @param string $id Id.
99 * @param string $type Type (placement, ad or group).
100 * @return array of Advanced_Ads_Ad objects.
101 */
102 public static function get_nested_ads( $id, $type ) {
103 $result = array();
104
105 switch ( $type ) {
106 case 'placement':
107 $placements = Advanced_Ads::get_ad_placements_array();
108 if ( isset( $placements[ $id ]['item'] ) ) {
109 $item = explode( '_', $placements[ $id ]['item'] );
110 if ( isset( $item[1] ) ) {
111 return self::get_nested_ads( $item[1], $item[0] );
112 }
113 }
114 case 'ad':
115 $ad = new Advanced_Ads_Ad( $id );
116 $result[] = $ad;
117 if ( 'group' === $ad->type && ! empty( $ad->output['group_id'] ) ) {
118 $result = array_merge( $result, self::get_nested_ads( $ad->output['group_id'], 'group' ) );
119 }
120 break;
121 case 'group':
122 $group = new Advanced_Ads_Group( $id );
123 $ads = $group->get_all_ads();
124 foreach ( $ads as $ad ) {
125 $result = array_merge( $result, self::get_nested_ads( $ad->ID, 'ad' ) );
126 }
127 break;
128 }
129 return $result;
130 }
131
132 /**
133 * Maybe translate a capability to a set of roles.
134 *
135 * @param string/array $roles_or_caps A set of roles or capabilities.
136 * @return array $roles A list of roles.
137 */
138 public static function maybe_translate_cap_to_role( $roles_or_caps ) {
139 global $wp_roles;
140
141 $roles_or_caps = (array) $roles_or_caps;
142 $roles = array();
143
144 foreach ( $roles_or_caps as $cap ) {
145 if ( $wp_roles->is_role( $cap ) ) {
146 $roles[] = $cap;
147 continue;
148 }
149
150 foreach ( $wp_roles->roles as $id => $role ) {
151 if ( isset( $role['capabilities'][ $cap ] ) ) {
152 $roles[] = $id;
153 }
154 }
155 }
156
157 return array_unique( $roles );
158 }
159
160 /**
161 * Check if the page is loaded in an iframe.
162 *
163 * @return bool
164 */
165 public static function is_iframe() {
166 if ( is_customize_preview() ) {
167 return true;
168 }
169
170 if ( self::is_elementor_preview_or_edit() ) {
171 return true;
172 }
173
174 return false;
175 }
176
177 /**
178 * Check if the Elementor preview mode is used.
179 *
180 * @deprecated
181 *
182 * @return bool
183 */
184 private static function is_elementor_preview_or_edit() {
185 if ( class_exists( '\Elementor\Plugin' ) ) {
186 try {
187 $refl_plugin = new ReflectionClass( '\Elementor\Plugin' );
188
189 if ( $refl_plugin->hasMethod( 'instance' ) ) {
190 $refl_instance_method = $refl_plugin->getMethod( 'instance' );
191
192 if ( $refl_instance_method->isPublic() && $refl_instance_method->isStatic() ) {
193
194 if ( class_exists( '\Elementor\Preview' ) && $refl_plugin->hasProperty( 'preview' ) ) {
195 $preview_property = new ReflectionProperty( '\Elementor\Plugin', 'preview' );
196
197 if ( $preview_property->isPublic() && ! $preview_property->isStatic() ) {
198 if ( method_exists( '\Elementor\Preview', 'is_preview_mode' )
199 && \Elementor\Plugin::$instance->preview->is_preview_mode() ) {
200 return true;
201 }
202 }
203 }
204
205 if ( class_exists( '\Elementor\Editor' ) && $refl_plugin->hasProperty( 'editor' ) ) {
206 $editor_property = new ReflectionProperty( '\Elementor\Plugin', 'editor' );
207
208 if ( $editor_property->isPublic() && ! $editor_property->isStatic() ) {
209 if ( method_exists( '\Elementor\Editor', 'is_edit_mode' )
210 && \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
211 return true;
212 }
213 }
214 }
215 }
216 }
217 } catch ( Exception $e ) {
218 // not much we can do here.
219 }
220 }
221 return false;
222 }
223 }
224
225