twd_ab_ai_wc_init();
}
return self::$instance;
}
/**
* Plugin initialization, check if WooCommerce plugin is active, creade admin menu and add TrafficWatchdog JS code to page.
* When deactivating the plugin, delete the table from database
* @return void
*/
public function twd_ab_ai_wc_init()
{
add_action('admin_menu', [$this, 'add_plugin_menu']);
add_action('wp_footer', [$this, 'add_footer_script']);
register_deactivation_hook(TRAFFICWATCHDOG_ADSBOT_AI_DLA_WC_PLUGIN_FILE_URL, [$this, 'uninstall']);
}
/**
* Check if WooCommerce is active, if not the plugin will not activate
* @return void
*/
public function woocommerce_inactive_notice_for_twd_sb_wc()
{
if (current_user_can('activate_plugins')) :
if (!class_exists('WooCommerce')) :
deactivate_plugins(plugin_basename(TRAFFICWATCHDOG_ADSBOT_AI_DLA_WC_PLUGIN_FILE_URL));
?>
true]);
}
/**
* The plugin menu
* @return void
*/
public function add_plugin_menu() {
add_menu_page(
__('Ads Bot AI', 'ads-bot-ai-dla-wc'),
__('Ads Bot AI', 'ads-bot-ai-dla-wc'),
'manage_options',
'ads-bot-ai-dla-wc',
[$this, 'twd_ab_ai_wc_menu_main_page'],
plugin_dir_url( __FILE__ ) . 'includes/images/ab-icon.png',
20
);
add_submenu_page(
'ads-bot-ai-dla-wc',
__('Panel TrafficWatchdog', 'ads-bot-ai-dla-wc'),
__('Idź do panelu TrafficWatchdog', 'ads-bot-ai-dla-wc'),
'manage_options', // Uprawnienia
$this->twd_ab_ai_wc_panel_url(),
null
);
}
public function twd_ab_ai_wc_panel_url()
{
$instance_id = $this->twd_ab_ai_wc_db_get_instance_id();
if (empty($instance_id)) {
$instance_id = 'empty';
}
return sprintf('https://panel.trafficwatchdog.pl/woocommerceapp/?woocommerce_instance_id=%s&apptype=adsbot&utm_medium=adsbot', $instance_id);
}
public function twd_ab_ai_wc_menu_main_page() {
?>
time(),
'url' => get_site_url(),
'action' => $action,
'apptype' => 'adsbot',
'version' => 'woocommerce',
'instance_id' => $this->twd_ab_ai_wc_db_get_instance_id()
];
$args = [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'
],
'body' => $post_params,
];
$http_client = new \WP_Http();
return is_array($http_client->post($url, $args));
}
/**
* Creating a table with data used by the plugin and initializing it.
* @return void
*/
public function twd_ab_ai_wc_db_table_create()
{
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE %s (
id mediumint(9) NOT NULL AUTO_INCREMENT,
`key` varchar(128) NOT NULL,
`value` varchar(128) NOT NULL,
PRIMARY KEY (id),
UNIQUE (`key`)
)%s;";
if ($this->twd_ab_ai_wc_db_get_instance_id() === null) {
$this->twd_ab_ai_wc_db_table_drop();
dbDelta( sprintf($sql, $wpdb->prefix . static::TWD_DATA_TABLE_NAME, $charset_collate) );
$this->twd_ab_ai_wc_db_table_init();
}
$this->twd_ab_ai_wc_instance_count_manager('install');
}
/**
* Removing table with data used by the plugin.
* @return void
*/
public function twd_ab_ai_wc_db_table_drop()
{
global $wpdb;
if (!empty($this->twd_ab_ai_wc_db_get_instance_count()) && $this->twd_ab_ai_wc_db_get_instance_count() > 0) {
return;
}
$preparedQuery = $wpdb->prepare("DROP TABLE IF EXISTS %i;", $wpdb->prefix . static::TWD_DATA_TABLE_NAME);
$wpdb->query($preparedQuery);
}
/**
* Getting instance count
* @return ?int
*/
public function twd_ab_ai_wc_db_get_instance_count()
{
global $wpdb;
$preparedQuery = $wpdb->prepare("SELECT `value` FROM %i WHERE `key` = 'instance_count' ORDER BY `id` ASC LIMIT 1;", $wpdb->prefix . static::TWD_DATA_TABLE_NAME);
$response = $wpdb->get_results($preparedQuery, ARRAY_A);
return (!empty($response) && isset($response[0]['value'])) ? $response[0]['value'] : null;
}
/**
* Increment or decrement instance count depending of the type action
* @param mixed $action string
* @return void
*/
public function twd_ab_ai_wc_instance_count_manager($action = 'install')
{
global $wpdb;
if ($this->twd_ab_ai_wc_db_get_instance_count() === null) {
$wpdb->insert(
$wpdb->prefix . static::TWD_DATA_TABLE_NAME,
array(
'key' => 'instance_count',
'value' => 0,
)
);
}
$instanceCount = (int)$this->twd_ab_ai_wc_db_get_instance_count();
if (!is_numeric($instanceCount)) {
$instanceCount = 0;
}
if ($action == 'install') {
$instanceCount += 1;
$wpdb->update(
$wpdb->prefix . static::TWD_DATA_TABLE_NAME,
array (
'value' => $instanceCount
),
array (
'key' => 'instance_count'
)
);
} else if ($action == 'uninstall') {
$instanceCount -= 1;
if ($instanceCount < 0) {
$instanceCount = 0;
}
$wpdb->update(
$wpdb->prefix . static::TWD_DATA_TABLE_NAME,
array (
'value' => $instanceCount
),
array (
'key' => 'instance_count'
)
);
}
}
public function uninstall()
{
$this->twd_ab_ai_wc_callback('uninstall');
$this->twd_ab_ai_wc_instance_count_manager('uninstall');
$this->twd_ab_ai_wc_db_table_drop();
}
/**
* Getting instance ID
* @return ?string
*/
public function twd_ab_ai_wc_db_get_instance_id()
{
global $wpdb;
$preparedQuery = $wpdb->prepare("SELECT `value` FROM %i WHERE `key` = 'instance_id' ORDER BY `id` ASC LIMIT 1;", $wpdb->prefix . static::TWD_DATA_TABLE_NAME);
$response = $wpdb->get_results($preparedQuery, ARRAY_A);
return (!empty($response) && isset($response[0]['value'])) ? $response[0]['value'] : null;
}
/**
* Generating instance ID and insert it to table.
* @return void
*/
public function twd_ab_ai_wc_db_table_init()
{
global $wpdb;
$wpdb->insert(
$wpdb->prefix . static::TWD_DATA_TABLE_NAME,
array(
'key' => 'instance_id',
'value' => self::generate_uuid(TRAFFICWATCHDOG_ADSBOT_AI_DLA_WC_PLUGIN_FILE_URL.get_site_url()),
)
);
}
/**
* Creating simple UUID.
* @param ?string $data
*
* @return string
*/
private static function generate_uuid($data = null) {
return md5($data);
}
}
use trafficwatchdogpl;
/**
* Instantiate plugin.
*/
if (!function_exists(sprintf('%s\twd_ab_ai_wc_plugin_instantiate', __NAMESPACE__))) {
function twd_ab_ai_wc_plugin_instantiate()
{
$twd_ab_ai_wc_plugin = TwdAdsBotAIWC::twd_ab_ai_wc_get_instance();
}
}
add_action('plugins_loaded', sprintf('%s\twd_ab_ai_wc_plugin_instantiate', __NAMESPACE__));
/**
* Activation hook.
*/
if (!function_exists(sprintf('%s\twd_ab_ai_wc_plugin_activation', __NAMESPACE__))) {
function twd_ab_ai_wc_plugin_activation()
{
$twd_ab_ai_wc_plugin = TwdAdsBotAIWC::twd_ab_ai_wc_get_instance();
$twd_ab_ai_wc_plugin->twd_ab_ai_wc_db_table_create();
$twd_ab_ai_wc_plugin->twd_ab_ai_wc_callback();
}
}
register_activation_hook(TRAFFICWATCHDOG_ADSBOT_AI_DLA_WC_PLUGIN_FILE_URL, sprintf('%s\twd_ab_ai_wc_plugin_activation', __NAMESPACE__));
?>