PluginProbe
TableKit – WordPress Table Builder for Data Tables, WooCommerce Product Tables & Post Tables / 2.2.8
TableKit – WordPress Table Builder for Data Tables, WooCommerce Product Tables & Post Tables v2.2.8
2.2.13 2.2.12 2.2.11 2.2.10 2.2.9 2.2.8 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 trunk 1.0.0 1.0.1 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2
table-builder-block / table-builder-block.php

table-builder-block.php in TableKit – WordPress Table Builder for Data Tables, WooCommerce Product Tables & Post Tables 2.2.8, at table-builder-block.php

163 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: TableKit
4 * Description: Powerful Table Builder for Gutenberg block editor.
5 * Requires at least: 6.1
6 * Requires PHP: 7.4
7 * Plugin URI: https://wpmet.com/plugin/gutenkit/
8 * Author: Wpmet
9 * Version: 2.2.8
10 * Author URI: https://wpmet.com/
11 * License: GPL-3.0-or-later
12 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
13 *
14 * Text Domain: table-builder-block
15 * Domain Path: /languages
16 */
17
18 // Exit if accessed directly.
19 if ( ! defined( 'ABSPATH' ) ) {
20 exit;
21 }
22
23 final class TableBuilder {
24 const VERSION = '2.2.8';
25
26 private static $instance = null;
27
28 public static function get_instance(): TableBuilder {
29 if ( null === self::$instance ) {
30 self::$instance = new self();
31 }
32 return self::$instance;
33 }
34
35 private function __construct() {
36 $this->define_constants();
37
38 // Prevent redirects during programmatic plugin activation
39 // This hook runs very early to intercept activation redirects from other plugins
40 add_action( 'admin_init', [ $this, 'prevent_activation_redirect' ], 1 );
41
42 // Make sure ADD AUTOLOAD is scoped/vendor/scoper-autoload.php file
43 require_once TABLE_BUILDER_BLOCK_PLUGIN_DIR . '/scoped/vendor/scoper-autoload.php';
44 require_once TABLE_BUILDER_BLOCK_INC_DIR . 'Elementor/TablekitElementor.php';
45
46 // Fires after initialization of the GutenKit plugin
47 add_action( 'plugins_loaded', [ $this, 'on_plugins_loaded' ] );
48 add_action( 'admin_init', [ $this, 'maybe_redirect_to_onboard' ] );
49
50 // Load translated strings for PHP (.mo). JS/React strings are handled
51 // separately per-script via wp_set_script_translations() in Enqueue.php.
52 add_action( 'init', [ $this, 'load_textdomain' ] );
53 }
54
55 /**
56 * Loads the plugin's PHP translation file.
57 *
58 * WordPress 5.9+ can auto-discover this from the "Text Domain"/"Domain Path"
59 * plugin headers, but declaring it explicitly is the standard, version-safe
60 * pattern and is required for translations shipped under
61 * wp-content/languages/plugins/ instead of this plugin's own /languages folder.
62 */
63 public function load_textdomain(): void {
64 load_plugin_textdomain(
65 'table-builder-block',
66 false,
67 dirname( plugin_basename( __FILE__ ) ) . '/languages'
68 );
69 }
70
71 public static function activate(): void {
72 if ( ! get_option( 'tablebuilder_installed_time' ) ) {
73 add_option( 'tablebuilder_installed_time', time() );
74 }
75
76 if ( get_transient( 'tablekit_skip_activation_redirect' ) ) {
77 return;
78 }
79
80 if ( ! get_option( 'tablebuilder_onboard_completed', false ) ) {
81 set_transient( 'tablebuilder_show_onboard', 1, DAY_IN_SECONDS );
82 set_transient( 'tablebuilder_do_activation_redirect', 1, MINUTE_IN_SECONDS );
83 }
84 }
85
86 private function define_constants(): void {
87 define( 'TABLE_BUILDER_BLOCK_PLUGIN_VERSION', self::VERSION );
88 define( 'TABLE_BUILDER_BLOCK_PLUGIN_URL', trailingslashit( plugin_dir_url( __FILE__ ) ) );
89 define( 'TABLE_BUILDER_BLOCK_PLUGIN_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) );
90 define( 'TABLE_BUILDER_BLOCK_INC_DIR', TABLE_BUILDER_BLOCK_PLUGIN_DIR . 'includes/' );
91 define( 'TABLE_BUILDER_BLOCK_STYLE_DIR', TABLE_BUILDER_BLOCK_PLUGIN_DIR . 'build/styles/' );
92 define( 'TABLE_BUILDER_BLOCK_DIR', TABLE_BUILDER_BLOCK_PLUGIN_DIR . 'build/blocks/' );
93 }
94
95
96 // Prevent activation redirects when plugins are activated programmatically.
97 // Intercepts wp_redirect/wp_safe_redirect during REST API activation.
98 public function prevent_activation_redirect(): void {
99 if ( get_transient( 'tablekit_skip_activation_redirect' ) ) {
100 add_filter( 'wp_redirect', '__return_empty_string', 999 );
101 add_filter( 'wp_safe_redirect_fallback', '__return_empty_string', 999 );
102 }
103 }
104
105 public function on_plugins_loaded(): void {
106 do_action( 'tablebuilder/before_init' );
107
108 load_plugin_textdomain( 'table-builder-block', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
109
110 TableBuilder\Hooks\AssetGenerator::instance();
111 TableBuilder\I18n\ScriptTranslationMerger::instance();
112 TableBuilder\Core\Enqueue::instance();
113 TableBuilder\Core\RestApi::instance();
114 TableBuilder\Config\CPT\TableCPT::instance();
115 TableBuilder\Config\Blocks::instance();
116 TableBuilder\Shortcode\Shortcode::instance();
117 TableBuilder\Admin\Admin::instance();
118 TableKit_Elementor::init();
119
120 // Receive deactivation reason data from the plugins-page modal.
121 new TableBuilder\Routes\DeactivationFeedback();
122
123 if ( is_admin() ) {
124 TableBuilder\Libs\UtilityPackages::instance();
125 }
126
127 // Data migration
128 // TODO:: WIll be removed in next upcoming version
129 (new TableBuilder\Core\DataMigration());
130
131 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), [ $this, 'plugin_action_link' ] );
132 }
133
134 public function maybe_redirect_to_onboard(): void {
135 if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
136 return;
137 }
138
139 if ( ! get_transient( 'tablebuilder_do_activation_redirect' ) ) {
140 return;
141 }
142
143 if ( isset( $_GET['activate-multi'] ) ) {
144 delete_transient( 'tablebuilder_do_activation_redirect' );
145 return;
146 }
147
148 delete_transient( 'tablebuilder_do_activation_redirect' );
149 wp_safe_redirect( admin_url( 'admin.php?page=tablebuilder&onboard=1' ) );
150 exit;
151 }
152
153 public function plugin_action_link( array $plugin_actions ): array {
154 return $plugin_actions;
155 }
156 }
157
158 if ( class_exists( 'TableBuilder' ) ) {
159 TableBuilder::get_instance();
160 }
161
162 register_activation_hook( __FILE__, [ 'TableBuilder', 'activate' ] );
163