From 3c25084ada6ceb93945b531504ad7402e1fab031 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:31:34 +0200 Subject: [PATCH 01/99] =?UTF-8?q?chore:=20=F0=9F=93=8C=20Updated=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.lock | 1079 +++++++++++++++++++++++++------------------------ 1 file changed, 544 insertions(+), 535 deletions(-) diff --git a/composer.lock b/composer.lock index 7916f443..f01833cc 100644 --- a/composer.lock +++ b/composer.lock @@ -130,24 +130,25 @@ }, { "name": "biscolab/laravel-recaptcha", - "version": "5.2.0", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/biscolab/laravel-recaptcha.git", - "reference": "30175f16f77d5439d0e058e4dd3b2071dfe4c269" + "reference": "1bab726402d5376553a439b88a0faa07e84488fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/biscolab/laravel-recaptcha/zipball/30175f16f77d5439d0e058e4dd3b2071dfe4c269", - "reference": "30175f16f77d5439d0e058e4dd3b2071dfe4c269", + "url": "https://api.github.com/repos/biscolab/laravel-recaptcha/zipball/1bab726402d5376553a439b88a0faa07e84488fd", + "reference": "1bab726402d5376553a439b88a0faa07e84488fd", "shasum": "" }, "require": { - "laravel/framework": "^7.0|^8.0", + "illuminate/routing": "^7.0|^8.0|^9.0", + "illuminate/support": "^7.0|^8.0|^9.0", "php": "^7.3|^8.0" }, "require-dev": { - "orchestra/testbench": "5.*|6.*", + "orchestra/testbench": "5.*|6.*|^7.0", "phpunit/phpunit": "^9.1" }, "suggest": { @@ -165,12 +166,12 @@ } }, "autoload": { - "psr-4": { - "Biscolab\\ReCaptcha\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Biscolab\\ReCaptcha\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -194,9 +195,9 @@ ], "support": { "issues": "https://github.com/biscolab/laravel-recaptcha/issues", - "source": "https://github.com/biscolab/laravel-recaptcha/tree/v5.2.0" + "source": "https://github.com/biscolab/laravel-recaptcha/tree/v5.4.0" }, - "time": "2022-01-15T14:51:25+00:00" + "time": "2022-05-07T12:52:46+00:00" }, { "name": "brick/math", @@ -335,16 +336,16 @@ }, { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -354,18 +355,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -414,7 +409,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -430,26 +425,26 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/dbal", - "version": "3.3.2", + "version": "3.3.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "35eae239ef515d55ebb24e9d4715cad09a4f58ed" + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/35eae239ef515d55ebb24e9d4715cad09a4f58ed", - "reference": "35eae239ef515d55ebb24e9d4715cad09a4f58ed", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3", + "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1.0", "php": "^7.3 || ^8.0", "psr/cache": "^1|^2|^3", @@ -457,15 +452,15 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "9.5.11", + "jetbrains/phpstorm-stubs": "2022.1", + "phpstan/phpstan": "1.6.3", + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "9.5.20", "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^5.2|^6.0", "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.16.1" + "vimeo/psalm": "4.23.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -525,7 +520,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.2" + "source": "https://github.com/doctrine/dbal/tree/3.3.6" }, "funding": [ { @@ -541,29 +536,29 @@ "type": "tidelift" } ], - "time": "2022-02-05T16:33:45+00:00" + "time": "2022-05-02T17:21:01+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", "shasum": "" }, "require": { "php": "^7.1|^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -582,9 +577,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" }, - "time": "2021-03-21T12:59:47+00:00" + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/event-manager", @@ -773,16 +768,16 @@ }, { "name": "doctrine/lexer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { @@ -790,7 +785,7 @@ }, "require-dev": { "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "1.3", + "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.11" }, @@ -829,7 +824,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.2" + "source": "https://github.com/doctrine/lexer/tree/1.2.3" }, "funding": [ { @@ -845,20 +840,20 @@ "type": "tidelift" } ], - "time": "2022-01-12T08:27:12+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "dompdf/dompdf", - "version": "v1.2.0", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd" + "reference": "5031045d9640b38cfc14aac9667470df09c9e090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/60b704331479a69e9bcdb3496da2315b5c4f94fd", - "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5031045d9640b38cfc14aac9667470df09c9e090", + "reference": "5031045d9640b38cfc14aac9667470df09c9e090", "shasum": "" }, "require": { @@ -869,6 +864,8 @@ "php": "^7.1 || ^8.0" }, "require-dev": { + "ext-json": "*", + "ext-zip": "*", "mockery/mockery": "^1.3", "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" @@ -910,9 +907,9 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v1.2.0" + "source": "https://github.com/dompdf/dompdf/tree/v1.2.2" }, - "time": "2022-02-07T13:02:10+00:00" + "time": "2022-04-27T13:50:54+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1103,25 +1100,23 @@ }, { "name": "fruitcake/laravel-cors", - "version": "v2.0.5", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "3a066e5cac32e2d1cdaacd6b961692778f37b5fc" + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/3a066e5cac32e2d1cdaacd6b961692778f37b5fc", - "reference": "3a066e5cac32e2d1cdaacd6b961692778f37b5fc", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", "shasum": "" }, "require": { "asm89/stack-cors": "^2.0.1", "illuminate/contracts": "^6|^7|^8|^9", "illuminate/support": "^6|^7|^8|^9", - "php": ">=7.2", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4.3.4|^5|^6" + "php": ">=7.2" }, "require-dev": { "laravel/framework": "^6|^7.24|^8", @@ -1132,7 +1127,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" }, "laravel": { "providers": [ @@ -1168,7 +1163,7 @@ ], "support": { "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.5" + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" }, "funding": [ { @@ -1180,7 +1175,7 @@ "type": "github" } ], - "time": "2022-01-03T14:53:04+00:00" + "time": "2022-02-23T14:25:13+00:00" }, { "name": "graham-campbell/result-type", @@ -1246,16 +1241,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.4.4", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/e3ff079b22820c2029d4c2a87796b6a0b8716ad8", + "reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8", "shasum": "" }, "require": { @@ -1288,12 +1283,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1350,7 +1345,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.4.4" }, "funding": [ { @@ -1366,7 +1361,7 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2022-06-09T21:39:15+00:00" }, { "name": "guzzlehttp/promises", @@ -1395,12 +1390,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1454,16 +1449,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/83260bb50b8fc753c72d14dc1621a2dac31877ee", + "reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee", "shasum": "" }, "require": { @@ -1487,7 +1482,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -1549,7 +1544,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.3.0" }, "funding": [ { @@ -1565,7 +1560,7 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" + "time": "2022-06-09T08:26:02+00:00" }, { "name": "hidehalo/nanoid-php", @@ -1626,27 +1621,29 @@ }, { "name": "kkomelin/laravel-translatable-string-exporter", - "version": "1.14.0", + "version": "1.17.0", "source": { "type": "git", "url": "https://github.com/kkomelin/laravel-translatable-string-exporter.git", - "reference": "9dce1e5f8ed59a1b58e77ec7d84f1427d5e29f0a" + "reference": "0425f2c3add32df852c002b11bffe72c9c67ec89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kkomelin/laravel-translatable-string-exporter/zipball/9dce1e5f8ed59a1b58e77ec7d84f1427d5e29f0a", - "reference": "9dce1e5f8ed59a1b58e77ec7d84f1427d5e29f0a", + "url": "https://api.github.com/repos/kkomelin/laravel-translatable-string-exporter/zipball/0425f2c3add32df852c002b11bffe72c9c67ec89", + "reference": "0425f2c3add32df852c002b11bffe72c9c67ec89", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/support": "^5.4|^6|^7|^8", - "illuminate/translation": "^5.4|^6|^7|^8", - "php": ">=5.4.0", - "symfony/finder": "^3.2|^4|^5" + "illuminate/support": "^5.4|^6|^7|^8|^9", + "illuminate/translation": "^5.4|^6|^7|^8|^9", + "php": "^7.2|^8.0", + "symfony/finder": "^3.2|^4|^5|^6" }, "require-dev": { - "orchestra/testbench": "^3.4|^4.0|^5.0|^6.0" + "nunomaduro/larastan": "^1.0|^2.0", + "orchestra/testbench": "^3.4|^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^6.0|^7.0|^8.0|^9.0" }, "type": "library", "extra": { @@ -1677,26 +1674,28 @@ "exporter", "json", "laravel", + "localization", + "translation", "translations" ], "support": { "issues": "https://github.com/kkomelin/laravel-translatable-string-exporter/issues", - "source": "https://github.com/kkomelin/laravel-translatable-string-exporter/tree/1.14.0" + "source": "https://github.com/kkomelin/laravel-translatable-string-exporter/tree/1.17.0" }, - "time": "2021-08-08T06:48:21+00:00" + "time": "2022-06-13T07:13:55+00:00" }, { "name": "laravel/framework", - "version": "v8.82.0", + "version": "v8.83.16", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "411d5243c58cbf12b0fc89cab1ceb50088968c27" + "reference": "6be5abd144faf517879af7298e9d79f06f250f75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/411d5243c58cbf12b0fc89cab1ceb50088968c27", - "reference": "411d5243c58cbf12b0fc89cab1ceb50088968c27", + "url": "https://api.github.com/repos/laravel/framework/zipball/6be5abd144faf517879af7298e9d79f06f250f75", + "reference": "6be5abd144faf517879af7298e9d79f06f250f75", "shasum": "" }, "require": { @@ -1856,20 +1855,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-02-01T16:13:57+00:00" + "time": "2022-06-07T15:09:06+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "65c9faf50d567b65d81764a44526545689e3fe63" + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/65c9faf50d567b65d81764a44526545689e3fe63", - "reference": "65c9faf50d567b65d81764a44526545689e3fe63", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540", + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540", "shasum": "" }, "require": { @@ -1915,20 +1914,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-02-01T16:29:39+00:00" + "time": "2022-05-16T17:09:47+00:00" }, { "name": "laravel/socialite", - "version": "v5.5.0", + "version": "v5.5.2", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "cb5b5538c207efa19aa5d7f46cd76acb03ec3055" + "reference": "68afb03259b82d898c68196cbcacd48596a9dd72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/cb5b5538c207efa19aa5d7f46cd76acb03ec3055", - "reference": "cb5b5538c207efa19aa5d7f46cd76acb03ec3055", + "url": "https://api.github.com/repos/laravel/socialite/zipball/68afb03259b82d898c68196cbcacd48596a9dd72", + "reference": "68afb03259b82d898c68196cbcacd48596a9dd72", "shasum": "" }, "require": { @@ -1984,20 +1983,20 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2022-02-01T16:31:36+00:00" + "time": "2022-03-10T15:26:19+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.0", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + "reference": "dff39b661e827dae6e092412f976658df82dbac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", "shasum": "" }, "require": { @@ -2050,28 +2049,28 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.0" + "source": "https://github.com/laravel/tinker/tree/v2.7.2" }, - "time": "2022-01-10T08:52:49+00:00" + "time": "2022-03-23T12:38:24+00:00" }, { "name": "laravel/ui", - "version": "v3.4.2", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "e01198123f7f4369d13c1f83a897c3f5e97fc9f4" + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/e01198123f7f4369d13c1f83a897c3f5e97fc9f4", - "reference": "e01198123f7f4369d13c1f83a897c3f5e97fc9f4", + "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", "shasum": "" }, "require": { "illuminate/console": "^8.42|^9.0", "illuminate/filesystem": "^8.42|^9.0", - "illuminate/support": "^8.42|^9.0", + "illuminate/support": "^8.82|^9.0", "illuminate/validation": "^8.42|^9.0", "php": "^7.3|^8.0" }, @@ -2111,9 +2110,9 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.2" + "source": "https://github.com/laravel/ui/tree/v3.4.6" }, - "time": "2022-01-25T20:15:56+00:00" + "time": "2022-05-20T13:38:08+00:00" }, { "name": "laraveldaily/laravel-invoices", @@ -2182,16 +2181,16 @@ }, { "name": "league/commonmark", - "version": "2.2.1", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a" + "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a", - "reference": "f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/0da1dca5781dd3cfddbe328224d9a7a62571addc", + "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc", "shasum": "" }, "require": { @@ -2200,17 +2199,19 @@ "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "cebe/markdown": "^1.0", "commonmark/cmark": "0.30.0", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", "phpstan/phpstan": "^0.12.88 || ^1.0.0", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", @@ -2225,7 +2226,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.3-dev" + "dev-main": "2.4-dev" } }, "autoload": { @@ -2282,7 +2283,7 @@ "type": "tidelift" } ], - "time": "2022-01-25T14:37:33+00:00" + "time": "2022-06-07T21:28:26+00:00" }, { "name": "league/config", @@ -2462,16 +2463,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { @@ -2502,7 +2503,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -2514,20 +2515,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "league/oauth1-client", - "version": "v1.10.0", + "version": "v1.10.1", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc" + "reference": "d6365b901b5c287dd41f143033315e2f777e1167" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/88dd16b0cff68eb9167bfc849707d2c40ad91ddc", - "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167", "shasum": "" }, "require": { @@ -2588,22 +2589,22 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth1-client/issues", - "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.0" + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1" }, - "time": "2021-08-15T23:05:49+00:00" + "time": "2022-04-15T14:02:14+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5579edf28aee1190a798bfa5be8bc16c563bd524", + "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524", "shasum": "" }, "require": { @@ -2616,18 +2617,23 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", + "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^8.5.14", "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2677,7 +2683,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/2.7.0" }, "funding": [ { @@ -2689,20 +2695,20 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2022-06-09T08:59:12+00:00" }, { "name": "nesbot/carbon", - "version": "2.56.0", + "version": "2.58.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4" + "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/626ec8cbb724cd3c3400c3ed8f730545b744e3f4", - "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055", + "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055", "shasum": "" }, "require": { @@ -2720,7 +2726,8 @@ "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "phpunit/php-file-iterator": "^2.0.5", + "phpunit/phpunit": "^7.5.20 || ^8.5.23", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -2785,7 +2792,7 @@ "type": "tidelift" } ], - "time": "2022-01-21T17:08:38+00:00" + "time": "2022-04-25T19:31:17+00:00" }, { "name": "nette/schema", @@ -2936,16 +2943,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -2986,9 +2993,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "opis/closure", @@ -3018,12 +3025,12 @@ } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3128,8 +3135,8 @@ "type": "library", "autoload": { "psr-4": { - "PayPalCheckoutSdk\\": "lib/PayPalCheckoutSdk", - "Sample\\": "samples/" + "Sample\\": "samples/", + "PayPalCheckoutSdk\\": "lib/PayPalCheckoutSdk" } }, "notification-url": "https://packagist.org/downloads/", @@ -3300,25 +3307,25 @@ }, { "name": "phenx/php-svg-lib", - "version": "0.4.0", + "version": "0.4.1", "source": { "type": "git", "url": "https://github.com/dompdf/php-svg-lib.git", - "reference": "3ffbbb037f0871c3a819e90cff8b36dd7e656189" + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/3ffbbb037f0871c3a819e90cff8b36dd7e656189", - "reference": "3ffbbb037f0871c3a819e90cff8b36dd7e656189", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/4498b5df7b08e8469f0f8279651ea5de9626ed02", + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.4 || ^8.0", + "php": "^7.1 || ^7.2 || ^7.3 || ^7.4 || ^8.0", "sabberworm/php-css-parser": "^8.4" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" }, "type": "library", "autoload": { @@ -3340,9 +3347,9 @@ "homepage": "https://github.com/PhenX/php-svg-lib", "support": { "issues": "https://github.com/dompdf/php-svg-lib/issues", - "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.0" + "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.1" }, - "time": "2021-12-17T14:08:35+00:00" + "time": "2022-03-07T12:52:04+00:00" }, { "name": "phpoption/phpoption", @@ -3825,16 +3832,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.1", + "version": "v0.11.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "570292577277f06f590635381a7f761a6cf4f026" + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/570292577277f06f590635381a7f761a6cf4f026", - "reference": "570292577277f06f590635381a7f761a6cf4f026", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/c23686f9c48ca202710dbb967df8385a952a2daf", + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf", "shasum": "" }, "require": { @@ -3845,16 +3852,17 @@ "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.05.02" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" @@ -3894,9 +3902,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.1" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.5" }, - "time": "2022-01-03T13:58:38+00:00" + "time": "2022-05-27T18:03:49+00:00" }, { "name": "ralouphie/getallheaders", @@ -4023,25 +4031,24 @@ }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", "shasum": "" }, "require": { "brick/math": "^0.8 || ^0.9", + "ext-ctype": "*", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -4078,20 +4085,17 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4105,7 +4109,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.3.1" }, "funding": [ { @@ -4117,7 +4121,7 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2022-03-27T21:42:02+00:00" }, { "name": "sabberworm/php-css-parser", @@ -4521,16 +4525,16 @@ }, { "name": "stripe/stripe-php", - "version": "v7.113.0", + "version": "v7.128.0", "source": { "type": "git", "url": "https://github.com/stripe/stripe-php.git", - "reference": "1aef1ccffad48f39952073e0ed53cb8f3f1b1d8c" + "reference": "c704949c49b72985c76cc61063aa26fefbd2724e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/1aef1ccffad48f39952073e0ed53cb8f3f1b1d8c", - "reference": "1aef1ccffad48f39952073e0ed53cb8f3f1b1d8c", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/c704949c49b72985c76cc61063aa26fefbd2724e", + "reference": "c704949c49b72985c76cc61063aa26fefbd2724e", "shasum": "" }, "require": { @@ -4575,9 +4579,9 @@ ], "support": { "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v7.113.0" + "source": "https://github.com/stripe/stripe-php/tree/v7.128.0" }, - "time": "2022-02-03T23:46:29+00:00" + "time": "2022-05-05T17:18:02+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -4657,16 +4661,16 @@ }, { "name": "symfony/console", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", "shasum": "" }, "require": { @@ -4736,7 +4740,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.3" + "source": "https://github.com/symfony/console/tree/v5.4.9" }, "funding": [ { @@ -4752,7 +4756,7 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-05-18T06:17:34+00:00" }, { "name": "symfony/css-selector", @@ -4821,16 +4825,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "shasum": "" }, "require": { @@ -4868,7 +4872,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1" }, "funding": [ { @@ -4884,20 +4888,20 @@ "type": "tidelift" } ], - "time": "2021-11-01T23:48:49+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + "reference": "c116cda1f51c678782768dce89a45f13c949455d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d", + "reference": "c116cda1f51c678782768dce89a45f13c949455d", "shasum": "" }, "require": { @@ -4939,7 +4943,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.9" }, "funding": [ { @@ -4955,20 +4959,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-21T13:57:48+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.3", + "version": "v6.0.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" + "reference": "5c85b58422865d42c6eb46f7693339056db098a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5c85b58422865d42c6eb46f7693339056db098a8", + "reference": "5c85b58422865d42c6eb46f7693339056db098a8", "shasum": "" }, "require": { @@ -5022,7 +5026,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.9" }, "funding": [ { @@ -5038,20 +5042,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-05T16:45:52+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", "shasum": "" }, "require": { @@ -5101,7 +5105,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.1" }, "funding": [ { @@ -5117,20 +5121,20 @@ "type": "tidelift" } ], - "time": "2021-07-15T12:33:35+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", "shasum": "" }, "require": { @@ -5164,7 +5168,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.8" }, "funding": [ { @@ -5180,20 +5184,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-04-15T08:07:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7" + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ef409ff341a565a3663157d4324536746d49a0c7", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", "shasum": "" }, "require": { @@ -5237,7 +5241,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.3" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" }, "funding": [ { @@ -5253,20 +5257,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-17T15:07:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.4", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "49f40347228c773688a0488feea0175aa7f4d268" + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/49f40347228c773688a0488feea0175aa7f4d268", - "reference": "49f40347228c773688a0488feea0175aa7f4d268", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34b121ad3dc761f35fe1346d2f15618f8cbf77f8", + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8", "shasum": "" }, "require": { @@ -5349,7 +5353,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.4" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.9" }, "funding": [ { @@ -5365,20 +5369,20 @@ "type": "tidelift" } ], - "time": "2022-01-29T18:08:07+00:00" + "time": "2022-05-27T07:09:08+00:00" }, { "name": "symfony/intl", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "29e326276b2455bcfa4ce02abcf7689e884acdac" + "reference": "b9e17d7ab867ce99f89950ebced0fa91076ba12b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/29e326276b2455bcfa4ce02abcf7689e884acdac", - "reference": "29e326276b2455bcfa4ce02abcf7689e884acdac", + "url": "https://api.github.com/repos/symfony/intl/zipball/b9e17d7ab867ce99f89950ebced0fa91076ba12b", + "reference": "b9e17d7ab867ce99f89950ebced0fa91076ba12b", "shasum": "" }, "require": { @@ -5391,15 +5395,15 @@ }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Intl\\": "" }, "classmap": [ "Resources/stubs" ], - "files": [ - "Resources/functions.php" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -5437,7 +5441,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v5.4.3" + "source": "https://github.com/symfony/intl/tree/v5.4.8" }, "funding": [ { @@ -5453,20 +5457,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-07T09:39:59+00:00" }, { "name": "symfony/mime", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e", + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e", "shasum": "" }, "require": { @@ -5520,7 +5524,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.3" + "source": "https://github.com/symfony/mime/tree/v5.4.9" }, "funding": [ { @@ -5536,20 +5540,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -5564,7 +5568,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5572,12 +5576,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5602,7 +5606,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -5618,20 +5622,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "143f1881e655bebca1312722af8068de235ae5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { @@ -5646,7 +5650,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5685,7 +5689,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -5701,20 +5705,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -5726,7 +5730,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5766,7 +5770,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -5782,20 +5786,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -5809,7 +5813,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5853,7 +5857,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -5869,20 +5873,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -5894,7 +5898,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5937,7 +5941,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -5953,20 +5957,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -5981,7 +5985,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5989,12 +5993,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6020,7 +6024,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -6036,20 +6040,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -6058,7 +6062,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6096,7 +6100,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -6112,20 +6116,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -6134,7 +6138,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6175,7 +6179,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -6191,20 +6195,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -6213,7 +6217,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6258,7 +6262,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -6274,20 +6278,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -6296,7 +6300,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6337,7 +6341,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -6353,20 +6357,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "553f50487389a977eb31cf6b37faae56da00f753" + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", - "reference": "553f50487389a977eb31cf6b37faae56da00f753", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", "shasum": "" }, "require": { @@ -6399,7 +6403,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.3" + "source": "https://github.com/symfony/process/tree/v5.4.8" }, "funding": [ { @@ -6415,20 +6419,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-04-08T05:07:18+00:00" }, { "name": "symfony/routing", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "44b29c7a94e867ccde1da604792f11a469958981" + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", - "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", "shasum": "" }, "require": { @@ -6489,7 +6493,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.3" + "source": "https://github.com/symfony/routing/tree/v5.4.8" }, "funding": [ { @@ -6505,25 +6509,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-18T21:45:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6534,7 +6539,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6571,7 +6576,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -6587,20 +6592,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/string", - "version": "v6.0.3", + "version": "v6.0.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + "reference": "df9f03d595aa2d446498ba92fe803a519b2c43cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "url": "https://api.github.com/repos/symfony/string/zipball/df9f03d595aa2d446498ba92fe803a519b2c43cc", + "reference": "df9f03d595aa2d446498ba92fe803a519b2c43cc", "shasum": "" }, "require": { @@ -6621,12 +6626,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -6656,7 +6661,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.3" + "source": "https://github.com/symfony/string/tree/v6.0.9" }, "funding": [ { @@ -6672,20 +6677,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-04-22T08:18:02+00:00" }, { "name": "symfony/translation", - "version": "v6.0.3", + "version": "v6.0.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" + "reference": "9ba011309943955a3807b8236c17cff3b88f67b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", - "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", + "url": "https://api.github.com/repos/symfony/translation/zipball/9ba011309943955a3807b8236c17cff3b88f67b6", + "reference": "9ba011309943955a3807b8236c17cff3b88f67b6", "shasum": "" }, "require": { @@ -6751,7 +6756,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.3" + "source": "https://github.com/symfony/translation/tree/v6.0.9" }, "funding": [ { @@ -6767,20 +6772,20 @@ "type": "tidelift" } ], - "time": "2022-01-07T00:29:03+00:00" + "time": "2022-05-06T14:27:17+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" + "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", + "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", "shasum": "" }, "require": { @@ -6829,7 +6834,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.1" }, "funding": [ { @@ -6845,20 +6850,20 @@ "type": "tidelift" } ], - "time": "2021-09-07T12:43:40+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4" + "reference": "af52239a330fafd192c773795520dc2dd62b5657" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/970a01f208bf895c5f327ba40b72288da43adec4", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657", + "reference": "af52239a330fafd192c773795520dc2dd62b5657", "shasum": "" }, "require": { @@ -6918,7 +6923,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.3" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.9" }, "funding": [ { @@ -6934,7 +6939,7 @@ "type": "tidelift" } ], - "time": "2022-01-17T16:30:37+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7145,21 +7150,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -7197,22 +7202,22 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" }, { "name": "yajra/laravel-datatables-oracle", - "version": "v9.19.0", + "version": "v9.20.0", "source": { "type": "git", "url": "https://github.com/yajra/laravel-datatables.git", - "reference": "553482df5f68969928acc0ee1a3af032cdaaf824" + "reference": "4c22b09c8c664df5aad9f17d99c3823c0f2d84e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yajra/laravel-datatables/zipball/553482df5f68969928acc0ee1a3af032cdaaf824", - "reference": "553482df5f68969928acc0ee1a3af032cdaaf824", + "url": "https://api.github.com/repos/yajra/laravel-datatables/zipball/4c22b09c8c664df5aad9f17d99c3823c0f2d84e2", + "reference": "4c22b09c8c664df5aad9f17d99c3823c0f2d84e2", "shasum": "" }, "require": { @@ -7272,7 +7277,7 @@ ], "support": { "issues": "https://github.com/yajra/laravel-datatables/issues", - "source": "https://github.com/yajra/laravel-datatables/tree/v9.19.0" + "source": "https://github.com/yajra/laravel-datatables/tree/v9.20.0" }, "funding": [ { @@ -7284,22 +7289,22 @@ "type": "patreon" } ], - "time": "2022-01-18T01:13:47+00:00" + "time": "2022-05-08T16:04:16+00:00" } ], "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.6.6", + "version": "v3.6.7", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "f92fe967b40b36ad1ee8ed2fd59c05ae67a1ebba" + "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f92fe967b40b36ad1ee8ed2fd59c05ae67a1ebba", - "reference": "f92fe967b40b36ad1ee8ed2fd59c05ae67a1ebba", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b96f9820aaf1ff9afe945207883149e1c7afb298", + "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298", "shasum": "" }, "require": { @@ -7313,7 +7318,7 @@ }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^4|^5|^6", + "orchestra/testbench-dusk": "^4|^5|^6|^7", "phpunit/phpunit": "^8.5|^9.0", "squizlabs/php_codesniffer": "^3.5" }, @@ -7332,12 +7337,12 @@ } }, "autoload": { - "psr-4": { - "Barryvdh\\Debugbar\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7359,7 +7364,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.6" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.7" }, "funding": [ { @@ -7371,33 +7376,34 @@ "type": "github" } ], - "time": "2021-12-21T18:20:10+00:00" + "time": "2022-02-09T07:52:32+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -7424,7 +7430,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -7440,7 +7446,7 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "facade/flare-client-php", @@ -7476,12 +7482,12 @@ } }, "autoload": { - "psr-4": { - "Facade\\FlareClient\\": "src" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Facade\\FlareClient\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7509,16 +7515,16 @@ }, { "name": "facade/ignition", - "version": "2.17.4", + "version": "2.17.5", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070" + "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/95c80bd35ee6858e9e1439b2f6a698295eeb2070", - "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070", + "url": "https://api.github.com/repos/facade/ignition/zipball/1d71996f83c9a5a7807331b8986ac890352b7a0c", + "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c", "shasum": "" }, "require": { @@ -7558,12 +7564,12 @@ } }, "autoload": { - "psr-4": { - "Facade\\Ignition\\": "src" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Facade\\Ignition\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7583,7 +7589,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-12-27T15:11:24+00:00" + "time": "2022-02-23T18:31:24+00:00" }, { "name": "facade/ignition-contracts", @@ -7829,16 +7835,16 @@ }, { "name": "laravel/sail", - "version": "v1.13.1", + "version": "v1.14.10", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "b9749028732eca8080c26d01cd88a2f3549c2e3e" + "reference": "0ea5d683af4d189071efcdb9e83946c10dab82c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/b9749028732eca8080c26d01cd88a2f3549c2e3e", - "reference": "b9749028732eca8080c26d01cd88a2f3549c2e3e", + "url": "https://api.github.com/repos/laravel/sail/zipball/0ea5d683af4d189071efcdb9e83946c10dab82c3", + "reference": "0ea5d683af4d189071efcdb9e83946c10dab82c3", "shasum": "" }, "require": { @@ -7885,29 +7891,30 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-01-20T15:31:25+00:00" + "time": "2022-06-09T07:10:28+00:00" }, { "name": "maximebf/debugbar", - "version": "v1.17.3", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c" + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e8ac3499af0ea5b440908e06cc0abe5898008b3c", - "reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", "shasum": "" }, "require": { "php": "^7.1|^8", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^2.6|^3|^4|^5" + "symfony/var-dumper": "^2.6|^3|^4|^5|^6" }, "require-dev": { - "phpunit/phpunit": "^7.5.20 || ^9.4.2" + "phpunit/phpunit": "^7.5.20 || ^9.4.2", + "twig/twig": "^1.38|^2.7|^3.0" }, "suggest": { "kriswallsmith/assetic": "The best way to manage assets", @@ -7948,9 +7955,9 @@ ], "support": { "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.17.3" + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.0" }, - "time": "2021-10-19T12:33:27+00:00" + "time": "2021-12-27T18:49:48+00:00" }, { "name": "mockery/mockery", @@ -8026,28 +8033,29 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -8072,7 +8080,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -8080,7 +8088,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nunomaduro/collision", @@ -8231,16 +8239,16 @@ }, { "name": "phar-io/version", - "version": "3.1.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/15a90844ad40f127afd244c0cad228de2a80052a", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -8276,9 +8284,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.1" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2022-02-07T21:56:48+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -8392,16 +8400,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -8436,9 +8444,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", @@ -8509,16 +8517,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "shasum": "" }, "require": { @@ -8574,7 +8582,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" }, "funding": [ { @@ -8582,7 +8590,7 @@ "type": "github" } ], - "time": "2021-12-05T09:12:13+00:00" + "time": "2022-03-07T09:28:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8827,16 +8835,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.13", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -8852,7 +8860,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -8866,7 +8874,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -8914,7 +8922,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { @@ -8926,7 +8934,7 @@ "type": "github" } ], - "time": "2022-01-24T07:33:35+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "sebastian/cli-parser", @@ -9294,16 +9302,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -9345,7 +9353,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -9353,7 +9361,7 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", @@ -9434,16 +9442,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -9486,7 +9494,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -9494,7 +9502,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -9785,28 +9793,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -9829,7 +9837,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" }, "funding": [ { @@ -9837,7 +9845,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -9894,16 +9902,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.37", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470" + "reference": "6637e62480b60817b9a6984154a533e8e64c6bd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470", + "url": "https://api.github.com/repos/symfony/debug/zipball/6637e62480b60817b9a6984154a533e8e64c6bd5", + "reference": "6637e62480b60817b9a6984154a533e8e64c6bd5", "shasum": "" }, "require": { @@ -9942,7 +9950,7 @@ "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.37" + "source": "https://github.com/symfony/debug/tree/v4.4.41" }, "funding": [ { @@ -9958,7 +9966,8 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "abandoned": "symfony/error-handler", + "time": "2022-04-12T15:19:55+00:00" }, { "name": "theseer/tokenizer", From 8f38b9e023c3b1f17b93fc5372cfc4423c069c33 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:32:00 +0200 Subject: [PATCH 02/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Migration=20-?= =?UTF-8?q?>=20Column=20Billing=20Period?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._092704_add_billing_period_to_products.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 database/migrations/2022_06_16_092704_add_billing_period_to_products.php diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php new file mode 100644 index 00000000..4018fb47 --- /dev/null +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -0,0 +1,35 @@ +string('billing_period')->default("hourly"); + }); + + DB::statement('UPDATE products SET billing_period="hourly"'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('billing_period'); + }); + } +} From 950278c9487c540ea9e70601c4afa8f690d42210 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:55:34 +0200 Subject: [PATCH 03/99] =?UTF-8?q?fix:=20=E2=9C=A8=20Updated=20Migration=20?= =?UTF-8?q?to=20calculate=20hourly=20price=20from=20existing=20products?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_06_16_092704_add_billing_period_to_products.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php index 4018fb47..708e6e5e 100644 --- a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -19,6 +19,14 @@ class AddBillingPeriodToProducts extends Migration }); DB::statement('UPDATE products SET billing_period="hourly"'); + + $products = DB::table('products')->get(); + foreach ($products as $product) { + $price = $product->price; + $price = $price / 30 / 24; + DB::table('products')->where('id', $product->id)->update(['price' => $price]); + } + } /** From 8383fa03aacb375588a21cbe0b42ad2720fa8ced Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:56:05 +0200 Subject: [PATCH 04/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Added=20Migration?= =?UTF-8?q?=20->=20Updated=20user=20credits=20column=20to=20be=20decimal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6_16_094402_update_user_price_datatype.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 database/migrations/2022_06_16_094402_update_user_price_datatype.php diff --git a/database/migrations/2022_06_16_094402_update_user_price_datatype.php b/database/migrations/2022_06_16_094402_update_user_price_datatype.php new file mode 100644 index 00000000..9b4abb9e --- /dev/null +++ b/database/migrations/2022_06_16_094402_update_user_price_datatype.php @@ -0,0 +1,32 @@ +decimal('credits', 20, 10)->default(0)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->unsignedFloat('credits')->default(250)->change(); + }); + } +} From d7830eeb41b4218da25b46e807810de17964e513 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:59:17 +0200 Subject: [PATCH 05/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Migration=20-?= =?UTF-8?q?>=20last=20billed=20field=20to=20servers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...95818_add_last_billed_field_to_servers.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php diff --git a/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php b/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php new file mode 100644 index 00000000..6b05f3a5 --- /dev/null +++ b/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php @@ -0,0 +1,33 @@ +dateTime('last_billed')->default(DB::raw('CURRENT_TIMESTAMP'))->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servers', function (Blueprint $table) { + $table->dropColumn('last_billed'); + }); + } +} From b726326e99e00cbfbefb0e85625a075013c9e984 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:01:53 +0200 Subject: [PATCH 06/99] =?UTF-8?q?feat:=20=F0=9F=93=9D=20Updated=20ProductS?= =?UTF-8?q?eeder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/seeders/Seeds/ProductSeeder.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/database/seeders/Seeds/ProductSeeder.php b/database/seeders/Seeds/ProductSeeder.php index 7664dc86..a6035c00 100644 --- a/database/seeders/Seeds/ProductSeeder.php +++ b/database/seeders/Seeds/ProductSeeder.php @@ -16,29 +16,32 @@ class ProductSeeder extends Seeder { Product::create([ 'name' => 'Starter', - 'description' => '64MB Ram, 1GB Disk, 1 Database, 140 credits monthly', + 'description' => '64MB Ram, 1GB Disk, 1 Database, 140 credits hourly', 'price' => 140, 'memory' => 64, 'disk' => 1000, - 'databases' => 1 + 'databases' => 1, + 'billing_period' => 'hourly' ]); Product::create([ 'name' => 'Standard', - 'description' => '128MB Ram, 2GB Disk, 2 Database, 210 credits monthly', + 'description' => '128MB Ram, 2GB Disk, 2 Database, 210 credits hourly', 'price' => 210, 'memory' => 128, 'disk' => 2000, - 'databases' => 2 + 'databases' => 2, + 'billing_period' => 'hourly' ]); Product::create([ 'name' => 'Advanced', - 'description' => '256MB Ram, 5GB Disk, 5 Database, 280 credits monthly', + 'description' => '256MB Ram, 5GB Disk, 5 Database, 280 credits hourly', 'price' => 280, 'memory' => 256, 'disk' => 5000, - 'databases' => 5 + 'databases' => 5, + 'billing_period' => 'hourly' ]); } } From 87bca5c52bbda3624df52f77055789fb824f8cb9 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:04:52 +0200 Subject: [PATCH 07/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=5Fper?= =?UTF-8?q?iod=20to=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/ProductController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 6b855f9f..d86f7873 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -73,6 +73,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", + "billing_period" => "required|in:hourly,daily,monthly", ]); $disabled = !is_null($request->input('disabled')); @@ -139,6 +140,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", + "billing_period" => "required|in:hourly,daily,monthly", ]); $disabled = !is_null($request->input('disabled')); From 4581b018b0bf57a527b813f4e1f902c84ebcbb86 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:27:53 +0200 Subject: [PATCH 08/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=20per?= =?UTF-8?q?iod=20to=20edit,=20create=20and=20show=20of=20products?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/admin/products/create.blade.php | 55 ++++++++++++++----- resources/views/admin/products/edit.blade.php | 54 +++++++++++++----- .../views/admin/products/index.blade.php | 2 + 3 files changed, 85 insertions(+), 26 deletions(-) diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index a4fb0dc1..2470bb17 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -116,6 +116,20 @@ @enderror +
+ + + @error('allocations') +
+ {{ $message }} +
+ @enderror +
+
diff --git a/resources/views/admin/products/edit.blade.php b/resources/views/admin/products/edit.blade.php index 87622bd8..651e4492 100644 --- a/resources/views/admin/products/edit.blade.php +++ b/resources/views/admin/products/edit.blade.php @@ -122,7 +122,18 @@ @enderror - +
+ + + @error('allocations') +
+ {{ $message }} +
+ @enderror +
+ +
+ + + + @error('billing_period') +
+ {{ $message }} +
+ @enderror +
+
-
- - - @error('allocations') -
- {{ $message }} -
- @enderror -
diff --git a/resources/views/admin/products/index.blade.php b/resources/views/admin/products/index.blade.php index b7c241b3..25cea9a0 100644 --- a/resources/views/admin/products/index.blade.php +++ b/resources/views/admin/products/index.blade.php @@ -44,6 +44,7 @@ {{__('Active')}} {{__('Name')}} {{__('Price')}} + {{__('Billing period')}} {{__('Memory')}} {{__('Cpu')}} {{__('Swap')}} @@ -91,6 +92,7 @@ {data: "disabled"}, {data: "name"}, {data: "price"}, + {data: "billing_period"}, {data: "memory"}, {data: "cpu"}, {data: "swap"}, From 5c37dbcc51e3103fddb0f8896aaf77c19a56b35a Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:36:01 +0200 Subject: [PATCH 09/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=20per?= =?UTF-8?q?iod=20to=20server=20creation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/create.blade.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/resources/views/servers/create.blade.php b/resources/views/servers/create.blade.php index 775ed5ac..26f55848 100644 --- a/resources/views/servers/create.blade.php +++ b/resources/views/servers/create.blade.php @@ -201,6 +201,12 @@ ({{ __('ports') }}) +
  • + + {{ __('Billing Period') }} + + +
  • @@ -210,8 +216,7 @@
    - - {{ __('Price') }}: + From 9e8bd0a2d3097b68cd9780d04971f0603e21982a Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 14:54:06 +0200 Subject: [PATCH 10/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20weekly=20to?= =?UTF-8?q?=20billing=5Fperiod=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/ProductController.php | 4 ++-- resources/views/admin/products/create.blade.php | 4 ++++ resources/views/admin/products/edit.blade.php | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index d86f7873..772abc67 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -73,7 +73,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly", ]); $disabled = !is_null($request->input('disabled')); @@ -140,7 +140,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly", ]); $disabled = !is_null($request->input('disabled')); diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index 2470bb17..0b9389a4 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -177,6 +177,10 @@ + +
    - - {{__('Price in')}} {{CREDITS_DISPLAY_NAME}} + @error('price') From d7c0c26f35ca6b494e8fd0c6175cce399d9d63e3 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 15:33:44 +0200 Subject: [PATCH 13/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Renamed=20Migration?= =?UTF-8?q?=20&=20changed=20precision=20on=20decimals=20to=20more=20reason?= =?UTF-8?q?able=20number?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_06_16_092704_add_billing_period_to_products.php | 5 +++++ ...hp => 2022_06_16_094402_update_user_credits_datatype.php} | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) rename database/migrations/{2022_06_16_094402_update_user_price_datatype.php => 2022_06_16_094402_update_user_credits_datatype.php} (82%) diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php index 708e6e5e..ceed9362 100644 --- a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -16,6 +16,9 @@ class AddBillingPeriodToProducts extends Migration { Schema::table('products', function (Blueprint $table) { $table->string('billing_period')->default("hourly"); + $table->decimal('price', 15, 4)->change(); + $table->decimal('minimum_credits', 15, 4)->change(); + }); DB::statement('UPDATE products SET billing_period="hourly"'); @@ -38,6 +41,8 @@ class AddBillingPeriodToProducts extends Migration { Schema::table('products', function (Blueprint $table) { $table->dropColumn('billing_period'); + $table->decimal('price', 10, 0)->change(); + $table->float('minimum_credits')->change(); }); } } diff --git a/database/migrations/2022_06_16_094402_update_user_price_datatype.php b/database/migrations/2022_06_16_094402_update_user_credits_datatype.php similarity index 82% rename from database/migrations/2022_06_16_094402_update_user_price_datatype.php rename to database/migrations/2022_06_16_094402_update_user_credits_datatype.php index 9b4abb9e..ed5922e8 100644 --- a/database/migrations/2022_06_16_094402_update_user_price_datatype.php +++ b/database/migrations/2022_06_16_094402_update_user_credits_datatype.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class UpdateUserPriceDatatype extends Migration +class UpdateUserCreditsDatatype extends Migration { /** * Run the migrations. @@ -14,7 +14,7 @@ class UpdateUserPriceDatatype extends Migration public function up() { Schema::table('users', function (Blueprint $table) { - $table->decimal('credits', 20, 10)->default(0)->change(); + $table->decimal('credits', 15, 4)->default(0)->change(); }); } @@ -27,6 +27,7 @@ class UpdateUserPriceDatatype extends Migration { Schema::table('users', function (Blueprint $table) { $table->unsignedFloat('credits')->default(250)->change(); + }); } } From a26f6dd137298e7ed9dbf19624e06ee140c9b961 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 16:15:57 +0200 Subject: [PATCH 14/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20last=5Fbilled?= =?UTF-8?q?=20to=20server=20model=20&=20always=20charge=20first=20&=20fixe?= =?UTF-8?q?d=20Charge=20Server=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 24 +++++++++++++++-------- app/Http/Controllers/ServerController.php | 12 ++++++------ app/Models/Server.php | 1 + 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 678ab4b7..877cb8a5 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -4,7 +4,9 @@ namespace App\Console\Commands; use App\Models\Server; use App\Notifications\ServersSuspendedNotification; +use Carbon\Carbon; use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; class ChargeServers extends Command { @@ -45,7 +47,7 @@ class ChargeServers extends Command */ public function handle() { - Server::whereNull('suspended')->with('users', 'products')->chunk(10, function ($servers) { + Server::whereNull('suspended')->with('user', 'product')->chunk(10, function ($servers) { /** @var Server $server */ foreach ($servers as $server) { /** @var Product $product */ @@ -55,23 +57,29 @@ class ChargeServers extends Command $billing_period = $product->billing_period; + // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { case 'monthly': - $newBillingDate = $server->last_billed->addMonth(); + $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; case 'weekly': - $newBillingDate = $server->last_billed->addYear(); + $newBillingDate = Carbon::parse($server->last_billed)->addYear(); break; case 'daily': - $newBillingDate = $server->last_billed->addDay(); + $newBillingDate = Carbon::parse($server->last_billed)->addDay(); break; + case 'hourly': + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); default: - $newBillingDate = $server->last_billed->addHour(); + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); break; }; - if (!($newBillingDate <= now())) return; + + if (!($newBillingDate->isPast())) { + continue; + } // check if user has enough credits to charge the server if ($user->credits < $product->price) { @@ -94,8 +102,8 @@ class ChargeServers extends Command $this->line("{$user->name} Current credits: {$user->credits} Credits to be removed: {$product->price}"); $user->decrement('credits', $product->price); - // update server last_billed date - $server->last_billed = $newBillingDate; + // update server last_billed date in db + DB::table('servers')->where('id', $server->id)->update(['last_billed' => $newBillingDate]); } return $this->notifyUsers(); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index c1c0a33a..45d72569 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -11,6 +11,7 @@ use App\Models\Product; use App\Models\Server; use App\Models\Settings; use App\Notifications\ServerCreationError; +use Carbon\Carbon; use Exception; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Client\Response; @@ -151,6 +152,7 @@ class ServerController extends Controller $server = $request->user()->servers()->create([ 'name' => $request->input('name'), 'product_id' => $request->input('product'), + 'last_billed' => Carbon::now()->toDateTimeString(), ]); //get free allocation ID @@ -165,14 +167,12 @@ class ServerController extends Controller //update server with pterodactyl_id $server->update([ 'pterodactyl_id' => $serverAttributes['id'], - 'identifier' => $serverAttributes['identifier'] + 'identifier' => $serverAttributes['identifier'], + ]); - if (config('SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR', 'true') == 'true') { - if ($request->user()->credits >= $server->product->getHourlyPrice()) { - $request->user()->decrement('credits', $server->product->getHourlyPrice()); - } - } + // Charge first billing cycle + $request->user()->decrement('credits', $server->product->price); return redirect()->route('servers.index')->with('success', __('Server created')); } diff --git a/app/Models/Server.php b/app/Models/Server.php index 34c992ba..82770a30 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -47,6 +47,7 @@ class Server extends Model "identifier", "product_id", "pterodactyl_id", + "last_billed" ]; /** From cad41ffb0a8359e1be0990c2e2b96c42334424a0 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 16:18:27 +0200 Subject: [PATCH 15/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Update=20last=5Fbille?= =?UTF-8?q?d=20to=20current=20time=20on=20unsuspend=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/Server.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Models/Server.php b/app/Models/Server.php index 82770a30..fa6d17ca 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Classes\Pterodactyl; +use Carbon\Carbon; use Exception; use GuzzleHttp\Promise\PromiseInterface; use Hidehalo\Nanoid\Client; @@ -124,10 +125,12 @@ class Server extends Model if ($response->successful()) { $this->update([ - 'suspended' => null + 'suspended' => null, + 'last_billed' => Carbon::now()->toDateTimeString(), ]); } + return $this; } From 570b0b014f07fc3890ce0341b64583c56b942a10 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 19:03:59 +0200 Subject: [PATCH 16/99] =?UTF-8?q?fix:=20=F0=9F=9A=91=EF=B8=8F=20ChargeServ?= =?UTF-8?q?er=20Command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 877cb8a5..769909c3 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -65,7 +65,7 @@ class ChargeServers extends Command $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; case 'weekly': - $newBillingDate = Carbon::parse($server->last_billed)->addYear(); + $newBillingDate = Carbon::parse($server->last_billed)->addWeek(); break; case 'daily': $newBillingDate = Carbon::parse($server->last_billed)->addDay(); From 609041a96799e42705ef1aa12244951171601e12 Mon Sep 17 00:00:00 2001 From: IceToast Date: Sat, 18 Jun 2022 23:41:40 +0200 Subject: [PATCH 17/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20different=20b?= =?UTF-8?q?illing=20periods=20to=20servers=20overview=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 29 ++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 72187653..517c3f1e 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -127,22 +127,21 @@ ({{ CREDITS_DISPLAY_NAME }})
    -
    -
    -
    -
    {{ __('per Hour') }}
    - - {{ number_format($server->product->getHourlyPrice(), 2, '.', '') }} - +
    +
    + @if($server->product->billing_period == 'monthly') + {{ __('per Month') }} + @elseif($server->product->billing_period == 'weekly') + {{ __('per Week') }} + @elseif($server->product->billing_period == 'daily') + {{ __('per Day') }} + @elseif($server->product->billing_period == 'hourly') + {{ __('per Hour') }} + @endif
    -
    -
    {{ __('per Month') }} -
    - - {{ $server->product->getHourlyPrice() * 24 * 30 }} - -
    -
    + + {{ $server->product->price }} +
    From b9b860b863059c717fa714fb81e25439189f535a Mon Sep 17 00:00:00 2001 From: IceToast Date: Sat, 18 Jun 2022 23:43:58 +0200 Subject: [PATCH 18/99] =?UTF-8?q?fix:=20=F0=9F=94=A5=20Removed=20charge=20?= =?UTF-8?q?first=20hour=20at=20creation=20->=20not=20in=20use=20anymore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/admin/settings/tabs/system.blade.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/resources/views/admin/settings/tabs/system.blade.php b/resources/views/admin/settings/tabs/system.blade.php index aece6bee..3fd3e67e 100644 --- a/resources/views/admin/settings/tabs/system.blade.php +++ b/resources/views/admin/settings/tabs/system.blade.php @@ -26,22 +26,6 @@ class="fas fa-info-circle">
    -
    -
    -
    - - -
    - -
    -
    -
    Date: Sat, 18 Jun 2022 23:55:43 +0200 Subject: [PATCH 19/99] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Added=20Addon=20Do?= =?UTF-8?q?cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Addon-notes.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Addon-notes.md diff --git a/Addon-notes.md b/Addon-notes.md new file mode 100644 index 00000000..3c335a7f --- /dev/null +++ b/Addon-notes.md @@ -0,0 +1,3 @@ +Export diff files: + +cp -pv --parents $(git diff --name-only) "..\controllpanelgg-monthly-addon\files-git-diff\" From dfa50141fbd9dcd637cd87f7d4950d2397ace414 Mon Sep 17 00:00:00 2001 From: IceToast Date: Sun, 19 Jun 2022 00:13:54 +0200 Subject: [PATCH 20/99] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Updated=20Export?= =?UTF-8?q?=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Addon-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Addon-notes.md b/Addon-notes.md index 3c335a7f..baf40c6a 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,3 @@ Export diff files: -cp -pv --parents $(git diff --name-only) "..\controllpanelgg-monthly-addon\files-git-diff\" +git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf file.tgz -T - From 43119e22a5fc093c12a0f2ab46ee63d645c27fb6 Mon Sep 17 00:00:00 2001 From: IceToast Date: Wed, 22 Jun 2022 12:01:47 +0200 Subject: [PATCH 21/99] =?UTF-8?q?fix:=20=F0=9F=9A=91=EF=B8=8F=20No=20produ?= =?UTF-8?q?ct=20available=20at=20creation=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/admin/products/create.blade.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index 4f79bb20..747ee1a6 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -171,20 +171,16 @@ From 690e0e7e1239d26f956c8e97f2099f313d77034a Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 01:50:45 +0200 Subject: [PATCH 22/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20migrations=20?= =?UTF-8?q?undo=20last=20patch=20db=20update=20&=20add=20cancelation=20of?= =?UTF-8?q?=20servers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...34527_add_cancelation_to_servers_table.php | 32 +++++++++++++++++++ ...022_07_21_234818_undo_decimal_in_price.php | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php create mode 100644 database/migrations/2022_07_21_234818_undo_decimal_in_price.php diff --git a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php new file mode 100644 index 00000000..b9f75839 --- /dev/null +++ b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php @@ -0,0 +1,32 @@ +boolean('canceled')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servers', function (Blueprint $table) { + $table->dropColumn('canceled'); + }); + } +} diff --git a/database/migrations/2022_07_21_234818_undo_decimal_in_price.php b/database/migrations/2022_07_21_234818_undo_decimal_in_price.php new file mode 100644 index 00000000..cf4abb69 --- /dev/null +++ b/database/migrations/2022_07_21_234818_undo_decimal_in_price.php @@ -0,0 +1,32 @@ +decimal('price', 15, 4)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->decimal('price',['11','2'])->change(); + }); + } +} From e207c0c5509bf1b2bea3650e3a7c5b26cbf2b466 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 02:58:08 +0200 Subject: [PATCH 23/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Cancel=20Butt?= =?UTF-8?q?on=20&=20Next=20Billing=20Cycle=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 122 ++++++++++++++++++------ 1 file changed, 92 insertions(+), 30 deletions(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 517c3f1e..9c9d81b0 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -40,7 +40,6 @@
    @foreach ($servers as $server) -
    @@ -107,7 +106,7 @@ {{ $server->egg }}
    -
    +
    {{ __('Resource plan') }}:
    @@ -115,11 +114,43 @@ {{ $server->product->name }}
    -
    + +
    +
    + {{ __('Next Billing Cycle') }}: +
    +
    + + @switch($server->product->billing_period) + @case('monthly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} + @break + @case('weekly') + {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} + @break + @case('daily') + {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} + @break + @case('hourly') + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @break + @case('half-yearly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} + @break + @case('yearly') + {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} + @break + @default + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @endswitch + +
    +
    +
    {{ __('Price') }}: @@ -147,17 +178,22 @@
    - @@ -169,40 +205,66 @@ @endsection From 32384044ea984b699de7d451c5440950f5b9e20a Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 03:51:05 +0200 Subject: [PATCH 24/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Typo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_07_21_234527_add_cancelation_to_servers_table.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php index b9f75839..15fafb16 100644 --- a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php +++ b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php @@ -14,7 +14,7 @@ class AddCancelationToServersTable extends Migration public function up() { Schema::table('servers', function (Blueprint $table) { - $table->boolean('canceled')->default(false); + $table->dateTime('cancelled')->nullable(); }); } @@ -26,7 +26,7 @@ class AddCancelationToServersTable extends Migration public function down() { Schema::table('servers', function (Blueprint $table) { - $table->dropColumn('canceled'); + $table->dropColumn('cancelled'); }); } } From 78a6787607b9229986585c6089dae99a6049f768 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 03:52:49 +0200 Subject: [PATCH 25/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Server=20Canc?= =?UTF-8?q?elation=20route=20method=20and=20charging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 8 ++++---- .../Controllers/Admin/ServerController.php | 18 ++++++++++++++++++ app/Http/Controllers/ServerController.php | 16 +++++++++++++++- app/Models/Server.php | 3 ++- resources/views/servers/index.blade.php | 4 ++-- routes/web.php | 2 ++ 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 769909c3..2a5d8a5a 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -81,14 +81,14 @@ class ChargeServers extends Command continue; } - // check if user has enough credits to charge the server - if ($user->credits < $product->price) { + // check if the server is canceled or if user has enough credits to charge the server or + if ( $server->cancelled || $user->credits < $product->price) { try { - #suspend server + // suspend server $this->line("{$server->name} from user: {$user->name} has been suspended!"); $server->suspend(); - #add user to notify list + // add user to notify list if (!in_array($user, $this->usersToNotify)) { array_push($this->usersToNotify, $user); } diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 5ebc29bc..594d7a0f 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -108,6 +108,24 @@ class ServerController extends Controller } } + /** + * Cancel the Server billing cycle. + * + * @param Server $server + * @return RedirectResponse|Response + */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); + } + } + /** * @param Server $server * @return RedirectResponse diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 45d72569..ee9c47b7 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -210,7 +210,21 @@ class ServerController extends Controller $server->delete(); return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource "') . $e->getMessage() . '"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + } + } + + /** Cancel Server */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); } } } diff --git a/app/Models/Server.php b/app/Models/Server.php index fa6d17ca..5f87d488 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -48,7 +48,8 @@ class Server extends Model "identifier", "product_id", "pterodactyl_id", - "last_billed" + "last_billed", + "cancelled" ]; /** diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9c9d81b0..e96b46b1 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -219,8 +219,8 @@ }).then((result) => { if (result.value) { // Delete server - fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, { - method: 'DELETE', + fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, { + method: 'PATCH', headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' } diff --git a/routes/web.php b/routes/web.php index 168549f7..8755eb32 100644 --- a/routes/web.php +++ b/routes/web.php @@ -60,6 +60,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { #normal routes Route::get('notifications/readAll',[NotificationController::class,'readAll'])->name('notifications.readAll'); Route::resource('notifications', NotificationController::class); + Route::patch('/servers/cancel/{server}', [ServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', ServerController::class); Route::resource('profile', ProfileController::class); Route::resource('store', StoreController::class); @@ -112,6 +113,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { #servers Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable'); Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend'); + Route::patch('/servers/cancel/{server}', [AdminServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', AdminServerController::class); #products From 08208cab727a73e75f51a33aa5ba7868606b953d Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:00:23 +0200 Subject: [PATCH 26/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20yearly=20and?= =?UTF-8?q?=20half-yearly=20billing=20periods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 6 ++++++ app/Http/Controllers/Admin/ProductController.php | 4 ++-- resources/views/admin/products/create.blade.php | 6 ++++++ resources/views/admin/products/edit.blade.php | 8 ++++++++ resources/views/servers/index.blade.php | 4 ++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 2a5d8a5a..45f18c2b 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -61,6 +61,12 @@ class ChargeServers extends Command // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { + case 'yearly': + $newBillingDate = Carbon::parse($server->last_billed)->addYear(); + break; + case 'half-yearly': + $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); + break; case 'monthly': $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 772abc67..9fb51801 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -73,7 +73,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", ]); $disabled = !is_null($request->input('disabled')); @@ -140,7 +140,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", ]); $disabled = !is_null($request->input('disabled')); diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index 8e0465fc..578fa910 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -183,6 +183,12 @@ + + @error('billing_period')
    diff --git a/resources/views/admin/products/edit.blade.php b/resources/views/admin/products/edit.blade.php index cedbc72c..3401577b 100644 --- a/resources/views/admin/products/edit.blade.php +++ b/resources/views/admin/products/edit.blade.php @@ -190,6 +190,14 @@ @endif> {{__('Monthly')}} + + @error('billing_period')
    diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index e96b46b1..1d0edd65 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -162,6 +162,10 @@
    @if($server->product->billing_period == 'monthly') {{ __('per Month') }} + @elseif($server->product->billing_period == 'half-yearly') + {{ __('per 6 Months') }} + @elseif($server->product->billing_period == 'yearly') + {{ __('per Year') }} @elseif($server->product->billing_period == 'weekly') {{ __('per Week') }} @elseif($server->product->billing_period == 'daily') From 7369e8a643e5016459e5fd5be6e1e8682b9b44a1 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:09:34 +0200 Subject: [PATCH 27/99] =?UTF-8?q?refactor:=20=F0=9F=9A=9A=20Rename=20Yearl?= =?UTF-8?q?y=20->=20Annually?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 4 +- .../Controllers/Admin/ProductController.php | 4 +- .../views/admin/products/create.blade.php | 8 +-- resources/views/admin/products/edit.blade.php | 8 +-- resources/views/servers/index.blade.php | 62 +++++++++++-------- 5 files changed, 47 insertions(+), 39 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 45f18c2b..dac01f0f 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -61,10 +61,10 @@ class ChargeServers extends Command // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { - case 'yearly': + case 'annually': $newBillingDate = Carbon::parse($server->last_billed)->addYear(); break; - case 'half-yearly': + case 'half-annually': $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); break; case 'monthly': diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 9fb51801..b24c5cc6 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -73,7 +73,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", ]); $disabled = !is_null($request->input('disabled')); @@ -140,7 +140,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", ]); $disabled = !is_null($request->input('disabled')); diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index 578fa910..f44f64f4 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -183,11 +183,11 @@ - - @error('billing_period') diff --git a/resources/views/admin/products/edit.blade.php b/resources/views/admin/products/edit.blade.php index 3401577b..9d3aec52 100644 --- a/resources/views/admin/products/edit.blade.php +++ b/resources/views/admin/products/edit.blade.php @@ -190,13 +190,13 @@ @endif> {{__('Monthly')}} - - @error('billing_period') diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 1d0edd65..fdcf2d10 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -72,9 +72,13 @@
    {{ __('Status') }}:
    - - {{ $server->isSuspended() ? 'Suspended' : 'Active' }} + @if($server->suspennded) + {{ __('Suspended') }} + @elseif($server->cancelled) + {{ __('Cancelled') }} + @else + {{ __('Active') }} + @endif
    @@ -125,28 +129,32 @@
    - @switch($server->product->billing_period) - @case('monthly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} - @break - @case('weekly') - {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} - @break - @case('daily') - {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} - @break - @case('hourly') - {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} - @break - @case('half-yearly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} - @break - @case('yearly') - {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} - @break - @default - {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} - @endswitch + @if ($server->cancelled) + - + @else + @switch($server->product->billing_period) + @case('monthly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} + @break + @case('weekly') + {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} + @break + @case('daily') + {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} + @break + @case('hourly') + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @break + @case('half-annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} + @break + @case('annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} + @break + @default + {{ __('Unknown') }} + @endswitch + @endif
    @@ -162,9 +170,9 @@
    @if($server->product->billing_period == 'monthly') {{ __('per Month') }} - @elseif($server->product->billing_period == 'half-yearly') + @elseif($server->product->billing_period == 'half-annually') {{ __('per 6 Months') }} - @elseif($server->product->billing_period == 'yearly') + @elseif($server->product->billing_period == 'annually') {{ __('per Year') }} @elseif($server->product->billing_period == 'weekly') {{ __('per Week') }} From dbbdfaa623f21e393bc30c54d49921ee3320a5c6 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:15:40 +0200 Subject: [PATCH 28/99] =?UTF-8?q?fix:=20=F0=9F=93=9D=20Undo=20Naming?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index ee9c47b7..16732588 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -210,7 +210,7 @@ class ServerController extends Controller $server->delete(); return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource"') . $e->getMessage() . '"'); } } From 737bf6e8e9564839dade4f47e1e7124c2217d518 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:25:23 +0200 Subject: [PATCH 29/99] =?UTF-8?q?chore:=20=F0=9F=8C=90=20Localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/lang/de.json | 23 ++++++++++++++++++++++- resources/lang/en.json | 23 ++++++++++++++++++++++- resources/views/servers/index.blade.php | 6 +++--- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/resources/lang/de.json b/resources/lang/de.json index 364ae607..811c0cea 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -442,5 +442,26 @@ "pl": "Polnisch", "zh": "Chinesisch", "tr": "Türkisch", - "ru": "Russisch" + "ru": "Russisch", + "hourly": "Stündlich", + "monthly": "Monatlich", + "yearly": "Jährlich", + "daily": "Täglich", + "weekly": "Wöchentlich", + "half-annually": "Halbjährlich", + "annually": "Jährlich", + "Cancelled": "Gekündigt", + "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", + "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversibel Aktion, alle Dateien dieses Servers werden gelöscht. Keine Gelder werden zurückgezahlt. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", + "Cancel Server?": "Server kündigen?", + "Delete Server?": "Server löschen?", + "Billing Period": "Abrechnungsperiode", + "Next Billing Cycle": "Nächste Abrechnungsperiode", + "Manage Server": "Server verwalten", + "Delete Server": "Server löschen", + "Cancel Server": "Server kündigen", + "Yes, cancel it!": "Ja, löschen!", + "No, abort!": "Abbrechen", + "Billing period": "Abrechnungsperiode" } diff --git a/resources/lang/en.json b/resources/lang/en.json index 37beb2a3..6a865f29 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -444,5 +444,26 @@ "pl": "Polish", "zh": "Chinese", "tr": "Turkish", - "ru": "Russian" + "ru": "Russian", + "hourly": "Hourly", + "monthly": "Monthly", + "yearly": "Yearly", + "daily": "Daily", + "weekly": "Weekly", + "half-annually": "Half-annually", + "annually": "Annually", + "Cancelled": "Cancelled", + "An exception has occurred while trying to cancel the server": "An exception has occurred while trying to cancel the server", + "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", + "Cancel Server?": "Cancel Server?", + "Delete Server?": "Delete Server?", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", + "Billing Period": "Billing Period", + "Next Billing Cycle": "Next Billing Cycle", + "Manage Server": "Manage Server", + "Delete Server": "Delete Server", + "Cancel Server": "Cancel Server", + "Yes, cancel it!": "Yes, cancel it!", + "No, abort!": "No, abort!", + "Billing period": "Billing period" } diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index fdcf2d10..d907a278 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -194,17 +194,17 @@ + data-toggle="tooltip" data-placement="bottom" title="{{ __('Manage Server') }}">
    From 23a890ecba73bcc9adbd9f53e110d1c83c27715f Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:31:00 +0200 Subject: [PATCH 30/99] =?UTF-8?q?fix:=20=F0=9F=92=84=20Added=20hyphens=20a?= =?UTF-8?q?t=20next=20billing=20cycle=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index d907a278..df7bd178 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -124,7 +124,7 @@
    -
    +
    {{ __('Next Billing Cycle') }}:
    From 620a6b83e9878633618b28e7a2249c8c7144c56f Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:33:54 +0200 Subject: [PATCH 31/99] =?UTF-8?q?style:=20=F0=9F=92=84=20Changed=20Next=20?= =?UTF-8?q?Billing=20Cycle=20behaviour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index df7bd178..9b5a3ac9 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -129,7 +129,7 @@
    - @if ($server->cancelled) + @if ($server->suspended) - @else @switch($server->product->billing_period) From abd8bc6b9c3a2ff9250a58fe525e78c0e8eb787a Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:40:03 +0200 Subject: [PATCH 32/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fiy=20suspended=20t?= =?UTF-8?q?ypo=20&=20localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/lang/de.json | 1 + resources/lang/en.json | 1 + resources/views/servers/index.blade.php | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/lang/de.json b/resources/lang/de.json index 811c0cea..184785c6 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -450,6 +450,7 @@ "weekly": "Wöchentlich", "half-annually": "Halbjährlich", "annually": "Jährlich", + "Suspended": "Gesperrt", "Cancelled": "Gekündigt", "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", diff --git a/resources/lang/en.json b/resources/lang/en.json index 6a865f29..430bb7d2 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -452,6 +452,7 @@ "weekly": "Weekly", "half-annually": "Half-annually", "annually": "Annually", + "Suspended": "Suspended", "Cancelled": "Cancelled", "An exception has occurred while trying to cancel the server": "An exception has occurred while trying to cancel the server", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9b5a3ac9..0fdac5a2 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -72,7 +72,7 @@
    {{ __('Status') }}:
    - @if($server->suspennded) + @if($server->suspended) {{ __('Suspended') }} @elseif($server->cancelled) {{ __('Cancelled') }} @@ -199,6 +199,7 @@ From f3856c88ba039d86cf309b84a1a3456654e25968 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:54:33 +0200 Subject: [PATCH 33/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Credt=20usage=20at?= =?UTF-8?q?=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/HomeController.php | 2 +- app/Models/Product.php | 16 +++++++++++++++- app/Models/User.php | 8 +++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index d6b2fd18..80c1ff5e 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -76,7 +76,7 @@ class HomeController extends Controller /** Build our Time-Left-Box */ if ($credits > 0.01 and $usage > 0) { - $daysLeft = number_format(($credits * 30) / $usage, 2, '.', ''); + $daysLeft = number_format($credits / ($usage / 30), 2, '.', ''); $hoursLeft = number_format($credits / ($usage / 30 / 24), 2, '.', ''); $bg = $this->getTimeLeftBoxBackground($daysLeft); diff --git a/app/Models/Product.php b/app/Models/Product.php index 52a37c28..2c23e9c9 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -37,7 +37,21 @@ class Product extends Model public function getHourlyPrice() { - return ($this->price / 30) / 24; + // calculate the hourly price with the billing period + switch($this->billing_period) { + case 'daily': + return $this->price / 24; + case 'weekly': + return $this->price / 24 / 7; + case 'monthly': + return $this->price / 24 / 30; + case 'half-annually': + return $this->price / 24 / 30 / 6; + case 'annually': + return $this->price / 24 / 365; + default: + return $this->price; + } } public function getDailyPrice() diff --git a/app/Models/User.php b/app/Models/User.php index 5f8af024..e4e3fc66 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -233,17 +233,19 @@ class User extends Authenticatable implements MustVerifyEmail * @return string */ public function creditUsage() - { + { $usage = 0; foreach ($this->getServersWithProduct() as $server) { - $usage += $server->product->price; + $usage += $server->product->getHourlyPrice() * 24 * 30; } return number_format($usage, 2, '.', ''); - } + } private function getServersWithProduct() { return $this->servers() + ->whereNull('suspended') + ->whereNull('cancelled') ->with('product') ->get(); } From 4b276651502e4ac22151a00ded759684824a0ce2 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:06:38 +0200 Subject: [PATCH 34/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Disable=20Cancel=20?= =?UTF-8?q?Button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 0fdac5a2..862174f3 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -199,7 +199,7 @@ From 3e4a4f32fcdad7fd6f3a5404a76630cccb1bb022 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:12:06 +0200 Subject: [PATCH 35/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Disable=20cancel=20?= =?UTF-8?q?button=20when=20cancelled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 862174f3..8ccffc87 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -199,7 +199,7 @@ From 479ccdb92c5cc4746e9aa1c6597dc4d51854a565 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:26:48 +0200 Subject: [PATCH 36/99] =?UTF-8?q?chore:=20=F0=9F=8C=90=20Added=20Bold=20te?= =?UTF-8?q?xt=20for=20No=20refund?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/lang/de.json | 2 +- resources/lang/en.json | 2 +- resources/views/servers/index.blade.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/lang/de.json b/resources/lang/de.json index 184785c6..1beefcc0 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -454,7 +454,7 @@ "Cancelled": "Gekündigt", "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", - "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversibel Aktion, alle Dateien dieses Servers werden gelöscht. Keine Gelder werden zurückgezahlt. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversiblen Aktion, alle Dateien dieses Servers werden gelöscht. Keine Rückerstattung!. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", "Cancel Server?": "Server kündigen?", "Delete Server?": "Server löschen?", "Billing Period": "Abrechnungsperiode", diff --git a/resources/lang/en.json b/resources/lang/en.json index 430bb7d2..035f66ac 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -458,7 +458,7 @@ "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", "Cancel Server?": "Cancel Server?", "Delete Server?": "Delete Server?", - "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", "Billing Period": "Billing Period", "Next Billing Cycle": "Next Billing Cycle", "Manage Server": "Manage Server", diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 8ccffc87..53490a29 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -248,7 +248,7 @@ const handleServerDelete = (serverId) => { Swal.fire({ title: "{{ __('Delete Server?') }}", - text: "{{ __('This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.') }}", + html: "{{!! __('This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.') !!}}", icon: 'warning', confirmButtonColor: '#d9534f', showCancelButton: true, From 1fb855a6840ba96436be7b23805827076ff588ac Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:31:05 +0200 Subject: [PATCH 37/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Quartely=20bi?= =?UTF-8?q?lling=20period?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 3 +++ app/Http/Controllers/Admin/ProductController.php | 4 ++-- app/Models/Product.php | 2 ++ resources/lang/de.json | 1 + resources/lang/en.json | 1 + resources/views/admin/products/create.blade.php | 3 +++ resources/views/admin/products/edit.blade.php | 4 ++++ resources/views/servers/index.blade.php | 5 +++++ 8 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index dac01f0f..72b5bab4 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -67,6 +67,9 @@ class ChargeServers extends Command case 'half-annually': $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); break; + case 'quarterly': + $newBillingDate = Carbon::parse($server->last_billed)->addMonths(3); + break; case 'monthly': $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index b24c5cc6..9be326cd 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -73,7 +73,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", + "billing_period" => "required|in:hourly,daily,weekly,monthly,quarterly,half-annually,annually", ]); $disabled = !is_null($request->input('disabled')); @@ -140,7 +140,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", + "billing_period" => "required|in:hourly,daily,weekly,monthly,quarterly,half-annually,annually", ]); $disabled = !is_null($request->input('disabled')); diff --git a/app/Models/Product.php b/app/Models/Product.php index 2c23e9c9..af8fd27a 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -45,6 +45,8 @@ class Product extends Model return $this->price / 24 / 7; case 'monthly': return $this->price / 24 / 30; + case 'quarterly': + return $this->price / 24 / 30 / 3; case 'half-annually': return $this->price / 24 / 30 / 6; case 'annually': diff --git a/resources/lang/de.json b/resources/lang/de.json index 1beefcc0..d0b5408a 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -448,6 +448,7 @@ "yearly": "Jährlich", "daily": "Täglich", "weekly": "Wöchentlich", + "quarterly": "Vierteljährlich", "half-annually": "Halbjährlich", "annually": "Jährlich", "Suspended": "Gesperrt", diff --git a/resources/lang/en.json b/resources/lang/en.json index 035f66ac..0157b0f9 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -450,6 +450,7 @@ "yearly": "Yearly", "daily": "Daily", "weekly": "Weekly", + "quarterly": "Quarterly", "half-annually": "Half-annually", "annually": "Annually", "Suspended": "Suspended", diff --git a/resources/views/admin/products/create.blade.php b/resources/views/admin/products/create.blade.php index f44f64f4..81ccf32d 100644 --- a/resources/views/admin/products/create.blade.php +++ b/resources/views/admin/products/create.blade.php @@ -183,6 +183,9 @@ + diff --git a/resources/views/admin/products/edit.blade.php b/resources/views/admin/products/edit.blade.php index 9d3aec52..851142af 100644 --- a/resources/views/admin/products/edit.blade.php +++ b/resources/views/admin/products/edit.blade.php @@ -190,6 +190,10 @@ @endif> {{__('Monthly')}} +
    @@ -354,6 +354,7 @@ .catch(console.error) this.fetchedProducts = true; + // TODO: Sortable by user chosen property (cpu, ram, disk...) this.products = response.data.sort((p1, p2) => p1.price > p2.price && 1 || -1) @@ -362,11 +363,19 @@ product.cpu = product.cpu / 100; }) + //format price to have no decimals if it is a whole number + this.products.forEach(product => { + if (product.price % 1 === 0) { + product.price = Math.round(product.price); + } + }) + this.loading = false; this.updateSelectedObjects() }, + /** * @description map selected id's to selected objects * @note being used in the server info box diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index a9c57994..0e5d6950 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -188,7 +188,7 @@ @endif
    - {{ $server->product->price }} + {{ number_format($server->product->price) }}
    From b80a8640deddeec7c6f2e5763d739e5cfcd957b5 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 28 Jul 2022 23:20:39 +0200 Subject: [PATCH 39/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Server=20creation?= =?UTF-8?q?=20fail=20when=20server.price=20=3D=20user.credits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index a740fbdb..e443f64e 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -111,7 +111,7 @@ class ServerController extends Controller ($product->minimum_credits == -1 ? config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER', 50) : $product->minimum_credits) || - Auth::user()->credits <= $product->price + Auth::user()->credits < $product->price ) { return redirect()->route('servers.index')->with('error', "You do not have the required amount of " . CREDITS_DISPLAY_NAME . " to use this product!"); } From e3e7329d312a6d9d73a52db4f1976b6917736f36 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 28 Jul 2022 23:33:04 +0200 Subject: [PATCH 40/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20See=20last=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index e443f64e..f51dfb5b 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -106,11 +106,12 @@ class ServerController extends Controller if (FacadesRequest::has("product")) { $product = Product::findOrFail(FacadesRequest::input("product")); + error_log(Auth::user()->credits); + error_log($product->price); + + error_log(Auth::user()->credits < $product->price ? "true" : "false"); if ( - Auth::user()->credits < - ($product->minimum_credits == -1 - ? config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER', 50) - : $product->minimum_credits) || + Auth::user()->credits < $product->minimum_credits || Auth::user()->credits < $product->price ) { return redirect()->route('servers.index')->with('error', "You do not have the required amount of " . CREDITS_DISPLAY_NAME . " to use this product!"); From fd216654930ddeafb402ad9765f51de807c29420 Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 15 Aug 2022 14:52:49 +0200 Subject: [PATCH 41/99] =?UTF-8?q?fix:=20=F0=9F=92=84=20Styling=20of=20serv?= =?UTF-8?q?er=20buttons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 43bdc558..223bbab2 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -200,23 +200,25 @@ target="__blank" class="btn btn-info text-center float-left ml-2" data-toggle="tooltip" data-placement="bottom" title="{{ __('Manage Server') }}"> - + - - + + @endif
    From b580e47cdf1e8c3eb3fb80ac20915453e5b38a2f Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 15 Aug 2022 14:56:34 +0200 Subject: [PATCH 42/99] chore: Docs --- Addon-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Addon-notes.md b/Addon-notes.md index baf40c6a..1d388742 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,3 @@ Export diff files: -git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf file.tgz -T - +git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - From bacab7bb18c47b7da39bc61355e5f20a9856a919 Mon Sep 17 00:00:00 2001 From: IceToast Date: Wed, 16 Nov 2022 18:10:00 +0100 Subject: [PATCH 43/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fix=20cpgg=20bad=20?= =?UTF-8?q?code=20bug=20->=20doesNotFit=20can=20be=20undefined...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/create.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/servers/create.blade.php b/resources/views/servers/create.blade.php index cc0f95dd..4b4c7959 100644 --- a/resources/views/servers/create.blade.php +++ b/resources/views/servers/create.blade.php @@ -228,8 +228,8 @@ From 0f5450e01e27ad53326765434bc731377808b94d Mon Sep 17 00:00:00 2001 From: IceToast <> Date: Tue, 22 Nov 2022 12:23:33 +0100 Subject: [PATCH 44/99] fix: Number formatting on server overview (price) --- Addon-notes.md | 3 ++- resources/views/servers/index.blade.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Addon-notes.md b/Addon-notes.md index 1d388742..bed6f5a2 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,4 @@ Export diff files: +Commit Hash of lates Main commit -git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - +git diff -r --no-commit-id --name-only --diff-filter=ACMR \ | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 4b334f51..4aca432c 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -189,7 +189,7 @@ @endif - {{ number_format($server->product->price) }} + {{ $server->product->price == round($server->product->price) ? round($server->product->price) : $server->product->price }} From e5ae179b9d23e3d43e472ae1570c378c22923a15 Mon Sep 17 00:00:00 2001 From: IceToast <> Date: Tue, 22 Nov 2022 13:42:46 +0100 Subject: [PATCH 45/99] Fixed Upgrade/Downgrade Credit withdrawal --- app/Http/Controllers/ServerController.php | 59 ++++++++++++++++------ resources/views/servers/settings.blade.php | 10 ++-- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 00e2aea0..91ef195b 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -9,6 +9,7 @@ use App\Models\Nest; use App\Models\Node; use App\Models\Product; use App\Models\Server; +use App\Models\User; use App\Models\Settings; use App\Notifications\ServerCreationError; use Carbon\Carbon; @@ -219,8 +220,6 @@ class ServerController extends Controller */ private function serverCreationFailed(Response $response, Server $server) { - $server->delete(); - return redirect()->route('servers.index')->with('error', json_encode($response->json())); } @@ -254,7 +253,7 @@ class ServerController extends Controller { - if($server->user_id != Auth::user()->id){ return back()->with('error', __('´This is not your Server!'));} + if($server->user_id != Auth::user()->id){ return back()->with('error', __('This is not your Server!'));} $serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id); $serverRelationships = $serverAttributes['relationships']; $serverLocationAttributes = $serverRelationships['location']['attributes']; @@ -293,7 +292,7 @@ class ServerController extends Controller public function upgrade(Server $server, Request $request) { - if($server->user_id != Auth::user()->id) return redirect()->route('servers.index'); + if($server->user_id != Auth::user()->id || $server->suspended) return redirect()->route('servers.index'); if(!isset($request->product_upgrade)) { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('this product is the only one')); @@ -315,24 +314,54 @@ class ServerController extends Controller $checkResponse = Pterodactyl::checkNodeResources($node, $requireMemory, $requiredisk); if ($checkResponse == False) return redirect()->route('servers.index')->with('error', __("The node '" . $nodeName . "' doesn't have the required memory or disk left to upgrade the server.")); - $priceupgrade = $newProduct->getHourlyPrice(); + // calculate the amount of credits that the user overpayed for the old product when canceling the server right now + // billing periods are hourly, daily, weekly, monthly, quarterly, half-annually, annually + $billingPeriod = $oldProduct->billing_period; + // seconds + $billingPeriods = [ + 'hourly' => 3600, + 'daily' => 86400, + 'weekly' => 604800, + 'monthly' => 2592000, + 'quarterly' => 7776000, + 'half-annually' => 15552000, + 'annually' => 31104000 + ]; + // Get the amount of hours the user has been using the server + $billingPeriodMultiplier = $billingPeriods[$billingPeriod]; + $timeDifference = now()->diffInSeconds($server->last_billed); - if ($priceupgrade < $oldProduct->getHourlyPrice()) { - $priceupgrade = 0; - } - if ($user->credits >= $priceupgrade && $user->credits >= $newProduct->minimum_credits) + error_log("Time DIFFERENCE!!!! ",$timeDifference); + // Calculate the price for the time the user has been using the server + $overpayedCredits = $oldProduct->price - $oldProduct->price * ($timeDifference / $billingPeriodMultiplier); + + + if ($user->credits >= $newProduct->price && $user->credits >= $newProduct->minimum_credits) { - - $server->product_id = $request->product_upgrade; - $server->update(); $server->allocation = $serverAttributes['allocation']; + // Update the server on the panel $response = Pterodactyl::updateServer($server, $newProduct); if ($response->failed()) return $this->serverCreationFailed($response, $server); - //update user balance - $user->decrement('credits', $priceupgrade); + + // Remove the allocation property from the server object as it is not a column in the database + unset($server->allocation); + // Update the server on controlpanel + $server->update([ + 'product_id' => $newProduct->id, + 'updated_at' => now(), + 'last_billed' => now(), + 'cancelled' => null, + ]); + + // Refund the user the overpayed credits + if ($overpayedCredits > 0) $user->increment('credits', $overpayedCredits); + + // Withdraw the credits for the new product + $user->decrement('credits', $newProduct->price); + //restart the server $response = Pterodactyl::powerAction($server, "restart"); - if ($response->failed()) return redirect()->route('servers.index')->with('error', $response->json()['errors'][0]['detail']); + if ($response->failed()) return redirect()->route('servers.index')->with('error', 'Server upgraded successfully! Could not restart the server: '.$response->json()['errors'][0]['detail']); return redirect()->route('servers.show', ['server' => $server->id])->with('success', __('Server Successfully Upgraded')); } else diff --git a/resources/views/servers/settings.blade.php b/resources/views/servers/settings.blade.php index 1a1b269b..edad1f7f 100644 --- a/resources/views/servers/settings.blade.php +++ b/resources/views/servers/settings.blade.php @@ -242,10 +242,7 @@
    - +
    -
    +
    + +
    +
    +
    + - - - - + + From 54325fbf3ea643c415730a2590df2247124a44bf Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:32:00 +0200 Subject: [PATCH 49/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Migration=20-?= =?UTF-8?q?>=20Column=20Billing=20Period?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._092704_add_billing_period_to_products.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 database/migrations/2022_06_16_092704_add_billing_period_to_products.php diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php new file mode 100644 index 00000000..4018fb47 --- /dev/null +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -0,0 +1,35 @@ +string('billing_period')->default("hourly"); + }); + + DB::statement('UPDATE products SET billing_period="hourly"'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('billing_period'); + }); + } +} From 88a85416232e6f0c2a13318cadfddd2c3137fdd4 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:55:34 +0200 Subject: [PATCH 50/99] =?UTF-8?q?fix:=20=E2=9C=A8=20Updated=20Migration=20?= =?UTF-8?q?to=20calculate=20hourly=20price=20from=20existing=20products?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_06_16_092704_add_billing_period_to_products.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php index 4018fb47..708e6e5e 100644 --- a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -19,6 +19,14 @@ class AddBillingPeriodToProducts extends Migration }); DB::statement('UPDATE products SET billing_period="hourly"'); + + $products = DB::table('products')->get(); + foreach ($products as $product) { + $price = $product->price; + $price = $price / 30 / 24; + DB::table('products')->where('id', $product->id)->update(['price' => $price]); + } + } /** From 23cc70d79ce3fa8147c99c2b5b096f56a5b75413 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:56:05 +0200 Subject: [PATCH 51/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Added=20Migration?= =?UTF-8?q?=20->=20Updated=20user=20credits=20column=20to=20be=20decimal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6_16_094402_update_user_price_datatype.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 database/migrations/2022_06_16_094402_update_user_price_datatype.php diff --git a/database/migrations/2022_06_16_094402_update_user_price_datatype.php b/database/migrations/2022_06_16_094402_update_user_price_datatype.php new file mode 100644 index 00000000..9b4abb9e --- /dev/null +++ b/database/migrations/2022_06_16_094402_update_user_price_datatype.php @@ -0,0 +1,32 @@ +decimal('credits', 20, 10)->default(0)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->unsignedFloat('credits')->default(250)->change(); + }); + } +} From 00e525a7645f550a61898c3c2165983284eb627c Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 11:59:17 +0200 Subject: [PATCH 52/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Migration=20-?= =?UTF-8?q?>=20last=20billed=20field=20to=20servers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...95818_add_last_billed_field_to_servers.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php diff --git a/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php b/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php new file mode 100644 index 00000000..6b05f3a5 --- /dev/null +++ b/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php @@ -0,0 +1,33 @@ +dateTime('last_billed')->default(DB::raw('CURRENT_TIMESTAMP'))->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servers', function (Blueprint $table) { + $table->dropColumn('last_billed'); + }); + } +} From 195cadc6a5f5ec9668913d96c425b9eac50bf50d Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:01:53 +0200 Subject: [PATCH 53/99] =?UTF-8?q?feat:=20=F0=9F=93=9D=20Updated=20ProductS?= =?UTF-8?q?eeder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/seeders/Seeds/ProductSeeder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/seeders/Seeds/ProductSeeder.php b/database/seeders/Seeds/ProductSeeder.php index 4f5e4375..dc26a9a1 100644 --- a/database/seeders/Seeds/ProductSeeder.php +++ b/database/seeders/Seeds/ProductSeeder.php @@ -16,7 +16,7 @@ class ProductSeeder extends Seeder { Product::create([ 'name' => 'Starter', - 'description' => '64MB Ram, 1GB Disk, 1 Database, 140 credits monthly', + 'description' => '64MB Ram, 1GB Disk, 1 Database, 140 credits hourly', 'price' => 140, 'memory' => 64, 'disk' => 1000, @@ -25,7 +25,7 @@ class ProductSeeder extends Seeder Product::create([ 'name' => 'Standard', - 'description' => '128MB Ram, 2GB Disk, 2 Database, 210 credits monthly', + 'description' => '128MB Ram, 2GB Disk, 2 Database, 210 credits hourly', 'price' => 210, 'memory' => 128, 'disk' => 2000, @@ -34,7 +34,7 @@ class ProductSeeder extends Seeder Product::create([ 'name' => 'Advanced', - 'description' => '256MB Ram, 5GB Disk, 5 Database, 280 credits monthly', + 'description' => '256MB Ram, 5GB Disk, 5 Database, 280 credits hourly', 'price' => 280, 'memory' => 256, 'disk' => 5000, From 9777e22eab4562b3bc7097e0ed7a63111f39646c Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:04:52 +0200 Subject: [PATCH 54/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=5Fper?= =?UTF-8?q?iod=20to=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/ProductController.php | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 5e9157d9..53b1c7de 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -57,21 +57,22 @@ class ProductController extends Controller public function store(Request $request) { $request->validate([ - 'name' => 'required|max:30', - 'price' => 'required|numeric|max:1000000|min:0', - 'memory' => 'required|numeric|max:1000000|min:5', - 'cpu' => 'required|numeric|max:1000000|min:0', - 'swap' => 'required|numeric|max:1000000|min:0', - 'description' => 'required|string|max:191', - 'disk' => 'required|numeric|max:1000000|min:5', - 'minimum_credits' => 'required|numeric|max:1000000|min:-1', - 'io' => 'required|numeric|max:1000000|min:0', - 'databases' => 'required|numeric|max:1000000|min:0', - 'backups' => 'required|numeric|max:1000000|min:0', - 'allocations' => 'required|numeric|max:1000000|min:0', - 'nodes.*' => 'required|exists:nodes,id', - 'eggs.*' => 'required|exists:eggs,id', - 'disabled' => 'nullable', + "name" => "required|max:30", + "price" => "required|numeric|max:1000000|min:0", + "memory" => "required|numeric|max:1000000|min:5", + "cpu" => "required|numeric|max:1000000|min:0", + "swap" => "required|numeric|max:1000000|min:0", + "description" => "required|string|max:191", + "disk" => "required|numeric|max:1000000|min:5", + "minimum_credits" => "required|numeric|max:1000000|min:-1", + "io" => "required|numeric|max:1000000|min:0", + "databases" => "required|numeric|max:1000000|min:0", + "backups" => "required|numeric|max:1000000|min:0", + "allocations" => "required|numeric|max:1000000|min:0", + "nodes.*" => "required|exists:nodes,id", + "eggs.*" => "required|exists:eggs,id", + "disabled" => "nullable", + "billing_period" => "required|in:hourly,daily,monthly", ]); $disabled = ! is_null($request->input('disabled')); @@ -123,21 +124,22 @@ class ProductController extends Controller public function update(Request $request, Product $product): RedirectResponse { $request->validate([ - 'name' => 'required|max:30', - 'price' => 'required|numeric|max:1000000|min:0', - 'memory' => 'required|numeric|max:1000000|min:5', - 'cpu' => 'required|numeric|max:1000000|min:0', - 'swap' => 'required|numeric|max:1000000|min:0', - 'description' => 'required|string|max:191', - 'disk' => 'required|numeric|max:1000000|min:5', - 'io' => 'required|numeric|max:1000000|min:0', - 'minimum_credits' => 'required|numeric|max:1000000|min:-1', - 'databases' => 'required|numeric|max:1000000|min:0', - 'backups' => 'required|numeric|max:1000000|min:0', - 'allocations' => 'required|numeric|max:1000000|min:0', - 'nodes.*' => 'required|exists:nodes,id', - 'eggs.*' => 'required|exists:eggs,id', - 'disabled' => 'nullable', + "name" => "required|max:30", + "price" => "required|numeric|max:1000000|min:0", + "memory" => "required|numeric|max:1000000|min:5", + "cpu" => "required|numeric|max:1000000|min:0", + "swap" => "required|numeric|max:1000000|min:0", + "description" => "required|string|max:191", + "disk" => "required|numeric|max:1000000|min:5", + "io" => "required|numeric|max:1000000|min:0", + "minimum_credits" => "required|numeric|max:1000000|min:-1", + "databases" => "required|numeric|max:1000000|min:0", + "backups" => "required|numeric|max:1000000|min:0", + "allocations" => "required|numeric|max:1000000|min:0", + "nodes.*" => "required|exists:nodes,id", + "eggs.*" => "required|exists:eggs,id", + "disabled" => "nullable", + "billing_period" => "required|in:hourly,daily,monthly", ]); $disabled = ! is_null($request->input('disabled')); From 7dab9d3c7e66d319ee5b209a5bddb3f8e4ca80dd Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:27:53 +0200 Subject: [PATCH 55/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=20per?= =?UTF-8?q?iod=20to=20edit,=20create=20and=20show=20of=20products?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/admin/products/create.blade.php | 55 ++++++++++++++----- .../views/admin/products/edit.blade.php | 54 +++++++++++++----- .../views/admin/products/index.blade.php | 2 + 3 files changed, 85 insertions(+), 26 deletions(-) diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index c6d72f68..d7257fcf 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -116,6 +116,20 @@ @enderror +
    + + + @error('allocations') +
    + {{ $message }} +
    + @enderror +
    +
    diff --git a/themes/default/views/admin/products/edit.blade.php b/themes/default/views/admin/products/edit.blade.php index 61357c71..f23533bf 100644 --- a/themes/default/views/admin/products/edit.blade.php +++ b/themes/default/views/admin/products/edit.blade.php @@ -122,7 +122,18 @@ @enderror - +
    + + + @error('allocations') +
    + {{ $message }} +
    + @enderror +
    + +
    + + + + @error('billing_period') +
    + {{ $message }} +
    + @enderror +
    +
    -
    - - - @error('allocations') -
    - {{ $message }} -
    - @enderror -
    diff --git a/themes/default/views/admin/products/index.blade.php b/themes/default/views/admin/products/index.blade.php index bc15a70b..729e2d5c 100644 --- a/themes/default/views/admin/products/index.blade.php +++ b/themes/default/views/admin/products/index.blade.php @@ -44,6 +44,7 @@ {{__('Active')}} {{__('Name')}} {{__('Price')}} + {{__('Billing period')}} {{__('Memory')}} {{__('Cpu')}} {{__('Swap')}} @@ -92,6 +93,7 @@ {data: "disabled"}, {data: "name"}, {data: "price"}, + {data: "billing_period"}, {data: "memory"}, {data: "cpu"}, {data: "swap"}, From f9d5238ea28c02d8ee3a92c93555b10fe02bf4af Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 12:36:01 +0200 Subject: [PATCH 56/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20billing=20per?= =?UTF-8?q?iod=20to=20server=20creation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/default/views/servers/create.blade.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/themes/default/views/servers/create.blade.php b/themes/default/views/servers/create.blade.php index a613c29f..b184d462 100644 --- a/themes/default/views/servers/create.blade.php +++ b/themes/default/views/servers/create.blade.php @@ -208,9 +208,14 @@
  • + + {{ __('Billing Period') }} + + +
  • +
  • - {{ __('Required') }} {{ CREDITS_DISPLAY_NAME }} - {{ __('to create this server') }} + {{ __('Minimum') }} {{ CREDITS_DISPLAY_NAME }}
  • @@ -224,8 +229,7 @@
    - - {{ __('Price') }}: + From 681928c3ad4ddb19a74aff2c260d2055c7982c9a Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 14:54:06 +0200 Subject: [PATCH 57/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20weekly=20to?= =?UTF-8?q?=20billing=5Fperiod=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/ProductController.php | 4 ++-- themes/default/views/admin/products/create.blade.php | 4 ++++ themes/default/views/admin/products/edit.blade.php | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 53b1c7de..2893a262 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -72,7 +72,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly", ]); $disabled = ! is_null($request->input('disabled')); @@ -139,7 +139,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly", ]); $disabled = ! is_null($request->input('disabled')); diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index d7257fcf..a4b47796 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -177,6 +177,10 @@ + +
    - - {{__('Price in')}} {{CREDITS_DISPLAY_NAME}} + @error('price') From 5b738be6e142afd1190d2f610221db398af0fd77 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 15:33:44 +0200 Subject: [PATCH 60/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Renamed=20Migration?= =?UTF-8?q?=20&=20changed=20precision=20on=20decimals=20to=20more=20reason?= =?UTF-8?q?able=20number?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_06_16_092704_add_billing_period_to_products.php | 5 +++++ ...hp => 2022_06_16_094402_update_user_credits_datatype.php} | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) rename database/migrations/{2022_06_16_094402_update_user_price_datatype.php => 2022_06_16_094402_update_user_credits_datatype.php} (82%) diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php index 708e6e5e..ceed9362 100644 --- a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php +++ b/database/migrations/2022_06_16_092704_add_billing_period_to_products.php @@ -16,6 +16,9 @@ class AddBillingPeriodToProducts extends Migration { Schema::table('products', function (Blueprint $table) { $table->string('billing_period')->default("hourly"); + $table->decimal('price', 15, 4)->change(); + $table->decimal('minimum_credits', 15, 4)->change(); + }); DB::statement('UPDATE products SET billing_period="hourly"'); @@ -38,6 +41,8 @@ class AddBillingPeriodToProducts extends Migration { Schema::table('products', function (Blueprint $table) { $table->dropColumn('billing_period'); + $table->decimal('price', 10, 0)->change(); + $table->float('minimum_credits')->change(); }); } } diff --git a/database/migrations/2022_06_16_094402_update_user_price_datatype.php b/database/migrations/2022_06_16_094402_update_user_credits_datatype.php similarity index 82% rename from database/migrations/2022_06_16_094402_update_user_price_datatype.php rename to database/migrations/2022_06_16_094402_update_user_credits_datatype.php index 9b4abb9e..ed5922e8 100644 --- a/database/migrations/2022_06_16_094402_update_user_price_datatype.php +++ b/database/migrations/2022_06_16_094402_update_user_credits_datatype.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class UpdateUserPriceDatatype extends Migration +class UpdateUserCreditsDatatype extends Migration { /** * Run the migrations. @@ -14,7 +14,7 @@ class UpdateUserPriceDatatype extends Migration public function up() { Schema::table('users', function (Blueprint $table) { - $table->decimal('credits', 20, 10)->default(0)->change(); + $table->decimal('credits', 15, 4)->default(0)->change(); }); } @@ -27,6 +27,7 @@ class UpdateUserPriceDatatype extends Migration { Schema::table('users', function (Blueprint $table) { $table->unsignedFloat('credits')->default(250)->change(); + }); } } From da0dd37559a9ba985def73ab677ffb1e97c51d7c Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 16:15:57 +0200 Subject: [PATCH 61/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20last=5Fbilled?= =?UTF-8?q?=20to=20server=20model=20&=20always=20charge=20first=20&=20fixe?= =?UTF-8?q?d=20Charge=20Server=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 24 +++++++++++++++-------- app/Http/Controllers/ServerController.php | 9 ++++----- app/Models/Server.php | 13 ++++++------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 678ab4b7..877cb8a5 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -4,7 +4,9 @@ namespace App\Console\Commands; use App\Models\Server; use App\Notifications\ServersSuspendedNotification; +use Carbon\Carbon; use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; class ChargeServers extends Command { @@ -45,7 +47,7 @@ class ChargeServers extends Command */ public function handle() { - Server::whereNull('suspended')->with('users', 'products')->chunk(10, function ($servers) { + Server::whereNull('suspended')->with('user', 'product')->chunk(10, function ($servers) { /** @var Server $server */ foreach ($servers as $server) { /** @var Product $product */ @@ -55,23 +57,29 @@ class ChargeServers extends Command $billing_period = $product->billing_period; + // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { case 'monthly': - $newBillingDate = $server->last_billed->addMonth(); + $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; case 'weekly': - $newBillingDate = $server->last_billed->addYear(); + $newBillingDate = Carbon::parse($server->last_billed)->addYear(); break; case 'daily': - $newBillingDate = $server->last_billed->addDay(); + $newBillingDate = Carbon::parse($server->last_billed)->addDay(); break; + case 'hourly': + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); default: - $newBillingDate = $server->last_billed->addHour(); + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); break; }; - if (!($newBillingDate <= now())) return; + + if (!($newBillingDate->isPast())) { + continue; + } // check if user has enough credits to charge the server if ($user->credits < $product->price) { @@ -94,8 +102,8 @@ class ChargeServers extends Command $this->line("{$user->name} Current credits: {$user->credits} Credits to be removed: {$product->price}"); $user->decrement('credits', $product->price); - // update server last_billed date - $server->last_billed = $newBillingDate; + // update server last_billed date in db + DB::table('servers')->where('id', $server->id)->update(['last_billed' => $newBillingDate]); } return $this->notifyUsers(); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 656064c3..b066e77d 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -10,6 +10,7 @@ use App\Models\Node; use App\Models\Product; use App\Models\Server; use App\Notifications\ServerCreationError; +use Carbon\Carbon; use Exception; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Client\Response; @@ -180,6 +181,7 @@ class ServerController extends Controller $server = $request->user()->servers()->create([ 'name' => $request->input('name'), 'product_id' => $request->input('product'), + 'last_billed' => Carbon::now()->toDateTimeString(), ]); //get free allocation ID @@ -201,11 +203,8 @@ class ServerController extends Controller 'identifier' => $serverAttributes['identifier'], ]); - if (config('SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR', 'true') == 'true') { - if ($request->user()->credits >= $server->product->getHourlyPrice()) { - $request->user()->decrement('credits', $server->product->getHourlyPrice()); - } - } + // Charge first billing cycle + $request->user()->decrement('credits', $server->product->price); return redirect()->route('servers.index')->with('success', __('Server created')); } diff --git a/app/Models/Server.php b/app/Models/Server.php index 94365dd4..cf71f040 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -47,12 +47,13 @@ class Server extends Model * @var string[] */ protected $fillable = [ - 'name', - 'description', - 'suspended', - 'identifier', - 'product_id', - 'pterodactyl_id', + "name", + "description", + "suspended", + "identifier", + "product_id", + "pterodactyl_id", + "last_billed" ]; /** From 2e6c03e3cccfa1b93ed65c0ab814fde442ee6dcc Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 16:18:27 +0200 Subject: [PATCH 62/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Update=20last=5Fbille?= =?UTF-8?q?d=20to=20current=20time=20on=20unsuspend=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/Server.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Models/Server.php b/app/Models/Server.php index cf71f040..c3ea621a 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Classes\Pterodactyl; +use Carbon\Carbon; use Exception; use GuzzleHttp\Promise\PromiseInterface; use Hidehalo\Nanoid\Client; @@ -126,9 +127,11 @@ class Server extends Model if ($response->successful()) { $this->update([ 'suspended' => null, + 'last_billed' => Carbon::now()->toDateTimeString(), ]); } + return $this; } From 907fb747347ab7ebe980ede1361bc04c651db5ae Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 16 Jun 2022 19:03:59 +0200 Subject: [PATCH 63/99] =?UTF-8?q?fix:=20=F0=9F=9A=91=EF=B8=8F=20ChargeServ?= =?UTF-8?q?er=20Command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 877cb8a5..769909c3 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -65,7 +65,7 @@ class ChargeServers extends Command $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; case 'weekly': - $newBillingDate = Carbon::parse($server->last_billed)->addYear(); + $newBillingDate = Carbon::parse($server->last_billed)->addWeek(); break; case 'daily': $newBillingDate = Carbon::parse($server->last_billed)->addDay(); From 117b75d3b75d21c88639030c2e175184ad25a414 Mon Sep 17 00:00:00 2001 From: IceToast Date: Sat, 18 Jun 2022 23:41:40 +0200 Subject: [PATCH 64/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20different=20b?= =?UTF-8?q?illing=20periods=20to=20servers=20overview=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 208 ++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 resources/views/servers/index.blade.php diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php new file mode 100644 index 00000000..517c3f1e --- /dev/null +++ b/resources/views/servers/index.blade.php @@ -0,0 +1,208 @@ +@extends('layouts.main') + +@section('content') + +
    +
    +
    +
    +

    {{ __('Servers') }}

    +
    + +
    +
    +
    + + + +
    +
    + + + + +
    + @foreach ($servers as $server) + +
    +
    +
    +
    {{ $server->name }} +
    +
    + +
    +
    +
    +
    +
    +
    +
    {{ __('Status') }}:
    +
    + + {{ $server->isSuspended() ? 'Suspended' : 'Active' }} +
    +
    +
    +
    + {{ __('Location') }}: +
    +
    + {{ $server->location }} + +
    + +
    +
    +
    + {{ __('Software') }}: +
    +
    + {{ $server->nest }} +
    + +
    +
    +
    + {{ __('Specification') }}: +
    +
    + {{ $server->egg }} +
    +
    +
    +
    + {{ __('Resource plan') }}: +
    +
    + {{ $server->product->name }} + + +
    + +
    +
    +
    + {{ __('Price') }}: + + ({{ CREDITS_DISPLAY_NAME }}) + +
    +
    +
    + @if($server->product->billing_period == 'monthly') + {{ __('per Month') }} + @elseif($server->product->billing_period == 'weekly') + {{ __('per Week') }} + @elseif($server->product->billing_period == 'daily') + {{ __('per Day') }} + @elseif($server->product->billing_period == 'hourly') + {{ __('per Hour') }} + @endif +
    + + {{ $server->product->price }} + +
    +
    +
    +
    + + +
    + @endforeach +
    + +
    +
    + + + +@endsection From b1fc1f8fab496a867b2dde5e01f812a059db7e11 Mon Sep 17 00:00:00 2001 From: IceToast Date: Sat, 18 Jun 2022 23:55:43 +0200 Subject: [PATCH 65/99] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Added=20Addon=20Do?= =?UTF-8?q?cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Addon-notes.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Addon-notes.md diff --git a/Addon-notes.md b/Addon-notes.md new file mode 100644 index 00000000..3c335a7f --- /dev/null +++ b/Addon-notes.md @@ -0,0 +1,3 @@ +Export diff files: + +cp -pv --parents $(git diff --name-only) "..\controllpanelgg-monthly-addon\files-git-diff\" From 35e54be1557981e2ab63c2b03ed6132caa1cf400 Mon Sep 17 00:00:00 2001 From: IceToast Date: Sun, 19 Jun 2022 00:13:54 +0200 Subject: [PATCH 66/99] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Updated=20Export?= =?UTF-8?q?=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Addon-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Addon-notes.md b/Addon-notes.md index 3c335a7f..baf40c6a 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,3 @@ Export diff files: -cp -pv --parents $(git diff --name-only) "..\controllpanelgg-monthly-addon\files-git-diff\" +git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf file.tgz -T - From dfdba1e26ee6e1d85646255e2f1c4aa6d198a40f Mon Sep 17 00:00:00 2001 From: IceToast Date: Wed, 22 Jun 2022 12:01:47 +0200 Subject: [PATCH 67/99] =?UTF-8?q?fix:=20=F0=9F=9A=91=EF=B8=8F=20No=20produ?= =?UTF-8?q?ct=20available=20at=20creation=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/default/views/admin/products/create.blade.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index 913fda1f..fa8884d2 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -171,20 +171,16 @@ From 994314dbe4673e25bae89c057130c2766edc675b Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 01:50:45 +0200 Subject: [PATCH 68/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20migrations=20?= =?UTF-8?q?undo=20last=20patch=20db=20update=20&=20add=20cancelation=20of?= =?UTF-8?q?=20servers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...34527_add_cancelation_to_servers_table.php | 32 +++++++++++++++++++ ...022_07_21_234818_undo_decimal_in_price.php | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php create mode 100644 database/migrations/2022_07_21_234818_undo_decimal_in_price.php diff --git a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php new file mode 100644 index 00000000..b9f75839 --- /dev/null +++ b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php @@ -0,0 +1,32 @@ +boolean('canceled')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servers', function (Blueprint $table) { + $table->dropColumn('canceled'); + }); + } +} diff --git a/database/migrations/2022_07_21_234818_undo_decimal_in_price.php b/database/migrations/2022_07_21_234818_undo_decimal_in_price.php new file mode 100644 index 00000000..cf4abb69 --- /dev/null +++ b/database/migrations/2022_07_21_234818_undo_decimal_in_price.php @@ -0,0 +1,32 @@ +decimal('price', 15, 4)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->decimal('price',['11','2'])->change(); + }); + } +} From 642fef6864ca119577fb008d0368d8a41350eec3 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 02:58:08 +0200 Subject: [PATCH 69/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Cancel=20Butt?= =?UTF-8?q?on=20&=20Next=20Billing=20Cycle=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 122 ++++++++++++++++++------ 1 file changed, 92 insertions(+), 30 deletions(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 517c3f1e..9c9d81b0 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -40,7 +40,6 @@
    @foreach ($servers as $server) -
    @@ -107,7 +106,7 @@ {{ $server->egg }}
    -
    +
    {{ __('Resource plan') }}:
    @@ -115,11 +114,43 @@ {{ $server->product->name }}
    -
    + +
    +
    + {{ __('Next Billing Cycle') }}: +
    +
    + + @switch($server->product->billing_period) + @case('monthly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} + @break + @case('weekly') + {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} + @break + @case('daily') + {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} + @break + @case('hourly') + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @break + @case('half-yearly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} + @break + @case('yearly') + {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} + @break + @default + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @endswitch + +
    +
    +
    {{ __('Price') }}: @@ -147,17 +178,22 @@
    - @@ -169,40 +205,66 @@ @endsection From f8c33d43befbde99866b9bdb4a290661ad91d4e6 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 03:51:05 +0200 Subject: [PATCH 70/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Typo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022_07_21_234527_add_cancelation_to_servers_table.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php index b9f75839..15fafb16 100644 --- a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php +++ b/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php @@ -14,7 +14,7 @@ class AddCancelationToServersTable extends Migration public function up() { Schema::table('servers', function (Blueprint $table) { - $table->boolean('canceled')->default(false); + $table->dateTime('cancelled')->nullable(); }); } @@ -26,7 +26,7 @@ class AddCancelationToServersTable extends Migration public function down() { Schema::table('servers', function (Blueprint $table) { - $table->dropColumn('canceled'); + $table->dropColumn('cancelled'); }); } } From 7fa9bf206243af2dab4c51d74d781ae0f73048c0 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 03:52:49 +0200 Subject: [PATCH 71/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Server=20Canc?= =?UTF-8?q?elation=20route=20method=20and=20charging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 8 ++++---- .../Controllers/Admin/ServerController.php | 20 ++++++++++++++++++- app/Http/Controllers/ServerController.php | 16 ++++++++++++++- app/Models/Server.php | 3 ++- resources/views/servers/index.blade.php | 4 ++-- routes/web.php | 2 ++ 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 769909c3..2a5d8a5a 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -81,14 +81,14 @@ class ChargeServers extends Command continue; } - // check if user has enough credits to charge the server - if ($user->credits < $product->price) { + // check if the server is canceled or if user has enough credits to charge the server or + if ( $server->cancelled || $user->credits < $product->price) { try { - #suspend server + // suspend server $this->line("{$server->name} from user: {$user->name} has been suspended!"); $server->suspend(); - #add user to notify list + // add user to notify list if (!in_array($user, $this->usersToNotify)) { array_push($this->usersToNotify, $user); } diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 06d2cc22..b4e06ed1 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -133,7 +133,25 @@ class ServerController extends Controller } /** - * @param Server $server + * Cancel the Server billing cycle. + * + * @param Server $server + * @return RedirectResponse|Response + */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); + } + } + + /** + * @param Server $server * @return RedirectResponse */ public function toggleSuspended(Server $server) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index b066e77d..bef8338a 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -246,7 +246,21 @@ class ServerController extends Controller return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource "').$e->getMessage().'"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + } + } + + /** Cancel Server */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); } } diff --git a/app/Models/Server.php b/app/Models/Server.php index c3ea621a..b2c19b8b 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -54,7 +54,8 @@ class Server extends Model "identifier", "product_id", "pterodactyl_id", - "last_billed" + "last_billed", + "cancelled" ]; /** diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9c9d81b0..e96b46b1 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -219,8 +219,8 @@ }).then((result) => { if (result.value) { // Delete server - fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, { - method: 'DELETE', + fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, { + method: 'PATCH', headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' } diff --git a/routes/web.php b/routes/web.php index c86a0c66..d980e3a4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -72,6 +72,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { //normal routes Route::get('notifications/readAll', [NotificationController::class, 'readAll'])->name('notifications.readAll'); Route::resource('notifications', NotificationController::class); + Route::patch('/servers/cancel/{server}', [ServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', ServerController::class); if (config('SETTINGS::SYSTEM:ENABLE_UPGRADE')) { Route::post('servers/{server}/upgrade', [ServerController::class, 'upgrade'])->name('servers.upgrade'); @@ -140,6 +141,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { //servers Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable'); Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend'); + Route::patch('/servers/cancel/{server}', [AdminServerController::class, 'cancel'])->name('servers.cancel'); Route::get('servers/sync', [AdminServerController::class, 'syncServers'])->name('servers.sync'); Route::resource('servers', AdminServerController::class); From 759ba599881463b530dcbc33b6f1bcb3d9335265 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:00:23 +0200 Subject: [PATCH 72/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20yearly=20and?= =?UTF-8?q?=20half-yearly=20billing=20periods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 6 ++++++ app/Http/Controllers/Admin/ProductController.php | 4 ++-- resources/views/servers/index.blade.php | 4 ++++ themes/default/views/admin/products/create.blade.php | 6 ++++++ themes/default/views/admin/products/edit.blade.php | 8 ++++++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 2a5d8a5a..45f18c2b 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -61,6 +61,12 @@ class ChargeServers extends Command // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { + case 'yearly': + $newBillingDate = Carbon::parse($server->last_billed)->addYear(); + break; + case 'half-yearly': + $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); + break; case 'monthly': $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 2893a262..9e6c6dc2 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -72,7 +72,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", ]); $disabled = ! is_null($request->input('disabled')); @@ -139,7 +139,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", ]); $disabled = ! is_null($request->input('disabled')); diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index e96b46b1..1d0edd65 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -162,6 +162,10 @@
    @if($server->product->billing_period == 'monthly') {{ __('per Month') }} + @elseif($server->product->billing_period == 'half-yearly') + {{ __('per 6 Months') }} + @elseif($server->product->billing_period == 'yearly') + {{ __('per Year') }} @elseif($server->product->billing_period == 'weekly') {{ __('per Week') }} @elseif($server->product->billing_period == 'daily') diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index fa8884d2..324c03c5 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -183,6 +183,12 @@ + + @error('billing_period')
    diff --git a/themes/default/views/admin/products/edit.blade.php b/themes/default/views/admin/products/edit.blade.php index cedbc72c..3401577b 100644 --- a/themes/default/views/admin/products/edit.blade.php +++ b/themes/default/views/admin/products/edit.blade.php @@ -190,6 +190,14 @@ @endif> {{__('Monthly')}} + + @error('billing_period')
    From 34bd88a4f607e892b2fb5219eb75ceeabccaed9b Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:09:34 +0200 Subject: [PATCH 73/99] =?UTF-8?q?refactor:=20=F0=9F=9A=9A=20Rename=20Yearl?= =?UTF-8?q?y=20->=20Annually?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 4 +- .../Controllers/Admin/ProductController.php | 4 +- resources/views/servers/index.blade.php | 62 +++++++++++-------- .../views/admin/products/create.blade.php | 8 +-- .../views/admin/products/edit.blade.php | 8 +-- 5 files changed, 47 insertions(+), 39 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 45f18c2b..dac01f0f 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -61,10 +61,10 @@ class ChargeServers extends Command // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { - case 'yearly': + case 'annually': $newBillingDate = Carbon::parse($server->last_billed)->addYear(); break; - case 'half-yearly': + case 'half-annually': $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); break; case 'monthly': diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 9e6c6dc2..78ad6c99 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -72,7 +72,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", ]); $disabled = ! is_null($request->input('disabled')); @@ -139,7 +139,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-yearly,yearly", + "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", ]); $disabled = ! is_null($request->input('disabled')); diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 1d0edd65..fdcf2d10 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -72,9 +72,13 @@
    {{ __('Status') }}:
    - - {{ $server->isSuspended() ? 'Suspended' : 'Active' }} + @if($server->suspennded) + {{ __('Suspended') }} + @elseif($server->cancelled) + {{ __('Cancelled') }} + @else + {{ __('Active') }} + @endif
    @@ -125,28 +129,32 @@
    - @switch($server->product->billing_period) - @case('monthly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} - @break - @case('weekly') - {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} - @break - @case('daily') - {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} - @break - @case('hourly') - {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} - @break - @case('half-yearly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} - @break - @case('yearly') - {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} - @break - @default - {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} - @endswitch + @if ($server->cancelled) + - + @else + @switch($server->product->billing_period) + @case('monthly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} + @break + @case('weekly') + {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} + @break + @case('daily') + {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} + @break + @case('hourly') + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @break + @case('half-annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} + @break + @case('annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} + @break + @default + {{ __('Unknown') }} + @endswitch + @endif
    @@ -162,9 +170,9 @@
    @if($server->product->billing_period == 'monthly') {{ __('per Month') }} - @elseif($server->product->billing_period == 'half-yearly') + @elseif($server->product->billing_period == 'half-annually') {{ __('per 6 Months') }} - @elseif($server->product->billing_period == 'yearly') + @elseif($server->product->billing_period == 'annually') {{ __('per Year') }} @elseif($server->product->billing_period == 'weekly') {{ __('per Week') }} diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index 324c03c5..ed490c2e 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -183,11 +183,11 @@ - - @error('billing_period') diff --git a/themes/default/views/admin/products/edit.blade.php b/themes/default/views/admin/products/edit.blade.php index 3401577b..9d3aec52 100644 --- a/themes/default/views/admin/products/edit.blade.php +++ b/themes/default/views/admin/products/edit.blade.php @@ -190,13 +190,13 @@ @endif> {{__('Monthly')}} - - @error('billing_period') From 9ad2954f0e10b398d66e93b793cc1287664b3e08 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:15:40 +0200 Subject: [PATCH 74/99] =?UTF-8?q?fix:=20=F0=9F=93=9D=20Undo=20Naming?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index bef8338a..41644158 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -246,7 +246,7 @@ class ServerController extends Controller return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource"') . $e->getMessage() . '"'); } } From 2c4b3ea03ec272ab14bb9cd27dbe676f91dd833c Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:25:23 +0200 Subject: [PATCH 75/99] =?UTF-8?q?chore:=20=F0=9F=8C=90=20Localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/de.json | 21 +++++++++++++++++++++ lang/sh.json | 23 ++++++++++++++++++++++- resources/views/servers/index.blade.php | 6 +++--- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lang/de.json b/lang/de.json index 9107634b..8c193fae 100644 --- a/lang/de.json +++ b/lang/de.json @@ -459,6 +459,27 @@ "zh": "Chinesisch", "tr": "Türkisch", "ru": "Russisch", + "hourly": "Stündlich", + "monthly": "Monatlich", + "yearly": "Jährlich", + "daily": "Täglich", + "weekly": "Wöchentlich", + "half-annually": "Halbjährlich", + "annually": "Jährlich", + "Cancelled": "Gekündigt", + "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", + "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversibel Aktion, alle Dateien dieses Servers werden gelöscht. Keine Gelder werden zurückgezahlt. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", + "Cancel Server?": "Server kündigen?", + "Delete Server?": "Server löschen?", + "Billing Period": "Abrechnungsperiode", + "Next Billing Cycle": "Nächste Abrechnungsperiode", + "Manage Server": "Server verwalten", + "Delete Server": "Server löschen", + "Cancel Server": "Server kündigen", + "Yes, cancel it!": "Ja, löschen!", + "No, abort!": "Abbrechen", + "Billing period": "Abrechnungsperiode", "sv": "Schwedisch", "sk": "Slowakisch", "Imprint": "Impressum", diff --git a/lang/sh.json b/lang/sh.json index 2755ad28..2badf679 100644 --- a/lang/sh.json +++ b/lang/sh.json @@ -441,5 +441,26 @@ "pl": "Polish", "zh": "Chinese", "tr": "Turkish", - "ru": "Russian" + "ru": "Russian", + "hourly": "Hourly", + "monthly": "Monthly", + "yearly": "Yearly", + "daily": "Daily", + "weekly": "Weekly", + "half-annually": "Half-annually", + "annually": "Annually", + "Cancelled": "Cancelled", + "An exception has occurred while trying to cancel the server": "An exception has occurred while trying to cancel the server", + "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", + "Cancel Server?": "Cancel Server?", + "Delete Server?": "Delete Server?", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", + "Billing Period": "Billing Period", + "Next Billing Cycle": "Next Billing Cycle", + "Manage Server": "Manage Server", + "Delete Server": "Delete Server", + "Cancel Server": "Cancel Server", + "Yes, cancel it!": "Yes, cancel it!", + "No, abort!": "No, abort!", + "Billing period": "Billing period" } diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index fdcf2d10..d907a278 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -194,17 +194,17 @@ + data-toggle="tooltip" data-placement="bottom" title="{{ __('Manage Server') }}">
    From ecfa16045030b748a4fabd0578494be7e4fc0e4f Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:31:00 +0200 Subject: [PATCH 76/99] =?UTF-8?q?fix:=20=F0=9F=92=84=20Added=20hyphens=20a?= =?UTF-8?q?t=20next=20billing=20cycle=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index d907a278..df7bd178 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -124,7 +124,7 @@
    -
    +
    {{ __('Next Billing Cycle') }}:
    From 8a4273a8fbefd94181d6f426c2607d90503d9ed0 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:33:54 +0200 Subject: [PATCH 77/99] =?UTF-8?q?style:=20=F0=9F=92=84=20Changed=20Next=20?= =?UTF-8?q?Billing=20Cycle=20behaviour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index df7bd178..9b5a3ac9 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -129,7 +129,7 @@
    - @if ($server->cancelled) + @if ($server->suspended) - @else @switch($server->product->billing_period) From 54e14d5f2b9b5b3b80d19011a2f06418622854d1 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:40:03 +0200 Subject: [PATCH 78/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fiy=20suspended=20t?= =?UTF-8?q?ypo=20&=20localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/de.json | 1 + lang/sh.json | 1 + resources/views/servers/index.blade.php | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lang/de.json b/lang/de.json index 8c193fae..a9a5061b 100644 --- a/lang/de.json +++ b/lang/de.json @@ -466,6 +466,7 @@ "weekly": "Wöchentlich", "half-annually": "Halbjährlich", "annually": "Jährlich", + "Suspended": "Gesperrt", "Cancelled": "Gekündigt", "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", diff --git a/lang/sh.json b/lang/sh.json index 2badf679..fc9457eb 100644 --- a/lang/sh.json +++ b/lang/sh.json @@ -449,6 +449,7 @@ "weekly": "Weekly", "half-annually": "Half-annually", "annually": "Annually", + "Suspended": "Suspended", "Cancelled": "Cancelled", "An exception has occurred while trying to cancel the server": "An exception has occurred while trying to cancel the server", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9b5a3ac9..0fdac5a2 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -72,7 +72,7 @@
    {{ __('Status') }}:
    - @if($server->suspennded) + @if($server->suspended) {{ __('Suspended') }} @elseif($server->cancelled) {{ __('Cancelled') }} @@ -199,6 +199,7 @@ From e310dba243f10d0ebe704d66dd581a8aa7be227b Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 04:54:33 +0200 Subject: [PATCH 79/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Credt=20usage=20at?= =?UTF-8?q?=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/HomeController.php | 2 +- app/Models/Product.php | 16 +++++++++++++++- app/Models/User.php | 10 +++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 5a511758..db00d18d 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -97,7 +97,7 @@ class HomeController extends Controller /** Build our Time-Left-Box */ if ($credits > 0.01 and $usage > 0) { - $daysLeft = number_format(($credits * 30) / $usage, 2, '.', ''); + $daysLeft = number_format($credits / ($usage / 30), 2, '.', ''); $hoursLeft = number_format($credits / ($usage / 30 / 24), 2, '.', ''); $bg = $this->getTimeLeftBoxBackground($daysLeft); diff --git a/app/Models/Product.php b/app/Models/Product.php index a31ebf50..c55d3be8 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -43,7 +43,21 @@ class Product extends Model public function getHourlyPrice() { - return ($this->price / 30) / 24; + // calculate the hourly price with the billing period + switch($this->billing_period) { + case 'daily': + return $this->price / 24; + case 'weekly': + return $this->price / 24 / 7; + case 'monthly': + return $this->price / 24 / 30; + case 'half-annually': + return $this->price / 24 / 30 / 6; + case 'annually': + return $this->price / 24 / 365; + default: + return $this->price; + } } public function getDailyPrice() diff --git a/app/Models/User.php b/app/Models/User.php index 85e2b240..91e15cab 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -251,12 +251,20 @@ class User extends Authenticatable implements MustVerifyEmail { $usage = 0; foreach ($this->getServersWithProduct() as $server) { - $usage += $server->product->price; + $usage += $server->product->getHourlyPrice() * 24 * 30; } return number_format($usage, 2, '.', ''); } + private function getServersWithProduct() { + return $this->servers() + ->whereNull('suspended') + ->whereNull('cancelled') + ->with('product') + ->get(); + } + /** * @return array|string|string[] */ From e4165181fed498f94992f86902163da3db8d337d Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:06:38 +0200 Subject: [PATCH 80/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Disable=20Cancel=20?= =?UTF-8?q?Button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 0fdac5a2..862174f3 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -199,7 +199,7 @@ From 3f4cae352a10855152c6da332aa2e37076573b3f Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:12:06 +0200 Subject: [PATCH 81/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Disable=20cancel=20?= =?UTF-8?q?button=20when=20cancelled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 862174f3..8ccffc87 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -199,7 +199,7 @@ From 8565faa40b0dffd10e04da234afe04d520773107 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:26:48 +0200 Subject: [PATCH 82/99] =?UTF-8?q?chore:=20=F0=9F=8C=90=20Added=20Bold=20te?= =?UTF-8?q?xt=20for=20No=20refund?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/de.json | 2 +- lang/sh.json | 2 +- resources/views/servers/index.blade.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lang/de.json b/lang/de.json index a9a5061b..45f1cc82 100644 --- a/lang/de.json +++ b/lang/de.json @@ -470,7 +470,7 @@ "Cancelled": "Gekündigt", "An exception has occurred while trying to cancel the server": "Ein Fehler ist aufgetreten beim Versuch, den Server zu kündigen", "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "Dies wird Ihren aktuellen Server zur nächsten Abrechnungsperiode kündigen. Er wird beim Ablauf der aktuellen Periode gesperrt.", - "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversibel Aktion, alle Dateien dieses Servers werden gelöscht. Keine Gelder werden zurückgezahlt. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "Dies ist eine irreversiblen Aktion, alle Dateien dieses Servers werden gelöscht. Keine Rückerstattung!. Wir empfehlen, den Server zu löschen, wenn er gesperrt ist.", "Cancel Server?": "Server kündigen?", "Delete Server?": "Server löschen?", "Billing Period": "Abrechnungsperiode", diff --git a/lang/sh.json b/lang/sh.json index fc9457eb..14c206ff 100644 --- a/lang/sh.json +++ b/lang/sh.json @@ -455,7 +455,7 @@ "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.": "This will cancel your current server to the next billing period. It will get suspended when the current period runs out.", "Cancel Server?": "Cancel Server?", "Delete Server?": "Delete Server?", - "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", + "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.": "This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.", "Billing Period": "Billing Period", "Next Billing Cycle": "Next Billing Cycle", "Manage Server": "Manage Server", diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 8ccffc87..53490a29 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -248,7 +248,7 @@ const handleServerDelete = (serverId) => { Swal.fire({ title: "{{ __('Delete Server?') }}", - text: "{{ __('This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.') }}", + html: "{{!! __('This is an irreversible action, all files of this server will be removed. No funds will get refunded. We recommend deleting the server when server is suspended.') !!}}", icon: 'warning', confirmButtonColor: '#d9534f', showCancelButton: true, From e254b2acfed7da2911acbfb0a04e8e800b73a024 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 05:31:05 +0200 Subject: [PATCH 83/99] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Quartely=20bi?= =?UTF-8?q?lling=20period?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 3 +++ app/Http/Controllers/Admin/ProductController.php | 4 ++-- app/Models/Product.php | 2 ++ lang/de.json | 1 + lang/sh.json | 1 + resources/views/servers/index.blade.php | 5 +++++ themes/default/views/admin/products/create.blade.php | 3 +++ themes/default/views/admin/products/edit.blade.php | 4 ++++ 8 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index dac01f0f..72b5bab4 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -67,6 +67,9 @@ class ChargeServers extends Command case 'half-annually': $newBillingDate = Carbon::parse($server->last_billed)->addMonths(6); break; + case 'quarterly': + $newBillingDate = Carbon::parse($server->last_billed)->addMonths(3); + break; case 'monthly': $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index 78ad6c99..ca997ee8 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -72,7 +72,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", + "billing_period" => "required|in:hourly,daily,weekly,monthly,quarterly,half-annually,annually", ]); $disabled = ! is_null($request->input('disabled')); @@ -139,7 +139,7 @@ class ProductController extends Controller "nodes.*" => "required|exists:nodes,id", "eggs.*" => "required|exists:eggs,id", "disabled" => "nullable", - "billing_period" => "required|in:hourly,daily,weekly,monthly,half-annually,annually", + "billing_period" => "required|in:hourly,daily,weekly,monthly,quarterly,half-annually,annually", ]); $disabled = ! is_null($request->input('disabled')); diff --git a/app/Models/Product.php b/app/Models/Product.php index c55d3be8..fbd16803 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -51,6 +51,8 @@ class Product extends Model return $this->price / 24 / 7; case 'monthly': return $this->price / 24 / 30; + case 'quarterly': + return $this->price / 24 / 30 / 3; case 'half-annually': return $this->price / 24 / 30 / 6; case 'annually': diff --git a/lang/de.json b/lang/de.json index 45f1cc82..b01d61b7 100644 --- a/lang/de.json +++ b/lang/de.json @@ -464,6 +464,7 @@ "yearly": "Jährlich", "daily": "Täglich", "weekly": "Wöchentlich", + "quarterly": "Vierteljährlich", "half-annually": "Halbjährlich", "annually": "Jährlich", "Suspended": "Gesperrt", diff --git a/lang/sh.json b/lang/sh.json index 14c206ff..cd3b0e50 100644 --- a/lang/sh.json +++ b/lang/sh.json @@ -447,6 +447,7 @@ "yearly": "Yearly", "daily": "Daily", "weekly": "Weekly", + "quarterly": "Quarterly", "half-annually": "Half-annually", "annually": "Annually", "Suspended": "Suspended", diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 53490a29..a9c57994 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -145,6 +145,9 @@ @case('hourly') {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} @break + @case('quarterly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(3)->toDayDateTimeString(); }} + @break @case('half-annually') {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} @break @@ -172,6 +175,8 @@ {{ __('per Month') }} @elseif($server->product->billing_period == 'half-annually') {{ __('per 6 Months') }} + @elseif($server->product->billing_period == 'quarterly') + {{ __('per 3 Months') }} @elseif($server->product->billing_period == 'annually') {{ __('per Year') }} @elseif($server->product->billing_period == 'weekly') diff --git a/themes/default/views/admin/products/create.blade.php b/themes/default/views/admin/products/create.blade.php index ed490c2e..45216c25 100644 --- a/themes/default/views/admin/products/create.blade.php +++ b/themes/default/views/admin/products/create.blade.php @@ -183,6 +183,9 @@ + diff --git a/themes/default/views/admin/products/edit.blade.php b/themes/default/views/admin/products/edit.blade.php index 9d3aec52..851142af 100644 --- a/themes/default/views/admin/products/edit.blade.php +++ b/themes/default/views/admin/products/edit.blade.php @@ -190,6 +190,10 @@ @endif> {{__('Monthly')}} +
    - {{ $server->product->price }} + {{ number_format($server->product->price) }}
    diff --git a/themes/default/views/servers/create.blade.php b/themes/default/views/servers/create.blade.php index b184d462..2a0a3d84 100644 --- a/themes/default/views/servers/create.blade.php +++ b/themes/default/views/servers/create.blade.php @@ -239,14 +239,14 @@
    - +
    @@ -376,6 +376,7 @@ .catch(console.error) this.fetchedProducts = true; + // TODO: Sortable by user chosen property (cpu, ram, disk...) this.products = response.data.sort((p1, p2) => parseInt(p1.price, 10) > parseInt(p2.price, 10) && 1 || -1) @@ -385,11 +386,19 @@ product.cpu = product.cpu / 100; }) + //format price to have no decimals if it is a whole number + this.products.forEach(product => { + if (product.price % 1 === 0) { + product.price = Math.round(product.price); + } + }) + this.loading = false; this.updateSelectedObjects() }, + /** * @description map selected id's to selected objects * @note being used in the server info box From 35734579ae23eb0399684e3a64eab5af21982a14 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 28 Jul 2022 23:20:39 +0200 Subject: [PATCH 85/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Server=20creation?= =?UTF-8?q?=20fail=20when=20server.price=20=3D=20user.credits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index f793ac3b..982e01f5 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -132,7 +132,7 @@ class ServerController extends Controller ($product->minimum_credits == -1 ? config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER', 50) : $product->minimum_credits) || - Auth::user()->credits <= $product->price + Auth::user()->credits < $product->price ) { return redirect()->route('servers.index')->with('error', 'You do not have the required amount of '.CREDITS_DISPLAY_NAME.' to use this product!'); } From cf62cdef1ff6f9b34d20222c08ed27d3d3d41ba7 Mon Sep 17 00:00:00 2001 From: IceToast Date: Thu, 28 Jul 2022 23:33:04 +0200 Subject: [PATCH 86/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20See=20last=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 982e01f5..7a6e93d3 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -128,10 +128,7 @@ class ServerController extends Controller // Min. Credits if ( - Auth::user()->credits < - ($product->minimum_credits == -1 - ? config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER', 50) - : $product->minimum_credits) || + Auth::user()->credits < $product->minimum_credits || Auth::user()->credits < $product->price ) { return redirect()->route('servers.index')->with('error', 'You do not have the required amount of '.CREDITS_DISPLAY_NAME.' to use this product!'); From d56bc09ac5608b4e1eab9809c4b359bae9382043 Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 15 Aug 2022 14:52:49 +0200 Subject: [PATCH 87/99] =?UTF-8?q?fix:=20=F0=9F=92=84=20Styling=20of=20serv?= =?UTF-8?q?er=20buttons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/views/servers/index.blade.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 0e5d6950..223bbab2 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -200,18 +200,25 @@ target="__blank" class="btn btn-info text-center float-left ml-2" data-toggle="tooltip" data-placement="bottom" title="{{ __('Manage Server') }}"> - + + @if(config("SETTINGS::SYSTEM:PTERODACTYL:ADMIN_USER_TOKEN")) + + + + @endif
    From 973e77569af1aa7443ca3b961d6bb43aedaafb5c Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 15 Aug 2022 14:56:34 +0200 Subject: [PATCH 88/99] chore: Docs --- Addon-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Addon-notes.md b/Addon-notes.md index baf40c6a..1d388742 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,3 @@ Export diff files: -git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf file.tgz -T - +git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - From 56aad2a7cb30b0953e1b8110cea8b25d07604bbf Mon Sep 17 00:00:00 2001 From: IceToast <> Date: Tue, 22 Nov 2022 12:23:33 +0100 Subject: [PATCH 89/99] fix: Number formatting on server overview (price) --- Addon-notes.md | 3 ++- resources/views/servers/index.blade.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Addon-notes.md b/Addon-notes.md index 1d388742..bed6f5a2 100644 --- a/Addon-notes.md +++ b/Addon-notes.md @@ -1,3 +1,4 @@ Export diff files: +Commit Hash of lates Main commit -git diff -r --no-commit-id --name-only --diff-filter=ACMR | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - +git diff -r --no-commit-id --name-only --diff-filter=ACMR \ | tar -czf ../controllpanelgg-monthly-addon/file.tgz -T - diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 223bbab2..7910a30a 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -188,7 +188,7 @@ @endif
    - {{ number_format($server->product->price) }} + {{ $server->product->price == round($server->product->price) ? round($server->product->price) : $server->product->price }} From 94cbea528c1c68bfcbcaf2b1f41125ebbc50f919 Mon Sep 17 00:00:00 2001 From: IceToast <> Date: Tue, 22 Nov 2022 13:42:46 +0100 Subject: [PATCH 90/99] Fixed Upgrade/Downgrade Credit withdrawal --- app/Http/Controllers/ServerController.php | 77 ++++++++++++------- .../default/views/servers/settings.blade.php | 10 +-- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 7a6e93d3..61ac4218 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -9,6 +9,8 @@ use App\Models\Nest; use App\Models\Node; use App\Models\Product; use App\Models\Server; +use App\Models\User; +use App\Models\Settings; use App\Notifications\ServerCreationError; use Carbon\Carbon; use Exception; @@ -231,8 +233,6 @@ class ServerController extends Controller */ private function serverCreationFailed(Response $response, Server $server) { - $server->delete(); - return redirect()->route('servers.index')->with('error', json_encode($response->json())); } @@ -265,9 +265,9 @@ class ServerController extends Controller /** Show Server Settings */ public function show(Server $server) { - if ($server->user_id != Auth::user()->id) { - return back()->with('error', __('´This is not your Server!')); - } + + + if($server->user_id != Auth::user()->id){ return back()->with('error', __('This is not your Server!'));} $serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id); $serverRelationships = $serverAttributes['relationships']; $serverLocationAttributes = $serverRelationships['location']['attributes']; @@ -308,10 +308,9 @@ class ServerController extends Controller public function upgrade(Server $server, Request $request) { - if ($server->user_id != Auth::user()->id) { - return redirect()->route('servers.index'); - } - if (! isset($request->product_upgrade)) { + if($server->user_id != Auth::user()->id || $server->suspended) return redirect()->route('servers.index'); + if(!isset($request->product_upgrade)) + { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('this product is the only one')); } $user = Auth::user(); @@ -333,27 +332,53 @@ class ServerController extends Controller return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to upgrade the server.")); } - $priceupgrade = $newProduct->getHourlyPrice(); + // calculate the amount of credits that the user overpayed for the old product when canceling the server right now + // billing periods are hourly, daily, weekly, monthly, quarterly, half-annually, annually + $billingPeriod = $oldProduct->billing_period; + // seconds + $billingPeriods = [ + 'hourly' => 3600, + 'daily' => 86400, + 'weekly' => 604800, + 'monthly' => 2592000, + 'quarterly' => 7776000, + 'half-annually' => 15552000, + 'annually' => 31104000 + ]; + // Get the amount of hours the user has been using the server + $billingPeriodMultiplier = $billingPeriods[$billingPeriod]; + $timeDifference = now()->diffInSeconds($server->last_billed); - if ($priceupgrade < $oldProduct->getHourlyPrice()) { - $priceupgrade = 0; - } - if ($user->credits >= $priceupgrade && $user->credits >= $newProduct->minimum_credits) { - $server->product_id = $request->product_upgrade; - $server->update(); + // Calculate the price for the time the user has been using the server + $overpayedCredits = $oldProduct->price - $oldProduct->price * ($timeDifference / $billingPeriodMultiplier); + + + if ($user->credits >= $newProduct->price && $user->credits >= $newProduct->minimum_credits) + { $server->allocation = $serverAttributes['allocation']; + // Update the server on the panel $response = Pterodactyl::updateServer($server, $newProduct); - if ($response->failed()) { - return $this->serverCreationFailed($response, $server); - } - //update user balance - $user->decrement('credits', $priceupgrade); - //restart the server - $response = Pterodactyl::powerAction($server, 'restart'); - if ($response->failed()) { - return redirect()->route('servers.index')->with('error', $response->json()['errors'][0]['detail']); - } + if ($response->failed()) return $this->serverCreationFailed($response, $server); + // Remove the allocation property from the server object as it is not a column in the database + unset($server->allocation); + // Update the server on controlpanel + $server->update([ + 'product_id' => $newProduct->id, + 'updated_at' => now(), + 'last_billed' => now(), + 'cancelled' => null, + ]); + + // Refund the user the overpayed credits + if ($overpayedCredits > 0) $user->increment('credits', $overpayedCredits); + + // Withdraw the credits for the new product + $user->decrement('credits', $newProduct->price); + + //restart the server + $response = Pterodactyl::powerAction($server, "restart"); + if ($response->failed()) return redirect()->route('servers.index')->with('error', 'Server upgraded successfully! Could not restart the server: '.$response->json()['errors'][0]['detail']); return redirect()->route('servers.show', ['server' => $server->id])->with('success', __('Server Successfully Upgraded')); } else { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('Not Enough Balance for Upgrade')); diff --git a/themes/default/views/servers/settings.blade.php b/themes/default/views/servers/settings.blade.php index 9fead681..c03eeade 100644 --- a/themes/default/views/servers/settings.blade.php +++ b/themes/default/views/servers/settings.blade.php @@ -243,10 +243,7 @@
    - + @@ -250,13 +251,12 @@
    + - - - - + + From 255671e20da007c7f6a5fed7d2d53b16062a8b79 Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 6 Feb 2023 14:45:44 +0100 Subject: [PATCH 94/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Merge=20issues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 50 ++- app/Models/User.php | 13 +- resources/views/servers/index.blade.php | 295 --------------- themes/default/views/servers/create.blade.php | 22 +- themes/default/views/servers/index.blade.php | 346 ++++++++++++------ 5 files changed, 280 insertions(+), 446 deletions(-) delete mode 100644 resources/views/servers/index.blade.php diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 61ac4218..8822ad3a 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -33,7 +33,7 @@ class ServerController extends Controller //Get server infos from ptero $serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id, true); - if (! $serverAttributes) { + if (!$serverAttributes) { continue; } $serverRelationships = $serverAttributes['relationships']; @@ -70,7 +70,7 @@ class ServerController extends Controller /** Show the form for creating a new resource. */ public function create() { - if (! is_null($this->validateConfigurationRules())) { + if (!is_null($this->validateConfigurationRules())) { return $this->validateConfigurationRules(); } @@ -125,7 +125,7 @@ class ServerController extends Controller // Check if node has enough memory and disk space $checkResponse = Pterodactyl::checkNodeResources($node, $product->memory, $product->disk); if ($checkResponse == false) { - return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to allocate this product.")); + return redirect()->route('servers.index')->with('error', __("The node '" . $nodeName . "' doesn't have the required memory or disk left to allocate this product.")); } // Min. Credits @@ -133,23 +133,23 @@ class ServerController extends Controller Auth::user()->credits < $product->minimum_credits || Auth::user()->credits < $product->price ) { - return redirect()->route('servers.index')->with('error', 'You do not have the required amount of '.CREDITS_DISPLAY_NAME.' to use this product!'); + return redirect()->route('servers.index')->with('error', 'You do not have the required amount of ' . CREDITS_DISPLAY_NAME . ' to use this product!'); } } //Required Verification for creating an server - if (config('SETTINGS::USER:FORCE_EMAIL_VERIFICATION', 'false') === 'true' && ! Auth::user()->hasVerifiedEmail()) { + if (config('SETTINGS::USER:FORCE_EMAIL_VERIFICATION', 'false') === 'true' && !Auth::user()->hasVerifiedEmail()) { return redirect()->route('profile.index')->with('error', __('You are required to verify your email address before you can create a server.')); } //Required Verification for creating an server - if (! config('SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS', 'true') && Auth::user()->role != 'admin') { + if (!config('SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS', 'true') && Auth::user()->role != 'admin') { return redirect()->route('servers.index')->with('error', __('The system administrator has blocked the creation of new servers.')); } //Required Verification for creating an server - if (config('SETTINGS::USER:FORCE_DISCORD_VERIFICATION', 'false') === 'true' && ! Auth::user()->discordUser) { + if (config('SETTINGS::USER:FORCE_DISCORD_VERIFICATION', 'false') === 'true' && !Auth::user()->discordUser) { return redirect()->route('profile.index')->with('error', __('You are required to link your discord account before you can create a server.')); } @@ -162,7 +162,7 @@ class ServerController extends Controller /** @var Node $node */ /** @var Egg $egg */ /** @var Product $product */ - if (! is_null($this->validateConfigurationRules())) { + if (!is_null($this->validateConfigurationRules())) { return $this->validateConfigurationRules(); } @@ -186,7 +186,7 @@ class ServerController extends Controller //get free allocation ID $allocationId = Pterodactyl::getFreeAllocationId($node); - if (! $allocationId) { + if (!$allocationId) { return $this->noAllocationsError($server); } @@ -249,13 +249,9 @@ class ServerController extends Controller } /** Cancel Server */ - public function cancel (Server $server) + public function cancel(Server $server) { try { - error_log($server->update([ - 'cancelled' => now(), - ])); - return redirect()->route('servers.index')->with('success', __('Server cancelled')); } catch (Exception $e) { return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); @@ -267,7 +263,9 @@ class ServerController extends Controller { - if($server->user_id != Auth::user()->id){ return back()->with('error', __('This is not your Server!'));} + if ($server->user_id != Auth::user()->id) { + return back()->with('error', __('This is not your Server!')); + } $serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id); $serverRelationships = $serverAttributes['relationships']; $serverLocationAttributes = $serverRelationships['location']['attributes']; @@ -287,10 +285,10 @@ class ServerController extends Controller $pteroNode = Pterodactyl::getNode($serverRelationships['node']['attributes']['id']); $products = Product::orderBy('created_at') - ->whereHas('nodes', function (Builder $builder) use ($serverRelationships) { //Only show products for that node - $builder->where('id', '=', $serverRelationships['node']['attributes']['id']); - }) - ->get(); + ->whereHas('nodes', function (Builder $builder) use ($serverRelationships) { //Only show products for that node + $builder->where('id', '=', $serverRelationships['node']['attributes']['id']); + }) + ->get(); // Set the each product eggs array to just contain the eggs name foreach ($products as $product) { @@ -308,9 +306,8 @@ class ServerController extends Controller public function upgrade(Server $server, Request $request) { - if($server->user_id != Auth::user()->id || $server->suspended) return redirect()->route('servers.index'); - if(!isset($request->product_upgrade)) - { + if ($server->user_id != Auth::user()->id || $server->suspended) return redirect()->route('servers.index'); + if (!isset($request->product_upgrade)) { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('this product is the only one')); } $user = Auth::user(); @@ -329,7 +326,7 @@ class ServerController extends Controller $requiredisk = $newProduct->disk - $oldProduct->disk; $checkResponse = Pterodactyl::checkNodeResources($node, $requireMemory, $requiredisk); if ($checkResponse == false) { - return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to upgrade the server.")); + return redirect()->route('servers.index')->with('error', __("The node '" . $nodeName . "' doesn't have the required memory or disk left to upgrade the server.")); } // calculate the amount of credits that the user overpayed for the old product when canceling the server right now @@ -353,8 +350,7 @@ class ServerController extends Controller $overpayedCredits = $oldProduct->price - $oldProduct->price * ($timeDifference / $billingPeriodMultiplier); - if ($user->credits >= $newProduct->price && $user->credits >= $newProduct->minimum_credits) - { + if ($user->credits >= $newProduct->price && $user->credits >= $newProduct->minimum_credits) { $server->allocation = $serverAttributes['allocation']; // Update the server on the panel $response = Pterodactyl::updateServer($server, $newProduct); @@ -374,11 +370,11 @@ class ServerController extends Controller if ($overpayedCredits > 0) $user->increment('credits', $overpayedCredits); // Withdraw the credits for the new product - $user->decrement('credits', $newProduct->price); + $user->decrement('credits', $newProduct->price); //restart the server $response = Pterodactyl::powerAction($server, "restart"); - if ($response->failed()) return redirect()->route('servers.index')->with('error', 'Server upgraded successfully! Could not restart the server: '.$response->json()['errors'][0]['detail']); + if ($response->failed()) return redirect()->route('servers.index')->with('error', 'Server upgraded successfully! Could not restart the server: ' . $response->json()['errors'][0]['detail']); return redirect()->route('servers.show', ['server' => $server->id])->with('success', __('Server Successfully Upgraded')); } else { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('Not Enough Balance for Upgrade')); diff --git a/app/Models/User.php b/app/Models/User.php index 91e15cab..199bb25d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -185,7 +185,7 @@ class User extends Authenticatable implements MustVerifyEmail } /** - * @throws Exception + * @throws \Exception */ public function suspend() { @@ -201,7 +201,7 @@ class User extends Authenticatable implements MustVerifyEmail } /** - * @throws Exception + * @throws \Exception */ public function unSuspend() { @@ -218,12 +218,6 @@ class User extends Authenticatable implements MustVerifyEmail return $this; } - private function getServersWithProduct() - { - return $this->servers() - ->with('product') - ->get(); - } /** * @return string @@ -257,7 +251,8 @@ class User extends Authenticatable implements MustVerifyEmail return number_format($usage, 2, '.', ''); } - private function getServersWithProduct() { + private function getServersWithProduct() + { return $this->servers() ->whereNull('suspended') ->whereNull('cancelled') diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php deleted file mode 100644 index 7910a30a..00000000 --- a/resources/views/servers/index.blade.php +++ /dev/null @@ -1,295 +0,0 @@ -@extends('layouts.main') - -@section('content') - -
    -
    -
    -
    -

    {{ __('Servers') }}

    -
    - -
    -
    -
    - - - -
    -
    - - - - -
    - @foreach ($servers as $server) -
    -
    -
    -
    {{ $server->name }} -
    -
    - -
    -
    -
    -
    -
    -
    -
    {{ __('Status') }}:
    -
    - @if($server->suspended) - {{ __('Suspended') }} - @elseif($server->cancelled) - {{ __('Cancelled') }} - @else - {{ __('Active') }} - @endif -
    -
    -
    -
    - {{ __('Location') }}: -
    -
    - {{ $server->location }} - -
    - -
    -
    -
    - {{ __('Software') }}: -
    -
    - {{ $server->nest }} -
    - -
    -
    -
    - {{ __('Specification') }}: -
    -
    - {{ $server->egg }} -
    -
    -
    -
    - {{ __('Resource plan') }}: -
    -
    - {{ $server->product->name }} - - -
    -
    - -
    -
    - {{ __('Next Billing Cycle') }}: -
    -
    - - @if ($server->suspended) - - - @else - @switch($server->product->billing_period) - @case('monthly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} - @break - @case('weekly') - {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} - @break - @case('daily') - {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} - @break - @case('hourly') - {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} - @break - @case('quarterly') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(3)->toDayDateTimeString(); }} - @break - @case('half-annually') - {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} - @break - @case('annually') - {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} - @break - @default - {{ __('Unknown') }} - @endswitch - @endif - -
    -
    - -
    -
    - {{ __('Price') }}: - - ({{ CREDITS_DISPLAY_NAME }}) - -
    -
    -
    - @if($server->product->billing_period == 'monthly') - {{ __('per Month') }} - @elseif($server->product->billing_period == 'half-annually') - {{ __('per 6 Months') }} - @elseif($server->product->billing_period == 'quarterly') - {{ __('per 3 Months') }} - @elseif($server->product->billing_period == 'annually') - {{ __('per Year') }} - @elseif($server->product->billing_period == 'weekly') - {{ __('per Week') }} - @elseif($server->product->billing_period == 'daily') - {{ __('per Day') }} - @elseif($server->product->billing_period == 'hourly') - {{ __('per Hour') }} - @endif -
    - - {{ $server->product->price == round($server->product->price) ? round($server->product->price) : $server->product->price }} - -
    -
    -
    -
    - - -
    - @endforeach -
    - -
    -
    - - - -@endsection diff --git a/themes/default/views/servers/create.blade.php b/themes/default/views/servers/create.blade.php index 0a91cc04..ec18ebfe 100644 --- a/themes/default/views/servers/create.blade.php +++ b/themes/default/views/servers/create.blade.php @@ -213,11 +213,11 @@ -
  • +
  • {{ __('Minimum') }} {{ CREDITS_DISPLAY_NAME }} + x-text="product.minimum_credits == -1 ? {{ config('SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER') }} : Math.round(product.minimum_credits)">
  • @@ -240,14 +240,16 @@
    - +
    diff --git a/themes/default/views/servers/index.blade.php b/themes/default/views/servers/index.blade.php index ef856b6a..7910a30a 100644 --- a/themes/default/views/servers/index.blade.php +++ b/themes/default/views/servers/index.blade.php @@ -36,124 +36,260 @@ class="fa fa-plus mr-2">
    {{ __('Create Server') }} - @if (Auth::user()->Servers->count() > 0&&!empty(config('SETTINGS::MISC:PHPMYADMIN:URL'))) - {{ __('Database') }} - - @endif
    @foreach ($servers as $server) - @if($server->location&&$server->node&&$server->nest&&$server->egg) -
    -
    -
    -
    {{ $server->name }} -
    -
    -
    -
    -
    -
    -
    {{ __('Status') }}:
    -
    - - {{ $server->isSuspended() ? 'Suspended' : 'Active' }} -
    -
    -
    -
    - {{ __('Location') }}: -
    -
    - {{ $server->location }} - -
    - -
    -
    -
    - {{ __('Software') }}: -
    -
    - {{ $server->nest }} -
    - -
    -
    -
    - {{ __('Specification') }}: -
    -
    - {{ $server->egg }} -
    -
    -
    -
    - {{ __('Resource plan') }}: -
    -
    - {{ $server->product->name }} - - -
    - -
    -
    -
    - {{ __('Price') }}: - - ({{ CREDITS_DISPLAY_NAME }}) - -
    -
    -
    -
    -
    {{ __('per Hour') }}
    - - {{ number_format($server->product->getHourlyPrice(), 2, '.', '') }} - -
    -
    -
    {{ __('per Month') }} -
    - - {{ $server->product->getHourlyPrice() * 24 * 30 }} - -
    -
    +
    +
    +
    +
    {{ $server->name }} +
    +
    +
    - -
    - @endif +
    +
    +
    +
    {{ __('Status') }}:
    +
    + @if($server->suspended) + {{ __('Suspended') }} + @elseif($server->cancelled) + {{ __('Cancelled') }} + @else + {{ __('Active') }} + @endif +
    +
    +
    +
    + {{ __('Location') }}: +
    +
    + {{ $server->location }} + +
    + +
    +
    +
    + {{ __('Software') }}: +
    +
    + {{ $server->nest }} +
    + +
    +
    +
    + {{ __('Specification') }}: +
    +
    + {{ $server->egg }} +
    +
    +
    +
    + {{ __('Resource plan') }}: +
    +
    + {{ $server->product->name }} + + +
    +
    + +
    +
    + {{ __('Next Billing Cycle') }}: +
    +
    + + @if ($server->suspended) + - + @else + @switch($server->product->billing_period) + @case('monthly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }} + @break + @case('weekly') + {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }} + @break + @case('daily') + {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }} + @break + @case('hourly') + {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }} + @break + @case('quarterly') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(3)->toDayDateTimeString(); }} + @break + @case('half-annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }} + @break + @case('annually') + {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }} + @break + @default + {{ __('Unknown') }} + @endswitch + @endif + +
    +
    + +
    +
    + {{ __('Price') }}: + + ({{ CREDITS_DISPLAY_NAME }}) + +
    +
    +
    + @if($server->product->billing_period == 'monthly') + {{ __('per Month') }} + @elseif($server->product->billing_period == 'half-annually') + {{ __('per 6 Months') }} + @elseif($server->product->billing_period == 'quarterly') + {{ __('per 3 Months') }} + @elseif($server->product->billing_period == 'annually') + {{ __('per Year') }} + @elseif($server->product->billing_period == 'weekly') + {{ __('per Week') }} + @elseif($server->product->billing_period == 'daily') + {{ __('per Day') }} + @elseif($server->product->billing_period == 'hourly') + {{ __('per Hour') }} + @endif +
    + + {{ $server->product->price == round($server->product->price) ? round($server->product->price) : $server->product->price }} + +
    +
    +
    +
    + + +
    @endforeach
    + + @endsection From ae9ab59dec6aeda9bad891f5e582529bfe24e7d3 Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 8 May 2023 11:10:51 +0200 Subject: [PATCH 95/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Make=20migrations?= =?UTF-8?q?=20be=20compatible=20to=20installed=20addon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...022_07_21_234818_undo_decimal_in_price.php | 32 ------------------- ...092704_add_billing_period_to_products.php} | 8 +++-- ...8_094402_update_user_credits_datatype.php} | 3 +- ...5818_add_last_billed_field_to_servers.php} | 5 +++ ...4527_add_cancelation_to_servers_table.php} | 5 +++ lang/en.json | 1 - 6 files changed, 17 insertions(+), 37 deletions(-) delete mode 100644 database/migrations/2022_07_21_234818_undo_decimal_in_price.php rename database/migrations/{2022_06_16_092704_add_billing_period_to_products.php => 2023_05_08_092704_add_billing_period_to_products.php} (89%) rename database/migrations/{2022_06_16_094402_update_user_credits_datatype.php => 2023_05_08_094402_update_user_credits_datatype.php} (89%) rename database/migrations/{2022_06_16_095818_add_last_billed_field_to_servers.php => 2023_05_08_095818_add_last_billed_field_to_servers.php} (83%) rename database/migrations/{2022_07_21_234527_add_cancelation_to_servers_table.php => 2023_05_08_234527_add_cancelation_to_servers_table.php} (82%) diff --git a/database/migrations/2022_07_21_234818_undo_decimal_in_price.php b/database/migrations/2022_07_21_234818_undo_decimal_in_price.php deleted file mode 100644 index cf4abb69..00000000 --- a/database/migrations/2022_07_21_234818_undo_decimal_in_price.php +++ /dev/null @@ -1,32 +0,0 @@ -decimal('price', 15, 4)->change(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('products', function (Blueprint $table) { - $table->decimal('price',['11','2'])->change(); - }); - } -} diff --git a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php b/database/migrations/2023_05_08_092704_add_billing_period_to_products.php similarity index 89% rename from database/migrations/2022_06_16_092704_add_billing_period_to_products.php rename to database/migrations/2023_05_08_092704_add_billing_period_to_products.php index ceed9362..c4a7ac9a 100644 --- a/database/migrations/2022_06_16_092704_add_billing_period_to_products.php +++ b/database/migrations/2023_05_08_092704_add_billing_period_to_products.php @@ -14,11 +14,16 @@ class AddBillingPeriodToProducts extends Migration */ public function up() { + // User already has installed the addon before + if (Schema::hasColumn("products", "billing_period")) { + return; + } + Schema::table('products', function (Blueprint $table) { + $table->string('billing_period')->default("hourly"); $table->decimal('price', 15, 4)->change(); $table->decimal('minimum_credits', 15, 4)->change(); - }); DB::statement('UPDATE products SET billing_period="hourly"'); @@ -29,7 +34,6 @@ class AddBillingPeriodToProducts extends Migration $price = $price / 30 / 24; DB::table('products')->where('id', $product->id)->update(['price' => $price]); } - } /** diff --git a/database/migrations/2022_06_16_094402_update_user_credits_datatype.php b/database/migrations/2023_05_08_094402_update_user_credits_datatype.php similarity index 89% rename from database/migrations/2022_06_16_094402_update_user_credits_datatype.php rename to database/migrations/2023_05_08_094402_update_user_credits_datatype.php index ed5922e8..292102cc 100644 --- a/database/migrations/2022_06_16_094402_update_user_credits_datatype.php +++ b/database/migrations/2023_05_08_094402_update_user_credits_datatype.php @@ -26,8 +26,7 @@ class UpdateUserCreditsDatatype extends Migration public function down() { Schema::table('users', function (Blueprint $table) { - $table->unsignedFloat('credits')->default(250)->change(); - + $table->decimal('price', ['11', '2'])->change(); }); } } diff --git a/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php b/database/migrations/2023_05_08_095818_add_last_billed_field_to_servers.php similarity index 83% rename from database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php rename to database/migrations/2023_05_08_095818_add_last_billed_field_to_servers.php index 6b05f3a5..9d43ae96 100644 --- a/database/migrations/2022_06_16_095818_add_last_billed_field_to_servers.php +++ b/database/migrations/2023_05_08_095818_add_last_billed_field_to_servers.php @@ -14,6 +14,11 @@ class AddLastBilledFieldToServers extends Migration */ public function up() { + // User already has installed the addon before + if (Schema::hasColumn("servers", "last_billed")) { + return; + } + Schema::table('servers', function (Blueprint $table) { $table->dateTime('last_billed')->default(DB::raw('CURRENT_TIMESTAMP'))->nullable(); }); diff --git a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php b/database/migrations/2023_05_08_234527_add_cancelation_to_servers_table.php similarity index 82% rename from database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php rename to database/migrations/2023_05_08_234527_add_cancelation_to_servers_table.php index 15fafb16..0d0f4e20 100644 --- a/database/migrations/2022_07_21_234527_add_cancelation_to_servers_table.php +++ b/database/migrations/2023_05_08_234527_add_cancelation_to_servers_table.php @@ -13,6 +13,11 @@ class AddCancelationToServersTable extends Migration */ public function up() { + // User already has installed the addon before + if (Schema::hasColumn("servers", "cancelled")) { + return; + } + Schema::table('servers', function (Blueprint $table) { $table->dateTime('cancelled')->nullable(); }); diff --git a/lang/en.json b/lang/en.json index 4db85206..90f23aae 100644 --- a/lang/en.json +++ b/lang/en.json @@ -600,5 +600,4 @@ "Billing period": "Billing period", "Upgrading/Downgrading your server will reset your billing cycle to now. Your overpayed Credits will be refunded. The price for the new billing cycle will be withdrawed": "Upgrading/Downgrading your server will reset your billing cycle to now. Your overpayed Credits will be refunded. The price for the new billing cycle will be withdrawed", "Caution": "Caution" - "hu": "Hungarian" } From ad5ff407614cac9b1c037e1ceb0f6b8bd941ecf0 Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 8 May 2023 11:26:47 +0200 Subject: [PATCH 96/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Old=20settings=20re?= =?UTF-8?q?lict?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ServerController.php | 16 ++++++++-------- themes/default/views/servers/index.blade.php | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 23d032bf..10917ee0 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -48,7 +48,7 @@ class ServerController extends Controller //Get server infos from ptero $serverAttributes = $this->pterodactyl->getServerAttributes($server->pterodactyl_id); - if (! $serverAttributes) { + if (!$serverAttributes) { continue; } $serverRelationships = $serverAttributes['relationships']; @@ -90,7 +90,7 @@ class ServerController extends Controller { $this->checkPermission(self::CREATE_PERMISSION); - $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings); + $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings, $general_settings); if (!is_null($validate_configuration)) { return $validate_configuration; @@ -132,7 +132,7 @@ class ServerController extends Controller /** * @return null|RedirectResponse */ - private function validateConfigurationRules(UserSettings $user_settings, ServerSettings $server_settings) + private function validateConfigurationRules(UserSettings $user_settings, ServerSettings $server_settings, GeneralSettings $generalSettings) { //limit validation if (Auth::user()->servers()->count() >= Auth::user()->server_limit) { @@ -157,7 +157,7 @@ class ServerController extends Controller if (Auth::user()->credits < ($product->minimum_credits == -1 ? $user_settings->min_credits_to_make_server : $product->minimum_credits)) { - return redirect()->route('servers.index')->with('error', 'You do not have the required amount of '.CREDITS_DISPLAY_NAME.' to use this product!'); + return redirect()->route('servers.index')->with('error', 'You do not have the required amount of ' . $generalSettings->credits_display_name . ' to use this product!'); } } @@ -180,12 +180,12 @@ class ServerController extends Controller } /** Store a newly created resource in storage. */ - public function store(Request $request, UserSettings $user_settings, ServerSettings $server_settings) + public function store(Request $request, UserSettings $user_settings, ServerSettings $server_settings, GeneralSettings $generalSettings) { /** @var Node $node */ /** @var Egg $egg */ /** @var Product $product */ - $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings); + $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings, $generalSettings); if (!is_null($validate_configuration)) { return $validate_configuration; @@ -211,7 +211,7 @@ class ServerController extends Controller //get free allocation ID $allocationId = $this->pterodactyl->getFreeAllocationId($node); - if (! $allocationId) { + if (!$allocationId) { return $this->noAllocationsError($server); } @@ -338,7 +338,7 @@ class ServerController extends Controller if ($server->user_id != Auth::user()->id) { return redirect()->route('servers.index'); } - if (! isset($request->product_upgrade)) { + if (!isset($request->product_upgrade)) { return redirect()->route('servers.show', ['server' => $server->id])->with('error', __('this product is the only one')); } $user = Auth::user(); diff --git a/themes/default/views/servers/index.blade.php b/themes/default/views/servers/index.blade.php index 74dc6378..83b39354 100644 --- a/themes/default/views/servers/index.blade.php +++ b/themes/default/views/servers/index.blade.php @@ -174,7 +174,7 @@
    {{ __('Price') }}: - ({{ CREDITS_DISPLAY_NAME }}) + ({{ $credits_display_name }})
    From da338aacdcc8d11d48537b561c0750ff8ead3dba Mon Sep 17 00:00:00 2001 From: IceToast Date: Mon, 8 May 2023 11:35:28 +0200 Subject: [PATCH 97/99] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Old=20settings=20re?= =?UTF-8?q?lict=20the=20second?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/default/views/servers/index.blade.php | 22 +++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/themes/default/views/servers/index.blade.php b/themes/default/views/servers/index.blade.php index 83b39354..e700b15d 100644 --- a/themes/default/views/servers/index.blade.php +++ b/themes/default/views/servers/index.blade.php @@ -204,19 +204,17 @@