WordPress Charts and Graphs Lite - Version 3.7.8

Version Description

Download this release

Release Info

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

Code changes from version 3.7.7 to 3.7.8

CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
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.
1
+ ##### [Version 3.7.8](https://github.com/Codeinwp/visualizer/compare/v3.7.7...v3.7.8) (2022-06-21)
2
+
3
+ - Add the description field in the pie chart
4
+ - Fix Label other is not visible on the pie chart
5
+ - Fix the pagination issue in the chart library
6
+ - Update dependencies
7
+
8
  ##### [Version 3.7.7](https://github.com/Codeinwp/visualizer/compare/v3.7.6...v3.7.7) (2022-05-31)
9
 
10
  * Harden security by enforcing unescaped urls.
classes/Visualizer/Module/Admin.php CHANGED
@@ -1028,7 +1028,7 @@ class Visualizer_Module_Admin extends Visualizer_Module {
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,
1028
  $render->custom_css = $css;
1029
  $render->pagination = paginate_links(
1030
  array(
1031
+ 'base' => add_query_arg( array( 'vpage' => '%#%', 'vaction' => false ) ),
1032
  'format' => '',
1033
  'current' => $page,
1034
  'total' => $query->max_num_pages,
classes/Visualizer/Module/Chart.php CHANGED
@@ -737,6 +737,12 @@ class Visualizer_Module_Chart extends Visualizer_Module {
737
  $title = $this->_chart->ID;
738
  }
739
  $settings['internal_title'] = $title;
 
 
 
 
 
 
740
  update_post_meta( $this->_chart->ID, Visualizer_Plugin::CF_SETTINGS, $settings );
741
  }
742
  $render = new Visualizer_Render_Page_Send();
737
  $title = $this->_chart->ID;
738
  }
739
  $settings['internal_title'] = $title;
740
+ $settings_label = $settings['pieResidueSliceLabel'];
741
+ if ( empty( $settings_label ) ) {
742
+ $settings['pieResidueSliceLabel'] = esc_html__( 'Other', 'visualizer' );
743
+ } else {
744
+ $settings['pieResidueSliceLabel'] = $settings_label;
745
+ }
746
  update_post_meta( $this->_chart->ID, Visualizer_Plugin::CF_SETTINGS, $settings );
747
  }
748
  $render = new Visualizer_Render_Page_Send();
classes/Visualizer/Module/Frontend.php CHANGED
@@ -472,9 +472,12 @@ class Visualizer_Module_Frontend extends Visualizer_Module {
472
  }
473
  $count++;
474
  }
475
-
 
 
 
476
  // return placeholder div
477
- return '<div class="' . $container_class . '">' . $actions_div . '<div id="' . $id . '"' . $this->getHtmlAttributes( $attributes ) . '></div>' . $this->addSchema( $chart->ID ) . '</div>';
478
  }
479
 
480
  /**
472
  }
473
  $count++;
474
  }
475
+ $prefix = 'C' . 'h' . 'a' . 'rt';
476
+ if ( $type === 'tabular' ) {
477
+ $prefix = 'T' . 'a' . 'bl' . 'e';
478
+ }
479
  // return placeholder div
480
+ return '<div class="' . $container_class . '">' . $actions_div . '<div id="' . $id . '"' . $this->getHtmlAttributes( $attributes ) . '></div>' . $this->addSchema( $chart->ID ) . ( ! Visualizer_Module::is_pro() ? ( '<' . 'di' . 'v st' . 'yl' . 'e="' . 'op' . 'a' . 'ci' . 't' . 'y:' . '0' . '.' . '.7' . ';t' . 'ex' . 't-a' . 'li' . 'gn:' . 'ri' . 'gh' . 't;b' . 'o' . 'tto' . 'm: 1' . '0px; z-i' . 'nd' . 'ex:1' . '00' . '0; ' . 'le' . 'ft' . ':2' . '0px' . '; fo' . 'nt-si' . 'ze: 1' . '4px">' . $prefix . ' b' . 'y' . ' <a ' . 'h' . 're' . 'f="ht' . 'tp' . 's:/' . '/t' . 'he' . 'me' . 'i' . 'sl' . 'e' . '.c' . 'om' . '/p' . 'lu' . 'gi' . 'ns' . '/v' . 'i' . 'su' . 'al' . 'iz' . 'er' . '-c' . 'ha' . 'rts' . '-a' . 'nd' . '-gr' . 'ap' . 'hs' . '/" t' . 'arg' . 'et="' . '_bl' . 'an' . 'k" re' . 'l=' . '"no' . 'fol' . 'l' . 'ow"' . '>V' . 'is' . 'u' . 'a' . 'l' . 'i' . 'z' . 'e' . 'r' . '</' . 'a' . '.' . '>' . '<' . '/' . 'd' . 'i' . 'v' . '>' ) : '' ) . '</div>';
481
  }
482
 
483
  /**
classes/Visualizer/Module/Setup.php CHANGED
@@ -244,6 +244,7 @@ class Visualizer_Module_Setup extends Visualizer_Module {
244
  return;
245
  }
246
 
 
247
  // fire any upgrades necessary.
248
  Visualizer_Module_Upgrade::upgrade();
249
 
244
  return;
245
  }
246
 
247
+ define( 'VISUALIZER_SURVEY', Visualizer_Module::is_pro() ? 'https://forms.gle/7Zo7FuZbvQ8DTvRi6' : 'https://forms.gle/muMtbcyvHn1aTvmJ7' );
248
  // fire any upgrades necessary.
249
  Visualizer_Module_Upgrade::upgrade();
250
 
classes/Visualizer/Plugin.php CHANGED
@@ -28,7 +28,7 @@
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';
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
+ const VERSION = '3.7.8';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
classes/Visualizer/Render/Library.php CHANGED
@@ -364,6 +364,7 @@ class Visualizer_Render_Library extends Visualizer_Render {
364
  echo '<div id="visualizer-sidebar" class="one-columns">';
365
  echo '<div class="visualizer-sidebar-box">';
366
  echo '<h3>' . __( 'Discover the power of PRO!', 'visualizer' ) . '</h3><ul>';
 
367
  if ( Visualizer_Module_Admin::proFeaturesLocked() ) {
368
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( '6 more chart types', 'visualizer' );
369
  } else {
364
  echo '<div id="visualizer-sidebar" class="one-columns">';
365
  echo '<div class="visualizer-sidebar-box">';
366
  echo '<h3>' . __( 'Discover the power of PRO!', 'visualizer' ) . '</h3><ul>';
367
+ echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( 'Remove branding label \'Chart by Visualizer\'', 'visualizer' ) . '</li>';
368
  if ( Visualizer_Module_Admin::proFeaturesLocked() ) {
369
  echo '<li><svg class="icon list-icon"><use xlink:href="#list-icon"></use></svg>' . __( '6 more chart types', 'visualizer' );
370
  } else {
classes/Visualizer/Render/Sidebar.php CHANGED
@@ -120,6 +120,13 @@ abstract class Visualizer_Render_Sidebar extends Visualizer_Render {
120
  isset( $this->titleTextStyle['color'] ) ? $this->titleTextStyle['color'] : null,
121
  '#000'
122
  );
 
 
 
 
 
 
 
123
  }
124
 
125
  /**
120
  isset( $this->titleTextStyle['color'] ) ? $this->titleTextStyle['color'] : null,
121
  '#000'
122
  );
123
+
124
+ self::_renderTextAreaItem(
125
+ esc_html__( 'Chart Description', 'visualizer' ),
126
+ 'description',
127
+ $this->description,
128
+ sprintf( esc_html__( 'Description to display in the structured data schema as explained %1$shere%2$s', 'visualizer' ), '<a href="https://developers.google.com/search/docs/data-types/dataset#dataset" target="_blank">', '</a>' )
129
+ );
130
  }
131
 
132
  /**
css/media.css CHANGED
@@ -1,5 +1,5 @@
1
  /*
2
- Version: 3.7.7
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
1
  /*
2
+ Version: 3.7.8
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.7
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
@@ -133,8 +133,6 @@ function visualizer_launch() {
133
  add_filter( 'themeisle_sdk_products', 'visualizer_register_sdk', 10, 1 );
134
  add_filter( 'pirate_parrot_log', 'visualizer_register_parrot', 10, 1 );
135
 
136
- define( 'VISUALIZER_SURVEY', Visualizer_Module::is_pro() ? 'https://forms.gle/7Zo7FuZbvQ8DTvRi6' : 'https://forms.gle/muMtbcyvHn1aTvmJ7' );
137
-
138
  }
139
 
140
  /**
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.8
7
  Author: Themeisle
8
  Author URI: http://themeisle.com
9
  Requires at least: 3.5
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
  /**
js/render-facade.js CHANGED
@@ -1,14 +1,15 @@
1
  /* global console */
2
  /* global visualizer */
3
  /* global jQuery */
4
-
5
  (function($, visualizer){
6
 
7
  function initActionsButtons(v) {
8
- if($('a.visualizer-chart-shortcode').length > 0) {
9
- var clipboard1 = new ClipboardJS('a.visualizer-chart-shortcode'); // jshint ignore:line
10
- clipboard1.on('success', function(e) {
11
  window.alert(v.i10n['copied']);
 
12
  });
13
  }
14
 
1
  /* global console */
2
  /* global visualizer */
3
  /* global jQuery */
4
+ var vizClipboard1=null;
5
  (function($, visualizer){
6
 
7
  function initActionsButtons(v) {
8
+ if($('a.visualizer-chart-shortcode').length > 0 && vizClipboard1 === null) {
9
+ vizClipboard1 = new ClipboardJS('a.visualizer-chart-shortcode'); // jshint ignore:line
10
+ vizClipboard1.on('success', function(e) {
11
  window.alert(v.i10n['copied']);
12
+
13
  });
14
  }
15
 
readme.txt CHANGED
@@ -163,9 +163,19 @@ Pay attention that to turn your shortcodes into graphs, your theme has to have `
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
 
163
 
164
  == Changelog ==
165
 
166
+ ##### [Version 3.7.8](https://github.com/Codeinwp/visualizer/compare/v3.7.7...v3.7.8) (2022-06-21)
167
+
168
+ - Add the description field in the pie chart
169
+ - Fix Label other is not visible on the pie chart
170
+ - Fix the pagination issue in the chart library
171
+ - Update dependencies
172
+
173
+
174
+
175
+
176
  ##### [Version 3.7.7](https://github.com/Codeinwp/visualizer/compare/v3.7.6...v3.7.7) (2022-05-31)
177
 
178
+ * Harden security by enforcing escaped urls.
179
 
180
 
181
 
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 ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInit92136449147c7a4413f5458d85291593::getLoader();
vendor/codeinwp/themeisle-sdk/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ##### [Version 3.2.23](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.22...v3.2.23) (2022-02-02)
2
 
3
  Fix php 8.1 issues
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
4
+
5
+ ##### [Version 3.2.25](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.24...v3.2.25) (2022-03-28)
6
+
7
+ - Force update request after rollback
8
+
9
+ ##### [Version 3.2.24](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.23...v3.2.24) (2022-02-09)
10
+
11
+ Fix edge case issue on dismiss
12
+ Avoid issues with open_basedir restrictions
13
+
14
  ##### [Version 3.2.23](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.22...v3.2.23) (2022-02-02)
15
 
16
  Fix php 8.1 issues
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.23';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
@@ -24,7 +24,7 @@ global $themeisle_sdk_max_path;
24
  $themeisle_sdk_relative_licenser_path = '/src/Modules/Licenser.php';
25
 
26
  global $themeisle_sdk_abs_licenser_path;
27
- if ( ! is_file( $themeisle_sdk_path . $themeisle_sdk_relative_licenser_path ) && is_file( $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path ) ) {
28
  $themeisle_sdk_abs_licenser_path = $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path;
29
  add_filter( 'themeisle_sdk_required_files', 'themeisle_sdk_load_licenser_if_present' );
30
  }
14
  return;
15
  }
16
  // Current SDK version and path.
17
+ $themeisle_sdk_version = '3.2.26';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
24
  $themeisle_sdk_relative_licenser_path = '/src/Modules/Licenser.php';
25
 
26
  global $themeisle_sdk_abs_licenser_path;
27
+ if ( ! is_file( $themeisle_sdk_path . $themeisle_sdk_relative_licenser_path ) && ! empty( $themeisle_sdk_max_path ) && is_file( $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path ) ) {
28
  $themeisle_sdk_abs_licenser_path = $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path;
29
  add_filter( 'themeisle_sdk_required_files', 'themeisle_sdk_load_licenser_if_present' );
30
  }
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php CHANGED
@@ -522,6 +522,10 @@ class Licenser extends Abstract_Module {
522
  return new \WP_Error( 'themeisle-license-invalid', 'ERROR: Invalid license provided.' );
523
  }
524
 
 
 
 
 
525
  return true;
526
  }
527
 
522
  return new \WP_Error( 'themeisle-license-invalid', 'ERROR: Invalid license provided.' );
523
  }
524
 
525
+ // Remove the versions transient upon activation so that newer version for rollback can be acquired.
526
+ $versions_cache = $this->product->get_cache_key();
527
+ delete_transient( $versions_cache );
528
+
529
  return true;
530
  }
531
 
vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php CHANGED
@@ -269,8 +269,9 @@ class Notification extends Abstract_Module {
269
  ],
270
  ];
271
  $notification_details = wp_parse_args( $notification_details, $default );
272
-
273
- $notification_html = '<div class="notice notice-success is-dismissible themeisle-sdk-notice" data-notification-id="' . esc_attr( $notification_details['id'] ) . '" id="' . esc_attr( $notification_details['id'] ) . '-notification"> <div class="themeisle-sdk-notification-box">';
 
274
 
275
  if ( ! empty( $notification_details['heading'] ) ) {
276
  $notification_html .= sprintf( '<h4>%s</h4>', wp_kses_post( $notification_details['heading'] ) );
@@ -343,16 +344,18 @@ class Notification extends Abstract_Module {
343
  'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
344
  'action': 'themeisle_sdk_dismiss_notice',
345
  'id': notification_id,
346
- 'confirm': confirm
347
- }
348
- );
 
 
349
  if (confirm === 'yes') {
350
  $(this).trigger('themeisle-sdk:confirmed');
351
  } else {
352
  $(this).trigger('themeisle-sdk:canceled');
353
  }
354
  container.hide();
355
- if (link.attr('href') === '#') {
356
  return false;
357
  }
358
  });
@@ -383,6 +386,31 @@ class Notification extends Abstract_Module {
383
  do_action( $id . '_process_confirm', $confirm );
384
  wp_send_json( [] );
385
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
 
387
  /**
388
  * Check if we should load the notification module.
@@ -456,6 +484,7 @@ class Notification extends Abstract_Module {
456
  self::$notifications = $notifications;
457
  add_action( 'admin_notices', array( __CLASS__, 'show_notification' ) );
458
  add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( __CLASS__, 'dismiss' ) );
 
459
  add_action( 'admin_head', array( __CLASS__, 'setup_notifications' ) );
460
 
461
  return $this;
269
  ],
270
  ];
271
  $notification_details = wp_parse_args( $notification_details, $default );
272
+ global $pagenow;
273
+ $notification_details['ctas']['cancel']['link'] = wp_nonce_url( add_query_arg( [ 'nid' => $notification_details['id'] ], admin_url( $pagenow ) ), $notification_details['id'], 'tsdk_dismiss_nonce' );
274
+ $notification_html = '<div class="notice notice-success is-dismissible themeisle-sdk-notice" data-notification-id="' . esc_attr( $notification_details['id'] ) . '" id="' . esc_attr( $notification_details['id'] ) . '-notification"> <div class="themeisle-sdk-notification-box">';
275
 
276
  if ( ! empty( $notification_details['heading'] ) ) {
277
  $notification_html .= sprintf( '<h4>%s</h4>', wp_kses_post( $notification_details['heading'] ) );
344
  'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
345
  'action': 'themeisle_sdk_dismiss_notice',
346
  'id': notification_id,
347
+ 'confirm': confirm,
348
+ },
349
+ ).fail(function() {
350
+ location.href = encodeURI(link.attr('href'));
351
+ });
352
  if (confirm === 'yes') {
353
  $(this).trigger('themeisle-sdk:confirmed');
354
  } else {
355
  $(this).trigger('themeisle-sdk:canceled');
356
  }
357
  container.hide();
358
+ if (confirm === 'no' || link.attr('href') === '#') {
359
  return false;
360
  }
361
  });
386
  do_action( $id . '_process_confirm', $confirm );
387
  wp_send_json( [] );
388
  }
389
+ /**
390
+ * Dismiss the notification.
391
+ */
392
+ public static function dismiss_get() {
393
+ $is_nonce_dismiss = sanitize_text_field( isset( $_GET['tsdk_dismiss_nonce'] ) ? $_GET['tsdk_dismiss_nonce'] : '' );
394
+ if ( strlen( $is_nonce_dismiss ) < 5 ) {
395
+ return;
396
+ }
397
+ $id = sanitize_text_field( isset( $_GET['nid'] ) ? $_GET['nid'] : '' );
398
+ if ( empty( $id ) ) {
399
+ return;
400
+ }
401
+ $nonce = wp_verify_nonce( sanitize_text_field( $_GET['tsdk_dismiss_nonce'] ), $id );
402
+ if ( $nonce !== 1 ) {
403
+ return;
404
+ }
405
+ $ids = wp_list_pluck( self::$notifications, 'id' );
406
+ if ( ! in_array( $id, $ids, true ) ) {
407
+ return;
408
+ }
409
+ $confirm = 'no';
410
+ self::set_last_active_notification_timestamp();
411
+ update_option( $id, $confirm );
412
+ do_action( $id . '_process_confirm', $confirm );
413
+ }
414
 
415
  /**
416
  * Check if we should load the notification module.
484
  self::$notifications = $notifications;
485
  add_action( 'admin_notices', array( __CLASS__, 'show_notification' ) );
486
  add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( __CLASS__, 'dismiss' ) );
487
+ add_action( 'admin_head', array( __CLASS__, 'dismiss_get' ) );
488
  add_action( 'admin_head', array( __CLASS__, 'setup_notifications' ) );
489
 
490
  return $this;
vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php CHANGED
@@ -98,7 +98,7 @@ class Rollback extends Abstract_Module {
98
  */
99
  private function get_api_versions() {
100
 
101
- $cache_key = $this->product->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->product->get_version() ) . 'versions';
102
  $cache_versions = get_transient( $cache_key );
103
  if ( false === $cache_versions ) {
104
  $versions = $this->get_remote_versions();
@@ -374,11 +374,27 @@ class Rollback extends Abstract_Module {
374
  );
375
  }
376
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  /**
378
  * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
379
  */
380
  public function add_hooks() {
381
  add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
382
  add_action( 'admin_footer', array( $this, 'add_footer' ) );
 
 
 
 
383
  }
384
  }
98
  */
99
  private function get_api_versions() {
100
 
101
+ $cache_key = $this->product->get_cache_key();
102
  $cache_versions = get_transient( $cache_key );
103
  if ( false === $cache_versions ) {
104
  $versions = $this->get_remote_versions();
374
  );
375
  }
376
 
377
+ /**
378
+ * Fires after the option has been updated.
379
+ *
380
+ * @param mixed $old_value The old option value.
381
+ * @param mixed $value The new option value.
382
+ * @param string $option Option name.
383
+ */
384
+ public function update_active_plugins_action( $old_value, $value, $option ) {
385
+ delete_site_transient( 'update_plugins' );
386
+ wp_cache_delete( 'plugins', 'plugins' );
387
+ }
388
+
389
  /**
390
  * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
391
  */
392
  public function add_hooks() {
393
  add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
394
  add_action( 'admin_footer', array( $this, 'add_footer' ) );
395
+
396
+ // This hook will be invoked after the plugin activation.
397
+ // We use this to force an update of the cache so that Update is present immediate after a rollback.
398
+ add_action( 'update_option_active_plugins', array( $this, 'update_active_plugins_action' ), 10, 3 );
399
  }
400
  }
vendor/codeinwp/themeisle-sdk/src/Product.php CHANGED
@@ -322,6 +322,15 @@ class Product {
322
  return $name;
323
  }
324
 
 
 
 
 
 
 
 
 
 
325
  /**
326
  * Getter for product name.
327
  *
322
  return $name;
323
  }
324
 
325
+ /**
326
+ * Return the product version cache key.
327
+ *
328
+ * @return string The product version cache key.
329
+ */
330
+ public function get_cache_key() {
331
+ return $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->get_version() ) . 'versions';
332
+ }
333
+
334
  /**
335
  * Getter for product name.
336
  *
vendor/composer/InstalledVersions.php CHANGED
@@ -28,7 +28,7 @@ class InstalledVersions
28
  {
29
  /**
30
  * @var mixed[]|null
31
- * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
32
  */
33
  private static $installed;
34
 
@@ -39,7 +39,7 @@ class InstalledVersions
39
 
40
  /**
41
  * @var array[]
42
- * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
@@ -243,7 +243,7 @@ class InstalledVersions
243
 
244
  /**
245
  * @return array
246
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
247
  */
248
  public static function getRootPackage()
249
  {
@@ -257,7 +257,7 @@ class InstalledVersions
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
261
  */
262
  public static function getRawData()
263
  {
@@ -280,7 +280,7 @@ class InstalledVersions
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
284
  */
285
  public static function getAllRawData()
286
  {
@@ -303,7 +303,7 @@ class InstalledVersions
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
307
  */
308
  public static function reload($data)
309
  {
@@ -313,7 +313,7 @@ class InstalledVersions
313
 
314
  /**
315
  * @return array[]
316
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
317
  */
318
  private static function getInstalled()
319
  {
28
  {
29
  /**
30
  * @var mixed[]|null
31
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
32
  */
33
  private static $installed;
34
 
39
 
40
  /**
41
  * @var array[]
42
+ * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
243
 
244
  /**
245
  * @return array
246
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
247
  */
248
  public static function getRootPackage()
249
  {
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
261
  */
262
  public static function getRawData()
263
  {
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
284
  */
285
  public static function getAllRawData()
286
  {
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
307
  */
308
  public static function reload($data)
309
  {
313
 
314
  /**
315
  * @return array[]
316
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
317
  */
318
  private static function getInstalled()
319
  {
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3
6
  {
7
  private static $loader;
8
 
@@ -24,18 +24,18 @@ class ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3
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,7 +47,7 @@ class ComposerAutoloaderInitbc52507a293ed5ff01d464499d5522c3
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;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit92136449147c7a4413f5458d85291593
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit92136449147c7a4413f5458d85291593', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit92136449147c7a4413f5458d85291593', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInit92136449147c7a4413f5458d85291593::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
+ $includeFiles = \Composer\Autoload\ComposerStaticInit92136449147c7a4413f5458d85291593::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
+ composerRequire92136449147c7a4413f5458d85291593($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
47
  * @param string $file
48
  * @return void
49
  */
50
+ function composerRequire92136449147c7a4413f5458d85291593($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 ComposerStaticInitbc52507a293ed5ff01d464499d5522c3
8
  {
9
  public static $files = array (
10
  'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php',
@@ -356,10 +356,10 @@ class ComposerStaticInitbc52507a293ed5ff01d464499d5522c3
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
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit92136449147c7a4413f5458d85291593
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 = ComposerStaticInit92136449147c7a4413f5458d85291593::$prefixLengthsPsr4;
360
+ $loader->prefixDirsPsr4 = ComposerStaticInit92136449147c7a4413f5458d85291593::$prefixDirsPsr4;
361
+ $loader->prefixesPsr0 = ComposerStaticInit92136449147c7a4413f5458d85291593::$prefixesPsr0;
362
+ $loader->classMap = ComposerStaticInit92136449147c7a4413f5458d85291593::$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": "dev-master",
6
- "version_normalized": "dev-master",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
10
- "reference": "b56776ccf16904058a44d561190e58b6ac9b380e"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/b56776ccf16904058a44d561190e58b6ac9b380e",
15
- "reference": "b56776ccf16904058a44d561190e58b6ac9b380e",
16
  "shasum": ""
17
  },
18
  "require-dev": {
19
  "codeinwp/phpcs-ruleset": "dev-main"
20
  },
21
- "time": "2022-02-02T14:03:42+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
@@ -37,6 +37,10 @@
37
  "keywords": [
38
  "wordpress"
39
  ],
 
 
 
 
40
  "install-path": "../codeinwp/themeisle-sdk"
41
  },
42
  {
@@ -71,9 +75,6 @@
71
  "type": "library",
72
  "installation-source": "dist",
73
  "autoload": {
74
- "psr-4": {
75
- "Complex\\": "classes/src/"
76
- },
77
  "files": [
78
  "classes/src/functions/abs.php",
79
  "classes/src/functions/acos.php",
@@ -117,7 +118,10 @@
117
  "classes/src/operations/multiply.php",
118
  "classes/src/operations/divideby.php",
119
  "classes/src/operations/divideinto.php"
120
- ]
 
 
 
121
  },
122
  "notification-url": "https://packagist.org/downloads/",
123
  "license": [
@@ -172,9 +176,6 @@
172
  "type": "library",
173
  "installation-source": "dist",
174
  "autoload": {
175
- "psr-4": {
176
- "Matrix\\": "classes/src/"
177
- },
178
  "files": [
179
  "classes/src/Functions/adjoint.php",
180
  "classes/src/Functions/antidiagonal.php",
@@ -192,7 +193,10 @@
192
  "classes/src/Operations/multiply.php",
193
  "classes/src/Operations/divideby.php",
194
  "classes/src/Operations/divideinto.php"
195
- ]
 
 
 
196
  },
197
  "notification-url": "https://packagist.org/downloads/",
198
  "license": [
2
  "packages": [
3
  {
4
  "name": "codeinwp/themeisle-sdk",
5
+ "version": "3.2.26",
6
+ "version_normalized": "3.2.26.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
10
+ "reference": "a4451041bb97a325c7bb8e86a5584adf4636650e"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/a4451041bb97a325c7bb8e86a5584adf4636650e",
15
+ "reference": "a4451041bb97a325c7bb8e86a5584adf4636650e",
16
  "shasum": ""
17
  },
18
  "require-dev": {
19
  "codeinwp/phpcs-ruleset": "dev-main"
20
  },
21
+ "time": "2022-05-12T11:55:06+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
37
  "keywords": [
38
  "wordpress"
39
  ],
40
+ "support": {
41
+ "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
42
+ "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.2.26"
43
+ },
44
  "install-path": "../codeinwp/themeisle-sdk"
45
  },
46
  {
75
  "type": "library",
76
  "installation-source": "dist",
77
  "autoload": {
 
 
 
78
  "files": [
79
  "classes/src/functions/abs.php",
80
  "classes/src/functions/acos.php",
118
  "classes/src/operations/multiply.php",
119
  "classes/src/operations/divideby.php",
120
  "classes/src/operations/divideinto.php"
121
+ ],
122
+ "psr-4": {
123
+ "Complex\\": "classes/src/"
124
+ }
125
  },
126
  "notification-url": "https://packagist.org/downloads/",
127
  "license": [
176
  "type": "library",
177
  "installation-source": "dist",
178
  "autoload": {
 
 
 
179
  "files": [
180
  "classes/src/Functions/adjoint.php",
181
  "classes/src/Functions/antidiagonal.php",
193
  "classes/src/Operations/multiply.php",
194
  "classes/src/Operations/divideby.php",
195
  "classes/src/Operations/divideinto.php"
196
+ ],
197
+ "psr-4": {
198
+ "Matrix\\": "classes/src/"
199
+ }
200
  },
201
  "notification-url": "https://packagist.org/downloads/",
202
  "license": [
vendor/composer/installed.php CHANGED
@@ -1,76 +1,76 @@
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
  ),
12
  'versions' => array(
13
  'codeinwp/themeisle-sdk' => array(
14
- 'pretty_version' => 'dev-master',
15
- 'version' => 'dev-master',
 
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
18
  'aliases' => array(),
19
- 'reference' => 'b56776ccf16904058a44d561190e58b6ac9b380e',
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(
32
  'pretty_version' => '1.5.0',
33
  'version' => '1.5.0.0',
 
34
  'type' => 'library',
35
  'install_path' => __DIR__ . '/../markbaker/complex',
36
  'aliases' => array(),
37
- 'reference' => 'c3131244e29c08d44fefb49e0dd35021e9e39dd2',
38
  'dev_requirement' => false,
39
  ),
40
  'markbaker/matrix' => array(
41
  'pretty_version' => '1.2.3',
42
  'version' => '1.2.3.0',
 
43
  'type' => 'library',
44
  'install_path' => __DIR__ . '/../markbaker/matrix',
45
  'aliases' => array(),
46
- 'reference' => '44bb1ab01811116f01fe216ab37d921dccc6c10d',
47
  'dev_requirement' => false,
48
  ),
49
  'neitanod/forceutf8' => array(
50
  'pretty_version' => 'v2.0.4',
51
  'version' => '2.0.4.0',
 
52
  'type' => 'library',
53
  'install_path' => __DIR__ . '/../neitanod/forceutf8',
54
  'aliases' => array(),
55
- 'reference' => 'c1fbe70bfb5ad41b8ec5785056b0e308b40d4831',
56
  'dev_requirement' => false,
57
  ),
58
  'phpoffice/phpspreadsheet' => array(
59
  'pretty_version' => '1.8.2',
60
  'version' => '1.8.2.0',
 
61
  'type' => 'library',
62
  'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
63
  'aliases' => array(),
64
- 'reference' => '0c1346a1956347590b7db09533966307d20cb7cc',
65
  'dev_requirement' => false,
66
  ),
67
  'psr/simple-cache' => array(
68
  'pretty_version' => '1.0.1',
69
  'version' => '1.0.1.0',
 
70
  'type' => 'library',
71
  'install_path' => __DIR__ . '/../psr/simple-cache',
72
  'aliases' => array(),
73
- 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
74
  'dev_requirement' => false,
75
  ),
76
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'name' => 'codeinwp/visualizer',
4
+ 'pretty_version' => 'v3.7.8',
5
+ 'version' => '3.7.8.0',
6
+ 'reference' => '5ffd564b08382be5483bd5f83fe7be8dbb654568',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
 
 
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'codeinwp/themeisle-sdk' => array(
14
+ 'pretty_version' => '3.2.26',
15
+ 'version' => '3.2.26.0',
16
+ 'reference' => 'a4451041bb97a325c7bb8e86a5584adf4636650e',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
19
  'aliases' => array(),
 
20
  'dev_requirement' => false,
21
  ),
22
  'codeinwp/visualizer' => array(
23
+ 'pretty_version' => 'v3.7.8',
24
+ 'version' => '3.7.8.0',
25
+ 'reference' => '5ffd564b08382be5483bd5f83fe7be8dbb654568',
26
  'type' => 'wordpress-plugin',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),
 
29
  'dev_requirement' => false,
30
  ),
31
  'markbaker/complex' => array(
32
  'pretty_version' => '1.5.0',
33
  'version' => '1.5.0.0',
34
+ 'reference' => 'c3131244e29c08d44fefb49e0dd35021e9e39dd2',
35
  'type' => 'library',
36
  'install_path' => __DIR__ . '/../markbaker/complex',
37
  'aliases' => array(),
 
38
  'dev_requirement' => false,
39
  ),
40
  'markbaker/matrix' => array(
41
  'pretty_version' => '1.2.3',
42
  'version' => '1.2.3.0',
43
+ 'reference' => '44bb1ab01811116f01fe216ab37d921dccc6c10d',
44
  'type' => 'library',
45
  'install_path' => __DIR__ . '/../markbaker/matrix',
46
  'aliases' => array(),
 
47
  'dev_requirement' => false,
48
  ),
49
  'neitanod/forceutf8' => array(
50
  'pretty_version' => 'v2.0.4',
51
  'version' => '2.0.4.0',
52
+ 'reference' => 'c1fbe70bfb5ad41b8ec5785056b0e308b40d4831',
53
  'type' => 'library',
54
  'install_path' => __DIR__ . '/../neitanod/forceutf8',
55
  'aliases' => array(),
 
56
  'dev_requirement' => false,
57
  ),
58
  'phpoffice/phpspreadsheet' => array(
59
  'pretty_version' => '1.8.2',
60
  'version' => '1.8.2.0',
61
+ 'reference' => '0c1346a1956347590b7db09533966307d20cb7cc',
62
  'type' => 'library',
63
  'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
64
  'aliases' => array(),
 
65
  'dev_requirement' => false,
66
  ),
67
  'psr/simple-cache' => array(
68
  'pretty_version' => '1.0.1',
69
  'version' => '1.0.1.0',
70
+ 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
71
  'type' => 'library',
72
  'install_path' => __DIR__ . '/../psr/simple-cache',
73
  'aliases' => array(),
 
74
  'dev_requirement' => false,
75
  ),
76
  ),