Version Description
Download this release
Release Info
Developer | themeisle |
Plugin | 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
- CHANGELOG.md +10 -0
- classes/Visualizer/Gutenberg/Block.php +1 -1
- classes/Visualizer/Module.php +4 -1
- classes/Visualizer/Module/Admin.php +9 -2
- classes/Visualizer/Module/Sources.php +1 -1
- classes/Visualizer/Plugin.php +2 -2
- classes/Visualizer/Render/Library.php +2 -2
- classes/Visualizer/Render/Page/Types.php +1 -1
- css/frame.css +20 -3
- css/library.css +14 -4
- css/media.css +1 -1
- index.php +13 -3
- js/render-chartjs.js +5 -0
- js/render-google.js +12 -1
- readme.txt +15 -2
- templates/docs.php +1 -1
- templates/more.php +1 -1
- templates/support.php +1 -1
- vendor/autoload.php +1 -1
- vendor/codeinwp/themeisle-sdk/CHANGELOG.md +20 -0
- vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg +0 -0
- vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg +0 -0
- vendor/codeinwp/themeisle-sdk/assets/images/css.jpg +0 -0
- vendor/codeinwp/themeisle-sdk/assets/js/build/index.asset.php +1 -0
- vendor/codeinwp/themeisle-sdk/assets/js/build/index.js +1 -0
- vendor/codeinwp/themeisle-sdk/load.php +103 -1
- vendor/codeinwp/themeisle-sdk/src/Loader.php +2 -1
- vendor/codeinwp/themeisle-sdk/src/Modules/Compatibilities.php +236 -0
- vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php +2 -1
- vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +112 -10
- vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php +251 -0
- vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +8 -6
- vendor/codeinwp/themeisle-sdk/src/Product.php +25 -1
- vendor/codeinwp/themeisle-sdk/start.php +2 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +5 -5
- vendor/composer/installed.json +7 -7
- 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
|
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.
|
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
|
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> </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="' .
|
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> </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 |
-
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-
|
128 |
-
|
|
|
129 |
float: left;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
}
|
131 |
|
132 |
.visualizer-nochart-image,
|
@@ -152,8 +163,7 @@
|
|
152 |
}
|
153 |
|
154 |
.visualizer-chart-shortcode {
|
155 |
-
|
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.
|
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
|
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.
|
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
|
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](
|
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
|
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.
|
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:
|
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 =
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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
|
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
|
789 |
-
$version
|
790 |
-
$attributes['slug']
|
791 |
-
$attributes['version']
|
792 |
-
$attributes['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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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('
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
-
spl_autoload_unregister(array('
|
30 |
|
31 |
require __DIR__ . '/autoload_static.php';
|
32 |
-
call_user_func(\Composer\Autoload\
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
36 |
-
$includeFiles = \Composer\Autoload\
|
37 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
38 |
-
|
39 |
}
|
40 |
|
41 |
return $loader;
|
@@ -47,7 +47,7 @@ class ComposerAutoloaderInit3e3d69c83300df91e8287efcde552641
|
|
47 |
* @param string $file
|
48 |
* @return void
|
49 |
*/
|
50 |
-
function
|
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
|
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 =
|
360 |
-
$loader->prefixDirsPsr4 =
|
361 |
-
$loader->prefixesPsr0 =
|
362 |
-
$loader->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.
|
6 |
-
"version_normalized": "3.2.
|
7 |
"source": {
|
8 |
"type": "git",
|
9 |
"url": "https://github.com/Codeinwp/themeisle-sdk.git",
|
10 |
-
"reference": "
|
11 |
},
|
12 |
"dist": {
|
13 |
"type": "zip",
|
14 |
-
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/
|
15 |
-
"reference": "
|
16 |
"shasum": ""
|
17 |
},
|
18 |
"require-dev": {
|
19 |
"codeinwp/phpcs-ruleset": "dev-main"
|
20 |
},
|
21 |
-
"time": "2022-
|
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.
|
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.
|
5 |
-
'version' => '3.8.
|
6 |
-
'reference' => '
|
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.
|
15 |
-
'version' => '3.2.
|
16 |
-
'reference' => '
|
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.
|
24 |
-
'version' => '3.8.
|
25 |
-
'reference' => '
|
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(),
|