is_purchasable() && $product->is_in_stock() && $product->get_type() === 'simple' ) { $args['attributes']['data-adscale_product_value'] = Helper::format_price_with_precision( $product->get_price()); } return $args; } public static function trigger_after_add_to_cart_event( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) { /* @var \WC_Product_Simple $product Product object */ $product = wc_get_product( $product_id ); $product_price = Helper::format_price_with_precision( $product->get_price()); Assets::add_to_cart_trigger_js( $product_id, $product_price ); } /** * Save adscale_ad_link on hook 'woocommerce_checkout_order_processed' * * @param int $order_id * @param array $posted_data * @param \WC_Abstract_Order $order */ public static function save_adscale_ad_link( $order_id, $posted_data, $order ) { $adscaleAdLink = Helper::get_cookie('_adscale_ad_link','','sanitize_text_field'); if ( $order_id && $adscaleAdLink ) { $order->update_meta_data('_adscale_ad_link', $adscaleAdLink); $order->save(); } } /** * Save adscale_cart_id on hook 'woocommerce_checkout_order_processed' * * @param int $order_id * @param array $posted_data * @param \WC_Abstract_Order $order */ public static function save_session_data_as_custom_order_meta_data( $order_id, $posted_data, $order ) { $wc_session_cookie_restored = Helper::get_w_c_session_cookie_restored_value(); if ( $order_id && is_string( $wc_session_cookie_restored ) ) { $order->update_meta_data('_adscale_cart_id', $wc_session_cookie_restored); $order->save(); } } /** * Save adscale__optin on hook 'woocommerce_checkout_order_processed' * * @param int $order_id * @param array $posted_data * */ public static function save_optin_order( $order_id, $posted_data ) { if ($order_id && Helper::get_opt_in_enabled()) { // Sanitize and validate the opt-in value $wc_adscale__optin = isset($_POST['adscale__optin']) ? sanitize_text_field($_POST['adscale__optin']) : 'no'; // Ensure only valid values are accepted $wc_adscale__optin = in_array($wc_adscale__optin, ['yes', 'no', '1', '0'], true) ? $wc_adscale__optin : 'no'; $date = current_time(DATE_RFC3339); $order = wc_get_order($order_id); // this parameter is responsible for the checkbox on checkout $order->update_meta_data('_adscale__optin', $wc_adscale__optin); $order->save(); // Save opt-in/opt-out time in user meta if ($wc_adscale__optin === 'yes' || $wc_adscale__optin === '1') { // if is true / then this parameter saves time for the user in meta field key _adscale__optin_date update_user_meta($order->get_user_id(), '_adscale__optin_date', $date); } else { // if is false / then this parameter saves time for the user in meta field key _adscale__optout_date update_user_meta($order->get_user_id(), '_adscale__optout_date', $date); } } } /** * Handler for hooks 'woocommerce_order_status_{status}' * * @param int $order_id * @param \WC_Abstract_Order $order */ public static function order_status_changed( $order_id, $order ) { if ( ! is_admin() || wp_doing_ajax() ) { $cookie_name = \str_replace( '%ORDER_ID%', $order_id, 'adscale_order_%ORDER_ID%' ); $cookie_value = Helper::get_order_value( $order_id ); if ( in_array( $order->get_status(), [ 'on-hold', 'processing', 'completed' ], true ) ) { Helper::set_cookie( $cookie_name, $cookie_value ); // for endpoint adscale/LastOrder Helper::set_cookie( 'adscale__last_order_id', $order_id ); } if ( in_array( $order->get_status(), [ 'failed', 'cancelled' ], true ) ) { Helper::set_cookie( $cookie_name, '', 1 ); // for endpoint adscale/LastOrder Helper::set_cookie( 'adscale__last_order_id', '', 1 ); } } } /** * Handler for hook 'woocommerce_after_order_object_save' * * @param \WC_Abstract_Order $order */ public static function new_order( $order ) { if ( ! is_admin() || wp_doing_ajax() ) { $order_id = $order->get_id(); $cookie_name = \str_replace( '%ORDER_ID%', $order_id, 'adscale_order_%ORDER_ID%' ); $cookie_value = Helper::get_order_value( $order_id ); if ( 'pending' === $order->get_status() ) { Helper::set_cookie( $cookie_name, $cookie_value ); } } } public static function maybe_enable_wc_legacy_api() { $wc_legacy_api_auto_enable = Helper::getConfigSetting( 'shop/wc_legacy_api_auto_enable', false ); if ( $wc_legacy_api_auto_enable ) { update_option( 'woocommerce_api_enabled', 'yes' ); } } /** * Add Adscale data to orders(Legacy API) * * @param $order_data * @param \WC_Order $order * * @return array */ public static function wc_legacy_api_order_filter( $order_data, $order ) { $order_data['adscale_cart_id'] = $order->get_meta( '_adscale_cart_id', true ); return $order_data; } /** * Add Adscale data to orders(WP Rest API) * * @param $response * @param \WC_Order $object * @param $request * * @return array */ public static function wc_api_order_filter( $response, $object, $request ) { $response->data['adscale_cart_id'] = $object->get_meta( '_adscale_cart_id', true ); return $response; } public static function wc_changes_process_product_meta( $post_id, $post ) { if ( empty( $post->post_type ) || ! in_array( $post->post_type, [ 'product', 'product_variation' ], true ) ) { return; } $product = wc_get_product( $post_id ); self::process_changes_product( $product ); } public static function wc_changes_new_and_update_product( $product_id ) { $product = wc_get_product( $product_id ); self::process_changes_product( $product ); } public static function wc_changes_trash( $post_id ) { self::wc_changes_trash_untrash( $post_id ); } public static function wc_changes_untrash( $post_id ) { self::wc_changes_trash_untrash( $post_id ); } protected static function wc_changes_trash_untrash( $post_id ) { $post = get_post( $post_id ); if ( empty( $post->post_type ) ) { return; } if ( 'product' === $post->post_type ) { $product = wc_get_product( $post_id ); self::process_changes_product( $product ); } } public static function wc_changes_product_no_stock( $product ) { self::process_changes_product( $product ); } protected static function process_changes_product( $product ) { if ( ! $product instanceof \WC_Product ) { return; } if ( $product instanceof \WC_Product_Variation ) { $changes_product_id = $product->get_parent_id(); } else { $changes_product_id = $product->get_id(); } if ( $changes_product_id ) { if ( ! self::adscaleChangesCheckExisting( self::ADSCALE_CHANGES_TYPE_PRODUCT, $changes_product_id ) ) { $success = AdscaleEntityChanges::add( self::ADSCALE_CHANGES_TYPE_PRODUCT, $changes_product_id ); } } else { Logger::log( '[object_id: EMPTY]', self::ADSCALE_CHANGES_TYPE_PRODUCT . '>', 'ChangesHooks' ); } } public static function wc_checkout_page_front(){ $value=Helper::get_opt_in_checked()=='on'?1:0; echo '
'; woocommerce_form_field( 'adscale__optin', array( 'type' => 'checkbox', 'required' => false, 'class' => array('input-checkbox'), 'label' => Helper::getOptInMessage(), 'checked' => $value, ), $value ); echo '
'; } public static function wc_changes_update_order( $order_id ) { $order = wc_get_order( $order_id ); self::process_changes_order( $order ); } protected static function process_changes_order( $order ) { if ( ! $order instanceof \WC_Order ) { return; } $changes_order_id = $order->get_id(); if ( $changes_order_id ) { if ( ! self::adscaleChangesCheckExisting( self::ADSCALE_CHANGES_TYPE_ORDER, $changes_order_id ) ) { $success = AdscaleEntityChanges::add( self::ADSCALE_CHANGES_TYPE_ORDER, $changes_order_id ); } } else { Logger::log( '[object_id: EMPTY]', self::ADSCALE_CHANGES_TYPE_ORDER . '>', 'ChangesHooks' ); } } public static function wc_changes_category( $term_id ) { self::process_changes_category( $term_id ); } protected static function process_changes_category( $category_id ) { $changes_category_id = (int) $category_id; if ( $changes_category_id ) { if ( ! self::adscaleChangesCheckExisting( self::ADSCALE_CHANGES_TYPE_CATEGORY, $changes_category_id ) ) { $success = AdscaleEntityChanges::add( self::ADSCALE_CHANGES_TYPE_CATEGORY, $changes_category_id ); } } else { Logger::log( '[object_id: EMPTY]', self::ADSCALE_CHANGES_TYPE_CATEGORY . '>', 'ChangesHooks' ); } } protected static function adscaleChangesCheckExisting( $object_type, $object_id ) { $cache_key = "adscale_changes_{$object_type}_{$object_id}"; $exists_cached = isset( self::$adscale_changes_cache[ $cache_key ] ) ? self::$adscale_changes_cache[ $cache_key ] : false; if ( true === $exists_cached ) { return true; } $count = AdscaleEntityChanges::countByTypeAndObjectId( $object_type, $object_id ); $exists = is_numeric( $count ) && $count > 0; self::$adscale_changes_cache[ $cache_key ] = $exists; return $exists; } }