Skip to content

Commit 2d49c97

Browse files
committed
Add migration files for updating plans and discount lines tables with enhanced features
1 parent faebdb0 commit 2d49c97

File tree

493 files changed

+37707
-31318
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

493 files changed

+37707
-31318
lines changed

RELEASE_NOTES.md

Lines changed: 1103 additions & 0 deletions
Large diffs are not rendered by default.

composer.json

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"require-dev": {
6767
"mockery/mockery": "^1.6",
6868
"nunomaduro/collision": "^8.1",
69-
"orchestra/testbench": "^10.0",
69+
"orchestra/testbench": "^10.6",
7070
"phpstan/phpstan": "^1.10",
7171
"phpunit/phpunit": "^11.5"
7272
},
@@ -87,9 +87,12 @@
8787
"autoload-dev": {
8888
"psr-4": {
8989
"Coderstm\\Tests\\": "tests/",
90-
"App\\": "workbench/app/",
91-
"Database\\Factories\\": "workbench/database/factories/",
92-
"Database\\Seeders\\": "workbench/database/seeders/"
90+
"Workbench\\App\\": "workbench/app/",
91+
"Workbench\\Database\\Factories\\": "workbench/database/factories/",
92+
"Workbench\\Database\\Seeders\\": "workbench/database/seeders/",
93+
"App\\": "vendor/orchestra/testbench-core/laravel/app/",
94+
"Database\\Factories\\": "vendor/orchestra/testbench-core/laravel/database/factories/",
95+
"Database\\Seeders\\": "vendor/orchestra/testbench-core/laravel/database/seeders/"
9396
}
9497
},
9598
"extra": {
@@ -109,6 +112,12 @@
109112
"minimum-stability": "dev",
110113
"prefer-stable": true,
111114
"scripts": {
115+
"lint": [
116+
"@php vendor/bin/phpstan analyse --verbose --ansi"
117+
],
118+
"test": [
119+
"@php vendor/bin/testbench package:test --ansi"
120+
],
112121
"post-autoload-dump": [
113122
"@clear",
114123
"@prepare"
@@ -120,12 +129,6 @@
120129
"Composer\\Config::disableProcessTimeout",
121130
"@build",
122131
"@php vendor/bin/testbench serve --ansi"
123-
],
124-
"lint": [
125-
"@php vendor/bin/phpstan analyse --verbose --ansi"
126-
],
127-
"test": [
128-
"@php vendor/bin/phpunit"
129132
]
130133
}
131134
}

config/coderstm.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
'settings_override' => [
5151
'config' => [
5252
'alias' => 'app',
53+
'subscription' => 'coderstm.subscription',
54+
'checkout' => 'coderstm.shop',
5355
'email' => [
5456
'coderstm.admin_email',
5557
'mail.from.address',
@@ -114,4 +116,40 @@
114116

115117
'license_key' => env('APP_LICENSE_KEY'),
116118
'app_id' => env('APP_ID', null),
119+
120+
/*
121+
|--------------------------------------------------------------------------
122+
| Subscription
123+
|--------------------------------------------------------------------------
124+
|
125+
| Controls subscription-specific behaviors.
126+
|
127+
*/
128+
'subscription' => [
129+
// When true, activating a late payer anchors from the open invoice's intended
130+
// start date (last unpaid period start) + plan duration; otherwise, uses today.
131+
'anchor_from_invoice' => (bool) env('SUBSCRIPTION_ANCHOR_FROM_INVOICE', true),
132+
133+
// Controls when plan downgrades take effect:
134+
// 'immediate' - Apply downgrade immediately upon request
135+
// 'next_renewal' - Schedule downgrade for next billing cycle (default)
136+
'downgrade_timing' => env('SUBSCRIPTION_DOWNGRADE_TIMING', 'next_renewal'),
137+
],
138+
139+
/*
140+
|--------------------------------------------------------------------------
141+
| Shop
142+
|--------------------------------------------------------------------------
143+
|
144+
| This section contains configuration options related to the shop
145+
| functionality, including cart management, checkout processes,
146+
| and order handling.
147+
|
148+
*/
149+
150+
'shop' => [
151+
// Number of hours of inactivity before a cart is considered abandoned
152+
'abandoned_cart_hours' => (int) env('ABANDONED_CART_HOURS', 2),
153+
],
154+
117155
];
Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
11
<?php //002cd
22
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
33
?>
4-
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
34-
cfu=
4+
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
Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,62 @@
11
<?php //002cd
22
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
33
?>
4-
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

0 commit comments

Comments
 (0)