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

241 lines 7.7 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', null, 10, 3 );
49
50 $this->_addAction( 'init', 'setupCustomPostTypes' );
51 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
52 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
53 $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
54
55 }
56 /**
57 * Fetches the SDK logger data.
58 *
59 * @param array $data The default data that needs to be sent.
60 *
61 * @access public
62 */
63 public function getLoggerData( $data ) {
64 return $this->getChartCountsByTypeAndMeta();
65 }
66
67 /**
68 * Fetches the types of charts created and their counts.
69 *
70 * @param array $meta_keys An array of name vs. meta keys - to return how many charts have these keys.
71 * @access private
72 */
73 public function getChartCountsByTypeAndMeta( $meta_keys = array() ) {
74 $charts = array();
75 $charts['chart_types'] = array();
76 // the initial query arguments to fetch charts
77 $query_args = array(
78 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
79 'posts_per_page' => 300,
80 'fields' => 'ids',
81 'no_rows_found' => false,
82 'update_post_meta_cache' => false,
83 'update_post_term_cache' => false,
84
85 );
86
87 $query = new WP_Query( $query_args );
88 while ( $query->have_posts() ) {
89 $chart_id = $query->next_post();
90 $type = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_TYPE, true );
91 $charts['chart_types'][ $type ] = isset( $charts['chart_types'][ $type ] ) ? $charts['chart_types'][ $type ] + 1 : 1;
92 if ( ! empty( $meta_keys ) ) {
93 foreach ( $meta_keys as $name => $key ) {
94 $data = get_post_meta( $chart_id, $key, true );
95 if ( ! empty( $data ) ) {
96 $charts[ $name ] = isset( $charts[ $name ] ) ? $charts[ $name ] + 1 : 1;
97 } else {
98 $charts[ $name ] = 0;
99 }
100 }
101 }
102 }
103 return $charts;
104 }
105
106 /**
107 * Registers custom post type for charts.
108 *
109 * @since 1.0.0
110 * @uses register_post_type() To register custom post type for charts.
111 *
112 * @access public
113 */
114 public function setupCustomPostTypes() {
115 register_post_type(
116 Visualizer_Plugin::CPT_VISUALIZER,
117 array(
118 'label' => 'Visualizer Charts',
119 'public' => false,
120 'supports' => array( 'revisions' ),
121 'show_in_rest' => true,
122 'rest_base' => 'visualizer',
123 'rest_controller_class' => 'WP_REST_Posts_Controller',
124 )
125 );
126 }
127
128 /**
129 * Loads plugin text domain translations.
130 *
131 * @since 1.0.0
132 * @uses load_plugin_textdomain() To load translations for the plugin.
133 *
134 * @access public
135 */
136 public function loadTextDomain() {
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 );
238 }
239
240 }
241