| | |
| | | <?php |
| | | namespace JVBase\integrations; |
| | | |
| | | use JVBase\meta\MetaManager; |
| | | use JVBase\meta\Meta; |
| | | use Exception; |
| | | use WP_Error; |
| | | use WP_REST_Request; |
| | |
| | | */ |
| | | protected function registerAdditionalHooks(): void |
| | | { |
| | | $this->ensureInitialized(); |
| | | if (!$this->isSetUp()) { |
| | | return; |
| | | } |
| | | // User login tracking for security |
| | | add_action('wp_login', [$this, 'trackUserLogin'], 10, 2); |
| | | |
| | |
| | | <button type="button" class="toggle-cart row" title="Your Cart" data-action="toggle-cart" aria-label="Open Cart" aria-controls="checkout" aria-expanded="false" hidden> |
| | | <?= jvbIcon('shopping-cart')?><span class="abs"></span><span class="abs count"></span> |
| | | </button> |
| | | <aside id="cart"> |
| | | <aside id="cart" class="main"> |
| | | <form id="checkout" data-form-id="checkout" data-save="checkout"> |
| | | <?php |
| | | $tabs = [ |
| | |
| | | */ |
| | | public function enqueueScripts(): void |
| | | { |
| | | $this->ensureInitialized(); |
| | | if (!$this->isSetUp()) { |
| | | return; |
| | | } |
| | | // Helcim JS SDK |
| | | $sdk_url = $this->is_test_mode |
| | | ? 'https://helcim-js-sandbox.helcim.com/v1/helcim.js' |
| | |
| | | $post = get_post($post_id); |
| | | if (!$post) continue; |
| | | |
| | | $meta = new MetaManager($post_id, 'post'); |
| | | $meta = Meta::forPost($post_id); |
| | | $field_map = $this->field_mappings[$post->post_type] ?? []; |
| | | |
| | | // Prepare product data for Helcim |
| | |
| | | 'description' => $post->post_content, |
| | | 'productCode' => get_post_meta($post_id, BASE . '_helcim_product_code', true) ?: 'WP-' . $post_id, |
| | | 'type' => $content_type, |
| | | 'price' => floatval($meta->getValue('price')) * 100, // Convert to cents |
| | | 'taxable' => (bool)$meta->getValue('is_taxable'), |
| | | 'price' => floatval($meta->get('price')) * 100, // Convert to cents |
| | | 'taxable' => (bool)$meta->get('is_taxable'), |
| | | ]; |
| | | |
| | | // Handle variations |
| | | $variations = $meta->getValue('product_variations'); |
| | | $variations = $meta->get('product_variations'); |
| | | if (!empty($variations)) { |
| | | $product_data['variations'] = $this->prepareVariations($variations); |
| | | } |
| | |
| | | |
| | | if ($post_id) { |
| | | // Update meta data |
| | | $meta = new MetaManager($post_id, 'post'); |
| | | $meta = Meta::forPost($post_id); |
| | | $meta->setAll([ |
| | | 'price' => $product['price'] / 100, // Convert from cents |
| | | '_helcim_product_id' => $product['productId'], |
| | |
| | | // Send notification |
| | | $user = get_user_by('ID', $user_id); |
| | | if ($user) { |
| | | wp_mail( |
| | | JVB()->email()->sendEmail( |
| | | $user->user_email, |
| | | 'Security: Password Reset Required', |
| | | 'For your security, please reset your password to continue accessing your account and saved payment methods.', |
| | | ['Content-Type: text/html; charset=UTF-8'] |
| | | ); |
| | | } |
| | | } |
| | |
| | | private function sendWelcomeEmail(\WP_User $user, string $reset_key): void |
| | | { |
| | | $site_name = get_bloginfo('name'); |
| | | $reset_url = get_home_url(null, "wp-login.php?action=rp&key=$reset_key&login=" . rawurlencode($user->user_login), 'login'); |
| | | $reset_url = get_home_url(null, "login?action=rp&key=$reset_key&login=" . rawurlencode($user->user_login), 'login'); |
| | | |
| | | $message = sprintf( |
| | | "Welcome to %s!\n\n" . |
| | | "Your account has been created. Please click the link below to set your password:\n\n" . |
| | | "Your account has been created. Please click the button below to set your password:\n\n" . |
| | | "%s\n\n" . |
| | | "Or, copy and paste the link below:\n\n". |
| | | "%s\n\n" . |
| | | "Once you've set your password, you can:\n" . |
| | | "- View your order history\n" . |
| | | "- Save your favorite items\n" . |
| | | "- Speed up checkout with saved payment methods\n\n" . |
| | | "Thanks,\n%s", |
| | | "If you didn't create this account, please ignore this email.\n\n" . |
| | | "Thanks,\n", |
| | | $site_name, |
| | | $reset_url, |
| | | $site_name |
| | | JVB()->email()->button('Reset Password', $reset_url), |
| | | JVB()->email()->link($reset_url), |
| | | ); |
| | | |
| | | jvbMail( |
| | | JVB()->email()->sendEmail( |
| | | $user->user_email, |
| | | sprintf('[%s] Welcome! Set Your Password', $site_name), |
| | | $message |
| | |
| | | $post_id = intval($item['id'] ?? 0); |
| | | if (!$post_id) continue; |
| | | |
| | | $meta = new MetaManager($post_id, 'post'); |
| | | $price = floatval($meta->getValue('price')); |
| | | $meta = Meta::forPost($post_id); |
| | | $price = floatval($meta->get('price')); |
| | | $quantity = intval($item['quantity'] ?? 1); |
| | | |
| | | $total += ($price * $quantity * 100); // Convert to cents |
| | |
| | | if (!$post_id) continue; |
| | | |
| | | $post = get_post($post_id); |
| | | $meta = new MetaManager($post_id, 'post'); |
| | | $meta = Meta::forPost($post_id); |
| | | |
| | | $line_items[] = [ |
| | | 'description' => $post->post_title, |
| | | 'quantity' => intval($item['quantity'] ?? 1), |
| | | 'price' => floatval($meta->getValue('price')) * 100, |
| | | 'price' => floatval($meta->get('price')) * 100, |
| | | 'productCode' => get_post_meta($post_id, BASE . '_helcim_product_code', true) ?: 'WP-' . $post_id |
| | | ]; |
| | | } |
| | |
| | | update_user_meta($user->ID, BASE . '_helcim_customer_updated', current_time('mysql')); |
| | | |
| | | // Clear cached customer data |
| | | $this->cache->delete('helcim_customer_' . $user->ID); |
| | | $this->cache->forget('helcim_customer_' . $user->ID); |
| | | } |
| | | |
| | | return true; |