Skip to content

Commit 2bafde0

Browse files
committed
Merge pull request #76 from Codeinwp/development
Added export feature for charts Fixed issue with hovering on charts
2 parents f80b1ee + 18f2ccf commit 2bafde0

File tree

11 files changed

+165
-6
lines changed

11 files changed

+165
-6
lines changed

classes/Visualizer/Module/Admin.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,55 @@ public function __construct( Visualizer_Plugin $plugin ) {
5858
$this->_addAction( 'admin_footer', 'renderTempaltes' );
5959
$this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts' );
6060
$this->_addAction( 'admin_menu', 'registerAdminMenu' );
61+
// Added by Ash/Upwork for feedback
62+
$this->_addAction( 'admin_init', 'visualizerInitFeedback' );
63+
// Added by Ash/Upwork for feedback
6164

6265
$this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' );
6366
$this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 );
6467
$this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 );
6568
$this->_addFilter( 'visualizer_admin_pointers', 'visualizerAdminPointers', 10, 2 );
69+
// Added by Ash/Upwork for feedback
70+
$this->_addFilter( 'visualizer_feedback_enqueue', 'visualizerFeedbackEnqueue', 10, 2 );
71+
$this->_addFilter( 'visualizer_feedback', 'visualizerFeedback', 10, 2 );
72+
$this->_addFilter( 'visualizer_feedback_config', 'visualizerFeedbackConfig', 10, 2 );
73+
$this->_addFilter( 'visualizer_feedback_action', 'visualizerFeedbackAction', 10, 2 );
74+
// Added by Ash/Upwork for feedback
6675
}
6776

77+
// Added by Ash/Upwork for feedback
78+
function visualizerFeedbackConfig(){
79+
return array(
80+
"title" => "TITLE",
81+
"description" => "Message that will ask the user for review",
82+
"yes_btn_txt" => "Text to show on yes btn ",
83+
"no_btn_txt" => "txt to show on no btn",
84+
"yes_btn_link" => "link to redirect when click on the yes btn",
85+
);
86+
}
87+
88+
function visualizerFeedbackAction(){
89+
return array("type"=>"splash","action"=>array("type"=>"click","target"=>".add-new-h2"));
90+
}
91+
92+
function visualizerFeedback(){
93+
return true;
94+
}
95+
96+
function visualizerInitFeedback(){
97+
$file = trailingslashit(VISUALIZER_ABSPATH) . "feedback/PluginFeedbackTI.php";
98+
if (file_exists($file)) {
99+
include_once $file;
100+
new PluginFeedbackTI(Visualizer_Plugin::NAME, 1, Visualizer_Plugin::VERSION, "visualizer_feedback", "visualizer_feedback_config", "visualizer_feedback_action", "visualizer_feedback_enqueue");
101+
}
102+
}
103+
104+
function visualizerFeedbackEnqueue(){
105+
wp_register_script("ti-feedback-func", VISUALIZER_ABSURL . 'js/feedback-func.js');
106+
wp_enqueue_script("ti-feedback-func");
107+
}
108+
// Added by Ash/Upwork for feedback
109+
68110
/**
69111
* Returns wp pointers for visualizer
70112
*

classes/Visualizer/Module/Chart.php

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public function __construct( Visualizer_Plugin $plugin ) {
6161
$this->_addAjaxAction( Visualizer_Plugin::ACTION_CLONE_CHART, 'cloneChart' );
6262

6363
// Added by Ash/Upwork
64+
$this->_addAjaxAction( Visualizer_Plugin::ACTION_EXPORT_DATA, 'exportData' );
6465
if( defined( 'Visualizer_Pro' ) ){
6566
global $Visualizer_Pro;
6667
list($action, $name, $class) = $Visualizer_Pro->_getAjaxAction($this);
@@ -228,7 +229,7 @@ public function renderChartPages() {
228229
add_post_meta( $chart_id, Visualizer_Plugin::CF_DEFAULT_DATA, 1 );
229230
add_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, $source->getSourceName() );
230231
add_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
231-
add_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, array() );
232+
add_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, array('focusTarget' => 'datum') );
232233
}
233234

234235
wp_redirect( add_query_arg( 'chart', (int)$chart_id ) );
@@ -597,4 +598,76 @@ public function cloneChart() {
597598
exit;
598599
}
599600

601+
/**
602+
* Exports the chart data
603+
*
604+
* @since 1.0.0
605+
*
606+
* @access public
607+
*/
608+
public function exportData() {
609+
check_ajax_referer(Visualizer_Plugin::ACTION_EXPORT_DATA . Visualizer_Plugin::VERSION, "security");
610+
611+
$chart_id = $success = false;
612+
$capable = current_user_can( 'edit_posts' );
613+
if ( $capable ) {
614+
$chart_id = filter_input( INPUT_GET, 'chart', FILTER_VALIDATE_INT, array( 'options' => array( 'min_range' => 1 ) ) );
615+
if ( $chart_id ) {
616+
$chart = get_post( $chart_id );
617+
$success = $chart && $chart->post_type == Visualizer_Plugin::CPT_VISUALIZER;
618+
}
619+
}
620+
621+
if ( $success ) {
622+
$settings = get_post_meta($chart_id, Visualizer_Plugin::CF_SETTINGS, true);
623+
$filename = $settings["title"];
624+
if (empty($filename)) {
625+
$filename = "export.csv";
626+
} else {
627+
$filename .= ".csv";
628+
}
629+
$rows = array();
630+
$series = get_post_meta($chart_id, Visualizer_Plugin::CF_SERIES, true);
631+
$data = unserialize($chart->post_content);
632+
if (!empty($series)) {
633+
$row = array();
634+
foreach ($series as $array) {
635+
$row[] = $array["label"];
636+
}
637+
$rows[] = $row;
638+
639+
$row = array();
640+
foreach ($series as $array) {
641+
$row[] = $array["type"];
642+
}
643+
$rows[] = $row;
644+
}
645+
646+
if (!empty($data)) {
647+
foreach ($data as $array) {
648+
$rows[] = $array;
649+
}
650+
}
651+
652+
$fp = tmpfile();
653+
foreach ($rows as $row) {
654+
fputcsv($fp, $row);
655+
}
656+
rewind($fp);
657+
658+
$csv = "";
659+
while (($array = fgetcsv($fp)) !== FALSE) {
660+
if (strlen($csv) > 0) $csv .= PHP_EOL;
661+
$csv .= implode(",", $array);
662+
}
663+
fclose($fp);
664+
665+
echo wp_send_json_success(array(
666+
"csv" => $csv,
667+
"name" => $filename
668+
));
669+
}
670+
671+
exit;
672+
}
600673
}

classes/Visualizer/Plugin.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
class Visualizer_Plugin {
3131

3232
const NAME = 'visualizer';
33-
const VERSION = '1.5.4';
33+
const VERSION = '1.5.5';
3434

3535
// custom post types
3636
const CPT_VISUALIZER = 'visualizer';
@@ -49,6 +49,8 @@ class Visualizer_Plugin {
4949
const ACTION_CLONE_CHART = 'visualizer-clone-chart';
5050
const ACTION_DELETE_CHART = 'visualizer-delete-chart';
5151
const ACTION_UPLOAD_DATA = 'visualizer-upload-data';
52+
// Added by Ash/Upwork
53+
const ACTION_EXPORT_DATA = 'visualizer-export-data';
5254

5355
// custom filters
5456
const FILTER_CHART_WRAPPER_CLASS = 'visualizer-chart-wrapper-class';

classes/Visualizer/Render/Library.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ private function _renderChartBox( $placeholder_id, $chart_id ) {
5555
'type' => $this->type,
5656
), $ajax_url );
5757

58+
$export_link = add_query_arg( array(
59+
'action' => Visualizer_Plugin::ACTION_EXPORT_DATA,
60+
'chart' => $chart_id,
61+
'security' => wp_create_nonce(Visualizer_Plugin::ACTION_EXPORT_DATA . Visualizer_Plugin::VERSION),
62+
), admin_url( 'admin-ajax.php' ) );
63+
5864
echo '<div class="visualizer-chart">';
5965
echo '<div id="', $placeholder_id, '" class="visualizer-chart-canvas">';
6066
echo '<img src="', VISUALIZER_ABSURL, 'images/ajax-loader.gif" class="loader">';
@@ -63,6 +69,7 @@ private function _renderChartBox( $placeholder_id, $chart_id ) {
6369
echo '<a class="visualizer-chart-action visualizer-chart-delete" href="', $delete_url, '" title="', esc_attr__( 'Delete', Visualizer_Plugin::NAME ), '" onclick="return showNotice.warn();"></a>';
6470
echo '<a class="visualizer-chart-action visualizer-chart-clone" href="', $clone_url, '" title="', esc_attr__( 'Clone', Visualizer_Plugin::NAME ), '"></a>';
6571
echo '<a class="visualizer-chart-action visualizer-chart-edit" href="javascript:;" title="', esc_attr__( 'Edit', Visualizer_Plugin::NAME ), '" data-chart="', $chart_id, '"></a>';
72+
echo '<a class="visualizer-chart-action visualizer-chart-export" href="javascript:;" title="', esc_attr__( 'Export', Visualizer_Plugin::NAME ), '" data-chart="', $export_link, '"></a>';
6673

6774
echo '<span class="visualizer-chart-shortcode" title="', esc_attr__( 'Click to select', Visualizer_Plugin::NAME ), '">';
6875
echo '&nbsp;[visualizer id=&quot;', $chart_id, '&quot;]&nbsp;';
@@ -134,6 +141,7 @@ private function _renderLibrary() {
134141
echo '<span class="visualizer-chart-action visualizer-nochart-delete"></span>';
135142
echo '<span class="visualizer-chart-action visualizer-nochart-clone"></span>';
136143
echo '<span class="visualizer-chart-action visualizer-nochart-edit"></span>';
144+
echo '<span class="visualizer-chart-action visualizer-nochart-export"></span>';
137145

138146
echo '<span class="visualizer-chart-shortcode">';
139147
echo '&nbsp;[visualizer]&nbsp;';

classes/Visualizer/Render/Page/Data.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ protected function _renderSidebarContent() {
108108
<a href="<?php echo Visualizer_Plugin::PRO_TEASER_URL;?>" title="<?php echo Visualizer_Plugin::PRO_TEASER_TITLE;?>" class="check-pro-btn" target="_new">
109109
<input type="button" class="button preview preview-btn" id="existing-chart-free" value="<?php esc_attr_e( 'Check PRO Version ', Visualizer_Plugin::NAME );?>">
110110
</a>
111-
112-
113111
<?php
114112
}
115113

css/library.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@
9393
background-position: -64px -112px;
9494
}
9595

96+
.visualizer-nochart-export,
97+
.visualizer-chart-export {
98+
background-position: -46px -64px;
99+
}
100+
96101
.visualizer-nochart-clone,
97102
.visualizer-nochart-delete,
98103
.visualizer-nochart-edit {

index.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Plugin Name: Visualizer: Charts and Graphs
44
Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs/
55
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: 1.5.4
6+
Version: 1.5.5
77
Author: Themeisle
88
Author URI: http://themeisle.com
99
License: GPL v2.0 or later
@@ -109,6 +109,9 @@ function visualizer_launch() {
109109
if ( $doing_ajax ) {
110110
// set ajax modules
111111
$plugin->setModule( Visualizer_Module_Chart::NAME );
112+
// Added by Ash/Upwork for feedback
113+
$plugin->setModule( Visualizer_Module_Admin::NAME );
114+
// Added by Ash/Upwork for feedback
112115
} else {
113116
if ( is_admin() ) {
114117
// set admin modules

js/feedback-func.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function visualizer154(funcOnSuccess){
2+
// do something?
3+
}

js/frame.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
$(this).parent().find('.section-description:first').toggle();
5656
return false;
5757
});
58+
5859
});
5960
})(jQuery);
6061

js/library.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,25 @@
8585
return false;
8686
});
8787

88+
$(".visualizer-chart-export").on("click", function() {
89+
$.ajax({
90+
url: $(this).attr("data-chart"),
91+
method: "get",
92+
success: function( data, textStatus, jqXHR ){
93+
var a = document.createElement("a");
94+
document.body.appendChild(a);
95+
a.style = "display: none";
96+
var blob = new Blob([data.data.csv], {type: "application/csv"}),
97+
url = window.URL.createObjectURL(blob);
98+
a.href = url;
99+
a.download = data.data.name;
100+
a.click();
101+
window.URL.revokeObjectURL(url);
102+
}
103+
});
104+
return false;
105+
});
106+
88107
$(window).resize(function() {
89108
clearTimeout(resizeTimeout);
90109
resizeTimeout = setTimeout(function() {

0 commit comments

Comments
 (0)