WordPress Charts and Graphs Lite - Version 3.8.1

Version Description

Download this release

Release Info

Developer themeisle
Plugin Icon WordPress Charts and Graphs Lite
Version 3.8.1
Comparing to
See all releases

Code changes from version 3.8.0 to 3.8.1

Files changed (38) hide show
  1. CHANGELOG.md +10 -0
  2. classes/Visualizer/Gutenberg/Block.php +1 -1
  3. classes/Visualizer/Module.php +4 -1
  4. classes/Visualizer/Module/Admin.php +9 -2
  5. classes/Visualizer/Module/Sources.php +1 -1
  6. classes/Visualizer/Plugin.php +2 -2
  7. classes/Visualizer/Render/Library.php +2 -2
  8. classes/Visualizer/Render/Page/Types.php +1 -1
  9. css/frame.css +20 -3
  10. css/library.css +14 -4
  11. css/media.css +1 -1
  12. index.php +13 -3
  13. js/render-chartjs.js +5 -0
  14. js/render-google.js +12 -1
  15. readme.txt +15 -2
  16. templates/docs.php +1 -1
  17. templates/more.php +1 -1
  18. templates/support.php +1 -1
  19. vendor/autoload.php +1 -1
  20. vendor/codeinwp/themeisle-sdk/CHANGELOG.md +20 -0
  21. vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg +0 -0
  22. vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg +0 -0
  23. vendor/codeinwp/themeisle-sdk/assets/images/css.jpg +0 -0
  24. vendor/codeinwp/themeisle-sdk/assets/js/build/index.asset.php +1 -0
  25. vendor/codeinwp/themeisle-sdk/assets/js/build/index.js +1 -0
  26. vendor/codeinwp/themeisle-sdk/load.php +103 -1
  27. vendor/codeinwp/themeisle-sdk/src/Loader.php +2 -1
  28. vendor/codeinwp/themeisle-sdk/src/Modules/Compatibilities.php +236 -0
  29. vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php +2 -1
  30. vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +112 -10
  31. vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php +251 -0
  32. vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +8 -6
  33. vendor/codeinwp/themeisle-sdk/src/Product.php +25 -1
  34. vendor/codeinwp/themeisle-sdk/start.php +2 -1
  35. vendor/composer/autoload_real.php +7 -7
  36. vendor/composer/autoload_static.php +5 -5
  37. vendor/composer/installed.json +7 -7
  38. vendor/composer/installed.php +9 -9
CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
 
 
 
 
 
 
 
 
 
 
1
  #### [Version 3.8.0](https://github.com/Codeinwp/visualizer/compare/v3.7.12...v3.8.0) (2022-09-21)
2
 
3
  - Add data filter support for the charts
1
+ ##### [Version 3.8.1](https://github.com/Codeinwp/visualizer/compare/v3.8.0...v3.8.1) (2022-10-12)
2
+
3
+
4
+ - Change copy shortcode icon to clone a chart We can change copy Short Code icon [#945](https://github.com/Codeinwp/visualizer/issues/945)
5
+ - Fix temp file creation issue on instawp selecting the line chart is not working on instawp [#940](https://github.com/Codeinwp/visualizer/issues/940)
6
+ - Fix control Type error
7
+ - Fixed simple editor scrolling issue
8
+ - Fix filter broken layout
9
+ - Fix chartJs javascript error when rendering multiple charts
10
+
11
  #### [Version 3.8.0](https://github.com/Codeinwp/visualizer/compare/v3.7.12...v3.8.0) (2022-09-21)
12
 
13
  - Add data filter support for the charts
classes/Visualizer/Gutenberg/Block.php CHANGED
@@ -105,7 +105,7 @@ class Visualizer_Gutenberg_Block {
105
 
106
  $translation_array = array(
107
  'isPro' => $type,
108
- 'proTeaser' => Visualizer_Plugin::PRO_TEASER_URL,
109
  'absurl' => VISUALIZER_ABSURL,
110
  'charts' => Visualizer_Module_Admin::_getChartTypesLocalized(),
111
  'adminPage' => menu_page_url( 'visualizer', false ),
105
 
106
  $translation_array = array(
107
  'isPro' => $type,
108
+ 'proTeaser' => tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'blockupsell'),
109
  'absurl' => VISUALIZER_ABSURL,
110
  'charts' => Visualizer_Module_Admin::_getChartTypesLocalized(),
111
  'adminPage' => menu_page_url( 'visualizer', false ),
classes/Visualizer/Module.php CHANGED
@@ -270,6 +270,9 @@ class Visualizer_Module {
270
 
271
  $bom = chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF );
272
  $fp = tmpfile();
 
 
 
273
  if ( ! apply_filters( 'vizualizer_export_include_series_type', true ) ) {
274
  unset( $rows[1] );
275
  $rows = array_values( $rows );
@@ -624,7 +627,7 @@ class Visualizer_Module {
624
  }
625
 
626
  $img_path = VISUALIZER_ABSURL . 'images';
627
- $css .= ".locker,.locker-loader{position:absolute;top:0;left:0;width:100%;height:100%}.locker{z-index:1000;opacity:.8;background-color:#fff;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.locker-loader{z-index:1001;background:url($img_path/ajax-loader.gif) no-repeat center center}.dt-button{display:none!important}.visualizer-front-container.visualizer-lazy-render{content-visibility: auto;}";
628
  $css .= '</style>';
629
 
630
  $arguments = array( $css, $settings );
270
 
271
  $bom = chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF );
272
  $fp = tmpfile();
273
+ if ( null === $fp ) {
274
+ $fp = fopen( wp_tempnam(), 'w+' );
275
+ }
276
  if ( ! apply_filters( 'vizualizer_export_include_series_type', true ) ) {
277
  unset( $rows[1] );
278
  $rows = array_values( $rows );
627
  }
628
 
629
  $img_path = VISUALIZER_ABSURL . 'images';
630
+ $css .= ".locker,.locker-loader{position:absolute;top:0;left:0;width:100%;height:100%}.locker{z-index:1000;opacity:.8;background-color:#fff;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.locker-loader{z-index:1001;background:url($img_path/ajax-loader.gif) no-repeat center center}.dt-button{display:none!important}.visualizer-front-container.visualizer-lazy-render{content-visibility: auto;}.google-visualization-controls-categoryfilter label.google-visualization-controls-label {vertical-align: middle;}.google-visualization-controls-categoryfilter li.goog-inline-block {margin: 0 0.2em;}.google-visualization-controls-categoryfilter li {padding: 0 0.2em;}";
631
  $css .= '</style>';
632
 
633
  $arguments = array( $css, $settings );
classes/Visualizer/Module/Admin.php CHANGED
@@ -726,7 +726,7 @@ class Visualizer_Module_Admin extends Visualizer_Module {
726
  jQuery( document ).ready( function() {
727
  jQuery( '#toplevel_page_visualizer' ).on( 'click', 'li:not(.wp-submenu-head, .wp-first-item):eq(2)', function( e ) {
728
  e.preventDefault();
729
- window.open( 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/#pricing', '_blank' );
730
  } );
731
  } );
732
  </script>
@@ -968,6 +968,13 @@ class Visualizer_Module_Admin extends Visualizer_Module {
968
  $settings = $arguments[1];
969
  }
970
 
 
 
 
 
 
 
 
971
  // add chart to the array
972
  $charts[ $id ] = array(
973
  'id' => $chart->ID,
@@ -1086,7 +1093,7 @@ class Visualizer_Module_Admin extends Visualizer_Module {
1086
  );
1087
  // flattr link
1088
  $plugin_meta[] = sprintf(
1089
- '<a style="color:red" href="' . Visualizer_Plugin::PRO_TEASER_URL . '" target="_blank">%s</a>',
1090
  esc_html__( 'Pro Addon', 'visualizer' )
1091
  );
1092
  }
726
  jQuery( document ).ready( function() {
727
  jQuery( '#toplevel_page_visualizer' ).on( 'click', 'li:not(.wp-submenu-head, .wp-first-item):eq(2)', function( e ) {
728
  e.preventDefault();
729
+ window.open( '<?php echo tsdk_utmify( 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/', 'toplevel' ); ?>', '_blank' );
730
  } );
731
  } );
732
  </script>
968
  $settings = $arguments[1];
969
  }
970
 
971
+ if ( isset( $settings['controls']['ui']['labelStacking'] ) ) {
972
+ unset( $settings['controls']['ui']['labelStacking'] );
973
+ }
974
+ if ( isset( $settings['controls']['ui']['orientation'] ) ) {
975
+ unset( $settings['controls']['ui']['orientation'] );
976
+ }
977
+
978
  // add chart to the array
979
  $charts[ $id ] = array(
980
  'id' => $chart->ID,
1093
  );
1094
  // flattr link
1095
  $plugin_meta[] = sprintf(
1096
+ '<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
1097
  esc_html__( 'Pro Addon', 'visualizer' )
1098
  );
1099
  }
classes/Visualizer/Module/Sources.php CHANGED
@@ -146,7 +146,7 @@ class Visualizer_Module_Sources extends Visualizer_Module {
146
  $return .= ' <div class="only-pro-container">';
147
  $return .= ' <div class="only-pro-inner">';
148
  $return .= ' <p>' . $msg . '</p>';
149
- $return .= ' <a target="_blank" href="' . Visualizer_Plugin::PRO_TEASER_URL . '" title="' . __( 'Buy now', 'visualizer' ) . '">' . __( 'Buy now', 'visualizer' ) . '</a>';
150
  $return .= ' </div>';
151
  $return .= ' </div>';
152
  $return .= '</div>';
146
  $return .= ' <div class="only-pro-container">';
147
  $return .= ' <div class="only-pro-inner">';
148
  $return .= ' <p>' . $msg . '</p>';
149
+ $return .= ' <a target="_blank" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, esc_attr( $feature ) ) . '" title="' . __( 'Buy now', 'visualizer' ) . '">' . __( 'Buy now', 'visualizer' ) . '</a>';
150
  $return .= ' </div>';
151
  $return .= ' </div>';
152
  $return .= '</div>';
classes/Visualizer/Plugin.php CHANGED
@@ -28,7 +28,7 @@
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
- const VERSION = '3.8.0';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
@@ -98,7 +98,7 @@ class Visualizer_Plugin {
98
  const CF_CHART_URL = 'visualizer-chart-url';
99
  const CF_CHART_SCHEDULE = 'visualizer-chart-schedule';
100
  // Added by Ash/Upwork
101
- const PRO_TEASER_URL = 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/#pricing';
102
  const PRO_TEASER_TITLE = 'Check PRO version ';
103
 
104
  const CF_CHART_CACHE = 'visualizer-chart-cache';
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
+ const VERSION = '3.8.1';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
98
  const CF_CHART_URL = 'visualizer-chart-url';
99
  const CF_CHART_SCHEDULE = 'visualizer-chart-schedule';
100
  // Added by Ash/Upwork
101
+ const PRO_TEASER_URL = 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/';
102
  const PRO_TEASER_TITLE = 'Check PRO version ';
103
 
104
  const CF_CHART_CACHE = 'visualizer-chart-cache';
classes/Visualizer/Render/Library.php CHANGED
@@ -363,7 +363,7 @@ class Visualizer_Render_Library extends Visualizer_Render {
363
  if ( $this->can_chart_have_action( 'image', $chart_id ) ) {
364
  echo '<a class="visualizer-chart-action visualizer-chart-image" href="javascript:;" title="', esc_attr__( 'Download as image', 'visualizer' ), '" data-chart="visualizer-', $chart_id, '" data-chart-title="', $title, '"></a>';
365
  }
366
- echo '<a class="visualizer-chart-action visualizer-chart-shortcode" href="javascript:;" title="', esc_attr__( 'Click to copy shortcode', 'visualizer' ), '" data-clipboard-text="', esc_attr( $shortcode ), '"></a>';
367
  echo '<span>&nbsp;</span>';
368
  echo '<hr><div class="visualizer-chart-status"><span title="' . __( 'Chart ID', 'visualizer' ) . '">(' . $chart_id . '):</span> <span class="visualizer-date" title="' . __( 'Last Updated', 'visualizer' ) . '">' . $chart_status['date'] . '</span><span class="visualizer-error"><i class="dashicons ' . $chart_status['icon'] . '" data-viz-error="' . esc_attr( str_replace( '"', "'", $chart_status['error'] ) ) . '" title="' . esc_attr( $chart_status['title'] ) . '"></i></span></div>';
369
  echo '</div>';
@@ -397,7 +397,7 @@ class Visualizer_Render_Library extends Visualizer_Render {
397
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Frontend editor', 'visualizer' ) . '</li>';
398
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Private charts', 'visualizer' ) . '</li>';
399
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Auto-sync with online files', 'visualizer' ) . '</li></ul>';
400
- echo '<p><a href="' . str_replace( '#pricing', '#features', Visualizer_Plugin::PRO_TEASER_URL ) . '" target="_blank" class="button button-primary">' . __( 'View more features', 'visualizer' ) . '</a></p>';
401
  echo '</div>';
402
  echo '</div>';
403
  echo '</div>';
363
  if ( $this->can_chart_have_action( 'image', $chart_id ) ) {
364
  echo '<a class="visualizer-chart-action visualizer-chart-image" href="javascript:;" title="', esc_attr__( 'Download as image', 'visualizer' ), '" data-chart="visualizer-', $chart_id, '" data-chart-title="', $title, '"></a>';
365
  }
366
+ echo '<a class="visualizer-chart-action visualizer-chart-shortcode" href="javascript:;" title="', esc_attr__( 'Click to copy shortcode', 'visualizer' ), '" data-clipboard-text="', esc_attr( $shortcode ), '"><span class="dashicons dashicons-admin-page"></span></a>';
367
  echo '<span>&nbsp;</span>';
368
  echo '<hr><div class="visualizer-chart-status"><span title="' . __( 'Chart ID', 'visualizer' ) . '">(' . $chart_id . '):</span> <span class="visualizer-date" title="' . __( 'Last Updated', 'visualizer' ) . '">' . $chart_status['date'] . '</span><span class="visualizer-error"><i class="dashicons ' . $chart_status['icon'] . '" data-viz-error="' . esc_attr( str_replace( '"', "'", $chart_status['error'] ) ) . '" title="' . esc_attr( $chart_status['title'] ) . '"></i></span></div>';
369
  echo '</div>';
397
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Frontend editor', 'visualizer' ) . '</li>';
398
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Private charts', 'visualizer' ) . '</li>';
399
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Auto-sync with online files', 'visualizer' ) . '</li></ul>';
400
+ echo '<p><a href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'sidebarupsell' ) . '" target="_blank" class="button button-primary">' . __( 'View more features', 'visualizer' ) . '</a></p>';
401
  echo '</div>';
402
  echo '</div>';
403
  echo '</div>';
classes/Visualizer/Render/Page/Types.php CHANGED
@@ -61,7 +61,7 @@ class Visualizer_Render_Page_Types extends Visualizer_Render_Page {
61
  }
62
  echo '<div class="type-box type-box-', $type, $lib_classes, '">';
63
  if ( ! $array['enabled'] ) {
64
- echo "<a class='pro-upsell' href='" . Visualizer_Plugin::PRO_TEASER_URL . "' target='_blank'>";
65
  echo "<span class='visualizder-pro-label'>" . __( 'PREMIUM', 'visualizer' ) . '</span>';
66
  }
67
  echo '<label class="type-label', $type === $this->type ? ' type-label-selected' : '', '">';
61
  }
62
  echo '<div class="type-box type-box-', $type, $lib_classes, '">';
63
  if ( ! $array['enabled'] ) {
64
+ echo "<a class='pro-upsell' href='" . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'charttypes' ) . "' target='_blank'>";
65
  echo "<span class='visualizder-pro-label'>" . __( 'PREMIUM', 'visualizer' ) . '</span>';
66
  }
67
  echo '<label class="type-label', $type === $this->type ? ' type-label-selected' : '', '">';
css/frame.css CHANGED
@@ -19,10 +19,23 @@
19
  }
20
  #control_wrapper_canvas:not(:empty) {
21
  margin: 15px 0 0 5px;
 
 
 
 
 
22
  }
23
- #control_wrapper_canvas:not(:empty) + #canvas {
24
- top: 55px;
25
- left: 50px;
 
 
 
 
 
 
 
 
26
  }
27
  .goog-combobox input {
28
  min-height: auto;
@@ -1526,6 +1539,10 @@ button#viz-text-editor-button {
1526
  vertical-align: middle;
1527
  }
1528
 
 
 
 
 
1529
  /******************************************************************************/
1530
  /******************************** chartjs ***********************************/
1531
  /******************************************************************************/
19
  }
20
  #control_wrapper_canvas:not(:empty) {
21
  margin: 15px 0 0 5px;
22
+ position: relative;
23
+ z-index: 1;
24
+ }
25
+ #control_wrapper_canvas:not(:empty) + #canvas .google-visualization-table {
26
+ top: 60px;
27
  }
28
+ .vz-vertical .google-visualization-table {
29
+ left: 70px;
30
+ }
31
+ .google-visualization-controls-categoryfilter label.google-visualization-controls-label {
32
+ vertical-align: middle;
33
+ }
34
+ .google-visualization-controls-categoryfilter li.goog-inline-block {
35
+ margin: 0 0.2em;
36
+ }
37
+ .google-visualization-controls-categoryfilter li {
38
+ padding: 0 0.2em;
39
  }
40
  .goog-combobox input {
41
  min-height: auto;
1539
  vertical-align: middle;
1540
  }
1541
 
1542
+ .viz-simple-editor .viz-html-table {
1543
+ width: 95%;
1544
+ }
1545
+
1546
  /******************************************************************************/
1547
  /******************************** chartjs ***********************************/
1548
  /******************************************************************************/
css/library.css CHANGED
@@ -124,9 +124,20 @@
124
  }
125
 
126
  .visualizer-nochart-shortcode,
127
- .visualizer-chart-shortcode {
128
- background-position: -143px -126px;
 
129
  float: left;
 
 
 
 
 
 
 
 
 
 
130
  }
131
 
132
  .visualizer-nochart-image,
@@ -152,8 +163,7 @@
152
  }
153
 
154
  .visualizer-chart-shortcode {
155
- padding: 3px 0;
156
- color: #aaa;
157
  text-shadow: 0 1px 0 #fff;
158
  cursor: pointer;
159
  }
124
  }
125
 
126
  .visualizer-nochart-shortcode,
127
+ .visualizer-nochart-shortcode:focus,
128
+ .visualizer-chart-shortcode,
129
+ .visualizer-chart-shortcode:focus {
130
  float: left;
131
+ background: none;
132
+ text-decoration: none;
133
+ box-shadow: none;
134
+ }
135
+ .visualizer-chart-shortcode:hover {
136
+ color: #404040;
137
+ }
138
+ .visualizer-nochart-shortcode .dashicons-admin-page ,
139
+ .visualizer-chart-shortcode .dashicons-admin-page {
140
+ font-size: 16px;
141
  }
142
 
143
  .visualizer-nochart-image,
163
  }
164
 
165
  .visualizer-chart-shortcode {
166
+ color: #404040;
 
167
  text-shadow: 0 1px 0 #fff;
168
  cursor: pointer;
169
  }
css/media.css CHANGED
@@ -1,5 +1,5 @@
1
  /*
2
- Version: 3.8.0
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
1
  /*
2
+ Version: 3.8.1
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
index.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /*
3
  Plugin Name: Visualizer: Tables and Charts for WordPress
4
- Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs-lite/
5
  Description: A simple, easy to use and quite powerful tool to create, manage and embed interactive charts into your WordPress posts and pages. The plugin uses Google Visualization API to render charts, which supports cross-browser compatibility (adopting VML for older IE versions) and cross-platform portability to iOS and new Android releases.
6
- Version: 3.8.0
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
@@ -69,6 +69,7 @@ function visualizer_launch() {
69
  define( 'VISUALIZER_BASENAME', plugin_basename( __FILE__ ) );
70
  define( 'VISUALIZER_ABSURL', plugins_url( '/', __FILE__ ) );
71
  define( 'VISUALIZER_ABSPATH', dirname( __FILE__ ) );
 
72
  define( 'VISUALIZER_REST_VERSION', 1 );
73
  // if the below is true, then the js/customization.js in the plugin folder will be used instead of the one in the uploads folder (if it exists).
74
  // this is also used in Block.php
@@ -132,7 +133,16 @@ function visualizer_launch() {
132
  }
133
  add_filter( 'themeisle_sdk_products', 'visualizer_register_sdk', 10, 1 );
134
  add_filter( 'pirate_parrot_log', 'visualizer_register_parrot', 10, 1 );
135
-
 
 
 
 
 
 
 
 
 
136
  }
137
 
138
  /**
1
  <?php
2
  /*
3
  Plugin Name: Visualizer: Tables and Charts for WordPress
4
+ Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs/
5
  Description: A simple, easy to use and quite powerful tool to create, manage and embed interactive charts into your WordPress posts and pages. The plugin uses Google Visualization API to render charts, which supports cross-browser compatibility (adopting VML for older IE versions) and cross-platform portability to iOS and new Android releases.
6
+ Version: 3.8.1
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
69
  define( 'VISUALIZER_BASENAME', plugin_basename( __FILE__ ) );
70
  define( 'VISUALIZER_ABSURL', plugins_url( '/', __FILE__ ) );
71
  define( 'VISUALIZER_ABSPATH', dirname( __FILE__ ) );
72
+ define( 'VISUALIZER_DIRNAME', basename( VISUALIZER_ABSPATH ) );
73
  define( 'VISUALIZER_REST_VERSION', 1 );
74
  // if the below is true, then the js/customization.js in the plugin folder will be used instead of the one in the uploads folder (if it exists).
75
  // this is also used in Block.php
133
  }
134
  add_filter( 'themeisle_sdk_products', 'visualizer_register_sdk', 10, 1 );
135
  add_filter( 'pirate_parrot_log', 'visualizer_register_parrot', 10, 1 );
136
+ add_filter(
137
+ 'themeisle_sdk_compatibilities/' . VISUALIZER_DIRNAME, function ( $compatibilities ) {
138
+ $compatibilities['VisualizerPRO'] = array(
139
+ 'basefile' => defined( 'VISUALIZER_PRO_BASEFILE' ) ? VISUALIZER_PRO_BASEFILE : '',
140
+ 'required' => '1.8',
141
+ 'tested_up' => '1.12',
142
+ );
143
+ return $compatibilities;
144
+ }
145
+ );
146
  }
147
 
148
  /**
js/render-chartjs.js CHANGED
@@ -113,6 +113,11 @@
113
 
114
  handleSettings(settings, chart);
115
 
 
 
 
 
 
116
  var chartjs = new Chart(context, {
117
  type: type,
118
  data: {
113
 
114
  handleSettings(settings, chart);
115
 
116
+ const getChart = Chart.getChart(context);
117
+ if ( getChart ) {
118
+ return;
119
+ }
120
+
121
  var chartjs = new Chart(context, {
122
  type: type,
123
  data: {
js/render-google.js CHANGED
@@ -76,7 +76,7 @@ var chartWrapperError = [];
76
  }
77
 
78
  var controlWrapperElement = document.getElementById( "control_wrapper_" + id ) || null;
79
- var withControlMode = typeof settings.controls !== 'undefined' && controlWrapperElement ? true : false;
80
 
81
  if ( $( controlWrapperElement ).hasClass( 'no-filter' ) ) {
82
  withControlMode = false;
@@ -399,6 +399,7 @@ var chartWrapperError = [];
399
  });
400
 
401
  if ( withControlMode ) {
 
402
  // Create a control wrapper, passing some options.
403
  var controlWrapper = new gv.ControlWrapper( {
404
  containerId: 'control_wrapper_' + id,
@@ -410,6 +411,16 @@ var chartWrapperError = [];
410
  render.setOptions(settings);
411
  chartWrapper.bind(controlWrapper, render);
412
  chartWrapper.draw(table);
 
 
 
 
 
 
 
 
 
 
413
  } else {
414
  $('body').trigger('visualizer:chart:settings:extend', {id: id, chart: chart, settings: settings, data: table});
415
  render.draw(table, settings);
76
  }
77
 
78
  var controlWrapperElement = document.getElementById( "control_wrapper_" + id ) || null;
79
+ var withControlMode = ( typeof settings.controls !== 'undefined' && '' !== settings.controls.controlType ) && controlWrapperElement ? true : false;
80
 
81
  if ( $( controlWrapperElement ).hasClass( 'no-filter' ) ) {
82
  withControlMode = false;
399
  });
400
 
401
  if ( withControlMode ) {
402
+ // alert( chart.is_library_page );
403
  // Create a control wrapper, passing some options.
404
  var controlWrapper = new gv.ControlWrapper( {
405
  containerId: 'control_wrapper_' + id,
411
  render.setOptions(settings);
412
  chartWrapper.bind(controlWrapper, render);
413
  chartWrapper.draw(table);
414
+
415
+ gv.events.addListener(controlWrapper, 'ready', function ( err ) {
416
+ if ( 'vertical' === settings.controls.ui.orientation ) {
417
+ if ( 'canvas' === id ) {
418
+ jQuery( '#' + id ).addClass( 'vz-vertical' );
419
+ }
420
+ } else {
421
+ jQuery( '#' + id ).removeClass( 'vz-vertical' );
422
+ }
423
+ });
424
  } else {
425
  $('body').trigger('visualizer:chart:settings:extend', {id: id, chart: chart, settings: settings, data: table});
426
  render.draw(table, settings);
readme.txt CHANGED
@@ -12,7 +12,7 @@ A simple and powerful WordPress chart plugin to create responsive charts & table
12
 
13
  ## Description ##
14
 
15
- <p><a href="https://themeisle.com/plugins/visualizer-charts-and-graphs/" rel="nofollow">Visualizer: Tables and Charts for WordPress plugin</a> is a powerful and easy to use plugin used to create, manage and embed interactive, responsive charts & tables into your WordPress posts and pages.</p>
16
 
17
  The plugin uses Google Visualization API, DataTables.net and ChartJS to add responsive & animated charts, graphs and tables, which support cross-browser compatibility and display perfectly on mobile devices. You can greatly customize all aspects of the charts and tables, and import the data from Excel, CSV, Google Sheets and more!
18
 
@@ -46,7 +46,7 @@ Charts are rendered using HTML5/SVG technology to provide cross-browser compatib
46
  > * Priority email support from the developer of the plugin
47
  > * Support and updates for as long as your subscription is valid
48
  >
49
- > **[Learn more about Visualizer PRO](http://themeisle.com/plugins/visualizer-charts-and-graphs/)**
50
 
51
  The plugins works perfectly with the all <a href="https://justfreethemes.com/" rel="nofollow">free</a> or <a href="https://www.codeinwp.com/blog/best-wordpress-themes/" rel="nofollow">premium WordPress themes</a>
52
 
@@ -163,6 +163,19 @@ Pay attention that to turn your shortcodes into graphs, your theme has to have `
163
 
164
  == Changelog ==
165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  #### [Version 3.8.0](https://github.com/Codeinwp/visualizer/compare/v3.7.12...v3.8.0) (2022-09-21)
167
 
168
  - Add data filter support for the charts
12
 
13
  ## Description ##
14
 
15
+ <p><a href="https://themeisle.com/plugins/visualizer-charts-and-graphs/?utm_source=plugin-readme&utm_medium=visualizer&utm_campaign=description" rel="nofollow">Visualizer: Tables and Charts for WordPress plugin</a> is a powerful and easy to use plugin used to create, manage and embed interactive, responsive charts & tables into your WordPress posts and pages.</p>
16
 
17
  The plugin uses Google Visualization API, DataTables.net and ChartJS to add responsive & animated charts, graphs and tables, which support cross-browser compatibility and display perfectly on mobile devices. You can greatly customize all aspects of the charts and tables, and import the data from Excel, CSV, Google Sheets and more!
18
 
46
  > * Priority email support from the developer of the plugin
47
  > * Support and updates for as long as your subscription is valid
48
  >
49
+ > **[Learn more about Visualizer PRO](https://themeisle.com/plugins/visualizer-charts-and-graphs/?utm_source=plugin-readme&utm_medium=visualizer&utm_campaign=learnmore)**
50
 
51
  The plugins works perfectly with the all <a href="https://justfreethemes.com/" rel="nofollow">free</a> or <a href="https://www.codeinwp.com/blog/best-wordpress-themes/" rel="nofollow">premium WordPress themes</a>
52
 
163
 
164
  == Changelog ==
165
 
166
+ ##### [Version 3.8.1](https://github.com/Codeinwp/visualizer/compare/v3.8.0...v3.8.1) (2022-10-12)
167
+
168
+
169
+ - Change copy shortcode icon to clone a chart We can change copy Short Code icon [#945](https://github.com/Codeinwp/visualizer/issues/945)
170
+ - Fix temp file creation issue on instawp selecting the line chart is not working on instawp [#940](https://github.com/Codeinwp/visualizer/issues/940)
171
+ - Fix control Type error
172
+ - Fixed simple editor scrolling issue
173
+ - Fix filter broken layout
174
+ - Fix chartJs javascript error when rendering multiple charts
175
+
176
+
177
+
178
+
179
  #### [Version 3.8.0](https://github.com/Codeinwp/visualizer/compare/v3.7.12...v3.8.0) (2022-09-21)
180
 
181
  - Add data filter support for the charts
templates/docs.php CHANGED
@@ -20,7 +20,7 @@
20
  </ul>
21
 
22
  <?php if ( ! $is_pro ) { ?>
23
- <p>We have many more features and charts, and offer email & chat support if you purchase our <a href="<?php echo Visualizer_Plugin::PRO_TEASER_URL; ?>" target="_blank">Pro Version</a>.</p>
24
  <?php } ?>
25
 
26
  <p>Ready to begin? Let's <a href="<?php echo admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME . '&vaction=addnew' ); ?>">create a chart</a> or <a href="<?php echo VISUALIZER_DEMO_URL; ?>" target="_blank">view a demo</a>!
20
  </ul>
21
 
22
  <?php if ( ! $is_pro ) { ?>
23
+ <p>We have many more features and charts, and offer email & chat support if you purchase our <a href="<?php echo tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'docscard' ); ?>" target="_blank">Pro Version</a>.</p>
24
  <?php } ?>
25
 
26
  <p>Ready to begin? Let's <a href="<?php echo admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME . '&vaction=addnew' ); ?>">create a chart</a> or <a href="<?php echo VISUALIZER_DEMO_URL; ?>" target="_blank">view a demo</a>!
templates/more.php CHANGED
@@ -50,7 +50,7 @@ if ( ! apply_filters( 'visualizer_is_business', false ) ) {
50
  <div class="pro-feature-features">
51
  <h2>Import any data from your database!</h2>
52
  <p>Do you want to create a chart based on custom queries? Or display data about WordPress statistics? Do you want to import data periodically (every day, every hour, etc.) ?</p>
53
- <p>With Pro you can do all of these, and much more. <a href="<?php echo Visualizer_Plugin::PRO_TEASER_URL; ?>">Visit our site to know more.</a></p>
54
  </div>
55
  <div class="pro-feature-image"><img src="<?php echo VISUALIZER_ABSURL; ?>/images/pro/import.png"></div>
56
  <div class="clear"></div>
50
  <div class="pro-feature-features">
51
  <h2>Import any data from your database!</h2>
52
  <p>Do you want to create a chart based on custom queries? Or display data about WordPress statistics? Do you want to import data periodically (every day, every hour, etc.) ?</p>
53
+ <p>With Pro you can do all of these, and much more. <a href="<?php echo tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'import' ); ?>">Visit our site to know more.</a></p>
54
  </div>
55
  <div class="pro-feature-image"><img src="<?php echo VISUALIZER_ABSURL; ?>/images/pro/import.png"></div>
56
  <div class="clear"></div>
templates/support.php CHANGED
@@ -11,7 +11,7 @@
11
  href="https://themeisle.com/">ThemeIsle</a></span>
12
  <div class="header-btns">
13
  <?php if ( $show_more ) { ?>
14
- <a target="_blank" href="<?php echo Visualizer_Plugin::PRO_TEASER_URL; ?>" class="buy-now"><span
15
  class="dashicons dashicons-cart"></span>More features</a>
16
  <?php } ?>
17
  </div>
11
  href="https://themeisle.com/">ThemeIsle</a></span>
12
  <div class="header-btns">
13
  <?php if ( $show_more ) { ?>
14
+ <a target="_blank" href="<?php echo tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'supportheader' ); ?>" class="buy-now"><span
15
  class="dashicons dashicons-cart"></span>More features</a>
16
  <?php } ?>
17
  </div>
vendor/autoload.php CHANGED
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
- return ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInitc7871f7b38ea431eb49202200227e974::getLoader();
vendor/codeinwp/themeisle-sdk/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ##### [Version 3.2.26](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.25...v3.2.26) (2022-05-12)
2
 
3
  - [Fix] Solve rollback sometimes not available
1
+ ##### [Version 3.2.30](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.29...v3.2.30) (2022-09-15)
2
+
3
+ - fix filesystem wrong use - ref [#138](https://github.com/Codeinwp/themeisle-sdk/issues/138), props [@ethanclevenger91](https://github.com/ethanclevenger91) for reporting
4
+
5
+ ##### [Version 3.2.29](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.28...v3.2.29) (2022-09-08)
6
+
7
+ * Adds compatibility mechanism
8
+ * Adds content utms
9
+ * Adds usage time on uninstall feedback
10
+
11
+ ##### [Version 3.2.28](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.27...v3.2.28) (2022-08-30)
12
+
13
+ * Adds utm handler
14
+ * Improve promotions
15
+
16
+ ##### [Version 3.2.27](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.26...v3.2.27) (2022-08-23)
17
+
18
+ - Add Promotion Module
19
+ Add the Promotion module for free plugins
20
+
21
  ##### [Version 3.2.26](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.25...v3.2.26) (2022-05-12)
22
 
23
  - [Fix] Solve rollback sometimes not available
vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg ADDED
Binary file
vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg ADDED
Binary file
vendor/codeinwp/themeisle-sdk/assets/images/css.jpg ADDED
Binary file
vendor/codeinwp/themeisle-sdk/assets/js/build/index.asset.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php return array('dependencies' => array('wp-api', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n'), 'version' => '73443c6739f6cbdbb5fd');
vendor/codeinwp/themeisle-sdk/assets/js/build/index.js ADDED
@@ -0,0 +1 @@
 
1
+ (()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.element,o=window.wp.i18n,n=window.wp.blockEditor,s=window.wp.components,i=window.wp.compose,r=window.wp.data,l=window.wp.hooks,a=window.wp.api;var c=e.n(a);const d={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},m={"blocks-css":{title:(0,o.__)("Custom CSS","textdomain"),description:(0,o.__)("Enable Otter Blocks to add Custom CSS for this block."),image:"css.jpg"},"blocks-animation":{title:(0,o.__)("Animations","textdomain"),description:(0,o.__)("Enable Otter Blocks to add Animations for this block."),image:"animation.jpg"},"blocks-conditions":{title:(0,o.__)("Visibility Conditions","textdomain"),description:(0,o.__)("Enable Otter Blocks to add Visibility Conditions for this block."),image:"conditions.jpg"}},w=e=>{let{onClick:n}=e;return(0,t.createElement)("div",{style:d.skip.container},(0,t.createElement)(s.Button,{style:d.skip.button,variant:"tertiary",onClick:n},(0,o.__)("Skip for now")),(0,t.createElement)("span",{style:d.skip.poweredby},(0,o.__)("Recommended by ")+window.themeisleSDKPromotions.product))},p=(0,i.createHigherOrderComponent)((e=>i=>{if(i.isSelected&&Boolean(window.themeisleSDKPromotions.showPromotion)){const[l,a]=(0,t.useState)(!1),[p,u]=(0,t.useState)("default"),[_,k]=(0,t.useState)(!1),[h,b,g]=(()=>{const{createNotice:e}=(0,r.dispatch)("core/notices"),[n,s]=(0,t.useState)({}),[i,l]=(0,t.useState)("loading"),a=()=>{c().loadPromise.then((async()=>{try{const e=new(c().models.Settings),t=await e.fetch();s(t)}catch(e){l("error")}finally{l("loaded")}}))};return(0,t.useEffect)((()=>{a()}),[]),[e=>null==n?void 0:n[e],function(t,n){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:(0,o.__)("Settings saved.","textdomain");l("saving");const i=new(c().models.Settings)({[t]:n}).save();i.success(((t,n)=>{"success"===n&&(l("loaded"),e("success",s,{isDismissible:!0,type:"snackbar"})),"error"===n&&(l("error"),e("error",(0,o.__)("An unknown error occurred.","textdomain"),{isDismissible:!0,type:"snackbar"})),a()})),i.error((t=>{l("error"),e("error",t.responseJSON.message?t.responseJSON.message:(0,o.__)("An unknown error occurred.","textdomain"),{isDismissible:!0,type:"snackbar"})}))},i]})(),y=async()=>{var e;a(!0),await("otter-blocks",new Promise((e=>{wp.updates.ajax("install-plugin",{slug:"otter-blocks",success:()=>{e({success:!0})},error:t=>{e({success:!1,code:t.errorCode})}})}))),b("themeisle_sdk_promotions_otter_installed",!Boolean(h("themeisle_sdk_promotions_otter_installed"))),await(e=window.themeisleSDKPromotions.activationUrl,new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))}))),a(!1),u("installed")},S=()=>"installed"===p?(0,t.createElement)("p",null,(0,t.createElement)("strong",null,(0,o.__)("Awesome! Refresh the page to see Otter Blocks in action."))):(0,t.createElement)(s.Button,{variant:"secondary",onClick:y,isBusy:l,style:d.button},(0,o.__)("Install & Activate Otter Blocks")),f=()=>{const e=JSON.parse(window.themeisleSDKPromotions.promotions_otter);e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,b("themeisle_sdk_promotions_otter",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1};return(0,t.useEffect)((()=>{_&&f()}),[_]),_?(0,t.createElement)(e,i):(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,i),(0,t.createElement)(n.InspectorControls,null,Object.keys(m).map((e=>{if(e===window.themeisleSDKPromotions.showPromotion){const o=m[e];return(0,t.createElement)(s.PanelBody,{title:o.title,initialOpen:!1},(0,t.createElement)("p",null,o.description),(0,t.createElement)(S,null),(0,t.createElement)("img",{style:d.image,src:window.themeisleSDKPromotions.assets+o.image}),(0,t.createElement)(w,{onClick:()=>k(!0)}))}}))))}return(0,t.createElement)(e,i)}),"withInspectorControl");(0,r.select)("core/edit-site")||(0,l.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",p)})();
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  return;
15
  }
16
  // Current SDK version and path.
17
- $themeisle_sdk_version = '3.2.26';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
@@ -71,3 +71,105 @@ if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
71
  }
72
  endif;
73
  add_action( 'init', 'themeisle_sdk_load_latest' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  return;
15
  }
16
  // Current SDK version and path.
17
+ $themeisle_sdk_version = '3.2.30';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
71
  }
72
  endif;
73
  add_action( 'init', 'themeisle_sdk_load_latest' );
74
+
75
+ if ( ! function_exists( 'tsdk_utmify' ) ) {
76
+ /**
77
+ * Utmify a link.
78
+ *
79
+ * @param string $url URL to add utms.
80
+ * @param string $area Area in page where this is used ( CTA, image, section name).
81
+ * @param string $location Location, such as customizer, about page.
82
+ *
83
+ * @return string
84
+ */
85
+ function tsdk_utmify( $url, $area, $location = null ) {
86
+ static $current_page = null;
87
+ if ( $location === null && $current_page === null ) {
88
+ global $pagenow;
89
+ $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : $pagenow;
90
+ $current_page = isset( $screen->id ) ? $screen->id : ( ( $screen === null ) ? 'non-admin' : $screen );
91
+ $current_page = sanitize_key( str_replace( '.php', '', $current_page ) );
92
+ }
93
+ $location = $location === null ? $current_page : $location;
94
+ $content = sanitize_key(
95
+ trim(
96
+ str_replace(
97
+ [
98
+ 'https://',
99
+ 'themeisle.com',
100
+ '/themes/',
101
+ '/plugins/',
102
+ '/upgrade',
103
+ ],
104
+ '',
105
+ $url
106
+ ),
107
+ '/'
108
+ )
109
+ );
110
+ return esc_url_raw(
111
+ add_query_arg(
112
+ [
113
+ 'utm_source' => 'wpadmin',
114
+ 'utm_medium' => $location,
115
+ 'utm_campaign' => $area,
116
+ 'utm_content' => $content,
117
+ ],
118
+ $url
119
+ )
120
+ );
121
+ }
122
+
123
+ add_filter( 'tsdk_utmify', 'tsdk_utmify', 10, 3 );
124
+ }
125
+
126
+
127
+ if ( ! function_exists( 'tsdk_lstatus' ) ) {
128
+ /**
129
+ * Check license status.
130
+ *
131
+ * @param string $file Product basefile.
132
+ *
133
+ * @return string Status.
134
+ */
135
+ function tsdk_lstatus( $file ) {
136
+ return \ThemeisleSDK\Modules\Licenser::status( $file );
137
+ }
138
+ }
139
+ if ( ! function_exists( 'tsdk_lis_valid' ) ) {
140
+ /**
141
+ * Check if license is valid.
142
+ *
143
+ * @param string $file Product basefile.
144
+ *
145
+ * @return bool Validness.
146
+ */
147
+ function tsdk_lis_valid( $file ) {
148
+ return \ThemeisleSDK\Modules\Licenser::is_valid( $file );
149
+ }
150
+ }
151
+ if ( ! function_exists( 'tsdk_lplan' ) ) {
152
+ /**
153
+ * Get license plan.
154
+ *
155
+ * @param string $file Product basefile.
156
+ *
157
+ * @return string Plan.
158
+ */
159
+ function tsdk_lplan( $file ) {
160
+ return \ThemeisleSDK\Modules\Licenser::plan( $file );
161
+ }
162
+ }
163
+
164
+ if ( ! function_exists( 'tsdk_lkey' ) ) {
165
+ /**
166
+ * Get license key.
167
+ *
168
+ * @param string $file Product basefile.
169
+ *
170
+ * @return string Key.
171
+ */
172
+ function tsdk_lkey( $file ) {
173
+ return \ThemeisleSDK\Modules\Licenser::key( $file );
174
+ }
175
+ }
vendor/codeinwp/themeisle-sdk/src/Loader.php CHANGED
@@ -55,7 +55,8 @@ final class Loader {
55
  'review',
56
  'recommendation',
57
  'notification',
58
-
 
59
  ];
60
 
61
  /**
55
  'review',
56
  'recommendation',
57
  'notification',
58
+ 'promotions',
59
+ 'compatibilities',
60
  ];
61
 
62
  /**
vendor/codeinwp/themeisle-sdk/src/Modules/Compatibilities.php ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The compatibilities model class for ThemeIsle SDK
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Modules
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+
12
+ namespace ThemeisleSDK\Modules;
13
+
14
+ use ThemeisleSDK\Common\Abstract_Module;
15
+ use ThemeisleSDK\Product;
16
+
17
+ // Exit if accessed directly.
18
+ if ( ! defined( 'ABSPATH' ) ) {
19
+ exit;
20
+ }
21
+
22
+ /**
23
+ * Promotions module for ThemeIsle SDK.
24
+ */
25
+ class Compatibilities extends Abstract_Module {
26
+ const REQUIRED = 'required';
27
+ const TESTED_UP = 'tested_up';
28
+
29
+ /**
30
+ * Should we load this module.
31
+ *
32
+ * @param Product $product Product object.
33
+ *
34
+ * @return bool
35
+ */
36
+ public function can_load( $product ) {
37
+ if ( $this->is_from_partner( $product ) ) {
38
+ return false;
39
+ }
40
+ if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) {
41
+ return false;
42
+ }
43
+
44
+ if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) {
45
+ return false;
46
+ }
47
+
48
+ return true;
49
+ }
50
+
51
+ /**
52
+ * Registers the hooks.
53
+ *
54
+ * @param Product $product Product to load.
55
+ *
56
+ * @throws \Exception If the configuration is invalid.
57
+ *
58
+ * @return Compatibilities Module instance.
59
+ */
60
+ public function load( $product ) {
61
+
62
+
63
+ $this->product = $product;
64
+
65
+ $compatibilities = apply_filters( 'themeisle_sdk_compatibilities/' . $this->product->get_slug(), [] );
66
+ if ( empty( $compatibilities ) ) {
67
+ return $this;
68
+ }
69
+ $requirement = null;
70
+ $check_type = null;
71
+ foreach ( $compatibilities as $compatibility ) {
72
+
73
+ if ( empty( $compatibility['basefile'] ) ) {
74
+ return $this;
75
+ }
76
+ $requirement = new Product( $compatibility['basefile'] );
77
+ $tested_up = isset( $compatibility[ self::TESTED_UP ] ) ? $compatibility[ self::TESTED_UP ] : '999';
78
+ $required = $compatibility[ self::REQUIRED ];
79
+ if ( ! version_compare( $required, $tested_up, '<' ) ) {
80
+ throw new \Exception( sprintf( 'Invalid required/tested_up configuration. Required version %s should be lower than tested_up %s.', $required, $tested_up ) );
81
+ }
82
+ $check_type = self::REQUIRED;
83
+ if ( ! version_compare( $requirement->get_version(), $required, '<' ) ) {
84
+ $check_type = self::TESTED_UP;
85
+ if ( version_compare( $requirement->get_version(), $tested_up . '.9999', '<' ) ) {
86
+ return $this;
87
+ }
88
+ }
89
+
90
+ break;
91
+ }
92
+ if ( empty( $requirement ) ) {
93
+ return $this;
94
+ }
95
+ if ( $check_type === self::REQUIRED ) {
96
+ $this->mark_required( $product, $requirement );
97
+ }
98
+ if ( $check_type === self::TESTED_UP ) {
99
+ $this->mark_testedup( $product, $requirement );
100
+ }
101
+
102
+ return $this;
103
+ }
104
+
105
+ /**
106
+ * Mark the product tested up.
107
+ *
108
+ * @param Product $product Product object.
109
+ * @param Product $requirement Requirement object.
110
+ *
111
+ * @return void
112
+ */
113
+ public function mark_testedup( $product, $requirement ) {
114
+ add_action(
115
+ 'admin_head',
116
+ function () use ( $product, $requirement ) {
117
+ $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : '';
118
+
119
+ if ( empty( $screen ) || ! isset( $screen->id ) ) {
120
+ return;
121
+ }
122
+ if ( $requirement->is_theme() && $screen->id === 'themes' ) {
123
+ ?>
124
+ <script type="text/javascript">
125
+ jQuery(document).ready(function ($) {
126
+ setInterval(checkTheme, 500);
127
+ function checkTheme() {
128
+ var theme = jQuery( '.theme.active[data-slug="<?php echo esc_attr( $requirement->get_slug() ); ?>"]' );
129
+ var notice_id = 'testedup<?php echo esc_attr( $requirement->get_slug() . $product->get_slug() ); ?>';
130
+ var product_name = '<?php echo esc_attr( $product->get_friendly_name() ); ?>';
131
+ if (theme.length > 0 && jQuery('#' + notice_id).length === 0) {
132
+ theme.find('.theme-id-container').prepend('<div style="bottom:100%;top:auto;" id="'+notice_id+'" class="notice notice-warning"><strong>Warning:</strong> This theme has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' plugin.</div>');
133
+ }
134
+ if (theme.length > 0 && jQuery('#' + notice_id + 'overlay').length === 0) {
135
+ jQuery('.theme-overlay.active .theme-author').after('<div style="bottom:100%;top:auto;" id="'+notice_id+'overlay" class="notice notice-warning"><p><strong>Warning:</strong> This theme has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' plugin.</p></div>');
136
+ }
137
+ }
138
+ })
139
+
140
+ </script>
141
+ <?php
142
+ }
143
+ if ( $requirement->is_plugin() && $screen->id === 'plugins' ) {
144
+ ?>
145
+ <script type="text/javascript">
146
+ jQuery(document).ready(function ($) {
147
+ setInterval(checkPlugin, 500);
148
+ function checkPlugin() {
149
+ var plugin = jQuery( '.plugins .active[data-slug="<?php echo esc_attr( $requirement->get_slug() ); ?>"]' );
150
+ var notice_id = 'testedup<?php echo esc_attr( $requirement->get_slug() . $product->get_slug() ); ?>';
151
+ var product_name = '<?php echo esc_attr( $product->get_friendly_name() ); ?>';
152
+ var product_type = '<?php echo ( $product->is_plugin() ? 'plugin' : 'theme' ); ?>';
153
+ if (plugin.length > 0 && jQuery('#' + notice_id).length === 0) {
154
+ plugin.find('.column-description').append('<div style="bottom:100%;top:auto;" id="'+notice_id+'" class="notice notice-warning notice-alt notice-inline"><strong>Warning:</strong> This plugin has not been tested with your current version of <strong>' + product_name +'</strong>. Please update '+product_name+' '+product_type+'.</div>');
155
+ }
156
+ }
157
+ })
158
+
159
+ </script>
160
+ <?php
161
+ }
162
+ }
163
+ );
164
+
165
+ }
166
+
167
+ /**
168
+ * Mark the product requirements.
169
+ *
170
+ * @param Product $product Product object.
171
+ * @param Product $requirement Requirement object.
172
+ *
173
+ * @return void
174
+ */
175
+ public function mark_required( $product, $requirement ) {
176
+ add_filter(
177
+ 'upgrader_pre_download',
178
+ function ( $return, $package, $upgrader ) use ( $product, $requirement ) {
179
+ /**
180
+ * Upgrader object.
181
+ *
182
+ * @var \WP_Upgrader $upgrader Upgrader object.
183
+ */
184
+ $should_block = false;
185
+ if ( $product->is_theme()
186
+ && property_exists( $upgrader, 'skin' )
187
+ && property_exists( $upgrader->skin, 'theme_info' )
188
+ && $upgrader->skin->theme_info->template === $product->get_slug() ) {
189
+ $should_block = true;
190
+
191
+ }
192
+ if ( ! $should_block && $product->is_plugin()
193
+ && property_exists( $upgrader, 'skin' )
194
+ && property_exists( $upgrader->skin, 'plugin_info' )
195
+ && $upgrader->skin->plugin_info['Name'] === $product->get_name() ) {
196
+ $should_block = true;
197
+ }
198
+ if ( $should_block ) {
199
+ echo( sprintf(
200
+ '%s update requires a newer version of %s. Please %supdate%s %s %s.',
201
+ esc_attr( $product->get_friendly_name() ),
202
+ esc_attr( $requirement->get_friendly_name() ),
203
+ '<a href="' . esc_url( admin_url( $requirement->is_theme() ? 'themes.php' : 'plugins.php' ) ) . '">',
204
+ '</a>',
205
+ esc_attr( $requirement->get_friendly_name() ),
206
+ esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' )
207
+ ) );
208
+ $upgrader->maintenance_mode( false );
209
+ die();
210
+ }
211
+
212
+ return $return;
213
+ },
214
+ 10,
215
+ 3
216
+ );
217
+
218
+ add_action(
219
+ 'admin_notices',
220
+ function () use ( $product, $requirement ) {
221
+ echo '<div class="notice notice-error "><p>';
222
+ echo( sprintf(
223
+ '%s requires a newer version of %s. Please %supdate%s %s %s to the latest version.',
224
+ '<strong>' . esc_attr( $product->get_friendly_name() ) . '</strong>',
225
+ '<strong>' . esc_attr( $requirement->get_friendly_name() ) . '</strong>',
226
+ '<a href="' . esc_url( admin_url( $requirement->is_theme() ? 'themes.php' : 'plugins.php' ) ) . '">',
227
+ '</a>',
228
+ '<strong>' . esc_attr( $requirement->get_friendly_name() ) . '</strong>',
229
+ esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' )
230
+ ) );
231
+ echo '</p></div>';
232
+ }
233
+ );
234
+
235
+ }
236
+ }
vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php CHANGED
@@ -131,8 +131,9 @@ class Dashboard_Widget extends Abstract_Module {
131
  #themeisle h2.hndle {
132
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABbCAMAAADncTNAAAAAtFBMVEVHcEyAgIB/f3+xsbGgoaGBgYGCgoKKioqAgIC1tbW5ubnFx8iAgIDU1taBgYGCgoKAgIC0tLXW19jW2NiAgIC3uLiBgYHLzMy4uLhycnLW19d/f3/T1NW0tLTX19mVlZWvr6+BgYHl5eWKiottbW5JSUnW2Nm5ubnh4eHT1NWVlZVjY2N4eHh9fX6pqqq+v79PT0/39/fu7u7Nzc7Z2ttYWFgBAQHDw8P////JysoZGRk0NTZqJc/sAAAAIXRSTlMA0FL7/oEnEPL6eibivm9gwJya76/enFq2CXI+2lFAyM8GATmPAAADj0lEQVR4Xu2YaW/iOhSGAwRCWDosnXa6znjJvm8svf//f12TuARyhiR2pfnUR6gSEnr0+uT4xK7yRb755pvhHePli5K7Bfpkuhoq8ozRJdMH+WWha6Z3sqYparCSLRJqspjImVbANJU03cNMMpofAwQZCGsmpQYyFvVM0Q00OQ9koMl5IPcCoro+RA1Dt2Ea9n9eZ0+YHJLkgIlkDywQx00wCTyaReiKH8LbNU9ybJOdkchV6QFxyCFLbVvdfaREqgUWg/tx2UbqIcK2Hex2TdGLwFTjIj3XP3YfCZFsb23KRZn/3263oymSFI0/a5S4PqUBjoBIJBDjeEhCN0wxQSRybIxtJ3K5SGzuE/vAwIQc8ZmMMJFAIM4oikZItfEFtorGgoE43FObwqHU68OtPCnOz8KZ2Jbl5LgkSW0Tc7YyIz/EFWmS4jMbiZU5mJOmKRaJpKGGyLZtDJh3iyaNUu/3+xyKnrtFL71EG+FTiMpENhQtxUQ8kSOXCIr2tnCNhg/gTX0SHYFp0t7TCwQZ7U841yoHrW6rtGroUwTWVnLMssxx+H4bgZcSOFf5MYx0Ae8FghomMDyC2EBNImBywPkNTDNqGLQpIg2TjUNU8tBy9DQMo0DAZF16rAi7vJAtFTIYFAHUc6hIRW6OuOhJgaCSwmDEAYK4oa7ro+qIEyJU/US7KTJKPNSFT9tFgVFBu0SF1y7yjX4masRA9Da7EFGj28R/BkQz6xGIOurkx38T/bKs9Uk8aIiMwm/Jw0VP1yLrJwt13xAxvABBgsK4KWLov35DkRF7ZaqgzuZ7MQ8MOntmVYyAqKTwaICKqvSUFnVccMN5sziEP/5+xGDTahbH5Q3ZB76zr8fI+nJtvUUU3t3ml5GKviK/npCg3CGodnuJ4JVkfRFJYGVDBZrqKnn9RLf+CzDTS5PaN5J38+auzX4ykU4Qoj0rdKfcYs5ijfo9OL/uRUgZyQr7NCWtWwiUSLc4arfJa7lpszTA1OJZAQ8w8dXFrR5YHzCWSnS3pZ18tOi4Ps4vl/c7i/6qomjRecN+UubrPyPGn/VEMU3T0UFHkaPzpgjxmJsnjmrtionlMDZiog0TsY/DPtn8SXtlBvbtxKtwopy7lqW3smQO+yoGE1Uu55GJ3pmI8ygoejZNnqj0vnIRCyTKfLstRdtStGQi09myUsvwvlkuzSUXbV+Xz5ryBebV33fln/A/moud69FZiEYAAAAASUVORK5CYII=');
133
  background-repeat: no-repeat;
134
- background-position: 92% 50%;
135
  background-size: 25px;
 
136
  }
137
 
138
  #themeisle .inside {
131
  #themeisle h2.hndle {
132
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABbCAMAAADncTNAAAAAtFBMVEVHcEyAgIB/f3+xsbGgoaGBgYGCgoKKioqAgIC1tbW5ubnFx8iAgIDU1taBgYGCgoKAgIC0tLXW19jW2NiAgIC3uLiBgYHLzMy4uLhycnLW19d/f3/T1NW0tLTX19mVlZWvr6+BgYHl5eWKiottbW5JSUnW2Nm5ubnh4eHT1NWVlZVjY2N4eHh9fX6pqqq+v79PT0/39/fu7u7Nzc7Z2ttYWFgBAQHDw8P////JysoZGRk0NTZqJc/sAAAAIXRSTlMA0FL7/oEnEPL6eibivm9gwJya76/enFq2CXI+2lFAyM8GATmPAAADj0lEQVR4Xu2YaW/iOhSGAwRCWDosnXa6znjJvm8svf//f12TuARyhiR2pfnUR6gSEnr0+uT4xK7yRb755pvhHePli5K7Bfpkuhoq8ozRJdMH+WWha6Z3sqYparCSLRJqspjImVbANJU03cNMMpofAwQZCGsmpQYyFvVM0Q00OQ9koMl5IPcCoro+RA1Dt2Ea9n9eZ0+YHJLkgIlkDywQx00wCTyaReiKH8LbNU9ybJOdkchV6QFxyCFLbVvdfaREqgUWg/tx2UbqIcK2Hex2TdGLwFTjIj3XP3YfCZFsb23KRZn/3263oymSFI0/a5S4PqUBjoBIJBDjeEhCN0wxQSRybIxtJ3K5SGzuE/vAwIQc8ZmMMJFAIM4oikZItfEFtorGgoE43FObwqHU68OtPCnOz8KZ2Jbl5LgkSW0Tc7YyIz/EFWmS4jMbiZU5mJOmKRaJpKGGyLZtDJh3iyaNUu/3+xyKnrtFL71EG+FTiMpENhQtxUQ8kSOXCIr2tnCNhg/gTX0SHYFp0t7TCwQZ7U841yoHrW6rtGroUwTWVnLMssxx+H4bgZcSOFf5MYx0Ae8FghomMDyC2EBNImBywPkNTDNqGLQpIg2TjUNU8tBy9DQMo0DAZF16rAi7vJAtFTIYFAHUc6hIRW6OuOhJgaCSwmDEAYK4oa7ro+qIEyJU/US7KTJKPNSFT9tFgVFBu0SF1y7yjX4masRA9Da7EFGj28R/BkQz6xGIOurkx38T/bKs9Uk8aIiMwm/Jw0VP1yLrJwt13xAxvABBgsK4KWLov35DkRF7ZaqgzuZ7MQ8MOntmVYyAqKTwaICKqvSUFnVccMN5sziEP/5+xGDTahbH5Q3ZB76zr8fI+nJtvUUU3t3ml5GKviK/npCg3CGodnuJ4JVkfRFJYGVDBZrqKnn9RLf+CzDTS5PaN5J38+auzX4ykU4Qoj0rdKfcYs5ijfo9OL/uRUgZyQr7NCWtWwiUSLc4arfJa7lpszTA1OJZAQ8w8dXFrR5YHzCWSnS3pZ18tOi4Ps4vl/c7i/6qomjRecN+UubrPyPGn/VEMU3T0UFHkaPzpgjxmJsnjmrtionlMDZiog0TsY/DPtn8SXtlBvbtxKtwopy7lqW3smQO+yoGE1Uu55GJ3pmI8ygoejZNnqj0vnIRCyTKfLstRdtStGQi09myUsvwvlkuzSUXbV+Xz5ryBebV33fln/A/moud69FZiEYAAAAASUVORK5CYII=');
133
  background-repeat: no-repeat;
134
+ background-position: 2% 50%;
135
  background-size: 25px;
136
+ padding-left: 39px;
137
  }
138
 
139
  #themeisle .inside {
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php CHANGED
@@ -24,13 +24,30 @@ if ( ! defined( 'ABSPATH' ) ) {
24
  * Licenser module for ThemeIsle SDK.
25
  */
26
  class Licenser extends Abstract_Module {
27
-
 
 
 
 
 
 
 
 
 
 
 
28
  /**
29
  * Number of max failed checks before showing the license message.
30
  *
31
  * @var int $max_failed Maximum failed checks allowed before show the notice
32
  */
33
- private static $max_failed = 2;
 
 
 
 
 
 
34
  /**
35
  * License key string.
36
  *
@@ -215,6 +232,76 @@ class Licenser extends Abstract_Module {
215
  return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status;
216
  }
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  /**
219
  * Return the last error message.
220
  *
@@ -256,12 +343,7 @@ class Licenser extends Abstract_Module {
256
  * @return int License plan.
257
  */
258
  public function get_plan() {
259
- $license_data = get_option( $this->product->get_key() . '_license_data', '' );
260
- if ( ! isset( $license_data->price_id ) ) {
261
- return - 1;
262
- }
263
-
264
- return (int) $license_data->price_id;
265
  }
266
 
267
  /**
@@ -379,7 +461,7 @@ class Licenser extends Abstract_Module {
379
  return $this->get_api_url();
380
  }
381
 
382
- return $this->get_api_url() . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id;
383
  }
384
 
385
  /**
@@ -853,7 +935,13 @@ class Licenser extends Abstract_Module {
853
  $this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) );
854
  $this->register_license_hooks();
855
  }
856
-
 
 
 
 
 
 
857
  $namespace = apply_filters( 'themesle_sdk_namespace_' . md5( $product->get_basefile() ), false );
858
 
859
  if ( false !== $namespace ) {
@@ -880,6 +968,20 @@ class Licenser extends Abstract_Module {
880
  );
881
  add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
882
  add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883
 
884
  return $this;
885
  }
24
  * Licenser module for ThemeIsle SDK.
25
  */
26
  class Licenser extends Abstract_Module {
27
+ /**
28
+ * License VALID status string.
29
+ */
30
+ const STATUS_VALID = 'valid';
31
+ /**
32
+ * License NOT_ACTIVE status string.
33
+ */
34
+ const STATUS_NOT_ACTIVE = 'not_active';
35
+ /**
36
+ * License active expired status string.
37
+ */
38
+ const STATUS_ACTIVE_EXPIRED = 'active_expired';
39
  /**
40
  * Number of max failed checks before showing the license message.
41
  *
42
  * @var int $max_failed Maximum failed checks allowed before show the notice
43
  */
44
+ private static $max_failed = 1;
45
+ /**
46
+ * Flag to check if the global actions were loaded.
47
+ *
48
+ * @var bool If the globals actions were loaded.
49
+ */
50
+ private static $globals_loaded = false;
51
  /**
52
  * License key string.
53
  *
232
  return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status;
233
  }
234
 
235
+ /**
236
+ * Check status.
237
+ *
238
+ * @param string $product_file Product basefile.
239
+ *
240
+ * @return string Status license.
241
+ */
242
+ public static function status( $product_file ) {
243
+ $product = Product::get( $product_file );
244
+ if ( ! $product->requires_license() ) {
245
+ return self::STATUS_VALID;
246
+ }
247
+ $license_data = self::get_license_data( $product->get_key() );
248
+
249
+ $status = isset( $license_data->license ) ? $license_data->license : self::STATUS_NOT_ACTIVE;
250
+
251
+ return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status;
252
+ }
253
+
254
+ /**
255
+ * Product license data.
256
+ *
257
+ * @param string $key Product key.
258
+ *
259
+ * @return false|mixed|null
260
+ */
261
+ private static function get_license_data( $key ) {
262
+ $license_data = get_option( $key . '_license_data', '' );
263
+
264
+ return isset( $license_data->license ) ? $license_data : false;
265
+ }
266
+
267
+ /**
268
+ * Check if license is valid.
269
+ *
270
+ * @param string $product_file Product basefile.
271
+ *
272
+ * @return bool Is valid?
273
+ */
274
+ public static function is_valid( $product_file ) {
275
+ return self::status( $product_file ) === self::STATUS_VALID;
276
+ }
277
+
278
+ /**
279
+ * Get product plan.
280
+ *
281
+ * @param string $product_file Product file.
282
+ *
283
+ * @return int Plan id.
284
+ */
285
+ public static function plan( $product_file ) {
286
+ $product = Product::get( $product_file );
287
+ $data = self::get_license_data( $product->get_key() );
288
+
289
+ return isset( $data->price_id ) ? (int) $data->price_id : - 1;
290
+ }
291
+
292
+ /**
293
+ * Get product license key.
294
+ *
295
+ * @param string $product_file Product file.
296
+ *
297
+ * @return string
298
+ */
299
+ public static function key( $product_file ) {
300
+ $product = Product::get( $product_file );
301
+
302
+ return $product->get_license();
303
+ }
304
+
305
  /**
306
  * Return the last error message.
307
  *
343
  * @return int License plan.
344
  */
345
  public function get_plan() {
346
+ return self::plan( $this->product->get_basefile() );
 
 
 
 
 
347
  }
348
 
349
  /**
461
  return $this->get_api_url();
462
  }
463
 
464
+ return trim( $this->get_api_url(), '/' ) . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id;
465
  }
466
 
467
  /**
935
  $this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) );
936
  $this->register_license_hooks();
937
  }
938
+ if ( ! self::$globals_loaded ) {
939
+ add_filter( 'themeisle_sdk_license/status', [ __CLASS__, 'status' ], 999, 1 );
940
+ add_filter( 'themeisle_sdk_license/is-valid', [ __CLASS__, 'is_valid' ], 999, 1 );
941
+ add_filter( 'themeisle_sdk_license/plan', [ __CLASS__, 'plan' ], 999, 1 );
942
+ add_filter( 'themeisle_sdk_license/key', [ __CLASS__, 'key' ], 999, 1 );
943
+ $globals_loaded = true;
944
+ }
945
  $namespace = apply_filters( 'themesle_sdk_namespace_' . md5( $product->get_basefile() ), false );
946
 
947
  if ( false !== $namespace ) {
968
  );
969
  add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
970
  add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args
971
+ if ( ! self::is_valid( $product->get_basefile() ) ) {
972
+ add_filter(
973
+ 'plugin_action_links_' . plugin_basename( $product->get_basefile() ),
974
+ function ( $actions ) {
975
+ if ( $this->get_license_status( true ) !== self::STATUS_ACTIVE_EXPIRED ) {
976
+ return $actions;
977
+ }
978
+ $new_actions['deactivate'] = $actions['deactivate'];
979
+ $new_actions['renew_link'] = '<a style="color:#d63638" href="' . esc_url( $this->renew_url() ) . '" target="_blank" rel="external noopener noreferrer">Renew license to update</a>';
980
+
981
+ return $new_actions;
982
+ }
983
+ );
984
+ }
985
 
986
  return $this;
987
  }
vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The promotions model class for ThemeIsle SDK
4
+ *
5
+ * Here's how to hook it in your plugin: add_filter( 'menu_icons_load_promotions', function() { return array( 'otter' ); } );
6
+ *
7
+ * @package ThemeIsleSDK
8
+ * @subpackage Modules
9
+ * @copyright Copyright (c) 2017, Marius Cristea
10
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
11
+ * @since 1.0.0
12
+ */
13
+
14
+ namespace ThemeisleSDK\Modules;
15
+
16
+ use ThemeisleSDK\Common\Abstract_Module;
17
+ use ThemeisleSDK\Product;
18
+
19
+ // Exit if accessed directly.
20
+ if ( ! defined( 'ABSPATH' ) ) {
21
+ exit;
22
+ }
23
+
24
+ /**
25
+ * Promotions module for ThemeIsle SDK.
26
+ */
27
+ class Promotions extends Abstract_Module {
28
+ /**
29
+ * Fetched feeds items.
30
+ *
31
+ * @var array Feed items.
32
+ */
33
+ private $promotions_to_load = array();
34
+
35
+ /**
36
+ * Should we load this module.
37
+ *
38
+ * @param Product $product Product object.
39
+ *
40
+ * @return bool
41
+ */
42
+ public function can_load( $product ) {
43
+ if ( $this->is_from_partner( $product ) ) {
44
+ return false;
45
+ }
46
+
47
+ $this->promotions_to_load = apply_filters( $product->get_key() . '_load_promotions', array() );
48
+
49
+ if ( 0 === count( $this->promotions_to_load ) ) {
50
+ return false;
51
+ }
52
+
53
+ return true;
54
+ }
55
+
56
+ /**
57
+ * Registers the hooks.
58
+ *
59
+ * @param Product $product Product to load.
60
+ *
61
+ * @return Promotions Module instance.
62
+ */
63
+ public function load( $product ) {
64
+ if ( 0 === count( $this->promotions_to_load ) ) {
65
+ return;
66
+ }
67
+
68
+ if ( ! $this->is_writeable() || ! current_user_can( 'install_plugins' ) ) {
69
+ return;
70
+ }
71
+
72
+ $this->product = $product;
73
+
74
+ add_action( 'init', array( $this, 'register_settings' ), 99 );
75
+ add_action( 'admin_init', array( $this, 'register_reference' ), 99 );
76
+
77
+ if ( in_array( 'otter', $this->promotions_to_load )
78
+ && false === apply_filters( 'themeisle_sdk_load_promotions_otter', false )
79
+ && ! ( defined( 'OTTER_BLOCKS_VERSION' )
80
+ || $this->is_plugin_installed( 'otter-blocks' ) )
81
+ && version_compare( get_bloginfo( 'version' ), '5.8', '>=' ) ) {
82
+ add_filter( 'themeisle_sdk_load_promotions_otter', '__return_true' );
83
+
84
+ if ( false !== $this->show_otter_promotion() ) {
85
+ add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_editor_assets' ) );
86
+ }
87
+ }
88
+
89
+ return $this;
90
+ }
91
+
92
+ /**
93
+ * Register plugin reference.
94
+ *
95
+ * @return void
96
+ */
97
+ public function register_reference() {
98
+
99
+ $reference_key = ! isset( $_GET['reference_key'] ) ? '' : sanitize_key( $_GET['reference_key'] );
100
+ if ( empty( $reference_key ) ) {
101
+ return;
102
+ }
103
+ if ( get_option( 'otter_reference_key', false ) !== false ) {
104
+ return;
105
+ }
106
+ update_option( 'otter_reference_key', $reference_key );
107
+ }
108
+
109
+ /**
110
+ * Register Settings
111
+ *
112
+ * @since 1.2.0
113
+ * @access public
114
+ */
115
+ public function register_settings() {
116
+ register_setting(
117
+ 'themeisle_sdk_settings',
118
+ 'themeisle_sdk_promotions_otter',
119
+ array(
120
+ 'type' => 'string',
121
+ 'sanitize_callback' => 'sanitize_text_field',
122
+ 'show_in_rest' => true,
123
+ 'default' => '{}',
124
+ )
125
+ );
126
+
127
+ register_setting(
128
+ 'themeisle_sdk_settings',
129
+ 'themeisle_sdk_promotions_otter_installed',
130
+ array(
131
+ 'type' => 'boolean',
132
+ 'sanitize_callback' => 'rest_sanitize_boolean',
133
+ 'show_in_rest' => true,
134
+ 'default' => false,
135
+ )
136
+ );
137
+ }
138
+
139
+ /**
140
+ * Get the Otter Blocks plugin status.
141
+ *
142
+ * @param string $plugin Plugin slug.
143
+ *
144
+ * @return string
145
+ */
146
+ private function is_plugin_installed( $plugin ) {
147
+ static $allowed_keys = [ 'otter-blocks' => 'otter-blocks/otter-blocks.php' ];
148
+ if ( ! isset( $allowed_keys[ $plugin ] ) ) {
149
+ return false;
150
+ }
151
+ if ( file_exists( WP_CONTENT_DIR . '/plugins/' . $allowed_keys[ $plugin ] ) ) {
152
+ return true;
153
+ }
154
+
155
+ return false;
156
+ }
157
+
158
+ /**
159
+ * Get status of Otter promotion message.
160
+ *
161
+ * @return mixed
162
+ */
163
+ public function show_otter_promotion() {
164
+ $promotions = array(
165
+ 'blocks_css',
166
+ 'blocks_animation',
167
+ 'blocks_conditions',
168
+ );
169
+
170
+ $option = json_decode( get_option( 'themeisle_sdk_promotions_otter', '{}' ), true );
171
+
172
+ if ( 0 === count( $option ) ) {
173
+ return 'blocks-css';
174
+ }
175
+
176
+ if ( isset( $option['blocks-css'] ) && ! isset( $option['blocks-animation'] ) && $option['blocks-css'] < strtotime( '-7 days' ) ) {
177
+ return 'blocks-animation';
178
+ }
179
+
180
+ if ( isset( $option['blocks-animation'] ) && ! isset( $option['blocks-conditions'] ) && $option['blocks-animation'] < strtotime( '-7 days' ) ) {
181
+ return 'blocks-conditions';
182
+ }
183
+
184
+ return false;
185
+ }
186
+
187
+ /**
188
+ * Check if the path is writable.
189
+ *
190
+ * @return boolean
191
+ * @access public
192
+ */
193
+ public function is_writeable() {
194
+
195
+ include_once ABSPATH . 'wp-admin/includes/file.php';
196
+ $filesystem_method = get_filesystem_method();
197
+
198
+ if ( 'direct' === $filesystem_method ) {
199
+ return true;
200
+ }
201
+ return false;
202
+ }
203
+
204
+ /**
205
+ * Load Gutenberg editor assets.
206
+ *
207
+ * @access public
208
+ */
209
+ public function enqueue_editor_assets() {
210
+ global $themeisle_sdk_max_path;
211
+
212
+ $themeisle_sdk_path = dirname( $themeisle_sdk_max_path );
213
+ $themeisle_sdk_src = plugins_url( '/', $themeisle_sdk_max_path );
214
+
215
+ $asset_file = include $themeisle_sdk_path . '/themeisle-sdk/assets/js/build/index.asset.php';
216
+
217
+ wp_enqueue_script(
218
+ 'themeisle-sdk-otter-promotions',
219
+ $themeisle_sdk_src . 'themeisle-sdk/assets/js/build/index.js',
220
+ array_merge( $asset_file['dependencies'], [ 'updates' ] ),
221
+ $asset_file['version'],
222
+ true
223
+ );
224
+
225
+ $option = get_option( 'themeisle_sdk_promotions_otter', '{}' );
226
+
227
+ wp_localize_script(
228
+ 'themeisle-sdk-otter-promotions',
229
+ 'themeisleSDKPromotions',
230
+ array(
231
+ 'product' => $this->product->get_name(),
232
+ 'assets' => $themeisle_sdk_src . 'themeisle-sdk/assets/images/',
233
+ 'showPromotion' => $this->show_otter_promotion(),
234
+ 'promotions_otter' => $option,
235
+ 'activationUrl' => esc_url(
236
+ add_query_arg(
237
+ array(
238
+ 'plugin_status' => 'all',
239
+ 'paged' => '1',
240
+ 'action' => 'activate',
241
+ 'reference_key' => $this->product->get_key(),
242
+ 'plugin' => rawurlencode( 'otter-blocks/otter-blocks.php' ),
243
+ '_wpnonce' => wp_create_nonce( 'activate-plugin_otter-blocks/otter-blocks.php' ),
244
+ ),
245
+ admin_url( 'plugins.php' )
246
+ )
247
+ ),
248
+ )
249
+ );
250
+ }
251
+ }
vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php CHANGED
@@ -701,10 +701,11 @@ class Uninstall_Feedback extends Abstract_Module {
701
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
702
  $disclosure_labels = array_merge(
703
  [
704
- 'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
705
  'items' => [
706
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
707
  sprintf( '%sCurrent website:%s %s %s %s', '<strong>', '</strong>', '<code>', get_site_url(), '</code>' ),
 
708
  sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
709
  ],
710
  ],
@@ -785,11 +786,12 @@ class Uninstall_Feedback extends Abstract_Module {
785
  * @return bool Is the request succesfull?
786
  */
787
  protected function call_api( $attributes ) {
788
- $slug = $this->product->get_slug();
789
- $version = $this->product->get_version();
790
- $attributes['slug'] = $slug;
791
- $attributes['version'] = $version;
792
- $attributes['url'] = get_site_url();
 
793
 
794
  $response = wp_remote_post(
795
  self::FEEDBACK_ENDPOINT,
701
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
702
  $disclosure_labels = array_merge(
703
  [
704
+ 'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No email address or IP addresses are transmitted after you submit the survey.',
705
  'items' => [
706
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
707
  sprintf( '%sCurrent website:%s %s %s %s', '<strong>', '</strong>', '<code>', get_site_url(), '</code>' ),
708
+ sprintf( '%sUsage time:%s %s %s%s', '<strong>', '</strong>', '<code>', ( time() - $this->product->get_install_time() ), 's</code>' ),
709
  sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
710
  ],
711
  ],
786
  * @return bool Is the request succesfull?
787
  */
788
  protected function call_api( $attributes ) {
789
+ $slug = $this->product->get_slug();
790
+ $version = $this->product->get_version();
791
+ $attributes['slug'] = $slug;
792
+ $attributes['version'] = $version;
793
+ $attributes['url'] = get_site_url();
794
+ $attributes['active_time'] = ( time() - $this->product->get_install_time() );
795
 
796
  $response = wp_remote_post(
797
  self::FEEDBACK_ENDPOINT,
vendor/codeinwp/themeisle-sdk/src/Product.php CHANGED
@@ -106,10 +106,17 @@ class Product {
106
  * @var string $version The product version.
107
  */
108
  private $version;
 
 
 
 
 
 
109
  /**
110
  * Root api endpoint.
111
  */
112
  const API_URL = 'https://api.themeisle.com/';
 
113
  /**
114
  * ThemeIsle_SDK_Product constructor.
115
  *
@@ -128,8 +135,25 @@ class Product {
128
  $install = time();
129
  update_option( $this->get_key() . '_install', time() );
130
  }
131
- $this->install = $install;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
 
133
  }
134
 
135
  /**
106
  * @var string $version The product version.
107
  */
108
  private $version;
109
+ /**
110
+ * Holds a map of loaded products objects.
111
+ *
112
+ * @var array Array of loaded products.
113
+ */
114
+ private static $cached_products = [];
115
  /**
116
  * Root api endpoint.
117
  */
118
  const API_URL = 'https://api.themeisle.com/';
119
+
120
  /**
121
  * ThemeIsle_SDK_Product constructor.
122
  *
135
  $install = time();
136
  update_option( $this->get_key() . '_install', time() );
137
  }
138
+ $this->install = $install;
139
+ self::$cached_products[ crc32( $basefile ) ] = $this;
140
+ }
141
+
142
+ /**
143
+ * Return a product.
144
+ *
145
+ * @param string $basefile Product basefile.
146
+ *
147
+ * @return Product Product Object.
148
+ */
149
+ public static function get( $basefile ) {
150
+ $key = crc32( $basefile );
151
+ if ( isset( self::$cached_products[ $key ] ) ) {
152
+ return self::$cached_products[ $key ];
153
+ }
154
+ self::$cached_products[ $key ] = new Product( $basefile );
155
 
156
+ return self::$cached_products[ $key ];
157
  }
158
 
159
  /**
vendor/codeinwp/themeisle-sdk/start.php CHANGED
@@ -32,6 +32,8 @@ $files_to_load = [
32
  $themeisle_library_path . '/src/Modules/Translate.php',
33
  $themeisle_library_path . '/src/Modules/Review.php',
34
  $themeisle_library_path . '/src/Modules/Recommendation.php',
 
 
35
  ];
36
 
37
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
@@ -41,7 +43,6 @@ foreach ( $files_to_load as $file ) {
41
  require_once $file;
42
  }
43
  }
44
-
45
  Loader::init();
46
 
47
  foreach ( $products as $product ) {
32
  $themeisle_library_path . '/src/Modules/Translate.php',
33
  $themeisle_library_path . '/src/Modules/Review.php',
34
  $themeisle_library_path . '/src/Modules/Recommendation.php',
35
+ $themeisle_library_path . '/src/Modules/Promotions.php',
36
+ $themeisle_library_path . '/src/Modules/Compatibilities.php',
37
  ];
38
 
39
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
43
  require_once $file;
44
  }
45
  }
 
46
  Loader::init();
47
 
48
  foreach ( $products as $product ) {
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641
6
  {
7
  private static $loader;
8
 
@@ -24,18 +24,18 @@ class ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInit3e3d69c83300df91e8287efcde552641::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
- $includeFiles = \Composer\Autoload\ComposerStaticInit3e3d69c83300df91e8287efcde552641::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
- composerRequire3e3d69c83300df91e8287efcde552641($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
@@ -47,7 +47,7 @@ class ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641
47
  * @param string $file
48
  * @return void
49
  */
50
- function composerRequire3e3d69c83300df91e8287efcde552641($fileIdentifier, $file)
51
  {
52
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
53
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitc7871f7b38ea431eb49202200227e974
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitc7871f7b38ea431eb49202200227e974', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitc7871f7b38ea431eb49202200227e974', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInitc7871f7b38ea431eb49202200227e974::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
+ $includeFiles = \Composer\Autoload\ComposerStaticInitc7871f7b38ea431eb49202200227e974::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
+ composerRequirec7871f7b38ea431eb49202200227e974($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
47
  * @param string $file
48
  * @return void
49
  */
50
+ function composerRequirec7871f7b38ea431eb49202200227e974($fileIdentifier, $file)
51
  {
52
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
53
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit3e3d69c83300df91e8287efcde552641
8
  {
9
  public static $files = array (
10
  'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php',
@@ -356,10 +356,10 @@ class ComposerStaticInit3e3d69c83300df91e8287efcde552641
356
  public static function getInitializer(ClassLoader $loader)
357
  {
358
  return \Closure::bind(function () use ($loader) {
359
- $loader->prefixLengthsPsr4 = ComposerStaticInit3e3d69c83300df91e8287efcde552641::$prefixLengthsPsr4;
360
- $loader->prefixDirsPsr4 = ComposerStaticInit3e3d69c83300df91e8287efcde552641::$prefixDirsPsr4;
361
- $loader->prefixesPsr0 = ComposerStaticInit3e3d69c83300df91e8287efcde552641::$prefixesPsr0;
362
- $loader->classMap = ComposerStaticInit3e3d69c83300df91e8287efcde552641::$classMap;
363
 
364
  }, null, ClassLoader::class);
365
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitc7871f7b38ea431eb49202200227e974
8
  {
9
  public static $files = array (
10
  'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php',
356
  public static function getInitializer(ClassLoader $loader)
357
  {
358
  return \Closure::bind(function () use ($loader) {
359
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc7871f7b38ea431eb49202200227e974::$prefixLengthsPsr4;
360
+ $loader->prefixDirsPsr4 = ComposerStaticInitc7871f7b38ea431eb49202200227e974::$prefixDirsPsr4;
361
+ $loader->prefixesPsr0 = ComposerStaticInitc7871f7b38ea431eb49202200227e974::$prefixesPsr0;
362
+ $loader->classMap = ComposerStaticInitc7871f7b38ea431eb49202200227e974::$classMap;
363
 
364
  }, null, ClassLoader::class);
365
  }
vendor/composer/installed.json CHANGED
@@ -2,23 +2,23 @@
2
  "packages": [
3
  {
4
  "name": "codeinwp/themeisle-sdk",
5
- "version": "3.2.26",
6
- "version_normalized": "3.2.26.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
10
- "reference": "a4451041bb97a325c7bb8e86a5584adf4636650e"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/a4451041bb97a325c7bb8e86a5584adf4636650e",
15
- "reference": "a4451041bb97a325c7bb8e86a5584adf4636650e",
16
  "shasum": ""
17
  },
18
  "require-dev": {
19
  "codeinwp/phpcs-ruleset": "dev-main"
20
  },
21
- "time": "2022-05-12T11:55:06+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
@@ -39,7 +39,7 @@
39
  ],
40
  "support": {
41
  "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
42
- "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.2.26"
43
  },
44
  "install-path": "../codeinwp/themeisle-sdk"
45
  },
2
  "packages": [
3
  {
4
  "name": "codeinwp/themeisle-sdk",
5
+ "version": "3.2.30",
6
+ "version_normalized": "3.2.30.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
10
+ "reference": "7239104ae452b13cd6d506d44e8fc127232d35ce"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/7239104ae452b13cd6d506d44e8fc127232d35ce",
15
+ "reference": "7239104ae452b13cd6d506d44e8fc127232d35ce",
16
  "shasum": ""
17
  },
18
  "require-dev": {
19
  "codeinwp/phpcs-ruleset": "dev-main"
20
  },
21
+ "time": "2022-09-15T19:54:34+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
39
  ],
40
  "support": {
41
  "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
42
+ "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.2.30"
43
  },
44
  "install-path": "../codeinwp/themeisle-sdk"
45
  },
vendor/composer/installed.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php return array(
2
  'root' => array(
3
  'name' => 'codeinwp/visualizer',
4
- 'pretty_version' => 'v3.8.0',
5
- 'version' => '3.8.0.0',
6
- 'reference' => '39af88c37fe57aefde0901c99788cd8c02631bee',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
@@ -11,18 +11,18 @@
11
  ),
12
  'versions' => array(
13
  'codeinwp/themeisle-sdk' => array(
14
- 'pretty_version' => '3.2.26',
15
- 'version' => '3.2.26.0',
16
- 'reference' => 'a4451041bb97a325c7bb8e86a5584adf4636650e',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
19
  'aliases' => array(),
20
  'dev_requirement' => false,
21
  ),
22
  'codeinwp/visualizer' => array(
23
- 'pretty_version' => 'v3.8.0',
24
- 'version' => '3.8.0.0',
25
- 'reference' => '39af88c37fe57aefde0901c99788cd8c02631bee',
26
  'type' => 'wordpress-plugin',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),
1
  <?php return array(
2
  'root' => array(
3
  'name' => 'codeinwp/visualizer',
4
+ 'pretty_version' => 'v3.8.1',
5
+ 'version' => '3.8.1.0',
6
+ 'reference' => 'cce85855d65d0d465e6aec4e581579f8b357d606',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
11
  ),
12
  'versions' => array(
13
  'codeinwp/themeisle-sdk' => array(
14
+ 'pretty_version' => '3.2.30',
15
+ 'version' => '3.2.30.0',
16
+ 'reference' => '7239104ae452b13cd6d506d44e8fc127232d35ce',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
19
  'aliases' => array(),
20
  'dev_requirement' => false,
21
  ),
22
  'codeinwp/visualizer' => array(
23
+ 'pretty_version' => 'v3.8.1',
24
+ 'version' => '3.8.1.0',
25
+ 'reference' => 'cce85855d65d0d465e6aec4e581579f8b357d606',
26
  'type' => 'wordpress-plugin',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),