PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.0
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.2.0, at classes/Visualizer/Module/Setup.php

286 lines 8.9 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 wp_redirect( admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ) );
159 exit();
160 }
161 }
162
163
164 /**
165 * Deactivate the plugin
166 */
167 public function deactivate() {
168 wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
169 }
170
171 /**
172 * Refresh the specific chart from the db.
173 *
174 * @param WP_Post $chart The chart object.
175 * @param int $chart_id The chart id.
176 * @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.
177 *
178 * @access public
179 */
180 public function refresh_db_for_chart( $chart, $chart_id, $force = false ) {
181 if ( ! $chart_id ) {
182 return $chart;
183 }
184
185 if ( ! $chart ) {
186 $chart = get_post( $chart_id );
187 }
188
189 if ( ! $chart ) {
190 return $chart;
191 }
192
193 // check if the source is correct.
194 $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
195 $load_series = false;
196 switch ( $source ) {
197 case 'Visualizer_Source_Query':
198 // check if its a live-data chart or a cached-data chart.
199 if ( ! $force ) {
200 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
201 if ( ! empty( $hours ) ) {
202 // cached, bail!
203 return $chart;
204 }
205 }
206
207 $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
208 $source = new Visualizer_Source_Query( $params );
209 $source->fetch( false );
210 $load_series = true;
211 break;
212 case 'Visualizer_Source_Json':
213 // check if its a live-data chart or a cached-data chart.
214 if ( ! $force ) {
215 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
216 if ( ! empty( $hours ) ) {
217 // cached, bail!
218 return $chart;
219 }
220 }
221
222 $url = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_URL, true );
223 $root = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_ROOT, true );
224 $paging = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_PAGING, true );
225 $series = get_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, true );
226 $source = new Visualizer_Source_Json( array( 'url' => $url, 'root' => $root, 'paging' => $paging ) );
227 $source->refresh( $series );
228 break;
229 default:
230 return $chart;
231 }
232
233 $error = $source->get_error();
234 if ( empty( $error ) ) {
235 add_filter( 'wp_revisions_to_keep', '__return_false' );
236 if ( $load_series ) {
237 update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
238 }
239
240 wp_update_post(
241 array(
242 'ID' => $chart_id,
243 'post_content' => $source->getData(),
244 )
245 );
246
247 $chart = get_post( $chart_id );
248 }
249
250 return $chart;
251 }
252
253 /**
254 * Refresh the db chart.
255 *
256 * @access public
257 */
258 public function refreshDbChart() {
259 $schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
260 if ( ! $schedules ) {
261 return;
262 }
263 if ( ! defined( 'VISUALIZER_DO_NOT_DIE' ) ) {
264 // define this so that the ajax call does not die
265 // this means that if the new version of pro and the old version of free are installed, only the first chart will be updated
266 define( 'VISUALIZER_DO_NOT_DIE', true );
267 }
268
269 $new_schedules = array();
270 $now = time();
271 foreach ( $schedules as $chart_id => $time ) {
272 $new_schedules[ $chart_id ] = $time;
273 if ( $time > $now ) {
274 continue;
275 }
276
277 // if the time is nigh, we force an update.
278 $this->refresh_db_for_chart( null, $chart_id, true );
279 $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
280 $new_schedules[ $chart_id ] = time() + $hours * HOUR_IN_SECONDS;
281 }
282 update_option( Visualizer_Plugin::CF_DB_SCHEDULE, $new_schedules );
283 }
284
285 }
286