function slm_handle_estore_email_body_filter($body, $payment_data, $cart_items)
{
    global $slm_debug_logger, $wpdb;
    $slm_debug_logger->log_debug("WP eStore integration - checking if a license key needs to be created for this transaction.");
    $products_table_name = $wpdb->prefix . "wp_eStore_tbl";
    $slm_data = "";
    foreach ($cart_items as $current_cart_item) {
        $prod_id = $current_cart_item['item_number'];
        $retrieved_product = $wpdb->get_row("SELECT * FROM {$products_table_name} WHERE id = '{$prod_id}'", OBJECT);
        $package_product = eStore_is_package_product($retrieved_product);
        if ($package_product) {
            $slm_debug_logger->log_debug('Checking license key generation for package/bundle product.');
            $product_ids = explode(',', $retrieved_product->product_download_url);
            foreach ($product_ids as $id) {
                $id = trim($id);
                $retrieved_product_for_specific_id = $wpdb->get_row("SELECT * FROM {$products_table_name} WHERE id = '{$id}'", OBJECT);
                $slm_data .= slm_estore_check_and_generate_key($retrieved_product_for_specific_id, $payment_data, $cart_items);
            }
        } else {
            $slm_debug_logger->log_debug('Checking license key generation for single item product.');
            $slm_data .= slm_estore_check_and_generate_key($retrieved_product, $payment_data, $cart_items);
        }
    }
    $body = str_replace("{slm_data}", $slm_data, $body);
    return $body;
}
function eStore_post_sale_retrieve_serial_key_and_update($retrieved_product, $cart_item_name = '', $qty = 1)
{
    global $wpdb;
    $product_code_data = "";
    $products_table_name = WP_ESTORE_PRODUCTS_TABLE_NAME;
    $package_product = eStore_is_package_product($retrieved_product);
    if ($package_product) {
        eStore_payment_debug('This is a packaged product. Checking if key needs to be issued for the products included in this package.', true);
        $product_ids = explode(',', $retrieved_product->product_download_url);
        if (sizeof($product_ids) > 1) {
            foreach ($product_ids as $id) {
                if (empty($id)) {
                    continue;
                }
                $retrieved_product = $wpdb->get_row("SELECT * FROM {$products_table_name} WHERE id = '{$id}'", OBJECT);
                $product_code_data .= eStore_get_serial_key_for_product($retrieved_product, $retrieved_product->name, $qty);
            }
        } else {
            eStore_payment_debug('Error configuring the bundled product: it needs 2 or more product IDs to create a package product', false);
        }
    } else {
        $product_code_data .= eStore_get_serial_key_for_product($retrieved_product, $cart_item_name, $qty);
    }
    return $product_code_data;
}
function eStore_check_and_generate_license_key($retrieved_product, $payment_data = '')
{
    global $wpdb, $products_table_name;
    $product_license_data = "";
    $package_product = eStore_is_package_product($retrieved_product);
    if ($package_product) {
        eStore_payment_debug('Checking license key generation for package product.', true);
        $product_ids = explode(',', $retrieved_product->product_download_url);
        foreach ($product_ids as $id) {
            $id = trim($id);
            $retrieved_product_for_specific_id = $wpdb->get_row("SELECT * FROM {$products_table_name} WHERE id = '{$id}'", OBJECT);
            $product_license_data .= eStore_check_licese_key_flag_and_generate_key($retrieved_product_for_specific_id, $payment_data);
        }
    } else {
        eStore_payment_debug('Checking license key generation for single product.', true);
        $product_license_data .= eStore_check_licese_key_flag_and_generate_key($retrieved_product, $payment_data);
    }
    return $product_license_data;
}