PluginProbe
Taboola / 1.0.15
Taboola v1.0.15
1.0.4 1.0.5 1.0.6 1.0.8 2.0.1 2.0.2 2.1.0 2.1.1 2.2.2 2.2.3 3.0.0 3.0.1 3.0.2 3.1.0 trunk 1.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.2 1.0.3
← All changes | taboola_widget.php +90 -515 2.0.21.0.15 View file →
@@ -2,30 +2,24 @@
2 2 /**
3 3 * Plugin Name: Taboola
4 4 * Plugin URI: https://developers.taboola.com/web-integrations/discuss
5 5 * Description: Taboola
6 - * Version: 2.0.2
6 + * Version: 1.0.15
7 7 * Author: Taboola
8 8 */
9 9
10 -define ("TABOOLA_PLUGIN_VERSION","2.0.2"); // => UPDATE FOR *EVERY* RELEASE (USED FOR TRACKING)
11 -define ("TABOOLA_MIN_VER","2.0.1"); // => UPDATE *ONLY* IF THIS RELEASE HAS *DB CHANGES*
12 -define ("TABOOLA_DEBUG_MODE", false); // => SET TO 'FALSE' FOR *EVERY* RELEASE (USED TO SUPRESS DEBUGGING LOGS)
13 -
14 -define ("TABOOLA_OPTION_NAME","taboola_plugin_version"); // *If* this release has DB changes, then the min version will be saved under 'taboola_plugin_version' in 'wp_options'.
15 -
16 -define ("TABOOLA_XPATH_MARKER","/");
17 -define ("TABOOLA_JS_INDICATOR","{JS}");
18 -define ("TABOOLA_JS_MARKER","{");
10 +define ("XPATH_MARKER","/");
11 +define ("JS_INDICATOR","{JS}");
12 +define ("JS_MARKER","{");
19 13 define ("TABOOLA_CONTENT_FORMAT_STRING",'string');
20 14 define ("TABOOLA_CONTENT_FORMAT_SCRIPT",'script');
21 15 define ("TABOOLA_CONTENT_FORMAT_HTML",'html');
16 +define ("TABOOLA_PLUGIN_VERSION","1.0.15");
22 17
23 18
24 19 include_once('widget.php');
25 20 require_once('JavaScriptWrapper.php');
26 21
27 -
28 22 if (!class_exists('TaboolaWP')) {
29 23 class TaboolaWP
30 24 {
31 25 //save internal data
@@ -32,8 +26,9 @@
32 26 public $data = array();
33 27 public $_is_widget_on_page;
34 28 public $_is_head_script_loaded = false;
35 29
30 +
36 31 function __construct()
37 32 {
38 33 global $wpdb;
39 34
@@ -50,17 +45,16 @@
50 45
51 46 $this->tbl_taboola_settings = $wpdb->prefix . '_taboola_settings';
52 47
53 48 //activation function
54 - register_activation_hook($this->plugin_name, array(&$this, 'update_db'));
55 - add_action('admin_init', array(&$this, 'update_db'));
49 + register_activation_hook($this->plugin_name, array(&$this, 'activate'));
56 50
57 51 // Enable sidebar widgets
58 - if ($this->settings != NULL && !empty($this->settings->publisher_id)){
52 + if($this->settings != NULL && !empty($this->settings->publisher_id)){
59 53 //register Taboola widget
60 54 add_action('widgets_init',
61 - function(){
62 - return register_widget("WP_Widget_Taboola");
55 + function(){
56 + return register_widget("WP_Widget_Taboola");
63 57 }
64 58 );
65 59 }
66 60
@@ -69,17 +63,20 @@
69 63 if (is_admin()) {
70 64 //add menu for plugin
71 65 add_action( 'admin_menu', array(&$this, 'admin_generate_menu') );
72 66 add_filter('plugin_action_links', array(&$this, 'plugin_action_links'), 10, 2 );
73 - }else if ($this->settings != NULL){
67 + } else {
68 + if($this->settings != NULL){
74 69 add_action('wp_head', array(&$this, 'taboola_header_loader_inject'));
75 70 add_action('wp_footer', array(&$this, 'taboola_footer_loader_js'));
76 71 add_filter('the_content', array(&$this, 'load_taboola_content'));
77 - add_filter('the_content', array(&$this, 'load_taboola_content_mid'));
78 - add_filter('the_content', array(&$this, 'load_taboola_content_home'));
72 + }
79 73 }
80 - }
74 + }
81 75
76 +
77 +
78 +
82 79 function plugin_action_links($links, $file) {
83 80 static $this_plugin;
84 81
85 82 if (!$this_plugin) {
@@ -98,24 +95,8 @@
98 95 $retVal = ((trim($this->settings->publisher_id) != '') && is_single() && $this->settings->first_bc_enabled && trim($this->settings->first_bc_widget_id) != '');
99 96 return $retVal;
100 97 }
101 98
102 - private function should_show_content_widget_mid(){
103 - // PC - only if v2 was installed:
104 - if (!$this->is_db_updated_for_min_ver("2.0.0"))
105 - return false;
106 - $retVal1 = ((trim($this->settings->publisher_id) != '') && is_single() && $this->settings->mid_enabled && trim($this->settings->mid_widget_id) != '');
107 - return $retVal1;
108 - }
109 -
110 - private function should_show_content_widget_home(){
111 - // PC - only if v2 was installed:
112 - if (!$this->is_db_updated_for_min_ver("2.0.0"))
113 - return false;
114 - $retVal2 = ((trim($this->settings->publisher_id) != '') && is_front_page() && $this->settings->home_enabled && trim($this->settings->home_widget_id) != '');
115 - return $retVal2;
116 - }
117 -
118 99 private function should_show_sidebar_widget(){
119 100 $retVal = ((trim($this->settings->publisher_id) != '') && is_active_widget( false, false, TABOOLA_WIDGET_BASE_ID, true ));
120 101 return $retVal;
121 102 }
@@ -121,15 +102,16 @@
121 102 }
122 103
123 104 // Determine if a taboola widget should be added somewhere on the current page (content or sidebar)
124 105 function is_widget_on_page(){
125 - return $this->should_show_content_widget() || $this->should_show_content_widget_mid() || $this->should_show_content_widget_home() || $this->should_show_sidebar_widget();
106 + return $this->should_show_content_widget() || $this->should_show_sidebar_widget();
126 107 }
127 108
128 109 function get_page_type(){
110 +
129 111 $page_type='article';
130 112 if (is_front_page()){
131 - $page_type='home';
113 + $page_type='home';
132 114 }else if (is_category() || is_archive() || is_search()){
133 115 $page_type='category';
134 116 }
135 117 return $page_type;
@@ -140,10 +122,9 @@
140 122 $head_string = "";
141 123
142 124 // Only adding the loader if a widget is going to be placed on the page.
143 125 if ($this->is_widget_on_page()){
144 - // PC - since these params will be inserted in 'loaderInjectionScript.js' via search and replace,
145 - // double brackets are used to ensure that each key is a unique string.
126 +
146 127 $stringParams = array(
147 128 '{{PUBLISHER_ID}}' => $this->settings->publisher_id,
148 129 '{{PAGE_TYPE}}' => $this->get_page_type(),
149 130 '{{WORDPRESS_VERSION}}' => get_bloginfo('version'),
@@ -148,14 +129,13 @@
148 129 '{{PAGE_TYPE}}' => $this->get_page_type(),
149 130 '{{WORDPRESS_VERSION}}' => get_bloginfo('version'),
150 131 '{{PHP_VERSION}}' => phpversion(),
151 132 '{{PLUGIN_VERSION}}' => TABOOLA_PLUGIN_VERSION,
152 - '{{LOC_MID}}' => $this->settings->mid_location_string,
153 - '{{LOC_HOME}}' => $this->settings->home_location_string
133 + '{{LOCATION}}' => $this->settings->location_string
154 134 );
155 135
156 136 $scriptWrapper = new JavaScriptWrapper("loaderInjectionScript.js",$stringParams);
157 - $head_string = $scriptWrapper->getScriptMarkupString();
137 + $head_string = $scriptWrapper->getScripMarkupString();
158 138 }
159 139
160 140 return $head_string;
161 141 }
@@ -162,8 +142,9 @@
162 142
163 143
164 144 // This function is used for the hook action, injects the header content to the <head> tag.
165 145 function taboola_header_loader_inject(){
146 +
166 147 echo $this->taboola_header_loader_js();
167 148 }
168 149
169 150
@@ -171,78 +152,44 @@
171 152
172 153 // Only adding flush script if a widget is going to be placed on the page.
173 154 if ( $this->is_widget_on_page() ){
174 155 $flushInjectionScript = new JavaScriptWrapper('flushInjectionScript.js',array());
175 - echo $flushInjectionScript->getScriptMarkupString();
156 + echo $flushInjectionScript->getScripMarkupString();
176 157 }
177 158 }
178 159
179 - // Below-article widget
180 160 function load_taboola_content($content)
181 161 {
182 162 $taboola_content = array();
183 163 if ($this->should_show_content_widget()){
184 164
185 - $firstWidgetParams = array(
186 - '{{WIDGET_ID}}' => $this->settings->first_bc_widget_id,
187 - '{{CONTAINER}}' => 'taboola-below-article-thumbnails',
188 - // PC - If v2 was not installed, then use v1 logic
189 - '{{PLACEMENT}}' => (!empty($this->settings->first_bc_placement)) ? $this->settings->first_bc_placement : 'below-article' // In case v1 upgrade has not run yet
190 - );
165 + $firstWidgetParams = array('{{WIDGET_ID}}' => $this->settings->first_bc_widget_id,
166 + '{{CONTAINER}}' => 'taboola-below-article',
167 + '{{PLACEMENT}}' => 'below-article');
191 168
192 169 $firstWidgetScript = new JavaScriptWrapper("widgetInjectionScript.js",$firstWidgetParams);
193 - $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-below-article-thumbnails'></div>";
170 + $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-below-article'></div>";
194 171 $taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $firstWidgetScript;
195 172
196 - $content = $this->embed_taboola_content_location($content,$taboola_content);
197 - }
173 + // Adding the 2nd widget if needed
174 + if($this->settings->second_bc_enabled && trim($this->settings->second_bc_widget_id) != ''){
198 175
199 - return $content;
200 - }
176 + $secondWidgetParams = array('{{WIDGET_ID}}' => $this->settings->second_bc_widget_id,
177 + '{{CONTAINER}}' => 'taboola-below-article-second',
178 + '{{PLACEMENT}}' => 'below-article-2nd');
179 + $secondWidgetScript = new JavaScriptWrapper("widgetInjectionScript.js",$secondWidgetParams);
201 180
202 - // Mid-article-widget
203 - function load_taboola_content_mid($content)
204 - {
205 - $taboola_content_mid = array();
206 - if ($this->should_show_content_widget_mid()){
181 + $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-below-article-second'></div>";
182 + $taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $secondWidgetScript;
183 + }
207 184
208 - $secondWidgetParams = array('{{WIDGET_ID}}' => $this->settings->mid_widget_id,
209 - '{{CONTAINER}}' => 'taboola-mid-article-thumbnails',
210 - '{{PLACEMENT}}' => $this->settings->mid_placement);
211 -
212 - $secondWidgetScript = new JavaScriptWrapper("widgetInjectionScript.js",$secondWidgetParams);
213 - $taboola_content_mid[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-mid-article-thumbnails'></div>";
214 - $taboola_content_mid[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $secondWidgetScript;
215 -
216 - $content = $this->embed_taboola_content_location_mid($content,$taboola_content_mid,trim($this->settings->mid_location_string));
185 + $content = $this->embed_taboola_content_location($content,$taboola_content,trim($this->settings->location_string));
217 186 }
218 187
219 188 return $content;
220 189 }
221 190
222 - // Homepage widget
223 - function load_taboola_content_home($content)
224 - {
225 -
226 - $taboola_content_home = array();
227 - if ($this->should_show_content_widget_home()){
228 191
229 - $homeWidgetParams = array('{{WIDGET_ID}}' => $this->settings->home_widget_id,
230 - '{{CONTAINER}}' => 'taboola-homepage-thumbnails',
231 - '{{PLACEMENT}}' => $this->settings->home_placement);
232 -
233 - $homeWidgetScript = new JavaScriptWrapper("widgetInjectionScript.js",$homeWidgetParams);
234 - $taboola_content_home[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-homepage-thumbnails'></div>";
235 - $taboola_content_home[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $homeWidgetScript;
236 -
237 - $content = $this->embed_taboola_content_location_home($content,$taboola_content_home,trim($this->settings->home_location_string));
238 - }
239 - return $content;
240 -
241 - }
242 -
243 - // Below-article widget
244 -
245 192 // Extract the taboola content in the required format:
246 193 // String - for injecting on the servr side
247 194 // Script or HTML - for injecting on the client side
248 195 function format_taboola_content($taboola_content,$format){
@@ -264,95 +211,26 @@
264 211 return $ret_val;
265 212 }
266 213
267 214
268 - // Mid-article widget
269 - function format_taboola_content_mid($taboola_content_mid,$format){
270 - $ret_val = null;
271 -
272 - switch($format){
273 - case TABOOLA_CONTENT_FORMAT_STRING:
274 - $result_string = join("",$taboola_content_mid[TABOOLA_CONTENT_FORMAT_HTML]).
275 - "<script type='text/javascript'>".join("\n",$taboola_content_mid[TABOOLA_CONTENT_FORMAT_SCRIPT])."</script>";
276 - $ret_val = $result_string;
277 - break;
278 -
279 - // script or html
280 - default:
281 - $ret_val = str_replace("\n","",join("",$taboola_content_mid[$format]));
282 - break;
283 - }
284 -
285 - return $ret_val;
286 - }
287 -
288 -
289 - // Homepage widget
290 - function format_taboola_content_home($taboola_content_home,$format){
291 -
292 - $ret_val = null;
293 -
294 - switch($format){
295 - case TABOOLA_CONTENT_FORMAT_STRING:
296 - $result_string = join("",$taboola_content_home[TABOOLA_CONTENT_FORMAT_HTML]).
297 - "<script type='text/javascript'>".join("\n",$taboola_content_home[TABOOLA_CONTENT_FORMAT_SCRIPT])."</script>";
298 - $ret_val = $result_string;
299 - break;
300 -
301 - // script or html
302 - default:
303 - $ret_val = str_replace("\n","",join("",$taboola_content_home[$format]));
304 - break;
305 - }
306 -
307 - return $ret_val;
308 -
309 - }
310 -
311 - // Below-article widget
312 - // Do the actual logic of choosing where to place the taboola content.
313 - function embed_taboola_content_location($content, $taboola_content){
215 + // Do the actual logic of choosing where to place the taboola content based on the "location" attribute
216 + function embed_taboola_content_location($content, $taboola_content, $location){
314 217 $do_default = true;
315 218
316 - // tag is placed outside of content in order to allow "read more" functionality.
317 - if ($this->settings->out_of_content_enabled){
318 -
319 - $scriptWrapper = new JavaScriptWrapper("js_inject.min.js",array(
320 - "{{HTML}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_HTML),
321 - "{{SCRIPT}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_SCRIPT))
322 - );
323 - $scriptWrapper->appendScript("injectWidgetByMarker('tbmarker');");
324 - $content = $content."<span id='tbmarker'></span><script type='text/javascript'>".$scriptWrapper."</script>";
325 - $do_default = false;
326 - }
327 -
328 - // Default for below-article widget - add to the end of the content
329 - if ($do_default){
330 - $content = $content.$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_STRING);
331 - }
332 -
333 - return $content;
334 - }
335 -
336 - // Mid-article widget
337 - // Do the actual logic of choosing where to place the taboola content based on the "location" attribute
338 - function embed_taboola_content_location_mid($content, $taboola_content_mid, $location){
339 - $do_default = true;
340 -
341 219 if (isset($location) && $location != ''){
342 220 $first_char = substr($location,0,1);
343 221
344 222 // DIV/XPATH provided for JS handling
345 - if ($first_char == TABOOLA_JS_MARKER){
346 - $full_indicator = substr($location,0,strlen(TABOOLA_JS_INDICATOR));
223 + if ($first_char == JS_MARKER){
224 + $full_indicator = substr($location,0,strlen(JS_INDICATOR));
347 225
348 - if ($full_indicator == TABOOLA_JS_INDICATOR){
226 + if ($full_indicator == JS_INDICATOR){
349 227
350 - $xpath = substr($location,strlen(TABOOLA_JS_INDICATOR));
351 - $scriptWrapper = new JavaScriptWrapper("js_inject.min.js",array(
352 - "{{HTML}}" => $this->format_taboola_content_mid($taboola_content_mid,TABOOLA_CONTENT_FORMAT_HTML),
353 - "{{SCRIPT}}" => $this->format_taboola_content_mid($taboola_content_mid,TABOOLA_CONTENT_FORMAT_SCRIPT))
354 - );
228 + $xpath = substr($location,strlen(JS_INDICATOR));
229 + $scriptWrapper = new JavaScriptWrapper("js_inject.min.js",array(
230 + "{{HTML}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_HTML),
231 + "{{SCRIPT}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_SCRIPT))
232 + );
355 233 $scriptWrapper->appendScript("injectWidgetByXpath('".$xpath."');");
356 234 $content = $content."<span id='tbdefault'></span><script type='text/javascript'>".$scriptWrapper."</script>";
357 235
358 236 $do_default = false;
@@ -357,86 +235,48 @@
357 235
358 236 $do_default = false;
359 237 }
360 238
361 - // server side selector provided (see simple_html_dom selectors http://simplehtmldom.sourceforge.net/manual.htm)
239 + // server side selector provided (see simple_html_dom selectors https://simplehtmldom.sourceforge.net/manual.htm)
362 240 // basically it's CSS selectors like in jQuery
363 241 } else{
242 +
364 243 require_once('simple_html_dom.php');
365 244
366 245 $html_doc = str_get_html($content);
367 - $target_location = $html_doc->find($location,($this->settings->mid_location_string_occurrence)-1);
246 + $target_location = $html_doc->find($location,0);
368 247
369 248 // if the location was found within the html content
370 249 if (isset($target_location) && is_object($target_location)){
371 250
372 251 // adding taboola content AFTER the target location
373 - $target_location->outertext = $target_location->outertext.$this->format_taboola_content_mid($taboola_content_mid,TABOOLA_CONTENT_FORMAT_STRING);
252 + $target_location->outertext = $target_location->outertext.$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_STRING);
374 253 $content = $html_doc;
375 254 $do_default = false;
376 255 }
377 256 }
257 +
258 + // tag is placed outside of content in order to allow "read more" functionality.
259 + }elseif ($this->settings->out_of_content_enabled){
260 +
261 + $scriptWrapper = new JavaScriptWrapper("js_inject.min.js",array(
262 + "{{HTML}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_HTML),
263 + "{{SCRIPT}}" => $this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_SCRIPT))
264 + );
265 + $scriptWrapper->appendScript("injectWidgetByMarker('tbmarker');");
266 + $content = $content."<span id='tbmarker'></span><script type='text/javascript'>".$scriptWrapper."</script>";
267 + $do_default = false;
378 268 }
379 - // Default for below-article widget - add to the end of the content
380 - // if ($do_default){
381 - // $content = $content.$this->format_taboola_content_mid($taboola_content_mid,TABOOLA_CONTENT_FORMAT_STRING);
382 - // }
383 269
270 + // Default - add to the end of the content
271 + if ($do_default){
272 + $content = $content.$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_STRING);
273 + }
274 +
384 275 return $content;
385 276 }
386 277
387 - // Homepage widget
388 - // Do the actual logic of choosing where to place the taboola content based on the "location" attribute
389 - function embed_taboola_content_location_home($content, $taboola_content_home, $location){
390 278
391 - $do_default = true;
392 -
393 - if (isset($location) && $location != ''){
394 - $first_char = substr($location,0,1);
395 -
396 - // DIV/XPATH provided for JS handling
397 - if ($first_char == TABOOLA_JS_MARKER){
398 - $full_indicator = substr($location,0,strlen(TABOOLA_JS_INDICATOR));
399 -
400 - if ($full_indicator == TABOOLA_JS_INDICATOR){
401 -
402 - $xpath = substr($location,strlen(TABOOLA_JS_INDICATOR));
403 - $scriptWrapper = new JavaScriptWrapper("js_inject.min.js",array(
404 - "{{HTML}}" => $this->format_taboola_content_home($taboola_content_home,TABOOLA_CONTENT_FORMAT_HTML),
405 - "{{SCRIPT}}" => $this->format_taboola_content_home($taboola_content_home,TABOOLA_CONTENT_FORMAT_SCRIPT))
406 - );
407 - $scriptWrapper->appendScript("injectWidgetByXpath('".$xpath."');");
408 - $content = $content."<span id='tbdefault'></span><script type='text/javascript'>".$scriptWrapper."</script>";
409 -
410 - $do_default = false;
411 - }
412 -
413 - // server side selector provided (see simple_html_dom selectors http://simplehtmldom.sourceforge.net/manual.htm)
414 - // basically it's CSS selectors like in jQuery
415 - } else{
416 - require_once('simple_html_dom.php');
417 -
418 - $html_doc = str_get_html($content);
419 - $target_location = $html_doc->find($location,($this->settings->home_location_string_occurrence)-1);
420 -
421 - // if the location was found within the html content
422 - if (isset($target_location) && is_object($target_location)){
423 -
424 - // adding taboola content AFTER the target location
425 - $target_location->outertext = $target_location->outertext.$this->format_taboola_content_home($taboola_content_home,TABOOLA_CONTENT_FORMAT_STRING);
426 - $content = $html_doc;
427 - $do_default = false;
428 - }
429 - }
430 - }
431 - // Default for below-article widget - add to the end of the content
432 - // if ($do_default){
433 - // $content = $content.$this->format_taboola_content_home($taboola_content_home,TABOOLA_CONTENT_FORMAT_STRING);
434 - // }
435 - return $content;
436 -
437 - }
438 -
439 279 function admin_generate_menu(){
440 280 global $current_user;
441 281 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 282 }
@@ -441,9 +281,8 @@
441 281 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 282 }
443 283
444 284 function admin_taboola_settings(){
445 -
446 285 global $wpdb;
447 286 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
448 287 $taboola_errors = array();
449 288 if($_SERVER['REQUEST_METHOD'] == 'POST'){
@@ -448,253 +287,55 @@
448 287 $taboola_errors = array();
449 288 if($_SERVER['REQUEST_METHOD'] == 'POST'){
450 289
451 290 if(trim($_POST['publisher_id']) == ''){
452 - $taboola_errors[] = "Publisher ID";
291 + $taboola_errors[] = "Please add a 'Publisher ID' in order to apply changes to your widgets";
453 292 }
454 -
455 - if(isset($_POST['first_bc_enabled'])) {
456 - if (trim($_POST['first_bc_widget_id']) == '') {
457 - $taboola_errors[] = "Below-article > Widget ID";
458 - }
459 - if (trim($_POST['first_bc_placement']) == '') {
460 - $taboola_errors[] = "Below-article > Placement Name";
461 - }
293 + if((isset($_POST['first_bc_enabled']) && trim($_POST['first_bc_widget_id']) == '') ||
294 + (isset($_POST['second_bc_enabled']) && trim($_POST['second_bc_widget_id']) == '')
295 + ){
296 + $taboola_errors[] = "Please add a 'Widget ID' in order to apply changes to your widgets";
462 297 }
463 -
464 - if(isset($_POST['mid_enabled'])) {
465 - if (trim($_POST['mid_widget_id']) == '') {
466 - $taboola_errors[] = "Mid-article > Widget ID";
467 - }
468 - if (trim($_POST['mid_placement']) == '') {
469 - $taboola_errors[] = "Mid-article > Placement Name";
470 - }
471 - if (trim($_POST['mid_location_string']) == '') {
472 - $taboola_errors[] = "Mid-article > CSS selector";
473 - }
474 - else {
475 - // If the 'location' WAS filled in, then...
476 -
477 - // 1) Check for a valid 'location':
478 -
479 - // Validation method has not been implemented
480 - // mid_if (!$this->is_locaton_string_valid1($_POST['mid_location_string'])) {
481 - // $taboola_errors[] = "Mid-article > CSS Selector (invalid value)";
482 - // }
483 -
484 - // 2) Validate the 'occurrence':
485 - if (!$this->is_mid_location_string_occurrence_valid($_POST['mid_location_string_occurrence'])) {
486 - $taboola_errors[] = "Mid-article > Occurance (must be >= 1)";
487 - }
488 - }
489 -
298 + if (trim($_POST['location_string']) != '' && !$this->is_location_string_valid($_POST['location_string'])){
299 + $taboola_errors[] = "Location string not valid, please contact your Taboola account manager to get a valid location string";
490 300 }
491 -
492 - if(isset($_POST['home_enabled'])) {
493 - if (trim($_POST['home_widget_id']) == '') {
494 - $taboola_errors[] = "Homepage > Widget ID";
495 - }
496 - if (trim($_POST['home_placement']) == '') {
497 - $taboola_errors[] = "Homepage > Placement Name";
498 - }
499 -
500 - if (trim($_POST['home_location_string']) == '') {
501 - $taboola_errors[] = "Homepage > CSS selector";
502 - }
503 - else {
504 - // If the 'location' WAS filled in, then...
505 -
506 - // 1) Check for a valid 'location':
507 -
508 - // Validation method has not been implemented
509 - // if (!$this->is_home_location_string_valid($_POST['home_location_string'])) {
510 - // $taboola_errors[] = "Homepage > CSS Selector (invalid value)";
511 - // }
512 -
513 - // 2) Validate the 'occurrence':
514 - if (!empty($_POST['home_location_string']) && !$this->is_home_location_string_occurrence_valid($_POST['home_location_string_occurrence'])) {
515 - $taboola_errors[] = "Homepage > Occurance (must be >= 1)";
516 - }
517 - }
518 - }
519 -
520 301 if(count($taboola_errors) == 0){
521 302
522 303 $data = array(
523 304 "publisher_id" => trim($_POST['publisher_id']),
524 -
525 305 "first_bc_enabled" => isset($_POST['first_bc_enabled']) ? true : false,
526 - "first_bc_widget_id" => !empty($_POST['first_bc_widget_id']) ? trim($_POST['first_bc_widget_id']) : '',
527 - "first_bc_placement" => !empty($_POST['first_bc_placement']) ? trim($_POST['first_bc_placement']) : '',
528 -
529 - "out_of_content_enabled" => isset($_POST['out_of_content_enabled']) ? true : false,
530 -
531 - "mid_enabled" => isset($_POST['mid_enabled']) ? true : false,
532 - "mid_widget_id" => !empty($_POST['mid_widget_id']) ? trim($_POST['mid_widget_id']) : '',
533 - "mid_placement" => !empty($_POST['mid_placement']) ? trim($_POST['mid_placement']) : '',
534 - "mid_paragraph_ui_mode" => !empty($_POST['mid_paragraph_ui_mode']) ? trim($_POST['mid_paragraph_ui_mode']) : '',
535 -
536 - "mid_location_string_occurrence" => !empty($_POST['mid_location_string_occurrence']) ? $_POST['mid_location_string_occurrence'] : '',
537 - "mid_location_string" => !empty($_POST['mid_location_string']) ? trim($_POST['mid_location_string']) : '',
538 -
539 - "home_enabled" => isset($_POST['home_enabled']) ? true : false,
540 - "home_widget_id" => !empty($_POST['home_widget_id']) ? trim($_POST['home_widget_id']) : '',
541 - "home_placement" => !empty($_POST['home_placement']) ? trim($_POST['home_placement']) : '',
542 -
543 - "home_location_string_occurrence" => !empty($_POST['home_location_string_occurrence']) ? $_POST['home_location_string_occurrence'] : '',
544 - "home_location_string" => !empty($_POST['home_location_string']) ? trim($_POST['home_location_string']) : ''
306 + "first_bc_widget_id" => trim($_POST['first_bc_widget_id']),
307 + "second_bc_enabled" => isset($_POST['second_bc_enabled']) ? true : false,
308 + "second_bc_widget_id" => trim($_POST['second_bc_widget_id']),
309 + "location_string" => trim($_POST['location_string']),
310 + "out_of_content_enabled" => isset($_POST['out_of_content_enabled']) ? true : false
545 311 );
546 312
547 313 //var_dump($settings);
548 -
549 - $is_valid_nonce = false;
550 -
551 - if (isset( $_POST['my_plugin_nonce']) && wp_verify_nonce( $_POST['my_plugin_nonce'], 'my_plugin_update_field_action' ) ) {
552 - $is_valid_nonce = true;
314 + if($settings == NULL){
315 + $wpdb->insert($this->tbl_taboola_settings, $data, null, null);
316 + } else {
317 + $wpdb->update($this->tbl_taboola_settings, $data, array('id' => $settings->id));
553 318 }
554 -
555 - if ($is_valid_nonce) {
556 - if($settings == NULL){
557 - $wpdb->insert($this->tbl_taboola_settings, $data, null, null);
558 - } else {
559 - $wpdb->update($this->tbl_taboola_settings, $data, array('id' => $settings->id));
560 - }
561 - }
562 -
563 319 }
564 320 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
565 321 }
566 322
323 +
567 324 include_once('settings.php');
568 325 }
569 326
570 - function is_mid_location_string_valid($mid_location_string){
327 + function is_location_string_valid($location_string){
571 328 // TODO:: validate the location string
572 329 return true;
573 330 }
574 -
575 - function is_mid_location_string_occurrence_valid($mid_location_string_occurrence){
576 -
577 - if ((int)$mid_location_string_occurrence >= 1) {
578 - return true;
579 - }
580 - return false;
581 - }
582 -
583 - function is_home_location_string_valid($home_location_string){
584 - // TODO:: validate the location string
585 - return true;
586 - }
587 -
588 - function is_home_location_string_occurrence_valid($home_location_string_occurrence){
589 -
590 - if ((int)$home_location_string_occurrence >= 1) {
591 - return true;
592 - }
593 - return false;
594 - }
595 - function columnExists($column_name) {
331 + function activate(){
596 332 global $wpdb;
597 - $table_name = $wpdb->prefix . "_taboola_settings";
598 - tb_write_log("table name : " . $table_name);
599 - tb_write_log("column name : " . $column_name);
600 333
601 - $column_exists = $wpdb->get_var("SHOW COLUMNS FROM $table_name LIKE '$column_name'") !== null;
334 + require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
602 335
603 - if ($column_exists) {
604 - tb_write_log("Yes - column " . $column_name . " DOES exist!"); //PC
605 - return true;
606 - } else {
607 - tb_write_log("No - column " . $column_name . " does NOT exist!"); //PC
608 - return false;
609 - }
610 - }
336 + $settings_table = $this->tbl_taboola_settings;
611 337
612 - function is_upgrade_from_v1() {
613 -
614 - if($this->columnExists("first_bc_widget_id") && !$this->columnExists("first_bc_placement")){
615 - tb_write_log("This IS a v1 upgrade!"); //PC
616 - return true;
617 - }
618 - else {
619 - tb_write_log("This is NOT a v1 upgrade!"); //PC
620 - return false;
621 - }
622 -
623 - }
624 -
625 - function is_db_updated_for_min_ver($min_ver) {
626 - /**
627 - * Checks if the DB was *previously* updated for the minimum version specified.
628 - * $min_ver should be passed in a format like this: "2.1.0"
629 - */
630 - global $wpdb;
631 -
632 - // Check the saved version in wp_options. Default to '1.0.0' if the option is not found.
633 - $saved_version = get_option(TABOOLA_OPTION_NAME, '1.0.0');
634 -
635 - $db_is_up_to_date = version_compare($saved_version, $min_ver, '>=');
636 - //tb_write_log($db_is_up_to_date);
637 - return $db_is_up_to_date;
638 -
639 - }
640 -
641 - function is_db_updated_for_current_ver() {
642 - /**
643 - * Checks if the DB was *previously* updated for the version currently loaded.
644 - */
645 - global $wpdb;
646 -
647 - // Check the saved version in wp_options. Default to '1.0.0' if the option is not found.
648 - $saved_version = get_option(TABOOLA_OPTION_NAME, '1.0.0');
649 -
650 - // Get the currently loaded plugin version from wp_options.
651 - $plugin_version = $this->get_loaded_plugin_version();
652 -
653 - $db_is_up_to_date = version_compare($saved_version, $plugin_version, '>=');
654 - //tb_write_log($db_is_up_to_date);
655 - return $db_is_up_to_date;
656 -
657 - }
658 -
659 - function get_loaded_plugin_version() {
660 -
661 - $plugin_data = get_plugin_data( __FILE__ ); // Can be invoked from Admin page only
662 - $loaded_plugin_version = $plugin_data['Version'];
663 - return $loaded_plugin_version;
664 -
665 - }
666 -
667 - function save_taboola_version($min_ver) {
668 - // Get the currently loaded plugin version
669 - // $plugin_version = $this->get_loaded_plugin_version();
670 -
671 - tb_write_log("SAVING NEW MIN VERSION: " . $min_ver); // PC
672 -
673 - // Check the saved version in wp_options. Default to '' if the option is not found.
674 - $saved_version = get_option(TABOOLA_OPTION_NAME, '');
675 - if ($saved_version == '') {
676 - add_option(TABOOLA_OPTION_NAME, $min_ver);
677 - }
678 - else {
679 - update_option(TABOOLA_OPTION_NAME, $min_ver);
680 - }
681 - }
682 -
683 - function update_db(){
684 -
685 - // If we are up to date, then skip this method...
686 - if ($this->is_db_updated_for_min_ver(TABOOLA_MIN_VER)) {
687 - //tb_write_log("All up to date!");
688 - return;
689 - }
690 -
691 - $this->save_taboola_version(TABOOLA_MIN_VER);
692 -
693 - global $wpdb;
694 - require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
695 -
696 -
697 338 //check mysql version
698 339 if (function_exists('mysql_get_server_info') && version_compare(mysql_get_server_info(), '4.1.0', '>=')) {
699 340 if (!empty($wpdb->charset))
700 341 $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
@@ -701,14 +342,8 @@
701 342 if (!empty($wpdb->collate))
702 343 $charset_collate .= " COLLATE $wpdb->collate";
703 344 }
704 345
705 - // Check if this is an upgrade from v1
706 - $is_upgrade_from_v1 = $this->is_upgrade_from_v1();
707 -
708 - // tb_write_log("Is upgrade from v1: " . ($is_upgrade_from_v1 ? 'true' : 'false'));
709 -
710 -
711 346 //settings table structure
712 347 $sql_table_settings = "
713 348 CREATE TABLE `" . $wpdb->prefix . "_taboola_settings` (
714 349 `id` INT NOT NULL AUTO_INCREMENT ,
@@ -714,30 +349,16 @@
714 349 `id` INT NOT NULL AUTO_INCREMENT ,
715 350 `publisher_id` VARCHAR(255) DEFAULT NULL,
716 351 `first_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
717 352 `first_bc_widget_id` VARCHAR(255) DEFAULT NULL,
718 - `first_bc_placement` VARCHAR(255) DEFAULT " . ($is_upgrade_from_v1 ? "'below-article'" : "NULL") .",
719 353 `first_bc_custom_css` TEXT DEFAULT NULL,
720 354 `second_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
721 355 `second_bc_widget_id` VARCHAR(255) DEFAULT NULL,
722 356 `second_bc_custom_css` TEXT DEFAULT NULL,
723 357 `location_string` TEXT DEFAULT NULL,
724 - `mid_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
725 - `mid_widget_id` VARCHAR(255) DEFAULT NULL,
726 - `mid_placement` VARCHAR(255) DEFAULT NULL,
727 358 `out_of_content_enabled` TINYINT(1) NOT NULL DEFAULT TRUE,
728 - `mid_location_string` TEXT DEFAULT NULL,
729 - `mid_location_string_occurrence` SMALLINT DEFAULT NULL,
730 - `mid_paragraph_ui_mode` VARCHAR(255) DEFAULT NULL,
731 - `home_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
732 - `home_widget_id` VARCHAR(255) DEFAULT NULL,
733 - `home_placement` VARCHAR(255) DEFAULT NULL,
734 - `home_location_string` TEXT DEFAULT NULL,
735 - `home_location_string_occurrence` SMALLINT DEFAULT NULL,
736 359 PRIMARY KEY (`id`)
737 360 )" . $charset_collate . ";";
738 -
739 - // tb_write_log($sql_table_settings);
740 361
741 362 // create/update the table
742 363 dbDelta($sql_table_settings);
743 364 }
@@ -745,52 +366,6 @@
745 366 }
746 367
747 368 global $taboolaWP;
748 369 $taboolaWP = new TaboolaWP();
749 -
750 -/*
751 -A few utility methods for logging
752 -*/
753 -
754 -// Writes debugging messages to 'logs/debug.log'.
755 -// The exact file location depends on *where* you trigger the function.
756 -// In this script, we trigger the function from the admin dashboard.
757 -// So the log file is located under 'wp-admin/logs'.
758 -function tb_write_log($log_msg)
759 -{
760 - $log_filename = "logs";
761 - if (!file_exists($log_filename))
762 - {
763 - mkdir($log_filename, 0777, true);
764 - }
765 - $log_file_data = $log_filename.'/debug.log';
766 -
767 - // Add date/time
768 - $date = date('Y-m-d H:i:s');
769 - $log_msg_with_date = $date." : ".$log_msg;
770 -
771 - if (TABOOLA_DEBUG_MODE)
772 - file_put_contents($log_file_data, $log_msg_with_date . "\n", FILE_APPEND);
773 -
774 -}
775 -
776 -// Write to console
777 -function tb_console_log( $data ){
778 -
779 - If(wp_get_environment_type() === 'development') {
780 -
781 - echo '<script>';
782 - echo 'console.log('. json_encode( $data ) .')';
783 - echo '</script>';
784 -
785 - }
786 -}
787 -
788 -// Write to webpage and stop
789 -function tb_print_to_page($data) {
790 - If(wp_get_environment_type() === 'development') {
791 - print_r($data);
792 - die;
793 - }
794 -}
795 370
796 371 //