WordPress Charts and Graphs Lite - Version 3.3.2

Version Description

  • 2019-10-03
Download this release

Release Info

Developer codeinwp
Plugin Icon WordPress Charts and Graphs Lite
Version 3.3.2
Comparing to
See all releases

Code changes from version 3.3.1 to 3.3.2

CHANGELOG.md CHANGED
@@ -1,7 +1,9 @@
1
 
2
- ### v3.3.1 - 2019-09-28
3
  **Changes:**
4
-
 
 
5
  ### v3.3.1 - 2019-09-28
6
  **Changes:**
7
  * Increase minimum requirement to PHP 5.6
1
 
2
+ ### v3.3.2 - 2019-10-03
3
  **Changes:**
4
+ * Add support for Dataset schema
5
+ * Horizontal Axis formatting should apply to tooltips
6
+
7
  ### v3.3.1 - 2019-09-28
8
  **Changes:**
9
  * Increase minimum requirement to PHP 5.6
classes/Visualizer/Gutenberg/Block.php CHANGED
@@ -87,7 +87,7 @@ class Visualizer_Gutenberg_Block {
87
  if ( Visualizer_Module::is_pro() ) {
88
  $type = 'pro';
89
  if ( apply_filters( 'visualizer_is_business', false ) ) {
90
- $type = 'developer';
91
  }
92
  }
93
 
@@ -156,6 +156,9 @@ class Visualizer_Gutenberg_Block {
156
  'sanitize_callback' => 'absint',
157
  ),
158
  ),
 
 
 
159
  )
160
  );
161
 
@@ -170,6 +173,9 @@ class Visualizer_Gutenberg_Block {
170
  'sanitize_callback' => 'esc_url_raw',
171
  ),
172
  ),
 
 
 
173
  )
174
  );
175
 
@@ -184,6 +190,9 @@ class Visualizer_Gutenberg_Block {
184
  'sanitize_callback' => 'sanitize_text_field',
185
  ),
186
  ),
 
 
 
187
  )
188
  );
189
  }
@@ -249,15 +258,20 @@ class Visualizer_Gutenberg_Block {
249
 
250
  if ( $data['id'] && ! is_wp_error( $data['id'] ) ) {
251
 
252
- update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_TYPE, $data['visualizer-chart-type'] );
253
- update_post_meta( $data['id'], Visualizer_Plugin::CF_SOURCE, $data['visualizer-source'] );
 
 
 
254
  update_post_meta( $data['id'], Visualizer_Plugin::CF_DEFAULT_DATA, $data['visualizer-default-data'] );
255
  update_post_meta( $data['id'], Visualizer_Plugin::CF_SERIES, $data['visualizer-series'] );
256
  update_post_meta( $data['id'], Visualizer_Plugin::CF_SETTINGS, $data['visualizer-settings'] );
257
 
258
  if ( $data['visualizer-chart-url'] && $data['visualizer-chart-schedule'] ) {
259
- update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL, $data['visualizer-chart-url'] );
260
- apply_filters( 'visualizer_pro_chart_schedule', $data['id'], $data['visualizer-chart-url'], $data['visualizer-chart-schedule'] );
 
 
261
  } else {
262
  delete_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL );
263
  apply_filters( 'visualizer_pro_remove_schedule', $data['id'] );
@@ -268,7 +282,8 @@ class Visualizer_Gutenberg_Block {
268
  }
269
 
270
  if ( $data['visualizer-chart-url'] ) {
271
- $content['source'] = $data['visualizer-chart-url'];
 
272
  $content['data'] = $this->format_chart_data( $data['visualizer-data'], $data['visualizer-series'] );
273
  } else {
274
  $content = $this->format_chart_data( $data['visualizer-data'], $data['visualizer-series'] );
87
  if ( Visualizer_Module::is_pro() ) {
88
  $type = 'pro';
89
  if ( apply_filters( 'visualizer_is_business', false ) ) {
90
+ $type = 'business';
91
  }
92
  }
93
 
156
  'sanitize_callback' => 'absint',
157
  ),
158
  ),
159
+ 'permission_callback' => function () {
160
+ return current_user_can( 'edit_posts' );
161
+ },
162
  )
163
  );
164
 
173
  'sanitize_callback' => 'esc_url_raw',
174
  ),
175
  ),
176
+ 'permission_callback' => function () {
177
+ return current_user_can( 'edit_posts' );
178
+ },
179
  )
180
  );
181
 
190
  'sanitize_callback' => 'sanitize_text_field',
191
  ),
192
  ),
193
+ 'permission_callback' => function () {
194
+ return current_user_can( 'edit_posts' );
195
+ },
196
  )
197
  );
198
  }
258
 
259
  if ( $data['id'] && ! is_wp_error( $data['id'] ) ) {
260
 
261
+ $chart_type = sanitize_text_field( $data['visualizer-chart-type'] );
262
+ $source_type = sanitize_text_field( $data['visualizer-source'] );
263
+
264
+ update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_TYPE, $chart_type );
265
+ update_post_meta( $data['id'], Visualizer_Plugin::CF_SOURCE, $source_type );
266
  update_post_meta( $data['id'], Visualizer_Plugin::CF_DEFAULT_DATA, $data['visualizer-default-data'] );
267
  update_post_meta( $data['id'], Visualizer_Plugin::CF_SERIES, $data['visualizer-series'] );
268
  update_post_meta( $data['id'], Visualizer_Plugin::CF_SETTINGS, $data['visualizer-settings'] );
269
 
270
  if ( $data['visualizer-chart-url'] && $data['visualizer-chart-schedule'] ) {
271
+ $chart_url = esc_url_raw( $data['visualizer-chart-url'] );
272
+ $chart_schedule = intval( $data['visualizer-chart-schedule'] );
273
+ update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL, $chart_url );
274
+ apply_filters( 'visualizer_pro_chart_schedule', $data['id'], $chart_url, $chart_schedule );
275
  } else {
276
  delete_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL );
277
  apply_filters( 'visualizer_pro_remove_schedule', $data['id'] );
282
  }
283
 
284
  if ( $data['visualizer-chart-url'] ) {
285
+ $chart_url = esc_url_raw( $data['visualizer-chart-url'] );
286
+ $content['source'] = $chart_url;
287
  $content['data'] = $this->format_chart_data( $data['visualizer-data'], $data['visualizer-series'] );
288
  } else {
289
  $content = $this->format_chart_data( $data['visualizer-data'], $data['visualizer-series'] );
classes/Visualizer/Module/Frontend.php CHANGED
@@ -344,6 +344,55 @@ class Visualizer_Module_Frontend extends Visualizer_Module {
344
  }
345
 
346
  // return placeholder div
347
- return $actions_div . '<div id="' . $id . '"' . $class . '></div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  }
349
  }
344
  }
345
 
346
  // return placeholder div
347
+ return $actions_div . '<div id="' . $id . '"' . $class . '></div>' . $this->addSchema( $chart->ID );
348
+ }
349
+
350
+ /**
351
+ * Adds the schema corresponding to the dataset.
352
+ *
353
+ * @since 3.3.2
354
+ *
355
+ * @access private
356
+ */
357
+ private function addSchema( $id ) {
358
+ $settings = get_post_meta( $id, Visualizer_Plugin::CF_SETTINGS, true );
359
+ $title = '';
360
+ if ( isset( $settings['title'] ) && ! empty( $settings['title'] ) ) {
361
+ $title = $settings['title'];
362
+ if ( is_array( $title ) ) {
363
+ $title = $settings['title']['text'];
364
+ }
365
+ }
366
+ $title = apply_filters( 'visualizer_schema_name', $title, $id );
367
+ if ( empty( $title ) ) {
368
+ return '';
369
+ }
370
+
371
+ $desc = '';
372
+ if ( isset( $settings['description'] ) && ! empty( $settings['description'] ) ) {
373
+ $desc = $settings['description'];
374
+ }
375
+ $desc = apply_filters( 'visualizer_schema_description', $desc, $id );
376
+ // descriptions below 50 chars are not allowed.
377
+ if ( empty( $desc ) || strlen( $desc ) < 50 ) {
378
+ return '';
379
+ }
380
+
381
+ $schema = apply_filters(
382
+ 'visualizer_schema',
383
+ '{
384
+ "@context":"https://schema.org/",
385
+ "@type":"Dataset",
386
+ "name":"' . esc_html( $title ) . '",
387
+ "description":"' . esc_html( $desc ) . '"
388
+ }',
389
+ $id
390
+ );
391
+
392
+ if ( empty( $schema ) ) {
393
+ return '';
394
+ }
395
+
396
+ return '<script type="application/ld+json">' . $schema . '</script>';
397
  }
398
  }
classes/Visualizer/Plugin.php CHANGED
@@ -28,7 +28,7 @@
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
- const VERSION = '3.3.1';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
28
  class Visualizer_Plugin {
29
 
30
  const NAME = 'visualizer';
31
+ const VERSION = '3.3.2';
32
 
33
  // custom post types
34
  const CPT_VISUALIZER = 'visualizer';
classes/Visualizer/Render/Sidebar/ChartJS.php CHANGED
@@ -161,6 +161,15 @@ abstract class Visualizer_Render_Sidebar_ChartJS extends Visualizer_Render_Sideb
161
  '#000'
162
  );
163
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  /**
161
  '#000'
162
  );
163
 
164
+ echo '<div class="viz-section-delimiter"></div>';
165
+
166
+ self::_renderTextAreaItem(
167
+ esc_html__( 'Chart Description', 'visualizer' ),
168
+ 'description',
169
+ $this->description,
170
+ 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>' )
171
+ );
172
+
173
  }
174
 
175
  /**
classes/Visualizer/Render/Sidebar/Graph.php CHANGED
@@ -122,6 +122,16 @@ abstract class Visualizer_Render_Sidebar_Graph extends Visualizer_Render_Sidebar
122
  $this->_positions,
123
  esc_html__( 'Determines where to place the axis titles, compared to the chart area.', 'visualizer' )
124
  );
 
 
 
 
 
 
 
 
 
 
125
  }
126
 
127
  /**
122
  $this->_positions,
123
  esc_html__( 'Determines where to place the axis titles, compared to the chart area.', 'visualizer' )
124
  );
125
+
126
+ echo '<div class="viz-section-delimiter"></div>';
127
+
128
+ self::_renderTextAreaItem(
129
+ esc_html__( 'Chart Description', 'visualizer' ),
130
+ 'description',
131
+ $this->description,
132
+ 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>' )
133
+ );
134
+
135
  }
136
 
137
  /**
classes/Visualizer/Render/Sidebar/Type/DataTable/DataTable.php CHANGED
@@ -136,6 +136,16 @@ class Visualizer_Render_Sidebar_Type_DataTable_DataTable extends Visualizer_Rend
136
  $this->title,
137
  esc_html__( 'Text to display in the back-end admin area.', 'visualizer' )
138
  );
 
 
 
 
 
 
 
 
 
 
139
  self::_renderSectionEnd();
140
  self::_renderGroupEnd();
141
  }
136
  $this->title,
137
  esc_html__( 'Text to display in the back-end admin area.', 'visualizer' )
138
  );
139
+
140
+ echo '<div class="viz-section-delimiter"></div>';
141
+
142
+ self::_renderTextAreaItem(
143
+ esc_html__( 'Chart Description', 'visualizer' ),
144
+ 'description',
145
+ $this->description,
146
+ 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>' )
147
+ );
148
+
149
  self::_renderSectionEnd();
150
  self::_renderGroupEnd();
151
  }
css/media.css CHANGED
@@ -1,5 +1,5 @@
1
  /*
2
- Version: 3.3.1
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
1
  /*
2
+ Version: 3.3.2
3
  */
4
  #visualizer-library-view {
5
  padding: 30px 10px 10px 30px;
index.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Visualizer: Tables and Charts Manager for WordPress
5
  Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs-lite/
6
  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.
7
- Version: 3.3.1
8
  Author: Themeisle
9
  Author URI: http://themeisle.com
10
  License: GPL v2.0 or later
4
  Plugin Name: Visualizer: Tables and Charts Manager for WordPress
5
  Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs-lite/
6
  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.
7
+ Version: 3.3.2
8
  Author: Themeisle
9
  Author URI: http://themeisle.com
10
  License: GPL v2.0 or later
js/render-google.js CHANGED
@@ -214,6 +214,12 @@ var __visualizer_chart_images = [];
214
  } else if (chart.type === 'pie' && settings.format && settings.format !== '') {
215
  format_data(id, table, 'number', settings.format, 1);
216
  }
 
 
 
 
 
 
217
  override(settings);
218
 
219
  gv.events.addListener(render, 'ready', function () {
214
  } else if (chart.type === 'pie' && settings.format && settings.format !== '') {
215
  format_data(id, table, 'number', settings.format, 1);
216
  }
217
+
218
+
219
+ if(settings.hAxis) {
220
+ format_data(id, table, series[0].type, settings.hAxis.format, 0);
221
+ }
222
+
223
  override(settings);
224
 
225
  gv.events.addListener(render, 'ready', function () {
readme.md CHANGED
@@ -157,6 +157,12 @@ Pay attention that to turn your shortcodes into graphs, your theme has to have `
157
  13. Bar chart
158
 
159
  ## Changelog ##
 
 
 
 
 
 
160
  ### 3.3.1 - 2019-09-28 ###
161
 
162
  * Increase minimum requirement to PHP 5.6
157
  13. Bar chart
158
 
159
  ## Changelog ##
160
+ ### 3.3.2 - 2019-10-03 ###
161
+
162
+ * Add support for Dataset schema
163
+ * Horizontal Axis formatting should apply to tooltips
164
+
165
+
166
  ### 3.3.1 - 2019-09-28 ###
167
 
168
  * Increase minimum requirement to PHP 5.6
readme.txt CHANGED
@@ -157,6 +157,12 @@ Pay attention that to turn your shortcodes into graphs, your theme has to have `
157
  13. Bar chart
158
 
159
  == Changelog ==
 
 
 
 
 
 
160
  = 3.3.1 - 2019-09-28 =
161
 
162
  * Increase minimum requirement to PHP 5.6
157
  13. Bar chart
158
 
159
  == Changelog ==
160
+ = 3.3.2 - 2019-10-03 =
161
+
162
+ * Add support for Dataset schema
163
+ * Horizontal Axis formatting should apply to tooltips
164
+
165
+
166
  = 3.3.1 - 2019-09-28 =
167
 
168
  * Increase minimum requirement to PHP 5.6
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"index.php":"899d5f3a93201cc499923cf2dab7fb74"}
1
+ {"index.php":"b3213b7f364c4825603628bd0975708f"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit9f54278002a2a3d5d2dae9716acfaa3f::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit29cfe87fbff571fc494224216cc634f1::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInitde0bba044daaad07246a648664761814::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit00192be9b0469f067d3482e1721449a8
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire00192be9b0469f067d3482e1721449a8($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire00192be9b0469f067d3482e1721449a8($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit9f54278002a2a3d5d2dae9716acfaa3f
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit9f54278002a2a3d5d2dae9716acfaa3f', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit9f54278002a2a3d5d2dae9716acfaa3f', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire9f54278002a2a3d5d2dae9716acfaa3f($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire9f54278002a2a3d5d2dae9716acfaa3f($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit29cfe87fbff571fc494224216cc634f1 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit29cfe87fbff571fc494224216cc634f1 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit29cfe87fbff571fc494224216cc634f1', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit29cfe87fbff571fc494224216cc634f1', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInitde0bba044daaad07246a648664761814 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitde0bba044daaad07246a648664761814', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitde0bba044daaad07246a648664761814', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);