PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.33.2
Advanced Ads – Ad Manager & AdSense v1.33.2
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 / classes / ad_type_plain.php
advanced-ads / classes Last commit date
EDD_SL_Plugin_Updater.php 4 years ago ad-ajax.php 5 years ago ad-debug.php 6 years ago ad-expiration.php 4 years ago ad-health-notices.php 4 years ago ad-model.php 5 years ago ad-select.php 10 years ago ad.php 4 years ago ad_ajax_callbacks.php 5 years ago ad_group.php 4 years ago ad_placements.php 4 years ago ad_type_abstract.php 5 years ago ad_type_content.php 5 years ago ad_type_dummy.php 5 years ago ad_type_group.php 5 years ago ad_type_image.php 5 years ago ad_type_plain.php 4 years ago checks.php 4 years ago compatibility.php 4 years ago display-conditions.php 4 years ago filesystem.php 8 years ago frontend-notices.php 6 years ago frontend_checks.php 4 years ago in-content-injector.php 4 years ago inline-css.php 5 years ago plugin.php 4 years ago upgrades.php 6 years ago utils.php 4 years ago visitor-conditions.php 4 years ago widget.php 4 years ago
ad_type_plain.php
257 lines
1 <?php
2
3 /**
4 * Advanced Ads Plain Ad Type
5 *
6 * @package Advanced_Ads
7 * @author Thomas Maier <support@wpadvancedads.com>
8 * @license GPL-2.0+
9 * @link https://wpadvancedads.com
10 * @copyright 2014 Thomas Maier, Advanced Ads GmbH
11 *
12 * Class containing information about the plain text/code ad type
13 *
14 * see ad-type-content.php for a better sample on ad type
15 */
16 class Advanced_Ads_Ad_Type_Plain extends Advanced_Ads_Ad_Type_Abstract {
17
18 /**
19 * ID - internal type of the ad type
20 *
21 * @var string $ID ad type id.
22 */
23 public $ID = 'plain';
24
25 /**
26 * Set basic attributes
27 */
28 public function __construct() {
29 $this->title = __( 'Plain Text and Code', 'advanced-ads' );
30 $this->description = __( 'Any ad network, Amazon, customized AdSense codes, shortcodes, and code like JavaScript, HTML or PHP.', 'advanced-ads' );
31 $this->parameters = array(
32 'content' => '',
33 );
34 }
35
36 /**
37 * Output for the ad parameters metabox
38 *
39 * This will be loaded using ajax when changing the ad type radio buttons
40 * echo the output right away here
41 * name parameters must be in the "advanced_ads" array
42 *
43 * @param Advanced_Ads_Ad $ad Advanced_Ads_Ad.
44 */
45 public function render_parameters( $ad ) {
46 // Load content.
47 $content = ( isset( $ad->content ) ) ? $ad->content : '';
48
49 ?><p class="description"><?php esc_html_e( 'Insert plain text or code into this field.', 'advanced-ads' ); ?></p>
50 <?php $this->error_unfiltered_html( $ad ); ?>
51 <textarea id="advads-ad-content-plain" cols="40" rows="10" name="advanced_ad[content]"
52 onkeyup="Advanced_Ads_Admin.check_ad_source();"><?php echo esc_textarea( $content ); ?></textarea>
53 <?php include ADVADS_BASE_PATH . 'admin/views/ad-info-after-textarea.php'; ?>
54 <input type="hidden" name="advanced_ad[output][allow_php]" value="0"/>
55
56 <?php
57
58 $this->render_php_allow( $ad );
59 $this->render_shortcodes_allow( $ad );
60 ?>
61 <script>jQuery( function () { Advanced_Ads_Admin.check_ad_source() } )</script>
62 <?php
63 }
64
65 /**
66 * Render php output field
67 *
68 * @param object $ad Advanced_Ads_Ad object.
69 */
70 public function render_php_allow( $ad ) {
71 $content = ( isset( $ad->content ) ) ? $ad->content : '';
72
73 // Check if php is allowed.
74 if ( isset( $ad->output['allow_php'] ) ) {
75 $allow_php = absint( $ad->output['allow_php'] );
76 } else {
77 /**
78 * For compatibility for ads with PHP added prior to 1.3.18
79 * check if there is php code in the content
80 */
81 $allow_php = preg_match( '/<\?php/', $content );
82 }
83 ?>
84 <label class="label" for="advads-parameters-php"><?php esc_html_e( 'Allow PHP', 'advanced-ads' ); ?></label>
85 <div>
86 <input id="advads-parameters-php" type="checkbox" name="advanced_ad[output][allow_php]" value="1" <?php checked( 1, $allow_php ); ?> onChange="Advanced_Ads_Admin.check_ad_source();" <?php disabled( ! $this->is_php_globally_allowed() ); ?>/>
87 <span class="advads-help">
88 <span class="advads-tooltip">
89 <?php
90 echo wp_kses(
91 __( 'Execute PHP code (wrapped in <code>&lt;?php ?&gt;</code>)', 'advanced-ads' ),
92 array(
93 'code' => array(),
94 )
95 );
96 ?>
97 </span>
98 </span>
99 <?php if ( ! $this->is_php_globally_allowed() ) : ?>
100 <p class="advads-notice-inline advads-error">
101 <?php
102 printf(
103 /* translators: The name of the constant preventing PHP execution */
104 esc_html__( 'Executing PHP code has been disallowed by %s', 'advanced-ads' ),
105 sprintf( '<code>%s</code>', defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT ? 'DISALLOW_FILE_EDIT' : 'ADVANCED_ADS_DISALLOW_PHP' )
106 );
107 ?>
108 </p>
109 <?php else : ?>
110 <p class="advads-notice-inline advads-error" id="advads-allow-php-warning" style="display:none;">
111 <?php esc_html_e( 'Using PHP code can be dangerous. Please make sure you know what you are doing.', 'advanced-ads' ); ?>
112 </p>
113 <?php endif; ?>
114 <p class="advads-notice-inline advads-error" id="advads-parameters-php-warning" style="display:none;">
115 <?php esc_html_e( 'No PHP tag detected in your code.', 'advanced-ads' ); ?> <?php esc_html_e( 'Uncheck this checkbox for improved performance.', 'advanced-ads' ); ?>
116 </p>
117 </div>
118 <hr/>
119 <?php
120 }
121
122 /**
123 * Render allow shortcodes field.
124 *
125 * @param object $ad Advanced_Ads_Ad object.
126 */
127 public function render_shortcodes_allow( $ad ) {
128 $allow_shortcodes = ! empty( $ad->output['allow_shortcodes'] );
129 ?>
130 <label class="label"
131 for="advads-parameters-shortcodes"><?php esc_html_e( 'Execute shortcodes', 'advanced-ads' ); ?></label>
132 <div>
133 <input id="advads-parameters-shortcodes" type="checkbox" name="advanced_ad[output][allow_shortcodes]"
134 value="1"
135 <?php
136 checked( 1, $allow_shortcodes );
137 ?>
138 onChange="Advanced_Ads_Admin.check_ad_source();"/>
139 <p class="advads-notice-inline advads-error" id="advads-parameters-shortcodes-warning"
140 style="display:none;"><?php esc_html_e( 'No shortcode detected in your code.', 'advanced-ads' ); ?> <?php esc_html_e( 'Uncheck this checkbox for improved performance.', 'advanced-ads' ); ?></p>
141 </div>
142 <hr/>
143 <?php
144 }
145
146 /**
147 * Prepare the ads frontend output
148 *
149 * @param Advanced_Ads_Ad $ad ad object.
150 *
151 * @return string $content ad content prepared for frontend output.
152 * @since 1.0.0
153 */
154 public function prepare_output( $ad ) {
155 $content = $ad->content;
156
157 // Evaluate the code as PHP if setting was never saved or is allowed.
158 if ( ( ! isset( $ad->output['allow_php'] ) || $ad->output['allow_php'] ) && $this->is_php_globally_allowed() ) {
159 ob_start();
160 // This code only runs if the "Allow PHP" option for plain text ads was enabled.
161 // phpcs:ignore Squiz.PHP.Eval.Discouraged -- this is specifically eval'd so allow eval here.
162 eval( '?>' . $ad->content );
163 $content = ob_get_clean();
164 }
165
166 if ( ! is_string( $content ) ) {
167 return '';
168 }
169
170 /**
171 * Apply do_blocks if the content has block code
172 * works with WP 5.0.0 and later
173 */
174 if ( function_exists( 'has_blocks' ) && has_blocks( $content ) ) {
175 $content = do_blocks( $content );
176 }
177
178 if ( ! empty( $ad->output['allow_shortcodes'] ) ) {
179 $content = $this->do_shortcode( $content, $ad );
180 }
181
182 // Add 'loading' attribute if applicable, available from WP 5.5.
183 if (
184 function_exists( 'wp_lazy_loading_enabled' )
185 && wp_lazy_loading_enabled( 'img', 'the_content' )
186 && preg_match_all( '/<img\s[^>]+>/', $content, $matches )
187 ) {
188 // iterate images.
189 foreach ( $matches[0] as $image ) {
190 // skip if it already has the loading attribute.
191 if ( strpos( $image, 'loading=' ) !== false ) {
192 continue;
193 }
194
195 // replace the image string.
196 $content = str_replace( $image, wp_img_tag_add_loading_attr( $image, 'the_content' ), $content );
197 }
198 }
199
200 return $this->kses_ad( $content );
201 }
202
203 /**
204 * Check if php execution is globally forbidden.
205 *
206 * @return bool
207 */
208 private function is_php_globally_allowed() {
209 return ! ( defined( 'ADVANCED_ADS_DISALLOW_PHP' ) && ADVANCED_ADS_DISALLOW_PHP )
210 && ! ( defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT );
211 }
212
213 /**
214 * Check if we're on an ad edit screen, if yes and the user does not have `unfiltered_html` permissions,
215 * show an admin notice.
216 *
217 * @param Advanced_Ads_Ad $ad the current ad object.
218 *
219 * @return void
220 */
221 protected function error_unfiltered_html( Advanced_Ads_Ad $ad ) {
222 $author_id = (int) get_post_field( 'post_author', $ad->id );
223
224 if ( ! ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML ) ) {
225 return;
226 }
227
228 ?>
229 <p class="advads-notice-inline advads-error">
230 <?php
231 if ( $author_id === get_current_user_id() ) {
232 esc_html_e( 'You do not have sufficient permissions to include all HTML tags.', 'advanced-ads' );
233 } else {
234 esc_html_e( 'The creator of the ad does not have sufficient permissions to include all HTML tags.', 'advanced-ads' );
235 }
236 ?>
237 <a href="<?php echo esc_url( ADVADS_URL ) . '/manual/ad-types/#Plain_Text_and_Code'; ?>" target="_blank" rel="noopener">
238 <?php esc_html_e( 'Manual', 'advanced-ads' ); ?>
239 </a>
240 </p>
241 <?php
242 }
243
244 /**
245 * Check if the ad content needs filtering.
246 *
247 * @param string $content The parsed ad content.
248 *
249 * @return string
250 */
251 protected function kses_ad( $content ) {
252 return defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML
253 ? wp_kses( $content, wp_kses_allowed_html( 'post' ) )
254 : $content;
255 }
256 }
257