PluginProbe
TablePress – Tables in WordPress made easy / 3.4
TablePress – Tables in WordPress made easy v3.4
3.4 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.12 1.14 1.9.2 2.0.4 2.1.7 2.1.8 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.4.3 All 45 releases
tablepress / classes / class-controller.php

class-controller.php in TablePress – Tables in WordPress made easy 3.4, at classes/class-controller.php

151 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * TablePress Base Controller with members and methods for all controllers
4 *
5 * @package TablePress
6 * @subpackage Controllers
7 * @author Tobias Bäthge
8 * @since 1.0.0
9 */
10
11 declare(strict_types=1);
12
13 // Prohibit direct script loading.
14 defined( 'ABSPATH' ) || die( 'No direct script access allowed!' );
15
16 /**
17 * Base Controller class
18 *
19 * @package TablePress
20 * @subpackage Controllers
21 * @author Tobias Bäthge
22 * @since 1.0.0
23 */
24 abstract class TablePress_Controller {
25
26 /**
27 * Initializes all controllers.
28 *
29 * @since 1.0.0
30 */
31 public function __construct() {
32 // Update check, in all controllers (frontend and admin), to make sure we always have up-to-date options, should be done very early.
33 $this->plugin_update_check();
34 }
35
36 /**
37 * Check if the plugin was updated and perform necessary actions, like updating the options.
38 *
39 * @since 1.0.0
40 */
41 protected function plugin_update_check(): void {
42 // First activation or plugin update.
43 $current_plugin_options_db_version = TablePress::$model_options->get( 'plugin_options_db_version' );
44 if ( $current_plugin_options_db_version < TablePress::db_version ) {
45 // Allow more PHP execution time for update process.
46 if ( function_exists( 'set_time_limit' ) ) {
47 @set_time_limit( 300 ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
48 }
49
50 // Add TablePress capabilities to the WP_Roles objects, for new installations and all versions below 12.
51 if ( $current_plugin_options_db_version < 12 ) {
52 TablePress::$model_options->add_access_capabilities();
53 }
54
55 if ( 0 === TablePress::$model_options->get( 'first_activation' ) ) {
56 // Save initial set of plugin options, and time of first activation of the plugin, on first activation.
57 TablePress::$model_options->update( array(
58 'first_activation' => time(),
59 'plugin_options_db_version' => TablePress::db_version,
60 ) );
61 } else {
62 // Update Plugin Options Options, if necessary.
63 TablePress::$model_options->merge_plugin_options_defaults();
64 $updated_options = array(
65 'plugin_options_db_version' => TablePress::db_version,
66 'prev_tablepress_version' => TablePress::$model_options->get( 'tablepress_version' ),
67 'tablepress_version' => TablePress::version,
68 'message_plugin_update' => true,
69 );
70
71 // If used, re-save "Custom CSS" to re-create all files (as TablePress Default CSS might have changed).
72 $custom_css = TablePress::$model_options->get( 'custom_css' );
73 if ( TablePress::$model_options->get( 'use_custom_css' ) && '' !== $custom_css ) {
74 /**
75 * Load WP file functions to provide filesystem access functions early.
76 */
77 require_once ABSPATH . 'wp-admin/includes/file.php';
78 /**
79 * Load WP admin template functions to provide `submit_button()` which is necessary for `request_filesystem_credentials()`.
80 */
81 require_once ABSPATH . 'wp-admin/includes/template.php';
82 $tablepress_css = TablePress::load_class( 'TablePress_CSS', 'class-css.php', 'classes' );
83
84 $custom_css_minified = TablePress::$model_options->get( 'custom_css_minified' );
85
86 // Update "Custom CSS" to be compatible with DataTables 2, introduced in TablePress 3.0.
87 if ( $current_plugin_options_db_version < 96 ) {
88 $old_custom_css = $custom_css;
89 $custom_css = TablePress::convert_datatables_api_data( $custom_css );
90 if ( $old_custom_css !== $custom_css ) {
91 $custom_css = $tablepress_css->sanitize_css( $custom_css );
92 $custom_css_minified = $tablepress_css->minify_css( $custom_css );
93 $updated_options['custom_css'] = $custom_css;
94 $updated_options['custom_css_minified'] = $custom_css_minified;
95 }
96 unset( $old_custom_css );
97 }
98
99 $result = $tablepress_css->save_custom_css_to_file( $custom_css, $custom_css_minified );
100 // If saving was successful, use "Custom CSS" file.
101 $updated_options['use_custom_css_file'] = $result;
102 // Increase the "Custom CSS" version number for cache busting.
103 if ( $result ) {
104 $updated_options['custom_css_version'] = TablePress::$model_options->get( 'custom_css_version' ) + 1;
105 }
106 }
107
108 TablePress::$model_options->update( $updated_options );
109
110 // Clear table caches.
111 TablePress::$model_table->invalidate_table_output_caches();
112
113 // Add mime type field to existing posts with the TablePress Custom Post Type, in TablePress 1.5.
114 if ( $current_plugin_options_db_version < 25 ) {
115 TablePress::$model_table->add_mime_type_to_posts();
116 }
117
118 // Add new access capabilities that were introduced in TablePress 2.3.2.
119 if ( $current_plugin_options_db_version < 77 ) {
120 TablePress::$model_options->add_access_capabilities_tp232();
121 }
122
123 // Update all tables' "Custom Commands" to be compatible with DataTables 2, introduced in TablePress 3.0.
124 if ( $current_plugin_options_db_version < 96 ) {
125 TablePress::$model_table->update_custom_commands_datatables_tp30();
126 }
127 }
128 }
129
130 // Maybe update the table scheme in each existing table, independently from updating the plugin options.
131 if ( TablePress::$model_options->get( 'table_scheme_db_version' ) < TablePress::table_scheme_version ) {
132 TablePress::$model_table->merge_table_options_defaults();
133 TablePress::$model_options->update( 'table_scheme_db_version', TablePress::table_scheme_version );
134 }
135
136 /*
137 * Update User Options, if necessary.
138 * User Options are not saved in DB until first change occurs.
139 */
140 if ( is_user_logged_in() && TablePress::$model_options->get( 'user_options_db_version' ) < TablePress::db_version ) {
141 TablePress::$model_options->merge_user_options_defaults();
142 $updated_options = array(
143 'user_options_db_version' => TablePress::db_version,
144 'message_superseded_extensions' => true,
145 );
146 TablePress::$model_options->update( $updated_options );
147 }
148 }
149
150 } // class TablePress_Controller
151