diff --git a/src/acore-wp-plugin/src/Hooks/WooCommerce/Smartstone.php b/src/acore-wp-plugin/src/Hooks/WooCommerce/Smartstone.php
index 82824a6e..d03fdfb1 100644
--- a/src/acore-wp-plugin/src/Hooks/WooCommerce/Smartstone.php
+++ b/src/acore-wp-plugin/src/Hooks/WooCommerce/Smartstone.php
@@ -20,7 +20,7 @@ private static function getItemId($sku) {
}
public static function init() {
- add_action('woocommerce_after_add_to_cart_quantity', self::sprefix() . 'before_add_to_cart_button');
+ add_action('woocommerce_before_add_to_cart_button', self::sprefix() . 'before_add_to_cart_button');
add_filter('woocommerce_add_cart_item_data', self::sprefix() . 'add_cart_item_data', 20, 3);
add_filter('woocommerce_get_item_data', self::sprefix() . 'get_item_data', 20, 2);
add_action('woocommerce_checkout_order_processed', self::sprefix() . 'checkout_order_processed', 20, 2);
@@ -55,7 +55,8 @@ public static function add_to_cart_validation($passed, $product_id, $quantity, $
// LIST
public static function before_add_to_cart_button() {
global $product;
- [$smartstone_category, $smartstone_id] = self::getItemId($product->get_sku());
+ $sku = $product->get_sku();
+ [$smartstone_category, $smartstone_id] = self::getItemId($sku);
if (!$smartstone_id) {
return;
}
@@ -66,6 +67,18 @@ public static function before_add_to_cart_button() {
if ($current_user) {
FieldElements::charList($current_user->user_login);
+ ?>
+
+ [DEBUG] Smartstone gift field rendered';
+ ?>
+
+
+
+
+
+ get_sku();
- /* below statement make sure every add to cart action as unique line item */
- $cart_item_data['unique_key'] = md5(microtime() . rand());
}
+ // Save recipient if present
+ if (!empty($_REQUEST['acore_char_dest'])) {
+ $cart_item_data['acore_char_dest'] = sanitize_text_field($_REQUEST['acore_char_dest']);
+ }
+ // Save message if present
+ if (!empty($_REQUEST['acore_msg_dest'])) {
+ $cart_item_data['acore_msg_dest'] = substr(sanitize_text_field($_REQUEST['acore_msg_dest']), 0, 200);
+ }
+ $cart_item_data['acore_item_sku'] = $product->get_sku();
+ /* below statement make sure every add to cart action as unique line item */
+ $cart_item_data['unique_key'] = md5(microtime() . rand());
return $cart_item_data;
}
@@ -101,25 +124,31 @@ public static function get_item_data($cart_data, $cart_item = null) {
return $custom_items;
}
- if (isset($cart_item['acore_char_sel'])) {
- $ACoreSrv = ACoreServices::I();
- $charRepo = $ACoreSrv->getCharactersRepo();
+ $ACoreSrv = ACoreServices::I();
+ $charRepo = $ACoreSrv->getCharactersRepo();
+ $categoryToText = array(
+ 0 => "Pet",
+ 1 => "Combat Pet",
+ 2 => "Costume",
+ );
+ $senderName = null;
+ if (isset($cart_item['acore_char_sel'])) {
$charId = $cart_item['acore_char_sel'];
-
$char = $charRepo->findOneByGuid($charId);
+ $senderName = $char ? $char->getName() : "Character <$charId> doesn't exist!";
+ }
- $charName = $char ? $char->getName() : "Character <$charId> doesn't exist!";
-
- // Add to this dictionary / array to show other catergories for vanity items.
- $categoryToText = array(
- 0 => "Pet",
- 1 => "Combat Pet",
- 2 => "Costume",
- );
-
- $custom_items[] = array("name" => 'Character', "value" => $charName);
- $custom_items[] = array("name" => $categoryToText[$smartstone_category], "value" => $smartstone_id);
+ if (!empty($cart_item['acore_char_dest'])) {
+ // Gifted
+ $custom_items[] = array("name" => 'Gifted by', "value" => $senderName);
+ $custom_items[] = array("name" => 'Gifted to', "value" => esc_html($cart_item['acore_char_dest']));
+ } elseif ($senderName) {
+ $custom_items[] = array("name" => 'Character', "value" => $senderName);
+ }
+ $custom_items[] = array("name" => $categoryToText[$smartstone_category], "value" => $smartstone_id);
+ if (!empty($cart_item['acore_msg_dest'])) {
+ $custom_items[] = array("name" => 'Message', "value" => esc_html($cart_item['acore_msg_dest']));
}
return $custom_items;
}
@@ -132,8 +161,16 @@ public static function add_order_item_meta($item_id, $values, $cart_item_key) {
return;
}
- if (isset($values['acore_char_sel']) && isset($values["acore_item_sku"])) {
+ if (isset($values['acore_char_sel'])) {
\wc_add_order_item_meta($item_id, "acore_char_sel", $values['acore_char_sel']);
+ }
+ if (!empty($values['acore_char_dest'])) {
+ \wc_add_order_item_meta($item_id, "acore_char_dest", $values['acore_char_dest']);
+ }
+ if (!empty($values['acore_msg_dest'])) {
+ \wc_add_order_item_meta($item_id, "acore_msg_dest", $values['acore_msg_dest']);
+ }
+ if (isset($values["acore_item_sku"])) {
\wc_add_order_item_meta($item_id, "acore_item_sku", $values['acore_item_sku']);
}
}
@@ -171,10 +208,24 @@ public static function payment_complete($order_id) {
[$smartstone_category, $smartstone_id] = self::getItemId($item["acore_item_sku"]);
if ($smartstone_id) {
- $charName = $WoWSrv->getCharName($item["acore_char_sel"]);
-
- $res = $soap->addVanity($charName, $smartstone_category, $smartstone_id);
-
+ // If gifting, use recipient, else use sender
+ $recipient = !empty($item["acore_char_dest"]) ? $item["acore_char_dest"] : $WoWSrv->getCharName($item["acore_char_sel"]);
+ $sender = $WoWSrv->getCharName($item["acore_char_sel"]);
+ $itemName = isset($item["name"]) ? $item["name"] : 'a Smartstone item';
+ // Try to get product name if possible
+ if (isset($item["acore_item_sku"])) {
+ $product = wc_get_product($item["acore_item_sku"]);
+ if ($product) {
+ $itemName = $product->get_name();
+ }
+ }
+ $titleMsg = sprintf(__('%s has sent you %s', 'acore-wp-plugin'), $sender, $itemName);
+ $userMsg = !empty($item["acore_msg_dest"]) ? $item["acore_msg_dest"] : '';
+ $finalMsg = $titleMsg;
+ if ($userMsg !== '') {
+ $finalMsg .= "\n\n" . $userMsg;
+ }
+ $res = $soap->addVanity($recipient, $smartstone_category, $smartstone_id, $finalMsg);
if ($res instanceof \Exception) {
throw $res;
}