PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.1.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.1.1
4.0.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 All 149 releases
← All changes | classes/Visualizer/Module/Setup.php +112 -1 3.0.63.1.1 View file →
@@ -41,12 +41,18 @@
41 41 */
42 42 public function __construct( Visualizer_Plugin $plugin ) {
43 43 parent::__construct( $plugin );
44 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', null, 10, 3 );
49 +
45 50 $this->_addAction( 'init', 'setupCustomPostTypes' );
46 51 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
47 52 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
48 53 $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
54 +
49 55 }
50 56 /**
51 57 * Fetches the SDK logger data.
52 58 *
@@ -106,11 +112,16 @@
106 112 * @access public
107 113 */
108 114 public function setupCustomPostTypes() {
109 115 register_post_type(
110 - Visualizer_Plugin::CPT_VISUALIZER, array(
116 + Visualizer_Plugin::CPT_VISUALIZER,
117 + array(
111 118 'label' => 'Visualizer Charts',
112 119 'public' => false,
120 + 'supports' => array( 'revisions' ),
121 + 'show_in_rest' => true,
122 + 'rest_base' => 'visualizer',
123 + 'rest_controller_class' => 'WP_REST_Posts_Controller',
113 124 )
114 125 );
115 126 }
116 127
@@ -123,7 +134,107 @@
123 134 * @access public
124 135 */
125 136 public function loadTextDomain() {
126 137 load_plugin_textdomain( Visualizer_Plugin::NAME, false, dirname( plugin_basename( VISUALIZER_BASEFILE ) ) . '/languages/' );
138 + }
139 +
140 + /**
141 + * Activate the plugin
142 + */
143 + public function activate() {
144 + wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
145 + wp_schedule_event( strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, 'hourly', 'visualizer_schedule_refresh_db' );
146 + }
147 +
148 + /**
149 + * Deactivate the plugin
150 + */
151 + public function deactivate() {
152 + wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
153 + }
154 +
155 + /**
156 + * Refresh the specific chart from the db. This is mostly for charts that have 0 refresh time i.e. live data.
157 + *
158 + * @param WP_Post $chart The chart object.
159 + * @param int $chart_id The chart id.
160 + * @param bool $force If this is true, then the chart data will be refreshed no matter if the chart requests live data or cached data.
161 + * If false, data will be refreshed only if the chart requests live data.
162 + *
163 + * @access public
164 + */
165 + public function refresh_db_for_chart( $chart, $chart_id, $force = false ) {
166 + if ( ! $chart_id ) {
167 + return $chart;
168 + }
169 +
170 + if ( ! $chart ) {
171 + $chart = get_post( $chart_id );
172 + }
173 +
174 + // check if its a live-data chart or a cached-data chart.
175 + if ( ! $force ) {
176 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
177 + if ( ! empty( $hours ) ) {
178 + // cached, bail!
179 + return $chart;
180 + }
181 + }
182 +
183 + // check if the source is correct.
184 + $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
185 + if ( $source !== 'Visualizer_Source_Query_Params' ) {
186 + return $chart;
187 + }
188 +
189 + $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
190 + $source = new Visualizer_Source_Query( $params );
191 + $source->fetch( false );
192 + $error = $source->get_error();
193 + if ( empty( $error ) ) {
194 + update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
195 +
196 + wp_update_post(
197 + array(
198 + 'ID' => $chart_id,
199 + 'post_content' => $source->getData(),
200 + )
201 + );
202 +
203 + $chart = get_post( $chart_id );
204 + }
205 +
206 + return $chart;
207 + }
208 +
209 + /**
210 + * Refresh the db chart.
211 + *
212 + * @access public
213 + */
214 + public function refreshDbChart() {
215 + $schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
216 + if ( ! $schedules ) {
217 + return;
218 + }
219 + if ( ! defined( 'VISUALIZER_DO_NOT_DIE' ) ) {
220 + // define this so that the ajax call does not die
221 + // this means that if the new version of pro and the old version of free are installed, only the first chart will be updated
222 + define( 'VISUALIZER_DO_NOT_DIE', true );
223 + }
224 +
225 + $new_schedules = array();
226 + $now = time();
227 + foreach ( $schedules as $chart_id => $time ) {
228 + $new_schedules[ $chart_id ] = $time;
229 + if ( $time > $now ) {
230 + continue;
231 + }
232 +
233 + $this->refresh_db_for_chart( null, $chart_id, false );
234 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
235 + $new_schedules[ $chart_id ] = time() + $hours * HOUR_IN_SECONDS;
236 + }
237 + update_option( Visualizer_Plugin::CF_DB_SCHEDULE, $new_schedules );
127 238 }
128 239
129 240 }