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__)); ?>