studiou-wc-product-cat-manage.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. /**
  3. * Plugin Name: QDR - Studiou WC Export/Import Product Categories
  4. * Plugin URI: https://www.quadarax.com/plugins/studiou-wc-product-cat-manage
  5. * Description: Allows batch import and export WooCommerce product categories
  6. * Version: 1.2.0
  7. * Requires at least: 6.8.1
  8. * Requires PHP: 8.2
  9. * Author: Dalibor Votruba
  10. * Author URI: https://www.quadarax.com
  11. * License: GPL v2 or later
  12. * License URI: https://www.gnu.org/licenses/gpl-2.0.html
  13. * Text Domain: studiou-wc-product-cat-manage
  14. * Domain Path: /languages
  15. * WC requires at least: 9.0
  16. * WC tested up to: 9.8
  17. * Woo: 12345:342928dfsfhsf8429842374wdf4234sfd
  18. */
  19. // If this file is called directly, abort.
  20. if (!defined('WPINC')) {
  21. die;
  22. }
  23. // Define plugin constants
  24. if (!defined('STUDIOU_WCPCM_VERSION')) define('STUDIOU_WCPCM_VERSION', '1.2.0');
  25. if (!defined('STUDIOU_WCPCM_PLUGIN_DIR')) define('STUDIOU_WCPCM_PLUGIN_DIR', plugin_dir_path(__FILE__));
  26. if (!defined('STUDIOU_WCPCM_PLUGIN_URL')) define('STUDIOU_WCPCM_PLUGIN_URL', plugin_dir_url(__FILE__));
  27. if (!defined('STUDIOU_WCPCM_PLUGIN_BASENAME')) define('STUDIOU_WCPCM_PLUGIN_BASENAME', plugin_basename(__FILE__));
  28. /**
  29. * Main plugin class
  30. */
  31. class Studiou_WC_Product_Cat_Manage {
  32. /**
  33. * @var Studiou_WC_Product_Cat_Manage_Export
  34. */
  35. private $exporter;
  36. /**
  37. * @var Studiou_WC_Product_Cat_Manage_Import
  38. */
  39. private $importer;
  40. /**
  41. * @var Studiou_WC_Product_Cat_Manage_DB
  42. */
  43. private $db;
  44. /**
  45. * Initialize the plugin
  46. */
  47. public function __construct() {
  48. // Load dependencies
  49. $this->load_dependencies();
  50. // Check required plugins
  51. add_action('admin_init', array($this, 'check_required_plugins'));
  52. // Add admin menu items
  53. add_action('admin_menu', array($this, 'add_admin_menu'), 99);
  54. // Register admin assets
  55. add_action('admin_enqueue_scripts', array($this, 'register_admin_assets'));
  56. // Initialize components
  57. $this->init_components();
  58. }
  59. /**
  60. * Load required dependencies
  61. */
  62. private function load_dependencies() {
  63. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-db.php';
  64. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-export.php';
  65. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-import.php';
  66. }
  67. /**
  68. * Initialize components
  69. */
  70. private function init_components() {
  71. $this->db = new Studiou_WC_Product_Cat_Manage_DB();
  72. $this->exporter = new Studiou_WC_Product_Cat_Manage_Export($this->db);
  73. $this->importer = new Studiou_WC_Product_Cat_Manage_Import($this->db);
  74. }
  75. /**
  76. * Check if required plugins are active
  77. */
  78. public function check_required_plugins() {
  79. if (!is_admin() || isset($_GET['activate-multi'])) {
  80. return;
  81. }
  82. // Check for WooCommerce
  83. if (!class_exists('WooCommerce') || !defined('WC_VERSION') || version_compare(WC_VERSION, '9.8', '<')) {
  84. add_action('admin_notices', array($this, 'woocommerce_missing_notice'));
  85. deactivate_plugins(STUDIOU_WCPCM_PLUGIN_BASENAME);
  86. if (isset($_GET['activate'])) {
  87. unset($_GET['activate']);
  88. }
  89. }
  90. }
  91. /**
  92. * WooCommerce missing notice
  93. */
  94. public function woocommerce_missing_notice() {
  95. ?>
  96. <div class="error">
  97. <p><?php echo sprintf(
  98. __('QDR - Studiou WC Export/Import Product Categories requires WooCommerce version 9.8 or higher. Please %sinstall or update WooCommerce%s.', 'studiou-wc-product-cat-manage'),
  99. '<a href="' . admin_url('plugin-install.php?s=woocommerce&tab=search&type=term') . '">',
  100. '</a>'
  101. ); ?></p>
  102. </div>
  103. <?php
  104. }
  105. /**
  106. * Add admin menu items
  107. */
  108. public function add_admin_menu() {
  109. // Make sure WooCommerce menu exists
  110. if (class_exists('WooCommerce')) {
  111. add_submenu_page(
  112. 'edit.php?post_type=product',
  113. __('Import Product Categories', 'studiou-wc-product-cat-manage'),
  114. __('Import Product Categories', 'studiou-wc-product-cat-manage'),
  115. 'manage_woocommerce',
  116. 'studiou-import-product-categories',
  117. array($this, 'render_import_page')
  118. );
  119. add_submenu_page(
  120. 'edit.php?post_type=product',
  121. __('Export Product Categories', 'studiou-wc-product-cat-manage'),
  122. __('Export Product Categories', 'studiou-wc-product-cat-manage'),
  123. 'manage_woocommerce',
  124. 'studiou-export-product-categories',
  125. array($this, 'render_export_page')
  126. );
  127. }
  128. }
  129. /**
  130. * Register admin assets
  131. */
  132. public function register_admin_assets($hook) {
  133. if ('product_page_studiou-import-product-categories' === $hook ||
  134. 'product_page_studiou-export-product-categories' === $hook) {
  135. wp_enqueue_style(
  136. 'studiou-wcpcm-admin',
  137. STUDIOU_WCPCM_PLUGIN_URL . 'assets/css/admin.css',
  138. array(),
  139. STUDIOU_WCPCM_VERSION
  140. );
  141. wp_enqueue_script(
  142. 'studiou-wcpcm-admin',
  143. STUDIOU_WCPCM_PLUGIN_URL . 'assets/js/admin.js',
  144. array('jquery'),
  145. STUDIOU_WCPCM_VERSION,
  146. true
  147. );
  148. wp_localize_script('studiou-wcpcm-admin', 'studiouWcpcm', array(
  149. 'ajaxUrl' => admin_url('admin-ajax.php'),
  150. 'nonce' => wp_create_nonce('studiou-wcpcm-nonce'),
  151. 'i18n' => array(
  152. 'importSuccess' => __('Import successful', 'studiou-wc-product-cat-manage'),
  153. 'importError' => __('Import error', 'studiou-wc-product-cat-manage'),
  154. 'exportSuccess' => __('Export successful', 'studiou-wc-product-cat-manage'),
  155. 'exportError' => __('Export error', 'studiou-wc-product-cat-manage'),
  156. )
  157. ));
  158. }
  159. }
  160. /**
  161. * Render import page
  162. */
  163. public function render_import_page() {
  164. include STUDIOU_WCPCM_PLUGIN_DIR . 'views/import.php';
  165. }
  166. /**
  167. * Render export page
  168. */
  169. public function render_export_page() {
  170. include STUDIOU_WCPCM_PLUGIN_DIR . 'views/export.php';
  171. }
  172. }
  173. /**
  174. * Begin execution of the plugin
  175. */
  176. function run_studiou_wc_product_cat_manage() {
  177. // Create instance
  178. new Studiou_WC_Product_Cat_Manage();
  179. }
  180. // Run the plugin
  181. run_studiou_wc_product_cat_manage();