20_210_508, '2.0.1-revision.20210607' => 20_210_607, '2.0.1-revision.20230601' => 20_230_601, ]; /** * Customer constructor. * * @access public * @since 2.0.0 * @return void */ public function __construct() { parent::__construct(); } /** * Setup the database schema * * @access protected * @since 2.0.0 * @return void */ protected function set_schema(): void { $this->schema = "id bigint(20) unsigned NOT NULL AUTO_INCREMENT, user_id bigint(20) unsigned NOT NULL DEFAULT '0', type varchar(20) NOT NULL DEFAULT 'customer', email_verification enum('verified', 'pending', 'none') DEFAULT 'none', date_modified datetime NULL, date_registered datetime NULL, last_login datetime NULL, has_trialed smallint unsigned DEFAULT NULL, vip smallint unsigned DEFAULT '0', ips longtext, signup_form varchar(40) DEFAULT 'by-admin', PRIMARY KEY (id), KEY user_id (user_id)"; } /** * Adds the signup_form column. * * This does not work on older versions of MySQl, so we needed * the other migration below. * * @since 2.0.0 * @return bool */ protected function __20210508() { // phpcs:ignore $result = $this->column_exists('signup_form'); // Maybe add column if (empty($result)) { $query = "ALTER TABLE {$this->table_name} ADD COLUMN `signup_form` varchar(40) default 'by-admin' AFTER `ips`;"; $result = $this->get_db()->query($query); } // Return success/fail return $this->is_success($result); } /** * Adds the signup_form column. * * @since 2.0.0 * @return bool */ protected function __20210607() { // phpcs:ignore $result = $this->column_exists('signup_form'); // Maybe add column if (empty($result)) { $query_set = "SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';"; $result_set = $this->get_db()->query($query_set); if ($this->is_success($result_set) === false) { return false; } $query = "ALTER TABLE {$this->table_name} ADD COLUMN `signup_form` varchar(40) default 'by-admin' AFTER `ips`;"; $result = $this->get_db()->query($query); } // Return success/fail return $this->is_success($result); } /** * Fixes the datetime columns to accept null. * * @since 2.1.2 */ protected function __20230601(): bool { $null_columns = [ 'date_modified', 'date_registered', 'last_login', ]; foreach ($null_columns as $column) { $query = "ALTER TABLE {$this->table_name} MODIFY COLUMN `{$column}` datetime DEFAULT NULL;"; $result = $this->get_db()->query($query); if ( ! $this->is_success($result)) { return false; } } return true; } }