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

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