diff --git a/src/assets/js/retailcrm-loyalty-actions.js b/src/assets/js/retailcrm-loyalty-actions.js new file mode 100644 index 0000000..5351fae --- /dev/null +++ b/src/assets/js/retailcrm-loyalty-actions.js @@ -0,0 +1,3 @@ +jQuery(function() { + alert('HOBA'); +}); diff --git a/src/include/class-wc-retailcrm-base.php b/src/include/class-wc-retailcrm-base.php index a81e095..247bedb 100644 --- a/src/include/class-wc-retailcrm-base.php +++ b/src/include/class-wc-retailcrm-base.php @@ -33,6 +33,9 @@ if (!class_exists('WC_Retailcrm_Base')) { /** @var WC_Retailcrm_Cart */ protected $cart; + /** @var WC_Retailcrm_Loyalty */ + protected $loyalty; + /** * Init and hook in the integration. * @@ -100,6 +103,12 @@ if (!class_exists('WC_Retailcrm_Base')) { add_action('admin_enqueue_scripts', [$this, 'include_files_for_admin'], 101); add_action('woocommerce_new_order', [$this, 'create_order'], 11, 1); + + add_action('init', [$this, 'add_loyalty_endpoint'], 11, 1); + add_action('woocommerce_account_menu_items', [$this, 'add_loyalty_item'], 11, 1); + add_action('woocommerce_account_loyalty_endpoint', [$this, 'show_loyalty'], 11, 1); + /*add_action('woocommerce_account_')*/ + // Subscribed hooks add_action('register_form', [$this, 'subscribe_register_form'], 99); add_action('woocommerce_register_form', [$this, 'subscribe_woocommerce_register_form'], 99); @@ -128,6 +137,8 @@ if (!class_exists('WC_Retailcrm_Base')) { add_action('woocommerce_cart_emptied', [$this, 'clear_cart']); } + $this->loyalty = new WC_Retailcrm_Loyalty($this->apiClient, $this->settings); + // Deactivate hook add_action('retailcrm_deactivate', [$this, 'deactivate']); @@ -814,6 +825,39 @@ if (!class_exists('WC_Retailcrm_Base')) { wp_die(); } + public function add_loyalty_item($items) + { + $items['loyalty'] = __('Loyalty program'); + + return $items; + } + + public function add_loyalty_endpoint() + { + add_rewrite_endpoint('loyalty', EP_PAGES); + } + + public function show_loyalty() + { + global $wp; + + $userId = get_current_user_id(); + + if (!isset($userId)) { + return; + } + + $jsScript = 'retailcrm-loyalty-actions'; + $loyaltyUrl = home_url(add_query_arg([], $wp->request)); + $jsScriptsPath = plugins_url() . '/woo-retailcrm/assets/js/'; + + wp_register_script($jsScript, $jsScriptsPath . $jsScript . '.js', false, '0.1'); + wp_enqueue_script($jsScript, $jsScriptsPath . $jsScript . '.js', '', '', true); + wp_localize_script($jsScript, 'LoyaltyUrl', $loyaltyUrl); + + echo $this->loyalty->getForm($userId); + } + /** * Get custom fields with CRM * diff --git a/src/include/class-wc-retailcrm-loyalty.php b/src/include/class-wc-retailcrm-loyalty.php new file mode 100644 index 0000000..c13339c --- /dev/null +++ b/src/include/class-wc-retailcrm-loyalty.php @@ -0,0 +1,84 @@ + + * @license http://retailcrm.ru Proprietary + * @link http://retailcrm.ru + * @see http://help.retailcrm.ru + */ + class WC_Retailcrm_Loyalty + { + /** @var WC_Retailcrm_Client_V5 */ + protected $apiClient; + protected $dateFormat; + + protected $settings; + + public function __construct($apiClient, $settings) + { + $this->apiClient = $apiClient; + $this->settings = $settings; + $this->dateFormat = 'Y-m-d H:i:sP'; + } + + public function getForm(int $userId) + { + $result = ''; + + $response = $this->apiClient->customersGet($userId); + + if (!isset($response['customer']['id'])) { + return $result; + } + + $filter['customerId'] = $response['customer']['id']; + $response = $this->apiClient->getLoyaltyAccountList($filter); + + if (!$response->isSuccessful() || !$response->offsetExists('loyaltyAccounts')) { + return $result; + } + + $loyaltyAccount = $response['loyaltyAccounts'][0]; + + if (isset($response['loyaltyAccounts'][0]) && (int)$loyaltyAccount['customer']['externalId'] === $userId) { + if ($loyaltyAccount['active'] === true) { + $result = ' +

Бонусный счёт

+

ID участия: TEST

+

Статус участия: ТЕСТ

+

Текущий уровень: ТЕСТ

+

И так далее

+ '; + } else { + $result = ' +
+ + +
+ +
+ '; + } + } else { + $result = ' +
+

Для регистрации в Программе лояльности заполните форму:

+

Я согласен с условиями программы лояльности.

+

Я согласен с условиями обработки персональных данных.

+

+

+
+ '; + } + + return $result; + } + } + +endif; diff --git a/src/retailcrm.php b/src/retailcrm.php index c965d97..b3c7de4 100644 --- a/src/retailcrm.php +++ b/src/retailcrm.php @@ -120,6 +120,7 @@ if (!class_exists( 'WC_Integration_Retailcrm')) : require_once(self::checkCustomFile('include/icml/class-wc-retailcrm-icml-writer.php')); require_once(self::checkCustomFile('include/class-wc-retailcrm-orders.php')); require_once(self::checkCustomFile('include/class-wc-retailcrm-cart.php')); + require_once(self::checkCustomFile('include/class-wc-retailcrm-loyalty.php')); require_once(self::checkCustomFile('include/class-wc-retailcrm-customers.php')); require_once(self::checkCustomFile('include/class-wc-retailcrm-inventories.php')); require_once(self::checkCustomFile('include/class-wc-retailcrm-history.php'));