Skip to content
Open
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
6 changes: 5 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ jobs:
fail-fast: false
matrix:
php: [8.2, 8.3, 8.4]
laravel: [11.*, 12.*]
laravel: [11.*, 12.*, 13.*]
dependency-version: [prefer-stable]
testsuite: [core, admin, shipping, stripe, search]
extend-models: ["true", "false"]
include:
- laravel: 13.*
testbench: 11.*
- laravel: 12.*
testbench: 10.*
- laravel: 11.*
Expand All @@ -24,6 +26,8 @@ jobs:
laravel: 11.*
- php: 8.2
laravel: 12.*
- php: 8.2
laravel: 13.*
name: ${{ matrix.testsuite }} - PHP ${{ matrix.php }} - L${{ matrix.laravel }} ${{ matrix.dependency-version == 'prefer-lowest' && '↓' || '↑' }} ${{ matrix.extend-models == 'true' && 'E' || '' }}
steps:
- name: Checkout code
Expand Down
12 changes: 5 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
"awcodes/filament-badgeable-column": "^2.3.2",
"awcodes/shout": "^2.0.4",
"barryvdh/laravel-dompdf": "^3.0",
"cartalyst/converter": "^9.0|^10",
"doctrine/dbal": "^3.6|^4.0",
"dompdf/dompdf": "^3.1",
"ext-bcmath": "*",
"ext-exif": "*",
Expand All @@ -22,8 +20,8 @@
"filament/spatie-laravel-media-library-plugin": "^3.3.4",
"guzzlehttp/guzzle": "^7.3",
"http-interop/http-factory-guzzle": "^1.2",
"kalnoy/nestedset": "^v6.0.5",
"laravel/framework": "^11.0|^12.0",
"kalnoy/nestedset": "^6.0.5|^7.0.0",
"laravel/framework": "^11.0|^12.0|^13.0",
"laravel/scout": "^10.13.1",
"leandrocfe/filament-apex-charts": "^3.2.0",
"livewire/livewire": "^3.0",
Expand All @@ -46,9 +44,9 @@
"larastan/larastan": "^2.9|^3.0",
"laravel/pint": "1.17.0",
"mockery/mockery": "^1.6.9",
"orchestra/testbench": "^8.0|^9.0|^10.0",
"pestphp/pest": "^2.0|^3.0",
"pestphp/pest-plugin-laravel": "^2.0|^3.0",
"orchestra/testbench": "^8.0|^9.0|^10.0|^11.0",
"pestphp/pest": "^2.0|^3.0|^4.0",
"pestphp/pest-plugin-laravel": "^2.0|^3.0|^4.0",
"symplify/monorepo-builder": "^10.0"
},
"autoload": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Lunar\Admin\Filament\Resources\ProductResource\Pages;

use Cartalyst\Converter\Laravel\Facades\Converter;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Toggle;
Expand All @@ -14,6 +13,7 @@
use Lunar\Admin\Filament\Resources\ProductVariantResource\Pages\ManageVariantShipping;
use Lunar\Admin\Support\Forms\Components\TextInputSelectAffix;
use Lunar\Admin\Support\Pages\BaseEditRecord;
use Lunar\Facades\Converter;
use Lunar\Models\Contracts\ProductVariant as ProductVariantContract;

class ManageProductShipping extends BaseEditRecord
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Lunar\Admin\Filament\Resources;

use Cartalyst\Converter\Laravel\Facades\Converter;
use Filament\Actions\Action;
use Filament\Forms;
use Filament\Forms\Components\Component;
Expand All @@ -14,6 +13,7 @@
use Lunar\Admin\Support\Forms\Components\Attributes;
use Lunar\Admin\Support\Forms\Components\TextInputSelectAffix;
use Lunar\Admin\Support\Resources\BaseResource;
use Lunar\Facades\Converter;
use Lunar\Models\Contracts\ProductVariant as ProductVariantContract;
use Lunar\Models\TaxClass;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Lunar\Admin\Filament\Resources\ProductVariantResource\Pages;

use Cartalyst\Converter\Laravel\Facades\Converter;
use Filament\Actions\Action;
use Filament\Forms\Components\Section;
use Filament\Forms\Form;
Expand All @@ -12,6 +11,7 @@
use Lunar\Admin\Filament\Resources\ProductResource;
use Lunar\Admin\Filament\Resources\ProductVariantResource;
use Lunar\Admin\Support\Pages\BaseEditRecord;
use Lunar\Facades\Converter;

class ManageVariantShipping extends BaseEditRecord
{
Expand Down
6 changes: 2 additions & 4 deletions packages/core/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,11 @@
"ext-bcmath": "*",
"ext-exif": "*",
"ext-intl": "*",
"laravel/framework": "^11.0|^12.0",
"laravel/framework": "^11.0|^12.0|^13.0",
"spatie/laravel-medialibrary": "^11.12.7",
"spatie/laravel-activitylog": "^4.10.1",
"laravel/scout": "^10.13.1",
"cartalyst/converter": "^9.0|^10",
"kalnoy/nestedset": "^v6.0.5",
"doctrine/dbal": "^3.6",
"kalnoy/nestedset": "^6.0.5|^7.0.0",
"lukascivil/treewalker": "0.9.1",
"spatie/php-structure-discoverer": "^2.3.1",
"spatie/laravel-blink": "^1.7.1"
Expand Down
4 changes: 2 additions & 2 deletions packages/core/config/shipping.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
| Measurements
|--------------------------------------------------------------------------
|
| You can use any measurements available at
| https://github.com/cartalyst/converter/edit/master/src/config/config.php
| Define the available measurements for shipping dimensions.
| Each unit has a format string and a conversion factor relative to the base unit (factor 1.0).
|
*/
'measurements' => [
Expand Down
13 changes: 7 additions & 6 deletions packages/core/src/Base/Traits/HasDimensions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

namespace Lunar\Base\Traits;

use Cartalyst\Converter\Laravel\Facades\Converter;
use Lunar\Facades\Converter;
use Lunar\Utils\MeasurementConverter;

trait HasDimensions
{
Expand All @@ -27,7 +28,7 @@ public static function bootHasDimensions()
/**
* Getter for the length attribute.
*
* @return \Cartalyst\Converter\Converter
* @return MeasurementConverter
*/
public function getLengthAttribute()
{
Expand All @@ -39,7 +40,7 @@ public function getLengthAttribute()
/**
* Getter for the width attribute.
*
* @return \Cartalyst\Converter\Converter
* @return MeasurementConverter
*/
public function getWidthAttribute()
{
Expand All @@ -51,7 +52,7 @@ public function getWidthAttribute()
/**
* Getter for height attribute.
*
* @return \Cartalyst\Converter\Converter
* @return MeasurementConverter
*/
public function getHeightAttribute()
{
Expand All @@ -63,7 +64,7 @@ public function getHeightAttribute()
/**
* Getter for weight attribute.
*
* @return \Cartalyst\Converter\Converter
* @return MeasurementConverter
*/
public function getWeightAttribute()
{
Expand All @@ -75,7 +76,7 @@ public function getWeightAttribute()
/**
* Getter for the volume attribute.
*
* @return \Cartalyst\Converter\Converter
* @return MeasurementConverter
*/
public function getVolumeAttribute()
{
Expand Down
4 changes: 1 addition & 3 deletions packages/core/src/Console/Commands/MigrateGetCandy.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ class MigrateGetCandy extends Command
*/
public function handle()
{
$tableNames = collect(
DB::connection()->getDoctrineSchemaManager()->listTableNames()
);
$tableNames = collect(Schema::getTableListing());

$tables = $tableNames->filter(fn ($table) => str_contains($table, 'getcandy_'));

Expand Down
26 changes: 26 additions & 0 deletions packages/core/src/Facades/Converter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Lunar\Facades;

use Illuminate\Support\Facades\Facade;
use Lunar\Utils\MeasurementConverter;

/**
* @method static MeasurementConverter from(string $measurement)
* @method static MeasurementConverter to(string $measurement)
* @method static MeasurementConverter value(float $value)
* @method static MeasurementConverter convert()
* @method static float getValue()
* @method static string format(?string $formatString = null)
* @method static array getMeasurements()
* @method static void setMeasurements(array $measurements)
*
* @see MeasurementConverter
*/
class Converter extends Facade
{
protected static function getFacadeAccessor()
{
return MeasurementConverter::class;
}
}
7 changes: 6 additions & 1 deletion packages/core/src/LunarServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Lunar;

use Cartalyst\Converter\Laravel\Facades\Converter;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
use Illuminate\Console\Scheduling\Schedule;
Expand Down Expand Up @@ -56,6 +55,7 @@
use Lunar\Database\State\EnsureMediaCollectionsAreRenamed;
use Lunar\Database\State\MigrateCartOrderRelationship;
use Lunar\Database\State\PopulateProductOptionLabelWithName;
use Lunar\Facades\Converter;
use Lunar\Facades\Telemetry;
use Lunar\Listeners\CartSessionAuthListener;
use Lunar\Managers\CartSessionManager;
Expand Down Expand Up @@ -101,6 +101,7 @@
use Lunar\Observers\ProductVariantObserver;
use Lunar\Observers\TransactionObserver;
use Lunar\Observers\UrlObserver;
use Lunar\Utils\MeasurementConverter;

class LunarServiceProvider extends ServiceProvider
{
Expand Down Expand Up @@ -135,6 +136,10 @@ public function register(): void

$this->registerAddonManifest();

$this->app->singleton(MeasurementConverter::class, function () {
return new MeasurementConverter;
});

$this->app->singleton(CartModifiers::class, function () {
return new CartModifiers;
});
Expand Down
126 changes: 126 additions & 0 deletions packages/core/src/Utils/MeasurementConverter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?php

namespace Lunar\Utils;

use InvalidArgumentException;

class MeasurementConverter
{
protected array $measurements = [];

protected ?string $fromMeasurement = null;

protected ?string $toMeasurement = null;

protected float $value = 0;

public function __construct(array $measurements = [])
{
$this->measurements = $measurements;
}

public function setMeasurements(array $measurements): void
{
$this->measurements = $measurements;
}

public function getMeasurements(): array
{
return $this->measurements;
}

public function from(string $measurement): static
{
$instance = clone $this;
$instance->fromMeasurement = $measurement;

return $instance;
}

public function to(string $measurement): static
{
$this->toMeasurement = $measurement;

return $this;
}

public function value(float $value): static
{
$this->value = $value;

return $this;
}

public function convert(): static
{
$fromFactor = $this->getFactor($this->fromMeasurement);
$toFactor = $this->getFactor($this->toMeasurement);

$this->value = ($this->value / $fromFactor) * $toFactor;

return $this;
}

public function getValue(): float
{
return $this->value;
}

public function format(?string $formatString = null): string
{
$measurement = $this->toMeasurement ?? $this->fromMeasurement;

if (! $formatString && $measurement) {
[$type, $unit] = explode('.', $measurement, 2);
$formatString = $this->measurements[$type][$unit]['format'] ?? null;
}

if (! $formatString) {
return (string) $this->value;
}

$value = $this->value;
$negative = $value < 0;

if ($negative) {
$value *= -1;
}

// Match decimal and thousand separators from the format string.
// The format uses: comma for thousands, dot for decimal, exclamation for no-separator.
preg_match_all('/[,.!]/', $formatString, $separators);

$thousand = $separators[0][0] ?? null;

if ($thousand === '!') {
$thousand = '';
}

$decimal = $separators[0][1] ?? null;

// Extract the numeric portion to determine decimal places.
preg_match('/([0-9].*|)[0-9]/', $formatString, $valFormat);

$valFormat = $valFormat[0] ?? '0';
$decimals = $decimal ? strlen(substr(strrchr($valFormat, $decimal), 1)) : 0;

$formatted = number_format($value, $decimals, $decimal, $thousand);

if ($negative) {
$formatted = '-'.$formatted;
}

return preg_replace('/([0-9].*|)[0-9]/', $formatted, $formatString);
}

protected function getFactor(string $measurement): float
{
[$type, $unit] = explode('.', $measurement, 2);

if (! isset($this->measurements[$type][$unit]['unit'])) {
throw new InvalidArgumentException("Unknown measurement: {$measurement}");
}

return (float) $this->measurements[$type][$unit]['unit'];
}
}
Loading
Loading