WordPress Charts and Graphs Lite - Version 3.7.7

Version Description

Download this release

Release Info

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

Code changes from version 3.7.6 to 3.7.7

CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  ##### [Version 3.7.6](https://github.com/Codeinwp/visualizer/compare/v3.7.5...v3.7.6) (2022-05-26)
2
 
3
  - Fix PHP 8.0 or above compatibility issue
1
+ ##### [Version 3.7.7](https://github.com/Codeinwp/visualizer/compare/v3.7.6...v3.7.7) (2022-05-31)
2
+
3
+ * Harden security by enforcing unescaped urls.
4
+
5
  ##### [Version 3.7.6](https://github.com/Codeinwp/visualizer/compare/v3.7.5...v3.7.6) (2022-05-26)
6
 
7
  - Fix PHP 8.0 or above compatibility issue
classes/Visualizer/Module/Admin.php CHANGED
@@ -365,7 +365,7 @@ class Visualizer_Module_Admin extends Visualizer_Module {
365
  'types' => array_keys( $chart_types ),
366
  ),
367
  'nonce' => wp_create_nonce(),
368
- 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
369
  );
370
 
371
  return $strings;
@@ -988,24 +988,28 @@ class Visualizer_Module_Admin extends Visualizer_Module {
988
  'map_api_key' => get_option( 'visualizer-map-api-key' ),
989
  'charts' => $charts,
990
  'urls' => array(
991
- 'base' => add_query_arg( array( 'vpage' => false, 'vaction' => false ) ),
992
- 'create' => add_query_arg(
993
- array(
994
- 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
995
- 'library' => 'yes',
996
- 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
997
- 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
998
- 'vaction' => false,
999
- ),
1000
- $ajaxurl
 
 
1001
  ),
1002
- 'edit' => add_query_arg(
1003
- array(
1004
- 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
1005
- 'library' => 'yes',
1006
- 'vaction' => false,
1007
- ),
1008
- $ajaxurl
 
 
1009
  ),
1010
  ),
1011
  'page_type' => 'library',
@@ -1024,7 +1028,7 @@ class Visualizer_Module_Admin extends Visualizer_Module {
1024
  $render->custom_css = $css;
1025
  $render->pagination = paginate_links(
1026
  array(
1027
- 'base' => add_query_arg( array( 'vpage' => '%#%', 'vaction' => false ) ),
1028
  'format' => '',
1029
  'current' => $page,
1030
  'total' => $query->max_num_pages,
365
  'types' => array_keys( $chart_types ),
366
  ),
367
  'nonce' => wp_create_nonce(),
368
+ 'buildurl' => esc_url( add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ) ),
369
  );
370
 
371
  return $strings;
988
  'map_api_key' => get_option( 'visualizer-map-api-key' ),
989
  'charts' => $charts,
990
  'urls' => array(
991
+ 'base' => esc_url( add_query_arg( array( 'vpage' => false, 'vaction' => false ) ) ),
992
+ 'create' => esc_url(
993
+ add_query_arg(
994
+ array(
995
+ 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
996
+ 'library' => 'yes',
997
+ 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
998
+ 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
999
+ 'vaction' => false,
1000
+ ),
1001
+ $ajaxurl
1002
+ )
1003
  ),
1004
+ 'edit' => esc_url(
1005
+ add_query_arg(
1006
+ array(
1007
+ 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
1008
+ 'library' => 'yes',
1009
+ 'vaction' => false,
1010
+ ),
1011
+ $ajaxurl
1012
+ )
1013
  ),
1014
  ),
1015
  'page_type' => 'library',
1028
  $render->custom_css = $css;
1029
  $render->pagination = paginate_links(
1030
  array(
1031
+ 'base' => esc_url( add_query_arg( array( 'vpage' => '%#%', 'vaction' => false ) ) ),
1032
  'format' => '',
1033
  'current' => $page,
1034
  'total' => $query->max_num_pages,
classes/Visualizer/Module/Chart.php CHANGED
@@ -526,7 +526,7 @@ class Visualizer_Module_Chart extends Visualizer_Module {
526
  );
527
  do_action( 'visualizer_pro_new_chart_defaults', $chart_id );
528
  }
529
- wp_redirect( add_query_arg( 'chart', (int) $chart_id ) );
530
 
531
  if ( defined( 'WP_TESTS_DOMAIN' ) ) {
532
  wp_die();
@@ -891,7 +891,7 @@ class Visualizer_Module_Chart extends Visualizer_Module {
891
 
892
  // redirect to next tab
893
  // changed by Ash/Upwork
894
- wp_redirect( add_query_arg( 'tab', 'settings' ) );
895
 
896
  return;
897
  }
@@ -1226,13 +1226,15 @@ class Visualizer_Module_Chart extends Visualizer_Module {
1226
  add_post_meta( $new_chart_id, $key, maybe_unserialize( $value[0] ) );
1227
  }
1228
  }
1229
- $redirect = add_query_arg(
1230
- array(
1231
- 'page' => 'visualizer',
1232
- 'type' => filter_input( INPUT_GET, 'type' ),
1233
- 'vaction' => false,
1234
- ),
1235
- admin_url( 'admin.php' )
 
 
1236
  );
1237
  }
1238
  }
526
  );
527
  do_action( 'visualizer_pro_new_chart_defaults', $chart_id );
528
  }
529
+ wp_redirect( esc_url_raw( add_query_arg( 'chart', (int) $chart_id ) ) );
530
 
531
  if ( defined( 'WP_TESTS_DOMAIN' ) ) {
532
  wp_die();
891
 
892
  // redirect to next tab
893
  // changed by Ash/Upwork
894
+ wp_redirect( esc_url_raw( add_query_arg( 'tab', 'settings' ) ) );
895
 
896
  return;
897
  }
1226
  add_post_meta( $new_chart_id, $key, maybe_unserialize( $value[0] ) );
1227
  }
1228
  }
1229
+ $redirect = esc_url(
1230
+ add_query_arg(
1231
+ array(
1232
+ 'page' => 'visualizer',
1233
+ 'type' => filter_input( INPUT_GET, 'type' ),
1234
+ 'vaction' => false,
1235
+ ),
1236
+ admin_url( 'admin.php' )
1237
+ )
1238
  );
1239
  }
1240
  }
classes/Visualizer/Module/Setup.php CHANGED
@@ -251,7 +251,7 @@ class Visualizer_Module_Setup extends Visualizer_Module {
251
  delete_option( 'visualizer-activated' );
252
  if ( ! headers_sent() ) {
253
  $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
254
- wp_redirect( add_query_arg( 'page', $page_name, admin_url( 'admin.php' ) ) );
255
  exit();
256
  }
257
  }
251
  delete_option( 'visualizer-activated' );
252
  if ( ! headers_sent() ) {
253
  $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
254
+ wp_redirect( esc_url_raw( add_query_arg( 'page', $page_name, admin_url( 'admin.php' ) ) ) );
255
  exit();
256
  }
257
  }
classes/Visualizer/Plugin.php CHANGED
@@ -28,7 +28,7 @@
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
- const VERSION = '3.7.6';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
+ const VERSION = '3.7.7';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
classes/Visualizer/Render/Layout.php CHANGED
@@ -128,13 +128,15 @@ class Visualizer_Render_Layout extends Visualizer_Render {
128
  */
129
  public static function _renderJsonScreen( $args ) {
130
  $id = $args[1];
131
- $action = add_query_arg(
132
- array(
133
- 'action' => Visualizer_Plugin::ACTION_JSON_SET_DATA,
134
- 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_JSON_SET_DATA . Visualizer_Plugin::VERSION ),
135
- 'chart' => $id,
136
- ),
137
- admin_url( 'admin-ajax.php' )
 
 
138
  );
139
 
140
  $url = get_post_meta( $id, Visualizer_Plugin::CF_JSON_URL, true );
@@ -306,13 +308,15 @@ class Visualizer_Render_Layout extends Visualizer_Render {
306
  */
307
  public static function _renderSimpleEditorScreen( $args ) {
308
  $chart_id = $args[1];
309
- $action = add_query_arg(
310
- array(
311
- 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
312
- 'nonce' => wp_create_nonce(),
313
- 'chart' => $chart_id,
314
- ),
315
- admin_url( 'admin-ajax.php' )
 
 
316
  );
317
  ?>
318
  <div class="viz-simple-editor">
@@ -582,13 +586,13 @@ class Visualizer_Render_Layout extends Visualizer_Render {
582
  <li class="viz-group open" id="vz-chart-settings">
583
  <ul class="viz-group-content">
584
  <ul class="viz-group-wrapper">
585
- <form id="settings-form" action="<?php echo add_query_arg( 'nonce', wp_create_nonce() ); ?>" method="post">
586
  <input type="hidden" id="chart-img" name="chart-img">
587
  <?php echo $sidebar; ?>
588
  <?php self::_renderPermissions( $args ); ?>
589
  <input type="hidden" name="save" value="1">
590
  </form>
591
- <form id="cancel-form" action="<?php echo add_query_arg( 'nonce', wp_create_nonce() ); ?>" method="post">
592
  <input type="hidden" name="cancel" value="1">
593
  </form>
594
  </ul>
@@ -654,13 +658,15 @@ class Visualizer_Render_Layout extends Visualizer_Render {
654
  public static function _renderTabBasic( $args ) {
655
  $chart_id = $args[1];
656
 
657
- $upload_link = add_query_arg(
658
- array(
659
- 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
660
- 'nonce' => wp_create_nonce(),
661
- 'chart' => $chart_id,
662
- ),
663
- admin_url( 'admin-ajax.php' )
 
 
664
  );
665
 
666
  // this will allow us to open the correct source tab by default.
@@ -815,12 +821,14 @@ class Visualizer_Render_Layout extends Visualizer_Render {
815
  <form>
816
  <select name="vz-import-from-chart" id="chart-id" class="visualizer-select">
817
  <?php
818
- $fetch_link = add_query_arg(
819
- array(
820
- 'action' => Visualizer_Module::is_pro() ? Visualizer_Pro::ACTION_FETCH_DATA : '',
821
- 'nonce' => wp_create_nonce(),
822
- ),
823
- admin_url( 'admin-ajax.php' )
 
 
824
  );
825
  $query_args_charts = array(
826
  'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
@@ -862,12 +870,14 @@ class Visualizer_Render_Layout extends Visualizer_Render {
862
  </li>
863
 
864
  <?php
865
- $save_filter = add_query_arg(
866
- array(
867
- 'action' => Visualizer_Plugin::ACTION_SAVE_FILTER_QUERY,
868
- 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_SAVE_FILTER_QUERY . Visualizer_Plugin::VERSION ),
869
- 'chart' => $chart_id,
870
- ), admin_url( 'admin-ajax.php' )
 
 
871
  );
872
  ?>
873
  <!-- import from WordPress -->
@@ -911,12 +921,14 @@ class Visualizer_Render_Layout extends Visualizer_Render {
911
  </li>
912
 
913
  <?php
914
- $save_query = add_query_arg(
915
- array(
916
- 'action' => Visualizer_Plugin::ACTION_SAVE_DB_QUERY,
917
- 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_SAVE_DB_QUERY . Visualizer_Plugin::VERSION ),
918
- 'chart' => $chart_id,
919
- ), admin_url( 'admin-ajax.php' )
 
 
920
  );
921
  ?>
922
  <!-- import from db -->
128
  */
129
  public static function _renderJsonScreen( $args ) {
130
  $id = $args[1];
131
+ $action = esc_url(
132
+ add_query_arg(
133
+ array(
134
+ 'action' => Visualizer_Plugin::ACTION_JSON_SET_DATA,
135
+ 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_JSON_SET_DATA . Visualizer_Plugin::VERSION ),
136
+ 'chart' => $id,
137
+ ),
138
+ admin_url( 'admin-ajax.php' )
139
+ )
140
  );
141
 
142
  $url = get_post_meta( $id, Visualizer_Plugin::CF_JSON_URL, true );
308
  */
309
  public static function _renderSimpleEditorScreen( $args ) {
310
  $chart_id = $args[1];
311
+ $action = esc_url(
312
+ add_query_arg(
313
+ array(
314
+ 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
315
+ 'nonce' => wp_create_nonce(),
316
+ 'chart' => $chart_id,
317
+ ),
318
+ admin_url( 'admin-ajax.php' )
319
+ )
320
  );
321
  ?>
322
  <div class="viz-simple-editor">
586
  <li class="viz-group open" id="vz-chart-settings">
587
  <ul class="viz-group-content">
588
  <ul class="viz-group-wrapper">
589
+ <form id="settings-form" action="<?php echo esc_url( add_query_arg( 'nonce', wp_create_nonce() ) ); ?>" method="post">
590
  <input type="hidden" id="chart-img" name="chart-img">
591
  <?php echo $sidebar; ?>
592
  <?php self::_renderPermissions( $args ); ?>
593
  <input type="hidden" name="save" value="1">
594
  </form>
595
+ <form id="cancel-form" action="<?php echo esc_url( add_query_arg( 'nonce', wp_create_nonce() ) ); ?>" method="post">
596
  <input type="hidden" name="cancel" value="1">
597
  </form>
598
  </ul>
658
  public static function _renderTabBasic( $args ) {
659
  $chart_id = $args[1];
660
 
661
+ $upload_link = esc_url(
662
+ add_query_arg(
663
+ array(
664
+ 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
665
+ 'nonce' => wp_create_nonce(),
666
+ 'chart' => $chart_id,
667
+ ),
668
+ admin_url( 'admin-ajax.php' )
669
+ )
670
  );
671
 
672
  // this will allow us to open the correct source tab by default.
821
  <form>
822
  <select name="vz-import-from-chart" id="chart-id" class="visualizer-select">
823
  <?php
824
+ $fetch_link = esc_url(
825
+ add_query_arg(
826
+ array(
827
+ 'action' => Visualizer_Module::is_pro() ? Visualizer_Pro::ACTION_FETCH_DATA : '',
828
+ 'nonce' => wp_create_nonce(),
829
+ ),
830
+ admin_url( 'admin-ajax.php' )
831
+ )
832
  );
833
  $query_args_charts = array(
834
  'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
870
  </li>
871
 
872
  <?php
873
+ $save_filter = esc_url(
874
+ add_query_arg(
875
+ array(
876
+ 'action' => Visualizer_Plugin::ACTION_SAVE_FILTER_QUERY,
877
+ 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_SAVE_FILTER_QUERY . Visualizer_Plugin::VERSION ),
878
+ 'chart' => $chart_id,
879
+ ), admin_url( 'admin-ajax.php' )
880
+ )
881
  );
882
  ?>
883
  <!-- import from WordPress -->
921
  </li>
922
 
923
  <?php
924
+ $save_query = esc_url(
925
+ add_query_arg(
926
+ array(
927
+ 'action' => Visualizer_Plugin::ACTION_SAVE_DB_QUERY,
928
+ 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_SAVE_DB_QUERY . Visualizer_Plugin::VERSION ),
929
+ 'chart' => $chart_id,
930
+ ), admin_url( 'admin-ajax.php' )
931
+ )
932
  );
933
  ?>
934
  <!-- import from db -->
classes/Visualizer/Render/Library.php CHANGED
@@ -297,30 +297,36 @@ class Visualizer_Render_Library extends Visualizer_Render {
297
  }
298
 
299
  $ajax_url = admin_url( 'admin-ajax.php' );
300
- $delete_url = add_query_arg(
301
- array(
302
- 'action' => Visualizer_Plugin::ACTION_DELETE_CHART,
303
- 'nonce' => wp_create_nonce(),
304
- 'chart' => $chart_id,
305
- ),
306
- $ajax_url
 
 
307
  );
308
- $clone_url = add_query_arg(
309
- array(
310
- 'action' => Visualizer_Plugin::ACTION_CLONE_CHART,
311
- 'nonce' => wp_create_nonce( Visualizer_Plugin::ACTION_CLONE_CHART ),
312
- 'chart' => $chart_id,
313
- 'type' => $this->type,
314
- ),
315
- $ajax_url
 
 
316
  );
317
- $export_link = add_query_arg(
318
- array(
319
- 'action' => Visualizer_Plugin::ACTION_EXPORT_DATA,
320
- 'chart' => $chart_id,
321
- 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_EXPORT_DATA . Visualizer_Plugin::VERSION ),
322
- ),
323
- admin_url( 'admin-ajax.php' )
 
 
324
  );
325
 
326
  $chart_status = array( 'date' => get_the_modified_date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $chart_id ), 'error' => get_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR, true ), 'icon' => 'dashicons-yes-alt', 'title' => 'A-OK!' );
297
  }
298
 
299
  $ajax_url = admin_url( 'admin-ajax.php' );
300
+ $delete_url = esc_url(
301
+ add_query_arg(
302
+ array(
303
+ 'action' => Visualizer_Plugin::ACTION_DELETE_CHART,
304
+ 'nonce' => wp_create_nonce(),
305
+ 'chart' => $chart_id,
306
+ ),
307
+ $ajax_url
308
+ )
309
  );
310
+ $clone_url = esc_url(
311
+ add_query_arg(
312
+ array(
313
+ 'action' => Visualizer_Plugin::ACTION_CLONE_CHART,
314
+ 'nonce' => wp_create_nonce( Visualizer_Plugin::ACTION_CLONE_CHART ),
315
+ 'chart' => $chart_id,
316
+ 'type' => $this->type,
317
+ ),
318
+ $ajax_url
319
+ )
320
  );
321
+ $export_link = esc_url(
322
+ add_query_arg(
323
+ array(
324
+ 'action' => Visualizer_Plugin::ACTION_EXPORT_DATA,
325
+ 'chart' => $chart_id,
326
+ 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_EXPORT_DATA . Visualizer_Plugin::VERSION ),
327
+ ),
328
+ admin_url( 'admin-ajax.php' )
329
+ )
330
  );
331
 
332
  $chart_status = array( 'date' => get_the_modified_date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $chart_id ), 'error' => get_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR, true ), 'icon' => 'dashicons-yes-alt', 'title' => 'A-OK!' );
classes/Visualizer/Render/Page/Data.php CHANGED
@@ -107,7 +107,7 @@ class Visualizer_Render_Page_Data extends Visualizer_Render_Page {
107
  // NOTE: We can't be selective on the post_status here because when a new chart reaches the settings screen, its status changes to publish.
108
  if ( ! VISUALIZER_SKIP_CHART_TYPE_PAGE ) {
109
  echo '<div class="toolbar-div">';
110
- echo '<a class="button button-large" href="', add_query_arg( 'tab', 'types' ), '">';
111
  esc_html_e( 'Back', 'visualizer' );
112
  echo '</a>';
113
  echo '</div>';
107
  // NOTE: We can't be selective on the post_status here because when a new chart reaches the settings screen, its status changes to publish.
108
  if ( ! VISUALIZER_SKIP_CHART_TYPE_PAGE ) {
109
  echo '<div class="toolbar-div">';
110
+ echo '<a class="button button-large" href="', esc_url( add_query_arg( 'tab', 'types' ) ), '">';
111
  esc_html_e( 'Back', 'visualizer' );
112
  echo '</a>';
113
  echo '</div>';
classes/Visualizer/Render/Page/Settings.php CHANGED
@@ -51,7 +51,7 @@ class Visualizer_Render_Page_Settings extends Visualizer_Render_Page {
51
  * @access protected
52
  */
53
  protected function _renderToolbar() {
54
- echo '<a class="button button-large" href="', add_query_arg( 'tab', 'data' ), '">';
55
  esc_html_e( 'Back', 'visualizer' );
56
  echo '</a>';
57
  echo '<input type="submit" class="button button-primary button-large push-right" value="', $this->button, '">';
@@ -65,7 +65,7 @@ class Visualizer_Render_Page_Settings extends Visualizer_Render_Page {
65
  * @access protected
66
  */
67
  protected function _toHTML() {
68
- echo '<form id="settings-form" action="', add_query_arg( 'nonce', wp_create_nonce() ), '" method="post">';
69
  parent::_toHTML();
70
  echo '</form>';
71
  }
51
  * @access protected
52
  */
53
  protected function _renderToolbar() {
54
+ echo '<a class="button button-large" href="', esc_url( add_query_arg( 'tab', 'data' ) ), '">';
55
  esc_html_e( 'Back', 'visualizer' );
56
  echo '</a>';
57
  echo '<input type="submit" class="button button-primary button-large push-right" value="', $this->button, '">';
65
  * @access protected
66
  */
67
  protected function _toHTML() {
68
+ echo '<form id="settings-form" action="', esc_url( add_query_arg( 'nonce', wp_create_nonce() ) ), '" method="post">';
69
  parent::_toHTML();
70
  echo '</form>';
71
  }
css/media.css CHANGED
@@ -1,5 +1,5 @@
1
  /*
2
- Version: 3.7.6
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
1
  /*
2
+ Version: 3.7.7
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
index.php CHANGED
@@ -3,7 +3,7 @@
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.7.6
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
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.7.7
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
readme.txt CHANGED
@@ -163,6 +163,13 @@ Pay attention that to turn your shortcodes into graphs, your theme has to have `
163
 
164
  == Changelog ==
165
 
 
 
 
 
 
 
 
166
  ##### [Version 3.7.6](https://github.com/Codeinwp/visualizer/compare/v3.7.5...v3.7.6) (2022-05-26)
167
 
168
  - Fix PHP 8.0 or above compatibility issue
163
 
164
  == Changelog ==
165
 
166
+ ##### [Version 3.7.7](https://github.com/Codeinwp/visualizer/compare/v3.7.6...v3.7.7) (2022-05-31)
167
+
168
+ * Harden security by enforcing unescaped urls.
169
+
170
+
171
+
172
+
173
  ##### [Version 3.7.6](https://github.com/Codeinwp/visualizer/compare/v3.7.5...v3.7.6) (2022-05-26)
174
 
175
  - Fix PHP 8.0 or above compatibility issue
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 ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0
6
  {
7
  private static $loader;
8
 
@@ -24,18 +24,18 @@ class ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
- $includeFiles = \Composer\Autoload\ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
- composerRequiree6cd6b9e5d6786401e9d157fb1f854c0($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
@@ -47,7 +47,7 @@ class ComposerAutoloaderInite6cd6b9e5d6786401e9d157fb1f854c0
47
  * @param string $file
48
  * @return void
49
  */
50
- function composerRequiree6cd6b9e5d6786401e9d157fb1f854c0($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 ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
+ $includeFiles = \Composer\Autoload\ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
+ composerRequirebc52507a293ed5ff01d464499d5522c3($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
47
  * @param string $file
48
  * @return void
49
  */
50
+ function composerRequirebc52507a293ed5ff01d464499d5522c3($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 ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0
8
  {
9
  public static $files = array (
10
  'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php',
@@ -356,10 +356,10 @@ class ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0
356
  public static function getInitializer(ClassLoader $loader)
357
  {
358
  return \Closure::bind(function () use ($loader) {
359
- $loader->prefixLengthsPsr4 = ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::$prefixLengthsPsr4;
360
- $loader->prefixDirsPsr4 = ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::$prefixDirsPsr4;
361
- $loader->prefixesPsr0 = ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::$prefixesPsr0;
362
- $loader->classMap = ComposerStaticInite6cd6b9e5d6786401e9d157fb1f854c0::$classMap;
363
 
364
  }, null, ClassLoader::class);
365
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitbc52507a293ed5ff01d464499d5522c3
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 = ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::$prefixLengthsPsr4;
360
+ $loader->prefixDirsPsr4 = ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::$prefixDirsPsr4;
361
+ $loader->prefixesPsr0 = ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::$prefixesPsr0;
362
+ $loader->classMap = ComposerStaticInitbc52507a293ed5ff01d464499d5522c3::$classMap;
363
 
364
  }, null, ClassLoader::class);
365
  }
vendor/composer/installed.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php return array(
2
  'root' => array(
3
- 'pretty_version' => 'v3.7.6',
4
- 'version' => '3.7.6.0',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '207f4d48d96943aa3a49b31037c37320fd094856',
9
  'name' => 'codeinwp/visualizer',
10
  'dev' => false,
11
  ),
@@ -20,12 +20,12 @@
20
  'dev_requirement' => false,
21
  ),
22
  'codeinwp/visualizer' => array(
23
- 'pretty_version' => 'v3.7.6',
24
- 'version' => '3.7.6.0',
25
  'type' => 'wordpress-plugin',
26
  'install_path' => __DIR__ . '/../../',
27
  'aliases' => array(),
28
- 'reference' => '207f4d48d96943aa3a49b31037c37320fd094856',
29
  'dev_requirement' => false,
30
  ),
31
  'markbaker/complex' => array(
1
  <?php return array(
2
  'root' => array(
3
+ 'pretty_version' => 'v3.7.7',
4
+ 'version' => '3.7.7.0',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => '6e0a050537e304b048b3149f9465cc5a89fb2fe3',
9
  'name' => 'codeinwp/visualizer',
10
  'dev' => false,
11
  ),
20
  'dev_requirement' => false,
21
  ),
22
  'codeinwp/visualizer' => array(
23
+ 'pretty_version' => 'v3.7.7',
24
+ 'version' => '3.7.7.0',
25
  'type' => 'wordpress-plugin',
26
  'install_path' => __DIR__ . '/../../',
27
  'aliases' => array(),
28
+ 'reference' => '6e0a050537e304b048b3149f9465cc5a89fb2fe3',
29
  'dev_requirement' => false,
30
  ),
31
  'markbaker/complex' => array(