File "ActionScheduler_Abstract_Schema.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php
File
size: 2.91 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
abstract class ActionScheduler_Abstract_Schema
{
protected $schema_version = 1;
protected $db_version;
protected $tables = array();
public function init()
{
}
public function register_tables($force_update = false)
{
global $wpdb;
foreach ($this->tables as $table) {
$wpdb->tables[] = $table;
$name = $this->get_full_table_name($table);
$wpdb->{$table} = $name;
}
if ($this->schema_update_required() || $force_update) {
foreach ($this->tables as $table) {
do_action('action_scheduler_before_schema_update', $table, $this->db_version);
$this->update_table($table);
}
$this->mark_schema_update_complete();
}
}
protected abstract function get_table_definition($table);
private function schema_update_required()
{
$option_name = 'schema-' . static::class;
$this->db_version = get_option($option_name, 0);
if (0 === $this->db_version) {
$plugin_option_name = 'schema-';
switch (static::class) {
case 'ActionScheduler_StoreSchema':
$plugin_option_name .= 'Action_Scheduler\\Custom_Tables\\DB_Store_Table_Maker';
break;
case 'ActionScheduler_LoggerSchema':
$plugin_option_name .= 'Action_Scheduler\\Custom_Tables\\DB_Logger_Table_Maker';
break;
}
$this->db_version = get_option($plugin_option_name, 0);
delete_option($plugin_option_name);
}
return version_compare($this->db_version, $this->schema_version, '<');
}
private function mark_schema_update_complete()
{
$option_name = 'schema-' . static::class;
$value_to_save = (string) $this->schema_version . '.0.' . time();
update_option($option_name, $value_to_save);
}
private function update_table($table)
{
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$definition = $this->get_table_definition($table);
if ($definition) {
$updated = dbDelta($definition);
foreach ($updated as $updated_table => $update_description) {
if (strpos($update_description, 'Created table') === 0) {
do_action('action_scheduler/created_table', $updated_table, $table);
}
}
}
}
protected function get_full_table_name($table)
{
return $GLOBALS['wpdb']->prefix . $table;
}
public function tables_exist()
{
global $wpdb;
$existing_tables = $wpdb->get_col('SHOW TABLES');
$expected_tables = array_map(function ($table_name) use($wpdb) {
return $wpdb->prefix . $table_name;
}, $this->tables);
return count(array_intersect($existing_tables, $expected_tables)) === count($expected_tables);
}
}