PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.4
4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / vendor / woocommerce / action-scheduler / classes / schema / ActionScheduler_StoreSchema.php
surecart / vendor / woocommerce / action-scheduler / classes / schema Last commit date
ActionScheduler_LoggerSchema.php 3 years ago ActionScheduler_StoreSchema.php 2 years ago
ActionScheduler_StoreSchema.php
132 lines
1 <?php
2
3 /**
4 * Class ActionScheduler_StoreSchema
5 *
6 * @codeCoverageIgnore
7 *
8 * Creates custom tables for storing scheduled actions
9 */
10 class ActionScheduler_StoreSchema extends ActionScheduler_Abstract_Schema {
11 const ACTIONS_TABLE = 'actionscheduler_actions';
12 const CLAIMS_TABLE = 'actionscheduler_claims';
13 const GROUPS_TABLE = 'actionscheduler_groups';
14 const DEFAULT_DATE = '0000-00-00 00:00:00';
15
16 /**
17 * @var int Increment this value to trigger a schema update.
18 */
19 protected $schema_version = 7;
20
21 public function __construct() {
22 $this->tables = [
23 self::ACTIONS_TABLE,
24 self::CLAIMS_TABLE,
25 self::GROUPS_TABLE,
26 ];
27 }
28
29 /**
30 * Performs additional setup work required to support this schema.
31 */
32 public function init() {
33 add_action( 'action_scheduler_before_schema_update', array( $this, 'update_schema_5_0' ), 10, 2 );
34 }
35
36 protected function get_table_definition( $table ) {
37 global $wpdb;
38 $table_name = $wpdb->$table;
39 $charset_collate = $wpdb->get_charset_collate();
40 $max_index_length = 191; // @see wp_get_db_schema()
41 $hook_status_scheduled_date_gmt_max_index_length = $max_index_length - 20 - 8; // - status, - scheduled_date_gmt
42 $default_date = self::DEFAULT_DATE;
43 switch ( $table ) {
44
45 case self::ACTIONS_TABLE:
46
47 return "CREATE TABLE {$table_name} (
48 action_id bigint(20) unsigned NOT NULL auto_increment,
49 hook varchar(191) NOT NULL,
50 status varchar(20) NOT NULL,
51 scheduled_date_gmt datetime NULL default '{$default_date}',
52 scheduled_date_local datetime NULL default '{$default_date}',
53 priority tinyint unsigned NOT NULL default '10',
54 args varchar($max_index_length),
55 schedule longtext,
56 group_id bigint(20) unsigned NOT NULL default '0',
57 attempts int(11) NOT NULL default '0',
58 last_attempt_gmt datetime NULL default '{$default_date}',
59 last_attempt_local datetime NULL default '{$default_date}',
60 claim_id bigint(20) unsigned NOT NULL default '0',
61 extended_args varchar(8000) DEFAULT NULL,
62 PRIMARY KEY (action_id),
63 KEY hook_status_scheduled_date_gmt (hook($hook_status_scheduled_date_gmt_max_index_length), status, scheduled_date_gmt),
64 KEY status_scheduled_date_gmt (status, scheduled_date_gmt),
65 KEY scheduled_date_gmt (scheduled_date_gmt),
66 KEY args (args($max_index_length)),
67 KEY group_id (group_id),
68 KEY last_attempt_gmt (last_attempt_gmt),
69 KEY `claim_id_status_scheduled_date_gmt` (`claim_id`, `status`, `scheduled_date_gmt`)
70 ) $charset_collate";
71
72 case self::CLAIMS_TABLE:
73
74 return "CREATE TABLE {$table_name} (
75 claim_id bigint(20) unsigned NOT NULL auto_increment,
76 date_created_gmt datetime NULL default '{$default_date}',
77 PRIMARY KEY (claim_id),
78 KEY date_created_gmt (date_created_gmt)
79 ) $charset_collate";
80
81 case self::GROUPS_TABLE:
82
83 return "CREATE TABLE {$table_name} (
84 group_id bigint(20) unsigned NOT NULL auto_increment,
85 slug varchar(255) NOT NULL,
86 PRIMARY KEY (group_id),
87 KEY slug (slug($max_index_length))
88 ) $charset_collate";
89
90 default:
91 return '';
92 }
93 }
94
95 /**
96 * Update the actions table schema, allowing datetime fields to be NULL.
97 *
98 * This is needed because the NOT NULL constraint causes a conflict with some versions of MySQL
99 * configured with sql_mode=NO_ZERO_DATE, which can for instance lead to tables not being created.
100 *
101 * Most other schema updates happen via ActionScheduler_Abstract_Schema::update_table(), however
102 * that method relies on dbDelta() and this change is not possible when using that function.
103 *
104 * @param string $table Name of table being updated.
105 * @param string $db_version The existing schema version of the table.
106 */
107 public function update_schema_5_0( $table, $db_version ) {
108 global $wpdb;
109
110 if ( 'actionscheduler_actions' !== $table || version_compare( $db_version, '5', '>=' ) ) {
111 return;
112 }
113
114 // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
115 $table_name = $wpdb->prefix . 'actionscheduler_actions';
116 $table_list = $wpdb->get_col( "SHOW TABLES LIKE '{$table_name}'" );
117 $default_date = self::DEFAULT_DATE;
118
119 if ( ! empty( $table_list ) ) {
120 $query = "
121 ALTER TABLE {$table_name}
122 MODIFY COLUMN scheduled_date_gmt datetime NULL default '{$default_date}',
123 MODIFY COLUMN scheduled_date_local datetime NULL default '{$default_date}',
124 MODIFY COLUMN last_attempt_gmt datetime NULL default '{$default_date}',
125 MODIFY COLUMN last_attempt_local datetime NULL default '{$default_date}'
126 ";
127 $wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
128 }
129 // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
130 }
131 }
132