PluginProbe
Taboola / 1.0
Taboola v1.0
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 +60 -666 2.0.21.0 View file →
@@ -1,49 +1,28 @@
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
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","{");
19 -define ("TABOOLA_CONTENT_FORMAT_STRING",'string');
20 -define ("TABOOLA_CONTENT_FORMAT_SCRIPT",'script');
21 -define ("TABOOLA_CONTENT_FORMAT_HTML",'html');
22 -
23 -
24 10 include_once('widget.php');
25 -require_once('JavaScriptWrapper.php');
26 11
27 -
28 12 if (!class_exists('TaboolaWP')) {
29 13 class TaboolaWP
30 14 {
15 +
31 16 //save internal data
32 17 public $data = array();
33 - public $_is_widget_on_page;
34 - public $_is_head_script_loaded = false;
35 18
36 - function __construct()
19 + function TaboolaWP()
37 20 {
38 21 global $wpdb;
39 -
40 22 //initialize plugin constant
41 23 DEFINE('TaboolaWP', true);
42 24
43 - $this->_is_widget_on_page = false;
44 - $this->_is_head_script_loaded = false;
45 -
46 25 $this->plugin_name = plugin_basename(__FILE__);
47 26 $this->plugin_directory = plugin_dir_path(__FILE__);
48 27 $this->plugin_url = trailingslashit(WP_PLUGIN_URL . '/' . dirname(plugin_basename(__FILE__)));
49 28 $this->settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
@@ -50,36 +29,31 @@
50 29
51 30 $this->tbl_taboola_settings = $wpdb->prefix . '_taboola_settings';
52 31
53 32 //activation function
54 - register_activation_hook($this->plugin_name, array(&$this, 'update_db'));
55 - add_action('admin_init', array(&$this, 'update_db'));
33 + register_activation_hook($this->plugin_name, array(&$this, 'activate'));
56 34
57 - // Enable sidebar widgets
58 - if ($this->settings != NULL && !empty($this->settings->publisher_id)){
35 +
36 + // disable sidebar widget
37 + /*if($this->settings != NULL && !empty($this->settings->publisher_id)){
59 38 //register Taboola widget
60 39 add_action('widgets_init',
61 - function(){
62 - return register_widget("WP_Widget_Taboola");
63 - }
40 + create_function('', 'return register_widget("WP_Widget_Taboola");')
64 41 );
65 - }
42 + }*/
66 43
67 - //$this->should_place_tag_outside_of_content = $this->settings->out_of_content_enabled;
68 -
69 44 if (is_admin()) {
70 45 //add menu for plugin
71 46 add_action( 'admin_menu', array(&$this, 'admin_generate_menu') );
72 47 add_filter('plugin_action_links', array(&$this, 'plugin_action_links'), 10, 2 );
73 - }else if ($this->settings != NULL){
74 - add_action('wp_head', array(&$this, 'taboola_header_loader_inject'));
48 + } else {
49 + if($this->settings != NULL){
50 + add_action('wp_head', array(&$this, 'taboola_header_loader_js'));
75 51 add_action('wp_footer', array(&$this, 'taboola_footer_loader_js'));
76 52 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'));
53 + }
79 54 }
80 - }
81 -
55 + }
82 56 function plugin_action_links($links, $file) {
83 57 static $this_plugin;
84 58
85 59 if (!$this_plugin) {
@@ -92,351 +66,47 @@
92 66 }
93 67
94 68 return $links;
95 69 }
96 -
97 - private function should_show_content_widget(){
98 - $retVal = ((trim($this->settings->publisher_id) != '') && is_single() && $this->settings->first_bc_enabled && trim($this->settings->first_bc_widget_id) != '');
99 - return $retVal;
100 - }
101 -
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 - private function should_show_sidebar_widget(){
119 - $retVal = ((trim($this->settings->publisher_id) != '') && is_active_widget( false, false, TABOOLA_WIDGET_BASE_ID, true ));
120 - return $retVal;
121 - }
122 -
123 - // Determine if a taboola widget should be added somewhere on the current page (content or sidebar)
124 - 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();
126 - }
127 -
128 - function get_page_type(){
129 - $page_type='article';
130 - if (is_front_page()){
131 - $page_type='home';
132 - }else if (is_category() || is_archive() || is_search()){
133 - $page_type='category';
134 - }
135 - return $page_type;
136 - }
137 -
138 - // return the head loader script
139 70 function taboola_header_loader_js() {
140 - $head_string = "";
141 -
142 - // Only adding the loader if a widget is going to be placed on the page.
143 - 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 -
156 - $scriptWrapper = new JavaScriptWrapper("loaderInjectionScript.js",$stringParams);
157 - $head_string = $scriptWrapper->getScriptMarkupString();
158 - }
159 -
160 - return $head_string;
71 + $script1_content = str_replace('{{PUBLISHER_ID}}', $this->settings->publisher_id, file_get_contents($this->plugin_directory.'js/script1.js'));
72 + echo '<script type="text/javascript">'.$script1_content.'</script>';
161 73 }
162 -
163 -
164 - // This function is used for the hook action, injects the header content to the <head> tag.
165 - function taboola_header_loader_inject(){
166 - echo $this->taboola_header_loader_js();
167 - }
168 -
169 -
170 74 function taboola_footer_loader_js() {
171 -
172 - // Only adding flush script if a widget is going to be placed on the page.
173 - if ( $this->is_widget_on_page() ){
174 - $flushInjectionScript = new JavaScriptWrapper('flushInjectionScript.js',array());
175 - echo $flushInjectionScript->getScriptMarkupString();
176 - }
75 + $script3_content = file_get_contents($this->plugin_directory.'js/script3.js');
76 + echo '<script type="text/javascript">'.$script3_content.'</script>';
177 77 }
178 78
179 - // Below-article widget
180 79 function load_taboola_content($content)
181 80 {
182 - $taboola_content = array();
183 - if ($this->should_show_content_widget()){
184 -
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 - );
191 -
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;
195 -
196 - $content = $this->embed_taboola_content_location($content,$taboola_content);
81 + if (trim($this->settings->publisher_id) == ''){
82 + return $content;
197 83 }
84 + if (is_single()) {
198 85
199 - return $content;
200 - }
86 + if($this->settings->first_bc_enabled && trim($this->settings->first_bc_widget_id) != ''){
87 + $script2_content = str_replace('{{WIDGET_ID}}', $this->settings->first_bc_widget_id, file_get_contents($this->plugin_directory.'js/script2.js'));
88 + $script2_content = str_replace('{{CONTAINER}}', 'taboola-below-article', $script2_content);
89 + $script2_content = str_replace('{{PLACEMENT}}', 'below-article', $script2_content);
201 90
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()){
91 + $content = $content .
92 + '<div id="taboola-below-article" style="'.$this->settings->first_bc_custom_css.'"></div>' .
93 + '<script type="text/javascript">'.$script2_content.'</script>';
94 + if($this->settings->second_bc_enabled && trim($this->settings->second_bc_widget_id) != ''){
95 + $script2_content = str_replace('{{WIDGET_ID}}', $this->settings->second_bc_widget_id, file_get_contents($this->plugin_directory.'js/script2.js'));
96 + $script2_content = str_replace('{{CONTAINER}}', 'taboola-below-article-second', $script2_content);
97 + $script2_content = str_replace('{{PLACEMENT}}', 'below-article-2nd', $script2_content);
207 98
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));
217 - }
218 -
219 - return $content;
220 - }
221 -
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 -
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 - // Extract the taboola content in the required format:
246 - // String - for injecting on the servr side
247 - // Script or HTML - for injecting on the client side
248 - function format_taboola_content($taboola_content,$format){
249 - $ret_val = null;
250 -
251 - switch($format){
252 - case TABOOLA_CONTENT_FORMAT_STRING:
253 - $result_string = join("",$taboola_content[TABOOLA_CONTENT_FORMAT_HTML]).
254 - "<script type='text/javascript'>".join("\n",$taboola_content[TABOOLA_CONTENT_FORMAT_SCRIPT])."</script>";
255 - $ret_val = $result_string;
256 - break;
257 -
258 - // script or html
259 - default:
260 - $ret_val = str_replace("\n","",join("",$taboola_content[$format]));
261 - break;
262 - }
263 -
264 - return $ret_val;
265 - }
266 -
267 -
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){
314 - $do_default = true;
315 -
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 - if (isset($location) && $location != ''){
342 - $first_char = substr($location,0,1);
343 -
344 - // DIV/XPATH provided for JS handling
345 - if ($first_char == TABOOLA_JS_MARKER){
346 - $full_indicator = substr($location,0,strlen(TABOOLA_JS_INDICATOR));
347 -
348 - if ($full_indicator == TABOOLA_JS_INDICATOR){
349 -
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>";
357 -
358 - $do_default = false;
99 + $content = $content .
100 + '<div id="taboola-below-article-second" style="'.$this->settings->second_bc_custom_css.'"></div>' .
101 + '<script type="text/javascript">'.$script2_content.'</script>';
359 102 }
360 -
361 - // server side selector provided (see simple_html_dom selectors http://simplehtmldom.sourceforge.net/manual.htm)
362 - // basically it's CSS selectors like in jQuery
363 - } else{
364 - require_once('simple_html_dom.php');
365 -
366 - $html_doc = str_get_html($content);
367 - $target_location = $html_doc->find($location,($this->settings->mid_location_string_occurrence)-1);
368 -
369 - // if the location was found within the html content
370 - if (isset($target_location) && is_object($target_location)){
371 -
372 - // 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);
374 - $content = $html_doc;
375 - $do_default = false;
376 - }
377 103 }
378 104 }
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 105
384 106 return $content;
385 107 }
386 108
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 -
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 109 function admin_generate_menu(){
440 110 global $current_user;
441 111 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 112 }
@@ -441,9 +111,8 @@
441 111 add_menu_page('Taboola', 'Taboola', 'manage_options', 'taboola_widget', array(&$this, 'admin_taboola_settings'), $this->plugin_url.'img/taboola_icon.png', 110);
442 112 }
443 113
444 114 function admin_taboola_settings(){
445 -
446 115 global $wpdb;
447 116 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
448 117 $taboola_errors = array();
449 118 if($_SERVER['REQUEST_METHOD'] == 'POST'){
@@ -448,255 +117,48 @@
448 117 $taboola_errors = array();
449 118 if($_SERVER['REQUEST_METHOD'] == 'POST'){
450 119
451 120 if(trim($_POST['publisher_id']) == ''){
452 - $taboola_errors[] = "Publisher ID";
121 + $taboola_errors[] = "Please add a 'Publisher ID' in order to apply changes to your widgets";
453 122 }
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 - }
123 + if(($_POST['first_bc_enabled'] == 'on' && trim($_POST['first_bc_widget_id']) == '') ||
124 + ($_POST['second_bc_enabled'] == 'on' && trim($_POST['second_bc_widget_id']) == '')
125 + ){
126 + $taboola_errors[] = "Please add a 'Widget ID' in order to apply changes to your widgets";
462 127 }
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 -
490 - }
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 128 if(count($taboola_errors) == 0){
521 129
522 130 $data = array(
523 131 "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']) : ''
132 + "first_bc_enabled" => $_POST['first_bc_enabled'] == 'on' ? true : false,
133 + "first_bc_widget_id" => trim($_POST['first_bc_widget_id']),
134 + "first_bc_custom_css" => trim($_POST['first_bc_custom_css']),
135 + "second_bc_enabled" => $_POST['second_bc_enabled'] == 'on' ? true : false,
136 + "second_bc_widget_id" => trim($_POST['second_bc_widget_id']),
137 + "second_bc_custom_css" => trim($_POST['second_bc_custom_css'])
545 138 );
546 -
547 139 //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;
140 + if($settings == NULL){
141 + $wpdb->insert($this->tbl_taboola_settings, $data, null, null);
142 + } else {
143 + $wpdb->update($this->tbl_taboola_settings, $data, array('id' => $settings->id));
553 144 }
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 145 }
564 146 $settings = $wpdb->get_row("select * from ".$wpdb->prefix."_taboola_settings limit 1");
565 147 }
566 148
149 +
567 150 include_once('settings.php');
568 151 }
569 -
570 - function is_mid_location_string_valid($mid_location_string){
571 - // TODO:: validate the location string
572 - return true;
573 - }
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) {
152 + function activate(){
596 153 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 154
601 - $column_exists = $wpdb->get_var("SHOW COLUMNS FROM $table_name LIKE '$column_name'") !== null;
155 + require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
602 156
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 - }
157 + $settings_table = $this->tbl_taboola_settings;
611 158
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 159 //check mysql version
698 - if (function_exists('mysql_get_server_info') && version_compare(mysql_get_server_info(), '4.1.0', '>=')) {
160 + if (version_compare(mysql_get_server_info(), '4.1.0', '>=')) {
699 161 if (!empty($wpdb->charset))
700 162 $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
701 163 if (!empty($wpdb->collate))
702 164 $charset_collate .= " COLLATE $wpdb->collate";
@@ -701,14 +163,8 @@
701 163 if (!empty($wpdb->collate))
702 164 $charset_collate .= " COLLATE $wpdb->collate";
703 165 }
704 166
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 167 //settings table structure
712 168 $sql_table_settings = "
713 169 CREATE TABLE `" . $wpdb->prefix . "_taboola_settings` (
714 170 `id` INT NOT NULL AUTO_INCREMENT ,
@@ -714,83 +170,21 @@
714 170 `id` INT NOT NULL AUTO_INCREMENT ,
715 171 `publisher_id` VARCHAR(255) DEFAULT NULL,
716 172 `first_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
717 173 `first_bc_widget_id` VARCHAR(255) DEFAULT NULL,
718 - `first_bc_placement` VARCHAR(255) DEFAULT " . ($is_upgrade_from_v1 ? "'below-article'" : "NULL") .",
719 174 `first_bc_custom_css` TEXT DEFAULT NULL,
720 175 `second_bc_enabled` TINYINT(1) NOT NULL DEFAULT FALSE,
721 176 `second_bc_widget_id` VARCHAR(255) DEFAULT NULL,
722 177 `second_bc_custom_css` TEXT DEFAULT NULL,
723 - `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 178 PRIMARY KEY (`id`)
737 179 )" . $charset_collate . ";";
738 -
739 - // tb_write_log($sql_table_settings);
740 180
741 - // create/update the table
181 + //check if table exists
182 + if ($wpdb->get_var("show tables like '" . $settings_table . "'") != $settings_table) {
742 183 dbDelta($sql_table_settings);
184 + }
743 185 }
744 186 }
745 187 }
746 188
747 189 global $taboolaWP;
748 -$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 -
796 -//
190 +$taboolaWP = new TaboolaWP();