2025-12-23 07:48:45 +01:00
< ? php
/**
* Plugin Name : informatiq - smart - google - pricing
* Plugin URI : https :// informatiq . services
* Description : Automatically adjusts WooCommerce sale prices based on Google Merchant Center competitor data .
2026-01-21 08:29:25 +01:00
* Version : 2.0 . 0
2025-12-23 07:48:45 +01:00
* Author : Mălin Cenușă
* Author URI : https :// malin . ro
* Text Domain : informatiq - smart - pricing
* Domain Path : / languages
* Requires at least : 5.8
* Requires PHP : 7.4
* WC requires at least : 5.0
* WC tested up to : 8.5
*
* @ package InformatiqSmartPricing
*/
// Exit if accessed directly.
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
// Define plugin constants.
2026-01-21 08:29:25 +01:00
define ( 'INFORMATIQ_SP_VERSION' , '2.0.0' );
2025-12-23 07:48:45 +01:00
define ( 'INFORMATIQ_SP_PLUGIN_FILE' , __FILE__ );
define ( 'INFORMATIQ_SP_PLUGIN_DIR' , plugin_dir_path ( __FILE__ ) );
define ( 'INFORMATIQ_SP_PLUGIN_URL' , plugin_dir_url ( __FILE__ ) );
define ( 'INFORMATIQ_SP_PLUGIN_BASENAME' , plugin_basename ( __FILE__ ) );
/**
* Main plugin class .
*/
class Informatiq_Smart_Google_Pricing {
/**
* Single instance of the class .
*
* @ var Informatiq_Smart_Google_Pricing
*/
protected static $instance = null ;
/**
* Admin instance .
*
* @ var Informatiq_SP_Admin
*/
public $admin ;
/**
* Price updater instance .
*
* @ var Informatiq_SP_Price_Updater
*/
public $price_updater ;
/**
* Logger instance .
*
* @ var Informatiq_SP_Logger
*/
public $logger ;
/**
* Get main instance .
*
* @ return Informatiq_Smart_Google_Pricing
*/
public static function instance () {
if ( is_null ( self :: $instance ) ) {
self :: $instance = new self ();
}
return self :: $instance ;
}
/**
* Constructor .
*/
private function __construct () {
// Check if WooCommerce is active.
if ( ! $this -> is_woocommerce_active () ) {
add_action ( 'admin_notices' , array ( $this , 'woocommerce_missing_notice' ) );
return ;
}
2026-01-21 08:29:25 +01:00
// Check for OpenSSL extension (required for JWT signing).
if ( ! extension_loaded ( 'openssl' ) ) {
add_action ( 'admin_notices' , array ( $this , 'openssl_missing_notice' ) );
return ;
}
2025-12-23 07:48:45 +01:00
// Load plugin classes.
$this -> includes ();
// Initialize plugin.
$this -> init ();
// Register hooks.
$this -> register_hooks ();
}
/**
* Check if WooCommerce is active .
*
* @ return bool
*/
private function is_woocommerce_active () {
return in_array ( 'woocommerce/woocommerce.php' , apply_filters ( 'active_plugins' , get_option ( 'active_plugins' ) ), true ) ||
( is_multisite () && array_key_exists ( 'woocommerce/woocommerce.php' , get_site_option ( 'active_sitewide_plugins' , array () ) ) );
}
/**
* WooCommerce missing notice .
*/
public function woocommerce_missing_notice () {
?>
< div class = " notice notice-error " >
< p >< ? php esc_html_e ( 'Informatiq Smart Google Pricing requires WooCommerce to be installed and active.' , 'informatiq-smart-pricing' ); ?> </p>
</ div >
< ? php
}
2026-01-21 08:29:25 +01:00
/**
* OpenSSL missing notice .
*/
public function openssl_missing_notice () {
?>
< div class = " notice notice-error " >
< p >< ? php esc_html_e ( 'Informatiq Smart Google Pricing requires the PHP OpenSSL extension for Google API authentication.' , 'informatiq-smart-pricing' ); ?> </p>
</ div >
< ? php
}
2025-12-23 07:48:45 +01:00
/**
* Include required files .
*/
private function includes () {
require_once INFORMATIQ_SP_PLUGIN_DIR . 'includes/class-informatiq-sp-logger.php' ;
require_once INFORMATIQ_SP_PLUGIN_DIR . 'includes/class-informatiq-sp-google-api.php' ;
require_once INFORMATIQ_SP_PLUGIN_DIR . 'includes/class-informatiq-sp-price-updater.php' ;
require_once INFORMATIQ_SP_PLUGIN_DIR . 'includes/class-informatiq-sp-scheduler.php' ;
require_once INFORMATIQ_SP_PLUGIN_DIR . 'admin/class-informatiq-sp-admin.php' ;
}
/**
* Initialize plugin components .
*/
private function init () {
$this -> logger = new Informatiq_SP_Logger ();
$this -> price_updater = new Informatiq_SP_Price_Updater ( $this -> logger );
$this -> admin = new Informatiq_SP_Admin ( $this -> logger , $this -> price_updater );
// Initialize scheduler.
new Informatiq_SP_Scheduler ( $this -> price_updater );
}
/**
* Register hooks .
*/
private function register_hooks () {
register_activation_hook ( INFORMATIQ_SP_PLUGIN_FILE , array ( $this , 'activate' ) );
register_deactivation_hook ( INFORMATIQ_SP_PLUGIN_FILE , array ( $this , 'deactivate' ) );
add_action ( 'plugins_loaded' , array ( $this , 'load_textdomain' ) );
}
/**
* Plugin activation .
*/
public function activate () {
// Schedule daily cron event.
if ( ! wp_next_scheduled ( 'informatiq_sp_daily_price_update' ) ) {
wp_schedule_event ( time (), 'daily' , 'informatiq_sp_daily_price_update' );
}
// Create log table if needed.
$this -> logger -> create_log_table ();
}
/**
* Plugin deactivation .
*/
public function deactivate () {
// Clear scheduled cron event.
$timestamp = wp_next_scheduled ( 'informatiq_sp_daily_price_update' );
if ( $timestamp ) {
wp_unschedule_event ( $timestamp , 'informatiq_sp_daily_price_update' );
}
}
/**
* Load text domain .
*/
public function load_textdomain () {
load_plugin_textdomain ( 'informatiq-smart-pricing' , false , dirname ( INFORMATIQ_SP_PLUGIN_BASENAME ) . '/languages' );
}
}
/**
* Get main instance .
*
* @ return Informatiq_Smart_Google_Pricing
*/
function informatiq_sp () {
return Informatiq_Smart_Google_Pricing :: instance ();
}
2026-01-21 08:29:25 +01:00
/**
* Initialize plugin after all plugins are loaded .
* This ensures WooCommerce functions are available .
*/
function informatiq_sp_init () {
informatiq_sp ();
}
add_action ( 'plugins_loaded' , 'informatiq_sp_init' , 20 );