PluginProbe
TablePress – Tables in WordPress made easy / 1.9.2
TablePress – Tables in WordPress made easy v1.9.2
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 2.4.4 All 44 releases
tablepress / classes / class-controller.php

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

191 lines 6.9 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 // Prohibit direct script loading.
12 defined( 'ABSPATH' ) || die( 'No direct script access allowed!' );
13
14 /**
15 * Base Controller class
16 * @package TablePress
17 * @subpackage Controllers
18 * @author Tobias Bäthge
19 * @since 1.0.0
20 */
21 abstract class TablePress_Controller {
22
23 /**
24 * Instance of the Options Model.
25 *
26 * @since 1.0.0
27 * @var TablePress_Options_Model
28 */
29 public $model_options;
30
31 /**
32 * Instance of the Table Model.
33 *
34 * @since 1.0.0
35 * @var TablePress_Table_Model
36 */
37 public $model_table;
38
39 /**
40 * File name of the admin screens' parent page in the admin menu.
41 *
42 * @since 1.0.0
43 * @var string
44 */
45 public $parent_page = 'middle';
46
47 /**
48 * Whether TablePress admin screens are a top-level menu item in the admin menu.
49 *
50 * @since 1.0.0
51 * @var bool
52 */
53 public $is_top_level_page = false;
54
55 /**
56 * Initialize all controllers, by loading Plugin and User Options, and by performing an update check.
57 *
58 * @since 1.0.0
59 */
60 public function __construct() {
61 /*
62 * References to the TablePress models (only for backwards compatibility in TablePress Extensions!).
63 * Using `TablePress::$model_options` and `TablePress::$model_table` is recommended!
64 */
65 $this->model_options = TablePress::$model_options;
66 $this->model_table = TablePress::$model_table;
67
68 // Update check, in all controllers (frontend and admin), to make sure we always have up-to-date options, should be done very early.
69 $this->plugin_update_check();
70
71 /**
72 * Filter the admin menu parent page, which is needed for the construction of plugin URLs.
73 *
74 * @since 1.0.0
75 *
76 * @param string $parent_page Current admin menu parent page.
77 */
78 $this->parent_page = apply_filters( 'tablepress_admin_menu_parent_page', TablePress::$model_options->get( 'admin_menu_parent_page' ) );
79 $this->is_top_level_page = in_array( $this->parent_page, array( 'top', 'middle', 'bottom' ), true );
80 }
81
82 /**
83 * Check if the plugin was updated and perform necessary actions, like updating the options.
84 *
85 * @since 1.0.0
86 */
87 protected function plugin_update_check() {
88 // First activation or plugin update.
89 $current_plugin_options_db_version = TablePress::$model_options->get( 'plugin_options_db_version' );
90 if ( $current_plugin_options_db_version < TablePress::db_version ) {
91 // Allow more PHP execution time for update process.
92 @set_time_limit( 300 );
93
94 // Add TablePress capabilities to the WP_Roles objects, for new installations and all versions below 12.
95 if ( $current_plugin_options_db_version < 12 ) {
96 TablePress::$model_options->add_access_capabilities();
97 }
98
99 if ( 0 === TablePress::$model_options->get( 'first_activation' ) ) {
100 // Save initial set of plugin options, and time of first activation of the plugin, on first activation.
101 TablePress::$model_options->update( array(
102 'first_activation' => current_time( 'timestamp' ),
103 'plugin_options_db_version' => TablePress::db_version,
104 ) );
105 } else {
106 // Update Plugin Options Options, if necessary.
107 TablePress::$model_options->merge_plugin_options_defaults();
108 $updated_options = array(
109 'plugin_options_db_version' => TablePress::db_version,
110 'prev_tablepress_version' => TablePress::$model_options->get( 'tablepress_version' ),
111 'tablepress_version' => TablePress::version,
112 'message_plugin_update' => true,
113 );
114
115 // Only write files, if "Custom CSS" is to be used, and if there is "Custom CSS".
116 if ( TablePress::$model_options->get( 'use_custom_css' ) && '' !== TablePress::$model_options->get( 'custom_css' ) ) {
117 // Re-save "Custom CSS" to re-create all files (as TablePress Default CSS might have changed).
118 /**
119 * Load WP file functions to provide filesystem access functions early.
120 */
121 require_once ABSPATH . 'wp-admin/includes/file.php';
122 /**
123 * Load WP admin template functions to provide `submit_button()` which is necessary for `request_filesystem_credentials()`.
124 */
125 require_once ABSPATH . 'wp-admin/includes/template.php';
126 $tablepress_css = TablePress::load_class( 'TablePress_CSS', 'class-css.php', 'classes' );
127 $result = $tablepress_css->save_custom_css_to_file( TablePress::$model_options->get( 'custom_css' ), TablePress::$model_options->get( 'custom_css_minified' ) );
128 // If saving was successful, use "Custom CSS" file.
129 $updated_options['use_custom_css_file'] = $result;
130 // Increase the "Custom CSS" version number for cache busting.
131 if ( $result ) {
132 $updated_options['custom_css_version'] = TablePress::$model_options->get( 'custom_css_version' ) + 1;
133 }
134 }
135
136 TablePress::$model_options->update( $updated_options );
137
138 // Clear table caches.
139 if ( $current_plugin_options_db_version < 16 ) {
140 // For pre-0.9-RC, where the arrays are serialized and not JSON encoded.
141 TablePress::$model_table->invalidate_table_output_caches_tp09();
142 } else {
143 // For 0.9-RC and onwards.
144 TablePress::$model_table->invalidate_table_output_caches();
145 }
146
147 // Add mime type field to existing posts with the TablePress Custom Post Type, so that other plugins know that they are not dealing with plain text.
148 if ( $current_plugin_options_db_version < 25 ) {
149 TablePress::$model_table->add_mime_type_to_posts();
150 }
151
152 // Convert old parameter names to new ones in DataTables "Custom Commands".
153 if ( $current_plugin_options_db_version < 26 ) {
154 TablePress::$model_table->convert_datatables_parameter_names_tp15();
155 }
156 }
157 }
158
159 // Maybe update the table scheme in each existing table, independently from updating the plugin options.
160 if ( TablePress::$model_options->get( 'table_scheme_db_version' ) < TablePress::table_scheme_version ) {
161 // Convert parameter "datatables_scrollX" to "datatables_scrollx", has to be done before merge_table_options_defaults() is called!
162 if ( TablePress::$model_options->get( 'table_scheme_db_version' ) < 3 ) {
163 TablePress::$model_table->merge_table_options_tp08();
164 }
165
166 TablePress::$model_table->merge_table_options_defaults();
167
168 // Merge print_name/print_description changes made for 0.6-beta.
169 if ( TablePress::$model_options->get( 'table_scheme_db_version' ) < 2 ) {
170 TablePress::$model_table->merge_table_options_tp06();
171 }
172
173 TablePress::$model_options->update( array(
174 'table_scheme_db_version' => TablePress::table_scheme_version,
175 ) );
176 }
177
178 /*
179 * Update User Options, if necessary.
180 * User Options are not saved in DB until first change occurs.
181 */
182 if ( is_user_logged_in() && ( TablePress::$model_options->get( 'user_options_db_version' ) < TablePress::db_version ) ) {
183 TablePress::$model_options->merge_user_options_defaults();
184 TablePress::$model_options->update( array(
185 'user_options_db_version' => TablePress::db_version,
186 ) );
187 }
188 }
189
190 } // class TablePress_Controller
191