PluginProbe ʕ •ᴥ•ʔ
CommerceBird – AI Command Center, ERP Integrations & B2B for WooCommerce (Zoho, Exact Online). / 2.3.0
CommerceBird – AI Command Center, ERP Integrations & B2B for WooCommerce (Zoho, Exact Online). v2.3.0
3.0.3 3.0.2 3.0.1 trunk 2.2.14 2.2.15 2.2.16 2.2.17 2.2.18 2.2.19 2.3.0 2.3.1 2.3.10 2.3.11 2.3.12 2.3.13 2.3.14 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.7.91 2.7.92 2.7.93 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0
commercebird / commercebird.php
commercebird Last commit date
admin 1 year ago includes 1 year ago languages 1 year ago vendor 1 year ago LICENSE 1 year ago changelog.txt 1 year ago commercebird.php 1 year ago composer.json 1 year ago data-sync.php 1 year ago index.php 1 year ago readme.txt 1 year ago
commercebird.php
228 lines
1 <?php
2 /**
3 * Plugin Name: CommerceBird
4 * Plugin URI: https://commercebird.com
5 * Author: CommerceBird
6 * Description: This plugin helps you get the most of CommerceBird by allowing you to upload product images, use integrations like Zoho Inventory, Zoho CRM, Exact Online and more. Requires a subscription at CommerceBird.com.
7 * Version: 2.3.0
8 * Requires PHP: 7.4
9 * Requires Plugins: woocommerce
10 * Requires at least: 6.5
11 * Tested up to: 6.7.2
12 * Text Domain: commercebird
13 * Domain Path: /languages
14 *
15 * License: GNU General Public License v3.0
16 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
17 *
18 * @category Fulfillment
19 * @package CommerceBird
20 * @author Fawad Tiemoerie <info@commercebird.com>
21 * @copyright Copyright (c) 2024, CommerceBird
22 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL-3.0-or-later
23 *
24 * WC requires at least: 9.4.0
25 * WC tested up to: 9.7.0
26 */
27
28 if ( ! defined( 'ABSPATH' ) ) {
29 exit; // Exit if accessed directly
30 }
31
32 if ( ! defined( 'CMBIRD_VERSION' ) ) {
33 define( 'CMBIRD_VERSION', '2.3.0' );
34 }
35 if ( ! defined( 'CMBIRD_PATH' ) ) {
36 define( 'CMBIRD_PATH', plugin_dir_path( __FILE__ ) );
37 }
38 if ( ! defined( 'CMBIRD_URL' ) ) {
39 define( 'CMBIRD_URL', plugin_dir_url( __FILE__ ) );
40 }
41 if ( ! defined( 'CMBIRD_MENU_SLUG' ) ) {
42 define( 'CMBIRD_MENU_SLUG', 'commercebird-app' );
43 }
44
45 require_once CMBIRD_PATH . 'includes/woo-functions.php';
46 require_once CMBIRD_PATH . 'includes/sync/order-backend.php';
47 require_once CMBIRD_PATH . 'data-sync.php';
48
49 require __DIR__ . '/vendor/autoload.php';
50
51 use Automattic\WooCommerce\Utilities\FeaturesUtil;
52 use CommerceBird\Plugin;
53 use CommerceBird\Admin\Actions\Sync\ExactOnlineSync;
54 use CommerceBird\Admin\Actions\Sync\ZohoCRMSync;
55 use CommerceBird\API\ProductWebhook;
56 use CommerceBird\API\CreateOrderWebhook;
57 use CommerceBird\API\ShippingWebhook;
58 use CommerceBird\API\Zoho;
59 use CommerceBird\API\Exact;
60 use CommerceBird\API\CMBird_APIs;
61
62 /*
63 |--------------------------------------------------------------------------
64 | Activation, deactivation and uninstall event.
65 |--------------------------------------------------------------------------
66 */
67 register_activation_hook( __FILE__, array( Plugin::class, 'activate' ) );
68 register_deactivation_hook( __FILE__, array( Plugin::class, 'deactivate' ) );
69 register_uninstall_hook( __FILE__, array( Plugin::class, 'uninstall' ) );
70
71 /*
72 |--------------------------------------------------------------------------
73 | Load the plugin translations
74 |--------------------------------------------------------------------------
75 */
76 add_action( 'init', 'cmbird_load_textdomain' );
77 function cmbird_load_textdomain() {
78 load_plugin_textdomain( 'commercebird', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
79 }
80
81 /** Loading Purchase Order Class
82 * @since 1.0.0
83 */
84 function cmbird_purchase_order_class() {
85 if ( class_exists( 'WooCommerce' ) ) {
86 new CMBIRD_Purchase_Order();
87 }
88 }
89 add_action( 'woocommerce_init', 'cmbird_purchase_order_class' );
90 add_action( 'init', array( CMBIRD_PO_Admin_Manager::class, 'init' ), 11 );
91
92 /*
93 |--------------------------------------------------------------------------
94 | Start the plugin
95 |--------------------------------------------------------------------------
96 */
97 Plugin::init();
98
99 /**
100 * Declaring compatibility for WooCommerce HPOS
101 */
102 add_action(
103 'before_woocommerce_init',
104 function () {
105 if ( class_exists( FeaturesUtil::class) ) {
106 FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
107 }
108 }
109 );
110
111 /**
112 * Hooks for WC Action Scheduler to import or export products
113 */
114 $import_products = new CMBIRD_Products_ZI();
115 $import_pricelist = new CMBIRD_Pricelist_ZI();
116 $product_class = new CMBIRD_Products_ZI_Export();
117 $order_class = new CMBIRD_Order_Sync_ZI();
118 $contact_class = new CMBIRD_Contact_ZI();
119 $category_class = new CMBIRD_Categories_ZI();
120 $import_pricelist->wc_b2b_groups();
121 add_action( 'import_group_items_cron', array( $import_products, 'sync_groupitem_recursively' ), 10, 2 );
122 add_action( 'import_simple_items_cron', array( $import_products, 'sync_item_recursively' ), 10, 2 );
123 add_action( 'import_variable_product_cron', array( $import_products, 'import_variable_product_variations' ), 10, 2 );
124 add_action( 'sync_zi_product_cron', array( $product_class, 'cmbird_zi_products_prepare_sync' ), 10, 2 );
125 add_action( 'sync_zi_pricelist', array( $import_pricelist, 'zi_get_pricelist' ), 10, 2 );
126 add_action( 'sync_zi_order', array( $order_class, 'zi_orders_prepare_sync' ), 10, 2 );
127 add_action( 'sync_zi_import_contacts', array( $contact_class, 'cmbird_get_zoho_contacts' ), 10, 2 );
128 add_action( 'cmbird_zi_category_cron', array( $category_class, 'cmbird_zi_category_sync_call' ), 10 );
129 // add action to set the zoho rate limit option exceeded to false
130 add_action( 'cmbird_common', array( CMBIRD_Common_Functions::class, 'set_zoho_rate_limit_option' ) );
131 // Exact Online Hooks
132 add_action( 'cmbird_sync_eo', array( ExactOnlineSync::class, 'sync' ), 10, 3 );
133 add_action( 'cmbird_payment_status', array( ExactOnlineSync::class, 'cmbird_payment_status' ), 10, 1 );
134 add_action( 'cmbird_eo_get_payment_statuses', array( ExactOnlineSync::class, 'get_payment_status_via_cron' ) );
135 // Callback functions for scheduled action to process product or customer chunk
136 add_action( 'cmbird_process_product_chunk', function ($args) {
137 if ( ! is_array( $args ) || empty( $args['transient_key'] ) ) {
138 return;
139 }
140 $transient_key = $args['transient_key'];
141 $import_products = $args['import_products'] ?? false;
142 $chunked_products = get_transient( $transient_key );
143 if ( $chunked_products ) {
144 $sync = new ExactOnlineSync();
145 $sync->sync( 'product', $chunked_products, (bool) $import_products );
146 // Remove transient after processing
147 delete_transient( $transient_key );
148 }
149 }, 10, 1 );
150 add_action( 'cmbird_process_customer_chunk', function ($args) {
151 if ( ! is_array( $args ) || empty( $args['transient_key'] ) ) {
152 return;
153 }
154 $transient_key = $args['transient_key'];
155 $import_customers = $args['import_customers'] ?? false;
156 $chunked_customers = get_transient( $transient_key );
157 if ( $chunked_customers ) {
158 $sync = new ExactOnlineSync();
159 $sync->sync( 'customer', $chunked_customers, (bool) $import_customers );
160 // Remove transient after processing
161 delete_transient( $transient_key );
162 }
163 }, 10, 1 );
164 // Zoho CRM Hooks
165 add_action( 'init', array( ZohoCRMSync::class, 'refresh_token' ) );
166
167 // add classes to REST API
168 add_action(
169 'rest_api_init',
170 function () {
171 new Zoho();
172 new Exact();
173 new ProductWebhook();
174 new ShippingWebhook();
175 new CreateOrderWebhook();
176 new CMBird_APIs();
177 $po_controller = new CMBIRD_REST_Shop_Purchase_Controller();
178 $po_controller->register_routes();
179 }
180 );
181
182 add_action(
183 'save_post',
184 function ($post_id, $post) {
185 if ( $post->post_type === 'wcb2b_group' ) {
186 delete_transient( 'wc_b2b_groups' );
187 }
188 },
189 10,
190 2
191 );
192
193 /**
194 * Perform actions when the plugin is updated
195 * @param string $upgrader_object
196 * @param array $options
197 * @return void
198 */
199 add_action( 'upgrader_process_complete', 'cmbird_update_plugin_tasks', 10, 2 );
200
201 function cmbird_update_plugin_tasks( $upgrader_object, $options ) {
202 $this_plugin = plugin_basename( __FILE__ );
203
204 if ( $options['action'] === 'update' && $options['type'] === 'plugin' ) {
205 foreach ( $options['plugins'] as $plugin ) {
206 if ( $plugin === $this_plugin ) {
207 // Perform tasks when the plugin is updated
208 $zoho_inventory_url = get_option( 'cmbird_zoho_inventory_url' );
209 if ( $zoho_inventory_url ) {
210 $new_zoho_inventory_url = str_replace( 'inventory.zoho', 'www.zohoapis', $zoho_inventory_url );
211 update_option( 'cmbird_zoho_inventory_url', $new_zoho_inventory_url );
212 }
213 // change the post meta key name from "cost_price" to "_cost_price" using wpdb query
214 global $wpdb;
215 $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '_cost_price' WHERE meta_key = 'cost_price'" );
216 // add 'cmbird_' to every option key name that starts with 'zoho_' using wpdb query
217 $zoho_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'zoho_%' OR option_name LIKE 'zi_%'" );
218 foreach ( $zoho_options as $zoho_option ) {
219 if ( strpos( $zoho_option->option_name, 'cmbird_' ) !== 0 ) {
220 $new_option_name = 'cmbird_' . $zoho_option->option_name;
221 $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->options SET option_name = %s WHERE option_name = %s", $new_option_name, $zoho_option->option_name ) );
222 }
223 }
224 }
225 }
226 }
227 }
228