PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.4.4
Advanced Ads – Ad Manager & AdSense v1.4.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 / ad_placements.php
advanced-ads / classes Last commit date
ad.php 11 years ago ad_ajax_callbacks.php 11 years ago ad_group.php 11 years ago ad_placements.php 11 years ago ad_type_abstract.php 12 years ago ad_type_content.php 11 years ago ad_type_plain.php 11 years ago widget.php 11 years ago
ad_placements.php
285 lines
1 <?php
2
3 /**
4 * Advanced Ads
5 *
6 * @package Advanced_Ads_Placements
7 * @author Thomas Maier <thomas.maier@webgilde.com>
8 * @license GPL-2.0+
9 * @link http://webgilde.com
10 * @copyright 2014 Thomas Maier, webgilde GmbH
11 */
12
13 /**
14 * grouping placements functions
15 *
16 * @since 1.1.0
17 * @package Advads_Placements
18 * @author Thomas Maier <thomas.maier@webgilde.com>
19 */
20 class Advads_Ad_Placements {
21
22 /**
23 * get placement types
24 *
25 * @since 1.2.1
26 * @return arr $types array with placement types
27 */
28 static function get_placement_types() {
29 $types = array(
30 'default' => array(
31 'title' => __('default', ADVADS_SLUG),
32 'description' => __('Manual placement.', ADVADS_SLUG),
33 ),
34 'header' => array(
35 'title' => __('header', ADVADS_SLUG),
36 'description' => __('Injected in Header (before closing </head> Tag, often not visible).', ADVADS_SLUG),
37 ),
38 'footer' => array(
39 'title' => __('footer', ADVADS_SLUG),
40 'description' => __('Injected in Footer (before closing </body> Tag).', ADVADS_SLUG),
41 ),
42 'post_top' => array(
43 'title' => __('before post', ADVADS_SLUG),
44 'description' => __('Injected before the post content.', ADVADS_SLUG),
45 ),
46 'post_bottom' => array(
47 'title' => __('after post', ADVADS_SLUG),
48 'description' => __('Injected after the post content.', ADVADS_SLUG),
49 ),
50 'post_content' => array(
51 'title' => __('post content', ADVADS_SLUG),
52 'description' => __('Injected into the post content. You can choose the paragraph after which the ad content is displayed.', ADVADS_SLUG),
53 ),
54 );
55 return apply_filters('advanced-ads-placement-types', $types);
56 }
57
58 /**
59 * save a new placement
60 *
61 * @since 1.1.0
62 * @param array $new_placement
63 * @return mixed true if saved; error message if not
64 */
65 static function save_new_placement($new_placement) {
66 // load placements
67 $placements = Advanced_Ads::get_ad_placements_array();
68
69 // escape slug as slug
70 $new_placement['slug'] = sanitize_title($new_placement['slug']);
71
72 // check if slug already exists
73 if ($new_placement['slug'] == '')
74 return __('Slug can\'t be empty.', ADVADS_SLUG);
75 if (isset($placements[$new_placement['slug']]))
76 return __('Slug already exists.', ADVADS_SLUG);
77
78 // make sure only allowed types are being saved
79 $placement_types = Advads_Ad_Placements::get_placement_types();
80 $new_placement['type'] = (isset($placement_types[$new_placement['type']])) ? $new_placement['type'] : 'default';
81 // escape name
82 $new_placement['name'] = esc_attr($new_placement['name']);
83
84 // add new place to all placements
85 $placements[$new_placement['slug']] = array(
86 'type' => $new_placement['type'],
87 'name' => $new_placement['name']
88 );
89
90 // save array
91 update_option('advads-ads-placements', $placements);
92
93 return true;
94 }
95
96 /**
97 * save placements
98 *
99 * @since 1.1.0
100 * @param array $placement_items
101 * @return mixed true if saved; error message if not
102 */
103 static function save_placements($placement_items) {
104
105 // load placements
106 $placements = Advanced_Ads::get_ad_placements_array();
107
108 foreach ($placement_items as $_placement_slug => $_placement) {
109 // remove the placement
110 if (isset($_placement['delete'])) {
111 unset($placements[$_placement_slug]);
112 continue;
113 }
114 // save item
115 if (isset($_placement['item']))
116 $placements[$_placement_slug]['item'] = $_placement['item'];
117 // save item options
118 if (isset($_placement['options'])){
119 $placements[$_placement_slug]['options'] = $_placement['options'];
120 if(isset($placements[$_placement_slug]['options']['index']))
121 $placements[$_placement_slug]['options']['index'] = absint($placements[$_placement_slug]['options']['index']);
122 }
123 }
124
125 // save array
126 update_option('advads-ads-placements', $placements);
127
128 return true;
129 }
130
131 /**
132 * get items for item select field
133 *
134 * @since 1.1
135 * @return arr $select items for select field
136 */
137 static function items_for_select() {
138 $select = array();
139
140 // load all ad groups
141 $groups = Advanced_Ads::get_ad_groups();
142 foreach ($groups as $_group) {
143 $select['groups']['group_' . $_group->term_id] = $_group->name;
144 }
145
146 // load all ads
147 $ads = Advanced_Ads::get_ads(array('orderby' => 'name', 'order' => 'ASC'));
148 foreach ($ads as $_ad) {
149 $select['ads']['ad_' . $_ad->ID] = $_ad->post_title;
150 }
151
152 return $select;
153 }
154
155 /**
156 * get html tags for content injection
157 *
158 * @since 1.3.5
159 * @return arr $tags array with tags that can be used for content injection
160 */
161 static function tags_for_content_injection(){
162 $tags = array(
163 'p' => sprintf(__('paragraph (%s)', ADVADS_SLUG), '&lt;p&gt;'),
164 'h2' => sprintf(__('headline 2 (%s)', ADVADS_SLUG), '&lt;h2&gt;'),
165 'h3' => sprintf(__('headline 3 (%s)', ADVADS_SLUG), '&lt;h3&gt;'),
166 'h4' => sprintf(__('headline 4 (%s)', ADVADS_SLUG), '&lt;h4&gt;'),
167 );
168
169 return $tags;
170 }
171
172 /**
173 * return content of a placement
174 *
175 * @since 1.1.0
176 * @param string $id slug of the display
177 */
178 static function output($id = '') {
179 // get placement data for the slug
180 if ($id == '')
181 return;
182
183 $placements = get_option('advads-ads-placements', array());
184
185 if (isset($placements[$id]['item'])) {
186 $_item = explode('_', $placements[$id]['item']);
187
188 if (isset($_item[1]))
189 $_item_id = absint($_item[1]);
190 elseif (empty($_item_id))
191 return;
192
193 // return either ad or group content
194 if ($_item[0] == 'ad') {
195 // add the placement to the global output array
196 $advads = Advanced_Ads::get_instance();
197 $advads->current_ads[] = array('type' => 'placement', 'id' => $id, 'title' => $placements[$id]['name']);
198
199 // create class from placement id, but not, if header injection
200 if(isset($placements[$id]['type']) && $placements[$id]['type'] == 'header'){
201 $ad_args = array();
202 } else {
203 $class = 'advads-' . $id;
204 $ad_args = array('output' => array('class' => array($class)));
205 }
206 return get_ad($_item_id, $ad_args);
207
208 } elseif ($_item[0] == 'group') {
209 // add the placement to the global output array
210 $advads = Advanced_Ads::get_instance();
211 $advads->current_ads[] = array('type' => 'placement', 'id' => $id, 'title' => $placements[$id]['name']);
212
213 return get_ad_group($_item_id);
214
215 }
216 } else {
217 return;
218 }
219
220 return;
221 }
222
223 /**
224 * inject ads directly into the content
225 *
226 * @since 1.2.1
227 * @param string $placement_id id of the placement
228 * @param arr $options placement options
229 * @param string $content
230 * @return type
231 * @link inspired by http://www.wpbeginner.com/wp-tutorials/how-to-insert-ads-within-your-post-content-in-wordpress/
232 */
233 static function inject_in_content($placement_id, $options, $content) {
234
235 $tag = (isset($options['tag'])) ? $options['tag'] : 'p';
236 $position = (isset($options['position'])) ? $options['position'] : 'after';
237
238 if($position == 'before'){
239 $tag = '<' . $tag . '>';
240 } else {
241 $tag = '</' . $tag . '>';
242 }
243
244 $paragraph_id = isset($options['index']) ? $options['index'] : 1;
245 $paragraphs = explode($tag, $content);
246
247 $offset = 0;
248 $running = true;
249 foreach ($paragraphs as $index => $paragraph) {
250
251 // check if current paragraph is empty and if so, create offset
252 if($running && $index > 0 && trim(str_replace(array($tag, '&nbsp;'), '', $paragraph)) == ''){
253 $offset++;
254 } elseif($index == 0 && trim(str_replace(array($tag, '&nbsp;'), '', $paragraph)) == ''){
255 // if the current paragraph is empty (because the tag was the first one in the content) attach the tag
256 $paragraphs[$index] = $tag;
257 }
258
259
260 // insert tag in case the ads position is after it
261 if (trim($paragraph) && $position == 'after'){
262 // not on the last paragraph
263 if($index+1 != count($paragraphs))
264 $paragraphs[$index] .= $tag;
265 }
266
267 // insert ad content
268 if ($paragraph_id + $offset == $index + 1) {
269 $ad_content = Advads_Ad_Placements::output($placement_id);
270 $paragraphs[$index] .= $ad_content;
271 $running = false;
272 }
273
274 // insert tag in case the ads position is before it
275 if (trim($paragraph) && $position == 'before'){
276 // not on the last paragraph
277 if($index+1 != count($paragraphs))
278 $paragraphs[$index] = $paragraphs[$index] . $tag;
279 }
280 }
281 return implode('', $paragraphs);
282 }
283
284 }
285