Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 24 additions & 2 deletions src/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
* @property \fostercommerce\klaviyoconnectplus\services\Api $api
* @property \fostercommerce\klaviyoconnectplus\services\Track $track
* @property \fostercommerce\klaviyoconnectplus\services\Map $map
* @property \fostercommerce\klaviyoconnectplus\services\Cart $cart
*/
class Plugin extends \craft\base\Plugin
{
Expand All @@ -41,7 +40,6 @@ public function init(): void
'api' => \fostercommerce\klaviyoconnectplus\services\Api::class,
'track' => \fostercommerce\klaviyoconnectplus\services\Track::class,
'map' => \fostercommerce\klaviyoconnectplus\services\Map::class,
'cart' => \fostercommerce\klaviyoconnectplus\services\Cart::class,
]);

/** @var Settings $settings */
Expand All @@ -64,6 +62,30 @@ static function (RegisterUrlRulesEvent $event): void {
}
);

Event::on(
\craft\web\Application::class,
\craft\web\Application::EVENT_INIT,
static function (): void {
$request = Craft::$app->getRequest();

if (! $request->getIsConsoleRequest()) {
$path = $request->getPathInfo();

// Redirect old plugin handle URLs to new one
if (str_starts_with($path, 'actions/klaviyoconnectplus/cart/restore') ||
str_starts_with($path, 'actions/klaviyoconnect/cart/restore')) {
$number = $request->getParam('number');
$newUrl = \craft\helpers\UrlHelper::actionUrl('klaviyo-connect-plus/cart/restore', [
'number' => $number,
]);

Craft::$app->getResponse()->redirect($newUrl)->send();
Craft::$app->end();
}
}
}
);

Event::on(Fields::class, Fields::EVENT_REGISTER_FIELD_TYPES, static function (RegisterComponentTypesEvent $event): void {
$event->types[] = \fostercommerce\klaviyoconnectplus\fields\ListField::class;
$event->types[] = \fostercommerce\klaviyoconnectplus\fields\ListsField::class;
Expand Down
65 changes: 52 additions & 13 deletions src/controllers/CartController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace fostercommerce\klaviyoconnectplus\controllers;

use Craft;
use craft\commerce\Plugin as Commerce;
use craft\web\Controller;
use fostercommerce\klaviyoconnectplus\models\Settings;
use fostercommerce\klaviyoconnectplus\Plugin;
Expand All @@ -15,20 +16,58 @@ class CartController extends Controller

public function actionRestore(): Response
{
if (Craft::$app->plugins->isPluginEnabled('commerce')) {
$number = Craft::$app->getRequest()->getParam('number');
Plugin::getInstance()->cart->restore($number);

/** @var Settings $settings */
$settings = Plugin::getInstance()->getSettings();
$cartUrl = $settings->cartUrl;
if ((string) $cartUrl === '') {
throw new HttpException(400, 'Cart URL is required. Settings -> Klaviyo Connect Plus -> Cart URL');
}

return $this->redirect($cartUrl);
if (! Craft::$app->plugins->isPluginEnabled('commerce')) {
throw new HttpException(400, 'Craft Commerce needs to be installed and enabled to restore carts.');
}

throw new HttpException(400, 'Craft Commerce needs to be installed and enabled to restore carts.');
$number = Craft::$app->getRequest()->getParam('number');

if (! $number) {
throw new HttpException(400, 'Cart number is required');
}

$commerce = Commerce::getInstance();
$order = $commerce->getOrders()->getOrderByNumber($number);

if (! $order) {
throw new HttpException(404, 'Cart not found');
}

if ($order->isCompleted) {
throw new HttpException(400, 'Cannot restore a completed order');
}

if (! $order->hasLineItems()) {
throw new HttpException(400, 'Cart is empty');
}

// Restore the cart using reflection (Commerce 5 workaround)
$cartsService = $commerce->getCarts();
$cartsService->forgetCart();

try {
$reflection = new \ReflectionClass($cartsService);
$cartProperty = $reflection->getProperty('_cart');
$cartProperty->setAccessible(true);
$cartProperty->setValue($cartsService, $order);

$session = Craft::$app->getSession();
$session->set('commerce_cart', $order->number);

$session->setNotice(Craft::t('klaviyo-connect-plus', 'Your cart has been restored.'));
} catch (\Exception $exception) {
Craft::error('Failed to restore cart: ' . $exception->getMessage(), 'klaviyo-connect-plus');
throw new HttpException(500, 'Failed to restore cart');
}

/** @var Settings $settings */
$settings = Plugin::getInstance()->getSettings();
$cartUrl = $settings->cartUrl;

if ((string) $cartUrl === '') {
throw new HttpException(400, 'Cart URL is required. Configure it in Settings -> Klaviyo Connect Plus -> Cart URL');
}

return $this->redirect($cartUrl);
}
}
30 changes: 0 additions & 30 deletions src/services/Cart.php

This file was deleted.