PluginProbe
Taboola / 1.0.5
Taboola v1.0.5
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 +83 -539 2.0.21.0.5 View file →
@@ -1,22 +1,16 @@
1 1 <?php
2 2 /**
3 3 * Plugin Name: Taboola
4 - * Plugin URI: https://developers.taboola.com/web-integrations/discuss
4 + * Plugin URI: http://taboola.com
5 5 * Description: Taboola
6 - * Version: 2.0.2
6 + * Version: 1.0.5
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');
22 16
@@ -21,11 +15,9 @@
21 15 define ("TABOOLA_CONTENT_FORMAT_HTML",'html');
22 16
23 17
24 18 include_once('widget.php');
25 -require_once('JavaScriptWrapper.php');
26 19
27 -
28 20 if (!class_exists('TaboolaWP')) {
29 21 class TaboolaWP
30 22 {
31 23 //save internal data
@@ -32,9 +24,9 @@
32 24 public $data = array();
33 25 public $_is_widget_on_page;
34 26 public $_is_head_script_loaded = false;
35 27
36 - function __construct()
28 + function TaboolaWP()
37 29 {
38 30 global $wpdb;
39 31
40 32 //initialize plugin constant
@@ -50,36 +42,34 @@
50 42
51 43 $this->tbl_taboola_settings = $wpdb->prefix . '_taboola_settings';
52 44
53 45 //activation function
54 - register_activation_hook($this->plugin_name, array(&$this, 'update_db'));
55 - add_action('admin_init', array(&$this, 'update_db'));
46 + register_activation_hook($this->plugin_name, array(&$this, 'activate'));
56 47
57 48 // Enable sidebar widgets
58 - if ($this->settings != NULL && !empty($this->settings->publisher_id)){
49 + if($this->settings != NULL && !empty($this->settings->publisher_id)){
59 50 //register Taboola widget
60 51 add_action('widgets_init',
61 - function(){
62 - return register_widget("WP_Widget_Taboola");
63 - }
52 + create_function('', 'return register_widget("WP_Widget_Taboola");')
64 53 );
65 54 }
66 55
67 - //$this->should_place_tag_outside_of_content = $this->settings->out_of_content_enabled;
68 -
69 56 if (is_admin()) {
70 57 //add menu for plugin
71 58 add_action( 'admin_menu', array(&$this, 'admin_generate_menu') );
72 59 add_filter('plugin_action_links', array(&$this, 'plugin_action_links'), 10, 2 );
73 - }else if ($this->settings != NULL){
60 + } else {
61 + if($this->settings != NULL){
74 62 add_action('wp_head', array(&$this, 'taboola_header_loader_inject'));
75 63 add_action('wp_footer', array(&$this, 'taboola_footer_loader_js'));
76 64 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'));
65 + }
79 66 }
80 - }
67 + }
81 68
69 +
70 +
71 +
82 72 function plugin_action_links($links, $file) {
83 73 static $this_plugin;
84 74
85 75 if (!$this_plugin) {
@@ -98,24 +88,8 @@
98 88 $retVal = ((trim($this->settings->publisher_id) != '') && is_single() && $this->settings->first_bc_enabled && trim($this->settings->first_bc_widget_id) != '');
99 89 return $retVal;
100 90 }
101 91
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 92 private function should_show_sidebar_widget(){
119 93 $retVal = ((trim($this->settings->publisher_id) != '') && is_active_widget( false, false, TABOOLA_WIDGET_BASE_ID, true ));
120 94 return $retVal;
121 95 }
@@ -121,15 +95,16 @@
121 95 }
122 96
123 97 // Determine if a taboola widget should be added somewhere on the current page (content or sidebar)
124 98 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();
99 + return $this->should_show_content_widget() || $this->should_show_sidebar_widget();
126 100 }
127 101
128 102 function get_page_type(){
103 +
129 104 $page_type='article';
130 105 if (is_front_page()){
131 - $page_type='home';
106 + $page_type='home';
132 107 }else if (is_category() || is_archive() || is_search()){
133 108 $page_type='category';
134 109 }
135 110 return $page_type;
@@ -138,24 +113,15 @@
138 113 // return the head loader script
139 114 function taboola_header_loader_js() {
140 115 $head_string = "";
141 116
142 - // Only adding the loader if a widget is going to be placed on the page.
117 + // Only adding Script1 if a widget is going to be placed on the page.
143 118 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.
146 - $stringParams = array(
147 - '{{PUBLISHER_ID}}' => $this->settings->publisher_id,
148 - '{{PAGE_TYPE}}' => $this->get_page_type(),
149 - '{{WORDPRESS_VERSION}}' => get_bloginfo('version'),
150 - '{{PHP_VERSION}}' => phpversion(),
151 - '{{PLUGIN_VERSION}}' => TABOOLA_PLUGIN_VERSION,
152 - '{{LOC_MID}}' => $this->settings->mid_location_string,
153 - '{{LOC_HOME}}' => $this->settings->home_location_string
154 - );
155 119
156 - $scriptWrapper = new JavaScriptWrapper("loaderInjectionScript.js",$stringParams);
157 - $head_string = $scriptWrapper->getScriptMarkupString();
120 + $script1_content = str_replace('{{PUBLISHER_ID}}', $this->settings->publisher_id, file_get_contents($this->plugin_directory.'js/script1.js'));
121 + $script1_content = str_replace('{{PAGE_TYPE}}',$this->get_page_type(),$script1_content);
122 +
123 + $head_string = '<script type="text/javascript">'.$script1_content.'</script>';
158 124 }
159 125
160 126 return $head_string;
161 127 }
@@ -162,8 +128,9 @@
162 128
163 129
164 130 // This function is used for the hook action, injects the header content to the <head> tag.
165 131 function taboola_header_loader_inject(){
132 +
166 133 echo $this->taboola_header_loader_js();
167 134 }
168 135
169 136
@@ -168,81 +135,44 @@
168 135
169 136
170 137 function taboola_footer_loader_js() {
171 138
172 - // Only adding flush script if a widget is going to be placed on the page.
139 + // Only adding Script1 if a widget is going to be placed on the page.
173 140 if ( $this->is_widget_on_page() ){
174 - $flushInjectionScript = new JavaScriptWrapper('flushInjectionScript.js',array());
175 - echo $flushInjectionScript->getScriptMarkupString();
141 + $script3_content = file_get_contents($this->plugin_directory.'js/script3.js');
142 + echo '<script type="text/javascript">'.$script3_content.'</script>';
176 143 }
177 144 }
178 145
179 - // Below-article widget
180 146 function load_taboola_content($content)
181 147 {
182 148 $taboola_content = array();
183 149 if ($this->should_show_content_widget()){
184 150
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 - );
151 + $script2_content = str_replace('{{WIDGET_ID}}', $this->settings->first_bc_widget_id, file_get_contents($this->plugin_directory.'js/script2.js'));
152 + $script2_content = str_replace('{{CONTAINER}}', 'taboola-below-article', $script2_content);
153 + $script2_content = str_replace('{{PLACEMENT}}', 'below-article', $script2_content);
191 154
192 - $firstWidgetScript = new JavaScriptWrapper("widgetInjectionScript.js",$firstWidgetParams);
193 - $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = "<div id='taboola-below-article-thumbnails'></div>";
194 - $taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $firstWidgetScript;
155 + $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = '<div id="taboola-below-article"></div>';
156 + $taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $script2_content;
195 157
196 - $content = $this->embed_taboola_content_location($content,$taboola_content);
197 - }
158 + // Adding the 2nd widget if needed
159 + if($this->settings->second_bc_enabled && trim($this->settings->second_bc_widget_id) != ''){
160 + $script2_content = str_replace('{{WIDGET_ID}}', $this->settings->second_bc_widget_id, file_get_contents($this->plugin_directory.'js/script2.js'));
161 + $script2_content = str_replace('{{CONTAINER}}', 'taboola-below-article-second', $script2_content);
162 + $script2_content = str_replace('{{PLACEMENT}}', 'below-article-2nd', $script2_content);
198 163
199 - return $content;
200 - }
164 + $taboola_content[TABOOLA_CONTENT_FORMAT_HTML][] = '<div id="taboola-below-article-second"></div>';
165 + $taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT][] = $script2_content;
166 + }
201 167
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()){
207 -
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));
168 + $content = $this->embed_taboola_content_location($content,$taboola_content,trim($this->settings->location_string));
217 169 }
218 170
219 171 return $content;
220 172 }
221 173
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 174
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 175 // Extract the taboola content in the required format:
246 176 // String - for injecting on the servr side
247 177 // Script or HTML - for injecting on the client side
248 178 function format_taboola_content($taboola_content,$format){
@@ -264,98 +194,28 @@
264 194 return $ret_val;
265 195 }
266 196
267 197
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){
198 + // Do the actual logic of choosing where to place the taboola content based on the "location" attribute
199 + function embed_taboola_content_location($content, $taboola_content, $location){
314 200 $do_default = true;
315 201
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 202 if (isset($location) && $location != ''){
342 203 $first_char = substr($location,0,1);
343 204
344 205 // DIV/XPATH provided for JS handling
345 - if ($first_char == TABOOLA_JS_MARKER){
346 - $full_indicator = substr($location,0,strlen(TABOOLA_JS_INDICATOR));
206 + if ($first_char == JS_MARKER){
207 + $full_indicator = substr($location,0,strlen(JS_INDICATOR));
347 208
348 - if ($full_indicator == TABOOLA_JS_INDICATOR){
209 + if ($full_indicator == JS_INDICATOR){
349 210
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 - );
355 - $scriptWrapper->appendScript("injectWidgetByXpath('".$xpath."');");
356 - $content = $content."<span id='tbdefault'></span><script type='text/javascript'>".$scriptWrapper."</script>";
211 + $xpath = substr($location,strlen(JS_INDICATOR));
212 + $js_inject_script = file_get_contents($this->plugin_directory.'js/js_inject.min.js');
213 + $js_inject_script = str_replace("{{XPATH}}",$xpath,$js_inject_script);
214 + $js_inject_script = str_replace("{{HTML}}",$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_HTML),$js_inject_script);
215 + $js_inject_script = str_replace("{{SCRIPT}}",$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_SCRIPT),$js_inject_script);
357 216
217 + $content = $content."<span id='tbdefault'></span><script type='text/javascript'>".$js_inject_script."</script>";
358 218 $do_default = false;
359 219 }
360 220
361 221 // server side selector provided (see simple_html_dom selectors http://simplehtmldom.sourceforge.net/manual.htm)
@@ -360,83 +220,34 @@
360 220
361 221 // server side selector provided (see simple_html_dom selectors http://simplehtmldom.sourceforge.net/manual.htm)
362 222 // basically it's CSS selectors like in jQuery
363 223 } else{
224 +
364 225 require_once('simple_html_dom.php');
365 226
366 227 $html_doc = str_get_html($content);
367 - $target_location = $html_doc->find($location,($this->settings->mid_location_string_occurrence)-1);
228 + $target_location = $html_doc->find($location,0);
368 229
369 230 // if the location was found within the html content
370 231 if (isset($target_location) && is_object($target_location)){
371 232
372 233 // 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);
234 + $target_location->outertext = $target_location->outertext.$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_STRING);
374 235 $content = $html_doc;
375 236 $do_default = false;
376 237 }
377 238 }
378 239 }
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 240
241 + // Default - add to the end of the content
242 + if ($do_default){
243 + $content = $content.$this->format_taboola_content($taboola_content,TABOOLA_CONTENT_FORMAT_STRING);
244 + }
245 +
384 246 return $content;
385 247 }
386 248
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 249
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 250 function admin_generate_menu(){
440 251 global $current_user;
441 252 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 253 }
@@ -441,9 +252,8 @@
441 252 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 253 }
443 254
444 255 function admin_taboola_settings(){
445 -
446 256 global $wpdb;
447 257 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
448 258 $taboola_errors = array();
449 259 if($_SERVER['REQUEST_METHOD'] == 'POST'){
@@ -448,253 +258,54 @@
448 258 $taboola_errors = array();
449 259 if($_SERVER['REQUEST_METHOD'] == 'POST'){
450 260
451 261 if(trim($_POST['publisher_id']) == ''){
452 - $taboola_errors[] = "Publisher ID";
262 + $taboola_errors[] = "Please add a 'Publisher ID' in order to apply changes to your widgets";
453 263 }
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 - }
264 + if(($_POST['first_bc_enabled'] == 'on' && trim($_POST['first_bc_widget_id']) == '') ||
265 + ($_POST['second_bc_enabled'] == 'on' && trim($_POST['second_bc_widget_id']) == '')
266 + ){
267 + $taboola_errors[] = "Please add a 'Widget ID' in order to apply changes to your widgets";
462 268 }
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 -
269 + if (trim($_POST['location_string']) != '' && !$this->is_location_string_valid($_POST['location_string'])){
270 + $taboola_errors[] = "Location string not valid, please contact your Taboola account manager to get a valid location string";
490 271 }
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 272 if(count($taboola_errors) == 0){
521 273
522 274 $data = array(
523 275 "publisher_id" => trim($_POST['publisher_id']),
524 -
525 - "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']) : ''
276 + "first_bc_enabled" => $_POST['first_bc_enabled'] == 'on' ? true : false,
277 + "first_bc_widget_id" => trim($_POST['first_bc_widget_id']),
278 + "second_bc_enabled" => $_POST['second_bc_enabled'] == 'on' ? true : false,
279 + "second_bc_widget_id" => trim($_POST['second_bc_widget_id']),
280 + "location_string" => trim($_POST['location_string'])
545 281 );
546 282
547 283 //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;
284 + if($settings == NULL){
285 + $wpdb->insert($this->tbl_taboola_settings, $data, null, null);
286 + } else {
287 + $wpdb->update($this->tbl_taboola_settings, $data, array('id' => $settings->id));
553 288 }
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 289 }
564 290 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
565 291 }
566 292
293 +
567 294 include_once('settings.php');
568 295 }
569 296
570 - function is_mid_location_string_valid($mid_location_string){
297 + function is_location_string_valid($location_string){
571 298 // TODO:: validate the location string
572 299 return true;
573 300 }
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) {
301 + function activate(){
596 302 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 303
601 - $column_exists = $wpdb->get_var("SHOW COLUMNS FROM $table_name LIKE '$column_name'") !== null;
304 + require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
602 305
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 - }
306 + $settings_table = $this->tbl_taboola_settings;
611 307
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 308 //check mysql version
698 309 if (function_exists('mysql_get_server_info') && version_compare(mysql_get_server_info(), '4.1.0', '>=')) {
699 310 if (!empty($wpdb->charset))
700 311 $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
@@ -701,14 +312,8 @@
701 312 if (!empty($wpdb->collate))
702 313 $charset_collate .= " COLLATE $wpdb->collate";
703 314 }
704 315
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 316 //settings table structure
712 317 $sql_table_settings = "
713 318 CREATE TABLE `" . $wpdb->prefix . "_taboola_settings` (
714 319 `id` INT NOT NULL AUTO_INCREMENT ,
@@ -714,32 +319,17 @@
714 319 `id` INT NOT NULL AUTO_INCREMENT ,
715 320 `publisher_id` VARCHAR(255) DEFAULT NULL,
716 321 `first_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
717 322 `first_bc_widget_id` VARCHAR(255) DEFAULT NULL,
718 - `first_bc_placement` VARCHAR(255) DEFAULT " . ($is_upgrade_from_v1 ? "'below-article'" : "NULL") .",
719 323 `first_bc_custom_css` TEXT DEFAULT NULL,
720 324 `second_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
721 325 `second_bc_widget_id` VARCHAR(255) DEFAULT NULL,
722 326 `second_bc_custom_css` TEXT DEFAULT NULL,
723 327 `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 - `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 328 PRIMARY KEY (`id`)
737 329 )" . $charset_collate . ";";
738 -
739 - // tb_write_log($sql_table_settings);
740 330
741 - // create/update the table
331 + // creat/update the table
742 332 dbDelta($sql_table_settings);
743 333 }
744 334 }
745 335 }
@@ -745,52 +335,6 @@
745 335 }
746 336
747 337 global $taboolaWP;
748 338 $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 339
796 340 //