diff --git a/config/cart.php b/config/cart.php index 635229f..06ce7b4 100644 --- a/config/cart.php +++ b/config/cart.php @@ -26,7 +26,5 @@ 'destroyOnLogout' => false, - 'conditions' => [], - 'abandonedCart' => false, ]; diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 6bf8e53..bf80cf5 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -200,6 +200,11 @@ parameters: count: 1 path: src/Classes/CartManager.php + - + message: "#^Access to an undefined property Igniter\\\\Cart\\\\Models\\\\Order\\:\\:\\$location_id\\.$#" + count: 1 + path: src/Classes/CartManager.php + - message: "#^Call to an undefined static method Illuminate\\\\Support\\\\Facades\\\\Event\\:\\:fire\\(\\)\\.$#" count: 1 diff --git a/pint.json b/pint.json index a0c7788..da1ce0a 100644 --- a/pint.json +++ b/pint.json @@ -23,6 +23,11 @@ "try" ] }, - "single_blank_line_at_eof": false + "single_blank_line_at_eof": false, + "single_space_around_construct": false, + "function_declaration": { + "closure_function_spacing": "none", + "closure_fn_spacing": "none" + } } } diff --git a/resources/lang/en/default.php b/resources/lang/en/default.php index 3ee1375..37596b6 100644 --- a/resources/lang/en/default.php +++ b/resources/lang/en/default.php @@ -74,7 +74,7 @@ 'button_apply_tip' => 'Apply Tip', 'button_view_cart' => 'Back to My Order', - 'column_condition_name' => 'Name', + 'column_condition_name' => 'Unique code', 'column_condition_priority' => 'Priority', 'column_condition_title' => 'Label', 'column_tip_amount' => 'Amount', @@ -192,6 +192,7 @@ 'text_no_payment' => 'No payment method selected', 'text_comment' => 'Your comment', 'text_no_comment' => 'You did not leave a comment', + 'text_checkout_terms' => 'checkout terms and conditions', 'label_customer_name' => 'Customer Name', 'label_first_name' => 'First Name', diff --git a/resources/models/cartsettings.php b/resources/models/cartsettings.php index 5be233a..e582f54 100644 --- a/resources/models/cartsettings.php +++ b/resources/models/cartsettings.php @@ -46,6 +46,10 @@ 'label' => 'lang:igniter.cart::default.column_condition_priority', 'type' => 'hidden', ], + 'label' => [ + 'label' => 'lang:igniter.cart::default.column_condition_title', + 'type' => 'text', + ], 'name' => [ 'label' => 'lang:igniter.cart::default.column_condition_name', 'type' => 'text', @@ -53,10 +57,6 @@ 'readonly' => true, ], ], - 'label' => [ - 'label' => 'lang:igniter.cart::default.column_condition_title', - 'type' => 'text', - ], 'status' => [ 'label' => 'lang:admin::lang.label_status', 'type' => 'switch', diff --git a/resources/models/category.php b/resources/models/category.php index 6f90be8..10b9364 100644 --- a/resources/models/category.php +++ b/resources/models/category.php @@ -133,6 +133,10 @@ 'type' => 'permalink', 'comment' => 'lang:igniter::admin.help_permalink', 'span' => 'right', + 'preset' => [ + 'field' => 'name', + 'type' => 'slug', + ], ], 'parent_id' => [ 'label' => 'lang:igniter.cart::default.categories.label_parent', diff --git a/src/Cart.php b/src/Cart.php index b25faa0..bc59409 100644 --- a/src/Cart.php +++ b/src/Cart.php @@ -92,7 +92,7 @@ public function currentInstance() public function add($buyable, $qty = 0, array $options = [], $comment = null) { if ($this->isMulti($buyable)) { - return array_map(function ($item) { + return array_map(function($item) { return $this->add($item); }, $buyable); } @@ -352,7 +352,7 @@ public function clearConditions() { $this->fireEvent('condition.clearing'); - $this->getConditions()->each(function (CartCondition $condition) { + $this->getConditions()->each(function(CartCondition $condition) { $condition->clearMetaData(); }); @@ -444,7 +444,7 @@ protected function loadItemsCondition($condition) { $content = $this->getContent(); - $content->each(function (CartItem $cartItem) use ($condition) { + $content->each(function(CartItem $cartItem) use ($condition) { $this->applyConditionToItem($condition, $cartItem); }); @@ -460,7 +460,7 @@ protected function removeItemCondition($condition) { $content = $this->getContent(); - $content->each(function (CartItem $cartItem) use ($condition) { + $content->each(function(CartItem $cartItem) use ($condition) { $cartItem->conditions->forget($condition->name); }); @@ -474,7 +474,7 @@ protected function clearItemConditions() { $content = $this->getContent(); - $content->each(function (CartItem $cartItem) { + $content->each(function(CartItem $cartItem) { $cartItem->clearConditions(); }); @@ -659,6 +659,23 @@ protected function createModel() // Session // + public function keepSession(Closure $callback) + { + if (config('igniter-cart.destroyOnLogout')) { + return $callback(); + } + + $cartContent = $this->getContent(); + $cartConditions = $this->getConditions(); + + $result = $callback(); + + $this->putSession('content', $cartContent); + $this->putSession('conditions', $cartConditions); + + return $result; + } + protected function getSession($key, $default = null) { return $this->session->get(sprintf('cart.%s.%s', $this->instance, $key), $default); diff --git a/src/Classes/CartManager.php b/src/Classes/CartManager.php index e7eea7c..c4e7078 100644 --- a/src/Classes/CartManager.php +++ b/src/Classes/CartManager.php @@ -220,7 +220,7 @@ protected function prepareCartMenuItemOptions(Collection $menuOptions, array $se $selected = collect($selected); $menuOptions = $menuOptions->keyBy('menu_option_id')->sortBy('priority'); - return $menuOptions->map(function (MenuItemOption $menuOption) use ($selected) { + return $menuOptions->map(function(MenuItemOption $menuOption) use ($selected) { $selectedOption = $selected->get($menuOption->getKey()); $selectedValues = array_filter((array)array_get($selectedOption, 'option_values', [])); @@ -248,7 +248,7 @@ protected function prepareCartItemOptionValues(Collection $menuOptionValues, arr $menuOptionValues = $menuOptionValues->keyBy('menu_option_value_id')->sortBy('priority'); return $menuOptionValues - ->map(function (MenuItemOptionValue $optionValue) use ($selectedValues) { + ->map(function(MenuItemOptionValue $optionValue) use ($selectedValues) { $selectedIds = array_column($selectedValues, 'id') ?: $selectedValues; if (!in_array($optionValue->menu_option_value_id, $selectedIds) && !(array_get($selectedIds, $optionValue->menu_option_value_id) === true @@ -280,14 +280,14 @@ public function validateContents() throw new ApplicationException(lang('igniter.cart::default.checkout.alert_no_menu_to_order')); } - $this->cart->content()->each(function (CartItem $cartItem) { + $this->cart->content()->each(function(CartItem $cartItem) { $menuItem = $cartItem->model; $this->validateCartMenuItem($menuItem, $cartItem->qty); $menuOptions = $menuItem->menu_options->keyBy('menu_option_id'); - $cartItem->options->each(function ($cartItemOption) use ($menuOptions) { + $cartItem->options->each(function($cartItemOption) use ($menuOptions) { throw_unless($menuItemOption = $menuOptions->get($cartItemOption->id), new ApplicationException( lang('igniter.cart::default.alert_option_not_found') )); @@ -343,7 +343,7 @@ public function validateMenuItem(Menu $menuItem) sprintf( lang('igniter.cart::default.alert_menu_not_within_mealtimes'), $menuItem->menu_name, - $menuItem->mealtimes->map(function ($mealtime) { + $menuItem->mealtimes->map(function($mealtime) { return sprintf( lang('igniter.cart::default.alert_menu_not_within_mealtimes_option'), $mealtime->mealtime_name, @@ -413,7 +413,7 @@ public function validateMenuItemOption(MenuItemOption $menuOption, $selectedValu } if ($menuOption->display_type == 'quantity') { - $countSelected = array_reduce($selectedValues, function ($qty, $selectedValue) { + $countSelected = array_reduce($selectedValues, function($qty, $selectedValue) { return $qty + $selectedValue['qty']; }); } else { @@ -462,10 +462,13 @@ public function deliveryChargeIsUnavailable() // Reorder // - public function addOrderMenus(Order $order) + public function restoreWithOrderMenus(Order $order) { $notes = []; + $currentInstance = $this->cart->currentInstance(); + $this->cart->instance('location-'.$order->location_id); + foreach ($order->getOrderMenus() as $orderMenu) { try { throw_unless($orderMenu->menu, new ApplicationException( @@ -490,6 +493,8 @@ public function addOrderMenus(Order $order) } } + $this->cart->instance($currentInstance); + return $notes; } @@ -504,7 +509,7 @@ protected function prepareCartItemOptionsFromOrderMenu($menuModel, $optionValues try { $this->validateMenuItemOption($menuOption, $cartOption['values']->toArray()); - $cartOption['values'] = $cartOption['values']->filter(function ($cartOptionValue) use ($menuOption) { + $cartOption['values'] = $cartOption['values']->filter(function($cartOptionValue) use ($menuOption) { return $menuOption->menu_option_values->keyBy('menu_option_value_id')->has($cartOptionValue->id); })->toArray(); diff --git a/src/Extension.php b/src/Extension.php index 6f4cb59..fdb4aaf 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -87,7 +87,7 @@ public function boot() LocationModel::implement(LocationAction::class); - Customers::extendFormFields(function (Form $form) { + Customers::extendFormFields(function(Form $form) { if (!$form->model instanceof Customer) { return; } @@ -336,7 +336,7 @@ public function registerLocationSettings() protected function bindCartEvents() { - Event::listen('igniter.user.login', function () { + Event::listen('igniter.user.login', function() { if (Models\CartSettings::get('abandoned_cart') && Facades\Cart::content()->isEmpty() ) { @@ -344,7 +344,7 @@ protected function bindCartEvents() } }); - Event::listen('igniter.user.logout', function () { + Event::listen('igniter.user.logout', function() { if (Models\CartSettings::get('destroy_on_logout')) { Facades\Cart::destroy(); } @@ -353,7 +353,7 @@ protected function bindCartEvents() protected function bindCheckoutEvents() { - Event::listen('payregister.paypalexpress.extendFields', function ($payment, &$fields, $order, $data) { + Event::listen('payregister.paypalexpress.extendFields', function($payment, &$fields, $order, $data) { if ($tax = $order->getOrderTotals()->firstWhere('code', 'tax')) { $fields['purchase_units'][0]['amount']['breakdown']['tax_total'] = [ 'currency_code' => $fields['purchase_units'][0]['amount']['currency_code'], @@ -362,7 +362,7 @@ protected function bindCheckoutEvents() } }); - Event::listen('admin.order.paymentProcessed', function (Order $model) { + Event::listen('admin.order.paymentProcessed', function(Order $model) { Notifications\OrderCreatedNotification::make()->subject($model)->broadcast(); $model->mailSend('igniter.cart::mail.order', 'customer'); @@ -370,14 +370,14 @@ protected function bindCheckoutEvents() $model->mailSend('igniter.cart::mail.order_alert', 'admin'); }); - Event::listen('admin.order.beforePaymentProcessed', function (Order $model) { + Event::listen('admin.order.beforePaymentProcessed', function(Order $model) { $model->subtractStock(); }); } protected function bindOrderStatusEvent() { - Event::listen('admin.statusHistory.beforeAddStatus', function ($model, $object, $statusId, $previousStatus) { + Event::listen('admin.statusHistory.beforeAddStatus', function($model, $object, $statusId, $previousStatus) { if (!$object instanceof Order) { return; } @@ -385,7 +385,7 @@ protected function bindOrderStatusEvent() Event::fire('igniter.cart.beforeAddOrderStatus', [$model, $object, $statusId, $previousStatus], true); }); - Event::listen('admin.statusHistory.added', function ($model, $statusHistory) { + Event::listen('admin.statusHistory.added', function($model, $statusHistory) { if (!$model instanceof Order) { return; } @@ -393,7 +393,7 @@ protected function bindOrderStatusEvent() Event::fire('igniter.cart.orderStatusAdded', [$model, $statusHistory], true); }); - Event::listen('admin.assignable.assigned', function ($model) { + Event::listen('admin.assignable.assigned', function($model) { if (!$model instanceof Order) { return; } @@ -404,16 +404,16 @@ protected function bindOrderStatusEvent() protected function registerCart(): void { - $this->app->singleton('cart', function ($app) { + $this->app->singleton('cart', function($app) { $this->app['config']->set('igniter-cart.model', Models\Cart::class); $this->app['config']->set('igniter-cart.abandonedCart', Models\CartSettings::get('abandoned_cart')); $this->app['config']->set('igniter-cart.destroyOnLogout', Models\CartSettings::get('destroy_on_logout')); - $this->app['events']->fire('cart.beforeRegister', [$this]); + $this->app['events']->dispatch('cart.beforeRegister', [$this]); $instance = new Cart($app['session'], $app['events']); - $this->app['events']->fire('cart.afterRegister', [$instance, $this]); + $this->app['events']->dispatch('cart.afterRegister', [$instance, $this]); return $instance; }); @@ -421,7 +421,7 @@ protected function registerCart(): void protected function registerSystemSettings() { - Settings::registerCallback(function (Settings $manager) { + Settings::registerCallback(function(Settings $manager) { $manager->registerSettingItems('core', [ 'order' => [ 'label' => 'lang:igniter.cart::default.text_tab_order', diff --git a/src/Http/Middleware/CartMiddleware.php b/src/Http/Middleware/CartMiddleware.php index b326f46..b4749a7 100644 --- a/src/Http/Middleware/CartMiddleware.php +++ b/src/Http/Middleware/CartMiddleware.php @@ -19,7 +19,7 @@ public function handle($request, \Closure $next) public function terminate($request, $response) { - if (config('cart.abandonedCart')) { + if (config('igniter-cart.abandonedCart')) { $this->storeUserCart(); } } diff --git a/src/Models/CartSettings.php b/src/Models/CartSettings.php index 3f2bfa8..bc84dff 100644 --- a/src/Models/CartSettings.php +++ b/src/Models/CartSettings.php @@ -35,12 +35,12 @@ public function getConditionsAttribute($value) // // - public function tippingEnabled() + public static function tippingEnabled() { return (bool)self::get('enable_tipping'); } - public function tippingAmounts() + public static function tippingAmounts() { $result = [];