PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
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 / modules / ad-positioning / classes / ad-positioning.php
advanced-ads / modules / ad-positioning / classes Last commit date
ad-positioning.php 1 year ago
ad-positioning.php
216 lines
1 <?php // phpcs:ignoreFile
2
3 use AdvancedAds\Abstracts\Ad;
4
5 /**
6 * Class handling the ad positioning and migrating values from previous solutions.
7 */
8 class Advanced_Ads_Ad_Positioning {
9 /**
10 * The instance of the current ad.
11 *
12 * @var Ad
13 */
14 private $ad;
15
16 /**
17 * The structure of these output options.
18 *
19 * @var array
20 */
21 private $positioning = [
22 'position' => 'none',
23 'clearfix' => false,
24 'margin' => [
25 'top' => 0,
26 'left' => 0,
27 'bottom' => 0,
28 'right' => 0,
29 ],
30 ];
31
32 /**
33 * Class constructor.
34 *
35 * @param Ad $ad The current ad object.
36 */
37 public function __construct( Ad $ad ) {
38 $this->ad = $ad;
39 $this->migrate_values();
40 $this->filter_values();
41 }
42
43 /**
44 * Migrate option from a previous solution where floating was an additional setting.
45 *
46 * @return void
47 */
48 private function migrate_values() {
49 $options = $this->get_options();
50
51 $this->positioning['margin'] = array_merge(
52 $this->positioning['margin'],
53 array_map( function($value) { return (int)$value; }, $options['margin'] )
54 );
55
56 $this->positioning['position'] = $options['position'];
57 // instead of having an empty value, set an explicit default.
58 if ( empty( $this->positioning['position'] ) ) {
59 $this->positioning['position'] = 'none';
60 $this->positioning['clearfix'] = false;
61 }
62
63 // left, center, right are the old values, if it's none of these we've already migrated.
64 if ( ! in_array( $this->positioning['position'], [ 'left', 'center', 'right' ], true ) ) {
65 // ensure we get an array with min two elements.
66 $position = explode( '_', $this->positioning['position'] . '_' );
67
68 // explicitly set clearfix option.
69 $this->positioning['clearfix'] = $position[0] !== 'center' && $position[1] === 'nofloat';
70
71 return;
72 }
73
74 if ( $this->positioning['position'] === 'center' ) {
75 $this->positioning['position'] = 'center_nofloat';
76
77 return;
78 }
79
80 $this->positioning['clearfix'] = ! empty( $options['clearfix'] );
81 $this->positioning['position'] .= $this->positioning['clearfix'] ? '_nofloat' : '_float';
82 }
83
84 /**
85 * Filter the option value for Ad.
86 * This ensures we don't have to update the whole positioning process but can change only the wp-admin side of things.
87 *
88 * @return void
89 */
90 private function filter_values() {
91 foreach ( $this->positioning as $key => $value ) {
92 add_filter( "advanced-ads-ad-option-output.{$key}", function() use ( $value ) {
93 return $value;
94 } );
95
96 if ( is_array( $value ) ) {
97 foreach ( $value as $sub_key => $sub_value ) {
98 add_filter( "advanced-ads-ad-option-output.{$sub_key}", function() use ( $sub_value ) {
99 return $sub_value;
100 } );
101 }
102 }
103 }
104 }
105
106 /**
107 * Set up the positioning options with title, description and icon.
108 *
109 * @return array
110 */
111 private function setup_positioning_options() {
112 return [
113 'default' => [
114 'title' => __( "Theme’s Default", 'advanced-ads' ),
115 'description' => __( 'The ad will behave as predefined by the theme.', 'advanced-ads' ),
116 'options' => [
117 'none' => [],
118 ],
119 ],
120 'float' => [
121 'title' => _x( 'Float', 'Layout options "Text Flow" heading', 'advanced-ads' ),
122 'description' => __( 'Text will wrap around the ad and its margin.', 'advanced-ads' ),
123 'options' => [
124 'left_float' => [],
125 'right_float' => [],
126 ],
127 ],
128 'block' => [
129 'title' => _x( 'Block', 'Layout options "Text Flow" heading', 'advanced-ads' ),
130 'description' => __( 'Text will continue after the ad and its margin.', 'advanced-ads' ),
131 'options' => [
132 'left_nofloat' => [
133 'img' => 'block-lr',
134 ],
135 'center_nofloat' => [
136 'img' => 'block-cntr',
137 ],
138 'right_nofloat' => [
139 'img' => 'block-lr',
140 ],
141 ],
142 ],
143 ];
144 }
145
146 /**
147 * Concatenate the templates and prepare inline styles and scripts.
148 *
149 * @return string
150 */
151 public function return_admin_view() {
152 return $this->positioning_admin_view() . $this->spacing_admin_view();
153 }
154
155 /**
156 * Include the positioning view.
157 *
158 * @return string
159 */
160 private function positioning_admin_view() {
161 $positioning = $this->positioning['position'];
162 $positioning_options = $this->setup_positioning_options();
163
164 ob_start();
165 include_once __DIR__ . '/../views/ad-positioning.php';
166
167 return ob_get_clean();
168 }
169
170 /**
171 * Include the spacing/margin view.
172 *
173 * @return string
174 */
175 private function spacing_admin_view() {
176 $is_centered = explode( '_', $this->positioning['position'] )[0] === 'center';
177 $spacings = [
178 'top' => [
179 'label' => _x( 'Top', 'Ad positioning spacing label', 'advanced-ads' ),
180 ],
181 'right' => [
182 'label' => _x( 'Right', 'Ad positioning spacing label', 'advanced-ads' ),
183 ],
184 'bottom' => [
185 'label' => _x( 'Bottom', 'Ad positioning spacing label', 'advanced-ads' ),
186 ],
187 'left' => [
188 'label' => _x( 'Left', 'Ad positioning spacing label', 'advanced-ads' ),
189 ],
190 ];
191 foreach ( $spacings as $direction => $item ) {
192 $spacings[ $direction ]['value'] = (int) $this->positioning['margin'][ $direction ];
193 }
194
195 ob_start();
196 include_once __DIR__ . '/../views/ad-spacing.php';
197
198 return ob_get_clean();
199 }
200
201 /**
202 * Get a well-formed array to work with.
203 *
204 * @return array
205 */
206 private function get_options() {
207 $options = [
208 'position' => $this->ad->get_position(),
209 'clearfix' => $this->ad->get_clearfix(),
210 'margin' => $this->ad->get_margin(),
211 ];
212
213 return wp_parse_args( $options, $this->positioning );
214 }
215 }
216