Skip to content

Sync 14.12.2025#2

Merged
Huncsuga merged 51 commits into1.xfrom
sync-14.12.2025
Dec 14, 2025
Merged

Sync 14.12.2025#2
Huncsuga merged 51 commits into1.xfrom
sync-14.12.2025

Conversation

@Huncsuga
Copy link
Owner

Please describe your Pull Request as best as possible, explaining what it provides and why it is of value, referencing any related Issues.

Try to include the following in your Pull Request, where applicable...

  • Documentation updates
  • Automated tests

alecritson and others added 30 commits October 14, 2025 10:49
This PR looks to add extending functionality to the Dashboard page so
that developers can add to the existing widgets on the Dashboard, or,
completely override them and build a custom dashboard to their needs.
…hp#2317)

This PR adds the missing getNavigationLabel() method to EditShippingZone
to maintain consistency with other pages in the module
(ManageShippingRates and ManageShippingExclusions). Fixes issue lunarphp#2316

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
I added the Romanian translations to the package.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
I added Hungarian translations to the package.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
I added Brazilian Portuguese translations to the package.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Add missing translation files related to *taxes*.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added Tax resource translations for German, Spanish, French, Dutch,
Polish, and Vietnamese (singular and plural labels).
* Added German translations for the Tax Rate resource, including table
columns (Name, Tax Zone, Priority) and form fields (Name, Priority, Tax
Zone).
* Improves multilingual support across the admin interface for
tax-related sections.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…unarphp#2282)

Added these translations while I investigated this issue: lunarphp#2263

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added “Values” section translations across multiple languages (de, en,
es, fr, nl, pl, vi).
* Introduced form label for the “Name” field in the Values section for
all supported languages.
* Enhanced German locale with a section title (“Werte”) and table column
labels (“Name”, “Position”) for the Values list.
* Improves multilingual consistency and clarity in the admin interface.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR adds Turkish translation files to the project.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Comprehensive Turkish (tr) locale added across the admin UI
(resources, forms, tables, pages, widgets, relation managers) covering
catalog, sales, settings and staff areas.
  * Turkish translations added for core exception messages.
* Turkish locale support added for table‑rate shipping (navigation,
shipping methods, zones, exclusion lists, relation managers).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…unarphp#2330)

Add support for when postgres casts booleans to php bool, thereby
casting `false` to an empty string for the match case

Please describe your Pull Request as best as possible, explaining what
it provides and why it is of value, referencing any related Issues.

Try to include the following in your Pull Request, where applicable...

- Documentation updates
- Automated tests

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
This will fix issue lunarphp#2265 

I am not sure about the naming of the publish tag. 
I think lunar.pdf fits better as this will only target all pdfs
currently (and in the future) in lunar.

If accepted we need to edit the docs aswell. 


Docs: lunarphp/docs#3

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Removes docs from monorepo in favour of our new Mintlify docs stored at
https://github.com/lunarphp/docs
lunarphp#2278 Removed the `jsonb` changes from shipping tables but didn't
reapply them via the shipping addon. This PR mimics the core migration
but within the shipping addon.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- Chores
- Migrated shipping method data storage to a more efficient format on
PostgreSQL, improving query performance and scalability.
- Backward-compatible and reversible; no action required for
non-PostgreSQL setups.
- Ensures more consistent behavior and prepares the system for future
enhancements.
- Seamless upgrade path with automatic migration during update; no
user-facing changes expected.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Co-authored-by: Author <actions@github.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Permanently deleting a product now removes both direct and reverse
product relationships, ensuring no lingering links appear on related
products.
* Improves data integrity by fully clearing associated relationships
during force delete, preventing inconsistent or orphaned connections.
  * Soft-delete behavior is unchanged.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Alec Ritson <hello@itsalec.co.uk>
Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
If we were to use a different status than `published | draft | deleted`,
we get an exception in products table. This PR just adds `default`
status color handling.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Product status badges now display a consistent default color when an
unrecognized status appears, improving readability and visual
consistency in the products table.
* Previously, only certain statuses had defined colors, which could lead
to unexpected or missing styling for others.
  * No other user-facing behavior changes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Jakub Theimer <5587309+theimerj@users.noreply.github.com>
Co-authored-by: Alec Ritson <hello@itsalec.co.uk>
Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
components->line requires two arguments in Laravel 12, causing an
ArgumentCountError with a single string. Using components->info
preserves formatting and restores compatibility. The $this->line helper
has a different API and is not interchangeable with components->line.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
This pull requests intends to solve issue lunarphp#2324.

Co-authored-by: Jérémy ARGOUD <jargoud@webqam.fr>
This PR improves support for custom models that implement the
Purchasable interface but are not standard ProductVariants.

Currently, using a custom purchasable can lead to two exceptions:
1. DiscountManager error: It assumes the purchasable always has a
->product->collections relationship, causing a null pointer exception if
it doesn't.
2. Admin Panel error: The order details view assumes the purchasable has
a getOptions() method, which is specific to ProductVariant.

This PR resolves these issues with minimal impact:
1. The DiscountManager call chain is made null-safe to gracefully handle
purchasables without product collections.
2. The Purchasable interface now includes getOptions().

This makes the Purchasable interface more robust and truly extensible as
intended. Any feedback is welcome.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
This PR fixes 2 issues when rendering the 'Activity Log' component on
the order screen in the admin.

The first issue is visible when using Filament Notifications. The
z-index of the comment form in the activity log is set to 20 which
brings it in front of the Filament notifications sidebar when it is
opened.

The second issue is when using dark mode. The date heading in the
activity log is using the 'text-gray-300' Tailwind class, however this
class isn't generated so the 'date' heading in the activity log is black
and cannot be read.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Closes
lunarphp#2284 (comment)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Improved customer selection when attaching to discounts: supports
multi-word, space-separated searching that matches first name, last
name, and company name to return more accurate results.
* Faster narrowing of results when entering multiple terms, making it
easier to find customers by partial names or company matches.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Co-authored-by: Author <actions@github.com>
…egardless of the coupon code on the cart (lunarphp#2300)

Allow the discounts to be applied if no condition coupon exists
regardless of cart coupon. This way discounts that doesn't have a coupon
requirement can be added and not be removed because of another coupon
discount that is applied.

Current behaviour:
if a discount that has a coupon requirement is applied. and other
discounts that doesn't have a coupon requirements are applied as well.
the coupon code discount causes the other discounts not to apply to the
cart at all because of a wrong $validCoupon comparison logic.

Expected behaviour:
discounts should be applied if there is no coupon code requirement
regardless of the coupon code set on the cart. this way coupon discounts
doesn't simply override all other discounts.

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
The Meilisearch package was originally created to add functionality
missing from Laravel Scout, but Scout now includes this functionality
(`php artisan scout:sync-index-settings`) so it's redundant.

This PR removes the package from the monorepo and the actual repo shall
be marked as archived in GitHub.
glennjacobs and others added 21 commits November 12, 2025 15:36
We now have dedicated docs using Mintlify, so we don't want to be
maintaining lots of README files, etc.

Instead, we should highlight that the individual package repo's are
read-only subtree splits similar to how Filament do it.

E.g.
<img width="594" height="356" alt="image"
src="https://github.com/user-attachments/assets/aa107958-0a2a-45b6-b75c-2f084499d310"
/>
In the panel, AtrributeGroup and Attibute position is not used to when
configuring product type attributes
This PR fixes a 500 error from being displayed when a PDF is generated
for an order with no shipping address.
PR to revert lunarphp#2249 as this is seems to have broken breadcrumbs on
collections. Suggest we have a look at performance in more depth as the
collection tree will also stall if you have over 1k collections in a
group, suggesting there is a bigger issue at player with that.

Closes lunarphp#2360
Currently the `enabled` column on a Shipping Rate doesn't actually get
taken into account during resolution. This PR looks to add the `enabled`
check to the `ShippingRateResolver` whilst also providing an action in
the panel to toggle this value.

---------

Co-authored-by: Author <actions@github.com>
…ssionManager (lunarphp#2356)

Replaced a typo in the `allowsMultipleOrdersPerCart` function in
`packages/core/src/Managers/CartSessionManager.php`

the function was trying to access the the `cart_session` config with a
wrong key: `allowsMultipleOrdersPerCart`. I replaced it with the key
that was actually in the config: `allow_multiple_orders_per_cart`
This PR prevents reward lines from producing a negative discounted
subtotal. Currently, if a BuyXGetY discount grants multiple free items
but the cart contains fewer qualifying products, the discount
calculation can push the subtotal below zero.

By wrapping the final discounted amount in max(0, ...), we ensure the
subtotal never becomes negative. If the discount exceeds the cart line
value, the subtotal is simply set to 0.00 until the customer adds enough
qualifying items.

---------

Co-authored-by: Author <actions@github.com>
This adds meta to Product Options & Product Option Values to support
customisation, e.g. assigning hex colours.

It also updates the model annotations and corrects the `name` cast on
ProductOptionValue (this might be considered a breaking change...)

## TODO

- [ ] Add docs PR, including upgrade guide entry
…t deletion on user logout (lunarphp#2349)

Added 'delete_on_logout' config option within cart_session.php config
file to allow the prevention of the cart deletion when a user logs out

---------

Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
PR to allow product association types to be customised.

- Deprecates the use of constants like `UP_SELL` on the model
- Introduces a new enum to handle association types
- Allow the enum to be replaced in config by developers.

Closes lunarphp#2337

---------

Co-authored-by: Author <actions@github.com>
Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
…hp#2353)

When extending a model multiple times (e.g., CustomProduct extends
Product extends BaseModel), the table prefix was being applied multiple
times, resulting in table names like "lunar_lunar_products" instead of
"lunar_products".

**Problem:**
The `HasModelExtending::getTable()` method instantiated parent classes
recursively with `(new $parentClass)->table`, causing the BaseModel
constructor to apply the prefix at each inheritance level.

**Solution:**
- Added `resolveRootModelClass()` to find the root Lunar model in the
inheritance chain
- Added `resolveBaseTableName()` to get the base table name using
reflection without triggering the constructor
- Modified `getTable()` to resolve the root model and apply the prefix
only once

**Test Coverage:**
Added test case for multi-level inheritance to ensure prefix is not
duplicated across multiple levels of model extension.
This PR builds on the work done in
lunarphp#2250

It:
1. Adds a brand check 
2. Seperates collections into its own relation manager to allow it to
continue to use collection_discount table

It's breaking, but for v2 we should consolidate everything into the
discountable table - I missed these when I did this initial piece of
work. It would make the UI much more streamlined and from a data point
of view reduce the redundancy of the tables.

---------

Co-authored-by: fredmarmillod <fmarmillod@gmail.com>
Co-authored-by: Author <actions@github.com>
Co-authored-by: Frédéric Marmillod <9134609+fredmarmillod@users.noreply.github.com>
Co-authored-by: Glenn Jacobs <glenn@neondigital.co.uk>
Currently the activity log feed overlaps the submit button, meaning in
some cases users cannot submit comments. This PR prevents pointer events
on that overlap, but not on the items themselves, so whatever happens
you can click the submit button.

---------

Co-authored-by: Author <actions@github.com>
@Huncsuga Huncsuga merged commit 25f6c9d into 1.x Dec 14, 2025
46 checks passed
@Huncsuga Huncsuga deleted the sync-14.12.2025 branch December 14, 2025 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.