PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.82
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.82
5.5.82 5.5.81 5.5.80 5.5.79 5.5.77 5.5.76 5.5.75 5.5.73 5.5.72 5.5.22 5.5.23 5.5.29 5.5.3 5.5.31 5.5.32 5.5.34 5.5.35 5.5.36 5.5.37 5.5.4 5.5.40 5.5.41 5.5.42 5.5.43 5.5.45 All 158 releases
wp-data-access / wp-data-access.php

wp-data-access.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.82, at wp-data-access.php

332 lines 12.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Plugin Name: WP Data Access
5 * Plugin URI: https://wpdataaccess.com/
6 * Description: A powerful data-driven App Builder with an intuitive Table Builder, a highly customizable Form Builder and interactive Chart support in 35 languages
7 * Version: 5.5.82
8 * Author: Passionate Programmers B.V.
9 * Author URI: https://wpdataaccess.com/
10 * Text Domain: wp-data-access
11 * License: GPL-2.0+
12 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
13 * Domain Path: /languages
14 *
15 *
16 * @package plugin
17 * @author Peter Schulz
18 * @since 1.0.0
19 */
20 use WPDataAccess\WPDA;
21 if ( !defined( 'WPINC' ) ) {
22 die;
23 }
24 if ( !defined( 'ABSPATH' ) ) {
25 exit;
26 }
27 // Add freemius to WP Data Access.
28 if ( !function_exists( 'wpda_freemius' ) ) {
29 // Load WPDataAccess namespace.
30 require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php';
31 /**
32 * Create a helper function for easy SDK access
33 *
34 * @return Freemius
35 */
36 function wpda_freemius() {
37 global $wpda_freemius;
38 if ( !isset( $wpda_freemius ) ) {
39 // Create a helper function for easy SDK access.
40 require_once dirname( __FILE__ ) . '/vendor/freemius/start.php';
41 $wpda_freemius = fs_dynamic_init( array(
42 'id' => '6189',
43 'slug' => 'wp-data-access',
44 'type' => 'plugin',
45 'public_key' => 'pk_fc2d1714ca61c930152f6e326b575',
46 'is_premium' => false,
47 'premium_suffix' => 'Premium',
48 'has_addons' => false,
49 'has_paid_plans' => true,
50 'trial' => array(
51 'days' => 14,
52 'is_require_payment' => false,
53 ),
54 'menu' => array(
55 'slug' => 'wpda_navi',
56 'contact' => false,
57 'network' => true,
58 ),
59 'is_live' => true,
60 'is_org_compliant' => true,
61 ) );
62 }
63 return $wpda_freemius;
64 }
65
66 // Init Freemius.
67 wpda_freemius();
68 // Signal that SDK was initiated.
69 do_action( 'wpda_freemius_loaded' );
70 /**
71 * Check if legacy tools are currently used on this server.
72 * @return bool
73 */
74 function wpda_has_legacy_tools_inuse() {
75 $option_legacy_tools = WPDA::get_option( WPDA::OPTION_PLUGIN_LEGACY_TOOLS );
76 $has_legacy_tools = false;
77 if ( !empty( $option_legacy_tools ) && is_array( $option_legacy_tools ) ) {
78 foreach ( $option_legacy_tools as $tool ) {
79 if ( isset( $tool[0] ) && $tool[0] === true && isset( $tool[1] ) && $tool[1] > 0 ) {
80 $has_legacy_tools = true;
81 break;
82 }
83 }
84 }
85 return $has_legacy_tools;
86 }
87
88 /**
89 * Hook into the plugin_row_meta filter.
90 * @param mixed $links Links.
91 * @param mixed $file File.
92 * @param mixed $data Data.
93 * @return mixed
94 */
95 function wpda_row_meta( $links, $file, $data ) {
96 if ( plugin_basename( __FILE__ ) == $file ) {
97 // Add settings link.
98 $settings_url = admin_url( 'options-general.php' ) . '?page=wpdataaccess';
99 $settings_link = '<a href="' . esc_url( $settings_url ) . '">Settings</a>';
100 array_push( $links, $settings_link );
101 // phpcs:ignore -- 8.1 proof
102 // Add comment for legacy users only
103 if ( wpda_has_legacy_tools_inuse() ) {
104 if ( isset( $data['new_version'] ) ) {
105 $new_version = $data['new_version'];
106 if ( version_compare( $new_version, '6.0', '>=' ) ) {
107 $notice = '
108 <p style="margin-top: 10px; margin-bottom: 0; padding: 6px 10px; border-radius: 2px;"
109 class="update-message notice inline notice-warning notice-alt"
110 >
111 <span class="dashicons dashicons-warning" style="color: #f0b849;"></span>
112 <strong>Warning for legacy users:</strong> Version ' . esc_html( $new_version ) . ' (available now) removes legacy tools.
113 <strong style="color: #cc1818;">Stay on Version 5.x</strong> to keep using them.
114 <a href="https://docs.legacy.wpdataaccess.com/docs/deprecating/" target="_blank">Read more →</a>
115 </p>';
116 } else {
117 $notice = '
118 <p style="margin-top: 10px; margin-bottom: 0; padding: 6px 10px; border-radius: 2px;"
119 class="update-message notice inline notice-info notice-alt"
120 >
121 <span class="dashicons dashicons-info" style="color: #3858e9;"></span>
122 <strong>Info for legacy users:</strong> Version 6 is coming soon and removes legacy tools.
123 <strong>Stay on Version 5.x</strong> to keep using them.
124 <a href="https://docs.legacy.wpdataaccess.com/docs/deprecating/" target="_blank">Read more →</a>
125 </p>';
126 }
127 $links[] = $notice;
128 }
129 }
130 }
131 return $links;
132 }
133
134 add_filter(
135 'plugin_row_meta',
136 'wpda_row_meta',
137 10,
138 3
139 );
140 /**
141 * Remove last | character from plugin links.
142 * @return void
143 */
144 function wpda_clean_plugin_row_script() {
145 if ( !wpda_has_legacy_tools_inuse() ) {
146 return;
147 }
148 ?>
149 <script type="text/javascript">
150 jQuery(document).ready(function($) {
151 var $row = $('tr[data-slug="wp-data-access"] .plugin-version-author-uri');
152 if ($row.length) {
153 $row.contents().each(function(index) {
154 if (this.nodeType === 3 && index === 6) {
155 this.nodeValue = this.nodeValue.replace(/\|/g, '');
156 }
157 });
158 }
159 });
160 </script>
161 <?php
162 }
163
164 add_action( 'admin_footer-plugins.php', 'wpda_clean_plugin_row_script' );
165 /**
166 * Show legacy tools info widget.
167 * @return void
168 */
169 function wpda_legacy_tools_notice_widget() {
170 // Add widget for legacy users only
171 if ( wpda_has_legacy_tools_inuse() ) {
172 wp_add_dashboard_widget( 'wporg_dashboard_widget', 'WP Data Access - Info for legacy tools users', function () {
173 ?>
174 <p>
175 Version 6 is coming soon and removes legacy tools.
176 </p>
177 <p>
178 <strong>To keep using the legacy tools:</strong><br>
179 Stay on the latest Version 5.x<br>
180 Disable auto-updates<br>
181 Do not update manually to Version 6
182 </p>
183 <p>
184 <a href="https://docs.legacy.wpdataaccess.com/docs/deprecating/" target="_blank">Read more </a>
185 </p>
186 <?php
187 } );
188 }
189 }
190
191 add_action( 'wp_dashboard_setup', 'wpda_legacy_tools_notice_widget' );
192 /**
193 * Activate plugin
194 *
195 * @author Peter Schulz
196 * @since 1.0.0
197 */
198 function wpda_activate() {
199 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
200 require_once plugin_dir_path( __FILE__ ) . 'includes/class-wp-data-access-switch.php';
201 WP_Data_Access_Switch::activate();
202 }
203
204 register_activation_hook( __FILE__, 'wpda_activate' );
205 /**
206 * Deactivate plugin
207 *
208 * @author Peter Schulz
209 * @since 1.0.0
210 */
211 function wpda_deactivate() {
212 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
213 require_once plugin_dir_path( __FILE__ ) . 'includes/class-wp-data-access-switch.php';
214 WP_Data_Access_Switch::deactivate();
215 }
216
217 register_deactivation_hook( __FILE__, 'wpda_deactivate' );
218 /**
219 * Check if database needs to be updated
220 *
221 * @author Peter Schulz
222 * @since 1.5.2
223 */
224 function wpda_update_db_check() {
225 if ( get_option( WPDataAccess\WPDA::OPTION_WPDA_VERSION[0] ) !== WPDataAccess\WPDA::OPTION_WPDA_VERSION[1] ) {
226 wpda_activate();
227 }
228 }
229
230 add_action( 'plugins_loaded', 'wpda_update_db_check' );
231 /**
232 * Uninstall blog
233 *
234 * This functions is called when the plugin is uninstalled. The following actions are performed:
235 * + Drop plugin tables (unless settings indicate not to)
236 * + Delete plugin options from $wpdb->options (unless settings indicate not to)
237 * + Unscheduled all WP Data Access events
238 *
239 * Actions are processed on the current blog and are repeated for every blog on a multisite installation. Must be
240 * called from the dashboard (WP_UNINSTALL_PLUGIN defined). User must have the proper privileges (activate_plugins).
241 *
242 * @author Peter Schulz
243 * @since 1.0.0
244 */
245 function wpda_uninstall_blog() {
246 global $wpdb;
247 $drop_tables = get_option( 'wpda_uninstall_tables' );
248 // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQLPlaceholders, WordPress.DB.DirectDatabaseQuery.SchemaChange
249 if ( 'on' === $drop_tables ) {
250 // Get all plugin table names (without WP prefix).
251 $plugin_tables = WPDataAccess\WPDA::get_wpda_tables();
252 foreach ( $plugin_tables as $plugin_table ) {
253 // Loop through plugin tables.
254 // Drop plugin table.
255 $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS `%1s`', WPDataAccess\WPDA::remove_backticks( $plugin_table ) ) );
256 // db call ok; no-cache ok.
257 // Get plugin backup tables (if applicable).
258 $backup_tables = $wpdb->get_results( $wpdb->prepare( '
259 select table_name as table_name from information_schema.tables
260 where table_schema = %s
261 and table_name like %s
262 ', array($wpdb->dbname, "{$plugin_table}_BACKUP_%") ), 'ARRAY_A' );
263 // db call ok; no-cache ok.
264 foreach ( $backup_tables as $backup_table ) {
265 // Drop plugin backup table.
266 $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS `%1s`', WPDataAccess\WPDA::remove_backticks( $backup_table['table_name'] ) ) );
267 // db call ok; no-cache ok.
268 }
269 }
270 }
271 $delete_options = get_option( 'wpda_uninstall_options' );
272 if ( 'on' === $delete_options ) {
273 // Delete all options from wp_options.
274 $wpdb->query( "\n\t\t\t\t\tDELETE FROM {$wpdb->options}\n\t\t\t\t\tWHERE option_name LIKE 'wpda%'\n\t\t\t\t" );
275 // db call ok; no-cache ok.
276 $wpdb->query( "\n\t\t\t\t\tDELETE FROM {$wpdb->usermeta}\n\t\t\t\t\tWHERE meta_key LIKE 'wpda%'\n\t\t\t\t\t OR meta_key LIKE '%wp-data-access%'\n\t\t\t\t" );
277 // db call ok; no-cache ok.
278 }
279 // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQLPlaceholders, WordPress.DB.DirectDatabaseQuery.SchemaChange
280 }
281
282 /**
283 * Uninstall WP Data Access tables, options and meta keys
284 *
285 * @return void
286 */
287 function wpda_uninstall() {
288 if ( is_multisite() ) {
289 global $wpdb;
290 // Uninstall plugin for all blogs one by one (will fail silently for blogs having no plugin tables/options).
291 // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQLPlaceholders, WordPress.DB.DirectDatabaseQuery.SchemaChange
292 $blogids = $wpdb->get_col( "select blog_id from {$wpdb->blogs}" );
293 // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQLPlaceholders, WordPress.DB.DirectDatabaseQuery.SchemaChange
294 foreach ( $blogids as $blog_id ) {
295 // Uninstall blog.
296 switch_to_blog( $blog_id );
297 wpda_uninstall_blog();
298 restore_current_blog();
299 }
300 } else {
301 // Uninstall on single site installation.
302 wpda_uninstall_blog();
303 }
304 WPDA::wpda_delete_content_folder();
305 }
306
307 wpda_freemius()->add_action( 'after_uninstall', 'wpda_uninstall' );
308 /**
309 * Add WP Data Access icon to freemius
310 *
311 * @return string
312 */
313 function wpda_freemius_icon() {
314 return dirname( __FILE__ ) . '/vendor/freemius/assets/img/wpda.png';
315 }
316
317 wpda_freemius()->add_filter( 'plugin_icon', 'wpda_freemius_icon' );
318 /**
319 * Start plugin
320 *
321 * @author Peter Schulz
322 * @since 1.0.0
323 */
324 function wpda_run() {
325 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
326 require_once plugin_dir_path( __FILE__ ) . 'includes/class-wp-data-access.php';
327 $wpdataaccess = new WP_Data_Access();
328 $wpdataaccess->run();
329 }
330
331 wpda_run();
332 }