PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.8
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
← All changes | classes/Visualizer/Module/Setup.php +126 -30 3.1.33.4.8 View file →
@@ -46,14 +46,16 @@
46 46 register_deactivation_hook( VISUALIZER_BASEFILE, array( $this, 'deactivate' ) );
47 47 $this->_addAction( 'visualizer_schedule_refresh_db', 'refreshDbChart' );
48 48 $this->_addFilter( 'visualizer_schedule_refresh_chart', 'refresh_db_for_chart', 10, 3 );
49 49
50 - $this->_addAction( 'activated_plugin', 'onActivation' );
50 + $this->_addAction( 'admin_init', 'adminInit' );
51 51 $this->_addAction( 'init', 'setupCustomPostTypes' );
52 52 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
53 53 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
54 - $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
54 + $this->_addFilter( 'visualizer_get_chart_counts', 'getUsage', 10, 2 );
55 55
56 + // only for testing
57 + // $this->_addAction( 'admin_init', 'getUsage' );
56 58 }
57 59 /**
58 60 * Fetches the SDK logger data.
59 61 *
@@ -61,36 +63,82 @@
61 63 *
62 64 * @access public
63 65 */
64 66 public function getLoggerData( $data ) {
65 - return $this->getChartCountsByTypeAndMeta();
67 + return $this->getUsage( $data );
66 68 }
67 69
68 70 /**
69 - * Fetches the types of charts created and their counts.
71 + * Fetches the usage of charts.
70 72 *
73 + * @param array $data The default data that needs to be sent.
71 74 * @param array $meta_keys An array of name vs. meta keys - to return how many charts have these keys.
72 - * @access private
75 + *
76 + * @access public
73 77 */
74 - public function getChartCountsByTypeAndMeta( $meta_keys = array() ) {
75 - $charts = array();
76 - $charts['chart_types'] = array();
77 - // the initial query arguments to fetch charts
78 + public function getUsage( $data, $meta_keys = array() ) {
79 + $charts = array( 'types' => array(), 'sources' => array(), 'library' => array(), 'permissions' => 0, 'manual_config' => 0, 'scheduled' => 0 );
78 80 $query_args = array(
79 81 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
80 82 'posts_per_page' => 300,
83 + 'post_status' => 'publish',
81 84 'fields' => 'ids',
82 85 'no_rows_found' => false,
83 86 'update_post_meta_cache' => false,
84 87 'update_post_term_cache' => false,
88 + );
85 89
90 + // default permissions.
91 + $default_perms = array(
92 + 'read' => 'all',
93 + 'read-specific' => null,
94 + 'edit' => 'roles',
95 + 'edit-specific' => array( 'administrator' ),
86 96 );
87 97
98 + // collect all schedules chart ids.
99 + $scheduled = array_merge(
100 + array_keys( get_option( Visualizer_Plugin::CF_CHART_SCHEDULE, array() ) ),
101 + array_keys( get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() ) )
102 + );
88 103 $query = new WP_Query( $query_args );
89 104 while ( $query->have_posts() ) {
90 105 $chart_id = $query->next_post();
91 106 $type = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_TYPE, true );
92 - $charts['chart_types'][ $type ] = isset( $charts['chart_types'][ $type ] ) ? $charts['chart_types'][ $type ] + 1 : 1;
107 + $charts['types'][ $type ] = isset( $charts['types'][ $type ] ) ? $charts['types'][ $type ] + 1 : 1;
108 + $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
109 + $charts['sources'][ $source ] = isset( $charts['sources'][ $source ] ) ? $charts['sources'][ $source ] + 1 : 1;
110 + $lib = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_LIBRARY, true );
111 + $charts['library'][ $lib ] = isset( $charts['library'][ $lib ] ) ? $charts['library'][ $lib ] + 1 : 1;
112 + $settings = get_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, true );
113 + if ( array_key_exists( 'manual', $settings ) && ! empty( $settings['manual'] ) ) {
114 + $charts['manual_config'] = $charts['manual_config'] + 1;
115 + }
116 +
117 + // phpcs:ignore WordPress.PHP.StrictInArray.FoundNonStrictFalse
118 + if ( in_array( $chart_id, $scheduled, false ) ) {
119 + $charts['scheduled'] = $charts['scheduled'] + 1;
120 + }
121 +
122 + if ( Visualizer_Module::is_pro() ) {
123 + $permissions = get_post_meta( $chart_id, Visualizer_PRO::CF_PERMISSIONS, true );
124 + if ( empty( $permissions ) ) {
125 + continue;
126 + }
127 + $permissions = $permissions['permissions'];
128 + $customized = false;
129 + foreach ( $default_perms as $key => $val ) {
130 + if ( ! is_array( $val ) && ! is_null( $val ) && isset( $permissions[ $key ] ) && $permissions[ $key ] !== $val ) {
131 + $customized = true;
132 + } elseif ( is_array( $val ) && ! is_null( $val ) && isset( $permissions[ $key ] ) && count( $permissions[ $key ] ) !== count( $val ) ) {
133 + $customized = true;
134 + }
135 + }
136 + if ( $customized ) {
137 + $charts['permissions'] = $charts['permissions'] + 1;
138 + }
139 + }
140 +
93 141 if ( ! empty( $meta_keys ) ) {
94 142 foreach ( $meta_keys as $name => $key ) {
95 143 $data = get_post_meta( $chart_id, $key, true );
96 144 if ( ! empty( $data ) ) {
@@ -100,8 +148,9 @@
100 148 }
101 149 }
102 150 }
103 151 }
152 +
104 153 return $charts;
105 154 }
106 155
107 156 /**
@@ -143,21 +192,29 @@
143 192 */
144 193 public function activate() {
145 194 wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
146 195 wp_schedule_event( strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, 'hourly', 'visualizer_schedule_refresh_db' );
196 + add_option( 'visualizer-activated', true );
147 197 }
148 198
149 199 /**
150 - * On activation of the plugin
200 + * Check if plugin has been activated and then redirect to the correct page.
151 201 */
152 - public function onActivation( $plugin ) {
202 + public function adminInit() {
153 203 if ( defined( 'TI_UNIT_TESTING' ) ) {
154 204 return;
155 205 }
156 206
157 - if ( $plugin == VISUALIZER_BASENAME ) {
158 - wp_redirect( admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ) );
159 - exit();
207 + // fire any upgrades necessary.
208 + Visualizer_Module_Upgrade::upgrade();
209 +
210 + if ( get_option( 'visualizer-activated' ) ) {
211 + delete_option( 'visualizer-activated' );
212 + if ( ! headers_sent() ) {
213 + $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
214 + wp_redirect( add_query_arg( 'page', $page_name, admin_url( 'admin.php' ) ) );
215 + exit();
216 + }
160 217 }
161 218 }
162 219
163 220
@@ -165,8 +222,9 @@
165 222 * Deactivate the plugin
166 223 */
167 224 public function deactivate() {
168 225 wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
226 + delete_option( 'visualizer-activated', true );
169 227 }
170 228
171 229 /**
172 230 * Refresh the specific chart from the db.
@@ -191,37 +249,75 @@
191 249 }
192 250
193 251 // check if the source is correct.
194 252 $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
195 - if ( $source !== 'Visualizer_Source_Query' ) {
196 - return $chart;
197 - }
253 + $load_series = false;
254 + switch ( $source ) {
255 + case 'Visualizer_Source_Query':
256 + // check if its a live-data chart or a cached-data chart.
257 + if ( ! $force ) {
258 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
259 + if ( ! empty( $hours ) ) {
260 + // cached, bail!
261 + return $chart;
262 + }
263 + }
198 264
199 - // check if its a live-data chart or a cached-data chart.
200 - if ( ! $force ) {
201 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
202 - if ( ! empty( $hours ) ) {
203 - // cached, bail!
265 + $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
266 + $source = new Visualizer_Source_Query( $params, $chart_id );
267 + $source->fetch( false );
268 + $load_series = true;
269 + break;
270 + case 'Visualizer_Source_Json':
271 + // check if its a live-data chart or a cached-data chart.
272 + if ( ! $force ) {
273 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
274 + if ( ! empty( $hours ) ) {
275 + // cached, bail!
276 + return $chart;
277 + }
278 + }
279 +
280 + $url = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_URL, true );
281 + $root = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_ROOT, true );
282 + $paging = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_PAGING, true );
283 + $series = get_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, true );
284 + $source = new Visualizer_Source_Json( array( 'url' => $url, 'root' => $root, 'paging' => $paging ) );
285 + $source->refresh( $series );
286 + break;
287 + case 'Visualizer_Source_Csv_Remote':
288 + // check if its a live-data chart or a cached-data chart.
289 + if ( ! $force ) {
290 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_SCHEDULE, true );
291 + if ( ! empty( $hours ) ) {
292 + // cached, bail!
293 + return $chart;
294 + }
295 + }
296 + do_action( 'visualizer_schedule_import' );
297 + return get_post( $chart_id );
298 + default:
204 299 return $chart;
205 - }
206 300 }
207 301
208 - $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
209 - $source = new Visualizer_Source_Query( $params );
210 - $source->fetch( false );
211 -
212 302 $error = $source->get_error();
213 303 if ( empty( $error ) ) {
214 - update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
304 + $this->disableRevisionsTemporarily();
305 + if ( $load_series ) {
306 + update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
307 + }
215 308
216 309 wp_update_post(
217 310 array(
218 311 'ID' => $chart_id,
219 - 'post_content' => $source->getData(),
312 + 'post_content' => $source->getData( get_post_meta( $chart_id, Visualizer_Plugin::CF_EDITABLE_TABLE, true ) ),
220 313 )
221 314 );
222 315
223 316 $chart = get_post( $chart_id );
317 + delete_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR );
318 + } else {
319 + update_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR, sprintf( 'Error while updating chart: %s', $error ) );
224 320 }
225 321
226 322 return $chart;
227 323 }