PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.3.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.3.2
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
visualizer / classes / Visualizer / Module / Setup.php

Setup.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.3.2, at classes/Visualizer/Module/Setup.php

290 lines 9.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // +----------------------------------------------------------------------+
4 // | Copyright 2013 Madpixels (email : visualizer@madpixels.net) |
5 // +----------------------------------------------------------------------+
6 // | This program is free software; you can redistribute it and/or modify |
7 // | it under the terms of the GNU General Public License, version 2, as |
8 // | published by the Free Software Foundation. |
9 // | |
10 // | This program is distributed in the hope that it will be useful, |
11 // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 // | GNU General Public License for more details. |
14 // | |
15 // | You should have received a copy of the GNU General Public License |
16 // | along with this program; if not, write to the Free Software |
17 // | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, |
18 // | MA 02110-1301 USA |
19 // +----------------------------------------------------------------------+
20 // | Author: Eugene Manuilov <eugene@manuilov.org> |
21 // +----------------------------------------------------------------------+
22 /**
23 * General module what setups all required environment.
24 *
25 * @category Visualizer
26 * @package Module
27 *
28 * @since 1.0.0
29 */
30 class Visualizer_Module_Setup extends Visualizer_Module {
31
32 const NAME = __CLASS__;
33
34 /**
35 * Constructor.
36 *
37 * @since 1.0.0
38 *
39 * @access public
40 * @param Visualizer_Plugin $plugin The instance of the plugin.
41 */
42 public function __construct( Visualizer_Plugin $plugin ) {
43 parent::__construct( $plugin );
44
45 register_activation_hook( VISUALIZER_BASEFILE, array( $this, 'activate' ) );
46 register_deactivation_hook( VISUALIZER_BASEFILE, array( $this, 'deactivate' ) );
47 $this->_addAction( 'visualizer_schedule_refresh_db', 'refreshDbChart' );
48 $this->_addFilter( 'visualizer_schedule_refresh_chart', 'refresh_db_for_chart', 10, 3 );
49
50 $this->_addAction( 'activated_plugin', 'onActivation' );
51 $this->_addAction( 'init', 'setupCustomPostTypes' );
52 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
53 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
54 $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
55
56 }
57 /**
58 * Fetches the SDK logger data.
59 *
60 * @param array $data The default data that needs to be sent.
61 *
62 * @access public
63 */
64 public function getLoggerData( $data ) {
65 return $this->getChartCountsByTypeAndMeta();
66 }
67
68 /**
69 * Fetches the types of charts created and their counts.
70 *
71 * @param array $meta_keys An array of name vs. meta keys - to return how many charts have these keys.
72 * @access private
73 */
74 public function getChartCountsByTypeAndMeta( $meta_keys = array() ) {
75 $charts = array();
76 $charts['chart_types'] = array();
77 // the initial query arguments to fetch charts
78 $query_args = array(
79 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
80 'posts_per_page' => 300,
81 'fields' => 'ids',
82 'no_rows_found' => false,
83 'update_post_meta_cache' => false,
84 'update_post_term_cache' => false,
85
86 );
87
88 $query = new WP_Query( $query_args );
89 while ( $query->have_posts() ) {
90 $chart_id = $query->next_post();
91 $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;
93 if ( ! empty( $meta_keys ) ) {
94 foreach ( $meta_keys as $name => $key ) {
95 $data = get_post_meta( $chart_id, $key, true );
96 if ( ! empty( $data ) ) {
97 $charts[ $name ] = isset( $charts[ $name ] ) ? $charts[ $name ] + 1 : 1;
98 } else {
99 $charts[ $name ] = 0;
100 }
101 }
102 }
103 }
104 return $charts;
105 }
106
107 /**
108 * Registers custom post type for charts.
109 *
110 * @since 1.0.0
111 * @uses register_post_type() To register custom post type for charts.
112 *
113 * @access public
114 */
115 public function setupCustomPostTypes() {
116 register_post_type(
117 Visualizer_Plugin::CPT_VISUALIZER,
118 array(
119 'label' => 'Visualizer Charts',
120 'public' => false,
121 'supports' => array( 'revisions' ),
122 'show_in_rest' => true,
123 'rest_base' => 'visualizer',
124 'rest_controller_class' => 'WP_REST_Posts_Controller',
125 )
126 );
127 }
128
129 /**
130 * Loads plugin text domain translations.
131 *
132 * @since 1.0.0
133 * @uses load_plugin_textdomain() To load translations for the plugin.
134 *
135 * @access public
136 */
137 public function loadTextDomain() {
138 load_plugin_textdomain( Visualizer_Plugin::NAME, false, dirname( plugin_basename( VISUALIZER_BASEFILE ) ) . '/languages/' );
139 }
140
141 /**
142 * Activate the plugin
143 */
144 public function activate() {
145 wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
146 wp_schedule_event( strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, 'hourly', 'visualizer_schedule_refresh_db' );
147 }
148
149 /**
150 * On activation of the plugin
151 */
152 public function onActivation( $plugin ) {
153 if ( defined( 'TI_UNIT_TESTING' ) ) {
154 return;
155 }
156
157 if ( $plugin === VISUALIZER_BASENAME ) {
158 if ( Visualizer_Module::numberOfCharts() > 0 ) {
159 wp_redirect( admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME ) );
160 } else {
161 wp_redirect( admin_url( 'admin.php?page=viz-support' ) );
162 }
163 exit();
164 }
165 }
166
167
168 /**
169 * Deactivate the plugin
170 */
171 public function deactivate() {
172 wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
173 }
174
175 /**
176 * Refresh the specific chart from the db.
177 *
178 * @param WP_Post $chart The chart object.
179 * @param int $chart_id The chart id.
180 * @param bool $force If this is true, then the chart data will be force refreshed. If false, data will be refreshed only if the chart requests live data.
181 *
182 * @access public
183 */
184 public function refresh_db_for_chart( $chart, $chart_id, $force = false ) {
185 if ( ! $chart_id ) {
186 return $chart;
187 }
188
189 if ( ! $chart ) {
190 $chart = get_post( $chart_id );
191 }
192
193 if ( ! $chart ) {
194 return $chart;
195 }
196
197 // check if the source is correct.
198 $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
199 $load_series = false;
200 switch ( $source ) {
201 case 'Visualizer_Source_Query':
202 // check if its a live-data chart or a cached-data chart.
203 if ( ! $force ) {
204 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
205 if ( ! empty( $hours ) ) {
206 // cached, bail!
207 return $chart;
208 }
209 }
210
211 $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
212 $source = new Visualizer_Source_Query( $params );
213 $source->fetch( false );
214 $load_series = true;
215 break;
216 case 'Visualizer_Source_Json':
217 // check if its a live-data chart or a cached-data chart.
218 if ( ! $force ) {
219 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
220 if ( ! empty( $hours ) ) {
221 // cached, bail!
222 return $chart;
223 }
224 }
225
226 $url = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_URL, true );
227 $root = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_ROOT, true );
228 $paging = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_PAGING, true );
229 $series = get_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, true );
230 $source = new Visualizer_Source_Json( array( 'url' => $url, 'root' => $root, 'paging' => $paging ) );
231 $source->refresh( $series );
232 break;
233 default:
234 return $chart;
235 }
236
237 $error = $source->get_error();
238 if ( empty( $error ) ) {
239 add_filter( 'wp_revisions_to_keep', '__return_false' );
240 if ( $load_series ) {
241 update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
242 }
243
244 wp_update_post(
245 array(
246 'ID' => $chart_id,
247 'post_content' => $source->getData(),
248 )
249 );
250
251 $chart = get_post( $chart_id );
252 }
253
254 return $chart;
255 }
256
257 /**
258 * Refresh the db chart.
259 *
260 * @access public
261 */
262 public function refreshDbChart() {
263 $schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
264 if ( ! $schedules ) {
265 return;
266 }
267 if ( ! defined( 'VISUALIZER_DO_NOT_DIE' ) ) {
268 // define this so that the ajax call does not die
269 // this means that if the new version of pro and the old version of free are installed, only the first chart will be updated
270 define( 'VISUALIZER_DO_NOT_DIE', true );
271 }
272
273 $new_schedules = array();
274 $now = time();
275 foreach ( $schedules as $chart_id => $time ) {
276 $new_schedules[ $chart_id ] = $time;
277 if ( $time > $now ) {
278 continue;
279 }
280
281 // if the time is nigh, we force an update.
282 $this->refresh_db_for_chart( null, $chart_id, true );
283 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
284 $new_schedules[ $chart_id ] = time() + $hours * HOUR_IN_SECONDS;
285 }
286 update_option( Visualizer_Plugin::CF_DB_SCHEDULE, $new_schedules );
287 }
288
289 }
290