diff --git a/Modules/Core/composer.json b/Modules/Core/composer.json index 786602c78..80ad1e25b 100644 --- a/Modules/Core/composer.json +++ b/Modules/Core/composer.json @@ -20,24 +20,30 @@ "source": "https://github.com/AsgardCms/Core" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "nwidart/laravel-modules": "^8.0", - "laravelcollective/html": "^6.0", - "laracasts/presenter": "^0.2.4", - "astrotomic/laravel-translatable": "^11.9", - "mcamara/laravel-localization": "^1.6", - "imagina/stylist": "^3.0", - "maatwebsite/laravel-sidebar": "^2.4", - "yajra/laravel-datatables-oracle": "~9.0", - "tightenco/ziggy": "^0.9.4" + "nwidart/laravel-modules": "~9.0", + "laravelcollective/html": "~6.2", + "laracasts/presenter": "~0.2", + "astrotomic/laravel-translatable": "~11.11", + "mcamara/laravel-localization": "~1.7", + "imagina/stylist": "dev-master", + "maatwebsite/laravel-sidebar": "~2.1", + "yajra/laravel-datatables-oracle": "~10.2", + "tightenco/ziggy": "~1.5" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "mockery/mockery": "^0.9.4", - "friendsofphp/php-cs-fixer": "^2.12" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16", + "mockery/mockery": "^1.4.4", + "friendsofphp/php-cs-fixer": "^3.13" }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/dineshsailor/imagina-stylist" + } + ], "suggest": { "asgardcms/notification-module": "Allows notifications to be sent to the user. Optionally real-time notifications." }, diff --git a/Modules/Dashboard/composer.json b/Modules/Dashboard/composer.json index 862ee3867..96af26af8 100644 --- a/Modules/Dashboard/composer.json +++ b/Modules/Dashboard/composer.json @@ -20,11 +20,11 @@ "source": "https://github.com/AsgardCms/Dashboard" }, "require": { - "php": ">=7.0", + "php": "^8.0", "composer/installers": "~1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.12" + "friendsofphp/php-cs-fixer": "^3.13" }, "extra": { "branch-alias": { @@ -32,5 +32,10 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "composer/installers": false + } + } } diff --git a/Modules/Media/Image/Imagy.php b/Modules/Media/Image/Imagy.php index 1627ab5e3..25bb03caf 100644 --- a/Modules/Media/Image/Imagy.php +++ b/Modules/Media/Image/Imagy.php @@ -158,7 +158,7 @@ private function writeImage($filename, Stream $image) $resource = $image->detach(); $config = [ 'visibility' => 'public', - 'mimetype' => \GuzzleHttp\Psr7\mimetype_from_filename($filename), + 'mimetype' => \GuzzleHttp\Psr7\MimeType::fromFilename($filename), ]; if ($this->fileExists($filename)) { return $this->filesystem->disk($this->getConfiguredFilesystem())->updateStream($filename, $resource, $config); diff --git a/Modules/Media/Tests/ThumbnailsManagerTest.php b/Modules/Media/Tests/ThumbnailsManagerTest.php index e684e185c..02d023797 100644 --- a/Modules/Media/Tests/ThumbnailsManagerTest.php +++ b/Modules/Media/Tests/ThumbnailsManagerTest.php @@ -3,6 +3,7 @@ namespace Modules\Media\Tests; use Modules\Media\Image\ThumbnailManager; +use Modules\Media\Tests\MediaTestCase; class ThumbnailsManagerTest extends MediaTestCase { @@ -11,7 +12,7 @@ class ThumbnailsManagerTest extends MediaTestCase */ private $thumbnailManager; - public function setUp(): void + public function setUp() { parent::setUp(); $this->thumbnailManager = app(ThumbnailManager::class); diff --git a/Modules/Media/composer.json b/Modules/Media/composer.json index 7ef34eee2..70007782e 100644 --- a/Modules/Media/composer.json +++ b/Modules/Media/composer.json @@ -24,20 +24,26 @@ "source": "https://github.com/AsgardCms/Media" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "intervention/image": "^2.5", - "idavoll/tag-module": "4.0.x-dev", - "guzzlehttp/psr7": "^1.3" + "intervention/image": "^2.7", + "idavoll/tag-module": "dev-master", + "guzzlehttp/psr7": "^2.4" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "league/flysystem-aws-s3-v3": "~1.0", - "mockery/mockery": "^0.9.5", - "friendsofphp/php-cs-fixer": "^2.12", - "doctrine/dbal": "^2.11" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16", + "league/flysystem-aws-s3-v3": "~3.10", + "mockery/mockery": "^1.5.1", + "friendsofphp/php-cs-fixer": "~3.13", + "doctrine/dbal": "^3.5" }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/varshaaweblabs/Idavoll-Tag" + } + ], "autoload-dev": { "psr-4": { "Modules\\Media\\": ".", diff --git a/Modules/Menu/composer.json b/Modules/Menu/composer.json index 2c924d13d..475c771ae 100644 --- a/Modules/Menu/composer.json +++ b/Modules/Menu/composer.json @@ -22,18 +22,27 @@ "source": "https://github.com/AsgardCms/Menu" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "nwidart/laravel-menus": "^7.0", - "typicms/nestablecollection": "^1.1" + "nwidart/laravel-menus": "dev-master", + "typicms/nestablecollection": "~2.0" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "fzaninotto/faker": "1.4.0", - "doctrine/dbal": "^2.11", - "idavoll/page-module": "4.0.x-dev" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16", + "doctrine/dbal": "~3.5", + "idavoll/page-module": "dev-master" }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/dineshsailor/nWidart-laravel-menus" + }, + { + "type": "git", + "url": "https://github.com/varshaaweblabs/Idavoll-Page" + } + ], "autoload-dev": { "psr-4": { "Modules\\Menu\\": ".", diff --git a/Modules/Page/composer.json b/Modules/Page/composer.json index 32581ce3d..a0c6badb1 100644 --- a/Modules/Page/composer.json +++ b/Modules/Page/composer.json @@ -20,14 +20,20 @@ "source": "https://github.com/AsgardCms/Page" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "idavoll/tag-module": "4.0.x-dev" + "idavoll/tag-module": "dev-master" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16" }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/dineshsailor/Idavoll-Tag" + } + ], "autoload-dev": { "psr-4": { "Modules\\Page\\": ".", diff --git a/Modules/Setting/composer.json b/Modules/Setting/composer.json index d5f617e0c..6362e0115 100644 --- a/Modules/Setting/composer.json +++ b/Modules/Setting/composer.json @@ -20,13 +20,13 @@ "source": "https://github.com/AsgardCms/Setting" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "doctrine/dbal": "^2.11" + "doctrine/dbal": "^3.5.1" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16" }, "autoload-dev": { "psr-4": { @@ -40,5 +40,10 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "composer/installers": false + } + } } diff --git a/Modules/Tag/composer.json b/Modules/Tag/composer.json index ee30a98d3..151e3d635 100644 --- a/Modules/Tag/composer.json +++ b/Modules/Tag/composer.json @@ -15,14 +15,20 @@ } ], "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "idavoll/page-module": "4.0.x-dev" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16", + "idavoll/page-module": "dev-master" }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/dineshsailor/Idavoll-Page" + } + ], "autoload": { "psr-4": { "Modules\\Tag\\": "" diff --git a/Modules/Translation/Importers/TranslationsImporter.php b/Modules/Translation/Importers/TranslationsImporter.php index 294f0f656..f6d1bb014 100644 --- a/Modules/Translation/Importers/TranslationsImporter.php +++ b/Modules/Translation/Importers/TranslationsImporter.php @@ -4,6 +4,8 @@ use Illuminate\Support\Arr; use League\Csv\Reader; +use League\Csv\Statement; +use function League\Csv\delimiter_detect; use Modules\Translation\Repositories\TranslationRepository; use Symfony\Component\HttpFoundation\File\UploadedFile; @@ -21,12 +23,13 @@ public function __construct(TranslationRepository $translation) public function import(UploadedFile $file) { - $csv = Reader::createFromPath($file->getRealPath()); - $csv->detectDelimiterList(5, [',', ';']); + $csv = Reader::createFromPath($file->getRealPath(), 'r'); + delimiter_detect($csv, [',', ';', "\t"], 10); $headers = $csv->fetchOne(); - $csv->setOffset(1); - $csv->each(function ($row) use ($headers) { + $stmt = Statement::create()->offset(1); + $records = $stmt->process($csv); + foreach ($records as $offset => $row) { try { $row = array_combine($headers, $row); } catch (\Exception $e) { @@ -35,14 +38,12 @@ public function import(UploadedFile $file) $key = Arr::get($row, 'key'); array_shift($row); + $data = []; foreach ($row as $locale => $value) { $data[$locale] = ['value' => $value]; } - $this->translation->updateFromImport($key, $data); - - return true; - }); + } } } diff --git a/Modules/Translation/composer.json b/Modules/Translation/composer.json index 6ba659a91..e91671147 100644 --- a/Modules/Translation/composer.json +++ b/Modules/Translation/composer.json @@ -4,14 +4,14 @@ "type": "asgard-module", "license": "MIT", "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "league/csv": "~7.2.0", - "venturecraft/revisionable": "^1.35" + "league/csv": "~9.8.0", + "venturecraft/revisionable": "^1.39" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~v7.16" }, "autoload": { "psr-4": { @@ -36,5 +36,10 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "composer/installers": false + } + } } diff --git a/Modules/User/Guards/Sentinel.php b/Modules/User/Guards/Sentinel.php index 104fc05aa..b4a736f26 100644 --- a/Modules/User/Guards/Sentinel.php +++ b/Modules/User/Guards/Sentinel.php @@ -12,7 +12,7 @@ class Sentinel implements LaravelGuard * Determine if the current user is authenticated. * @return bool */ - public function check() + public function check(): bool { if (SentinelFacade::check()) { return true; @@ -25,7 +25,7 @@ public function check() * Determine if the current user is a guest. * @return bool */ - public function guest() + public function guest(): bool { return SentinelFacade::guest(); } @@ -34,7 +34,7 @@ public function guest() * Get the currently authenticated user. * @return \Illuminate\Contracts\Auth\Authenticatable|null */ - public function user() + public function user(): ?Authenticatable { return SentinelFacade::getUser(); } @@ -43,7 +43,7 @@ public function user() * Get the ID for the currently authenticated user. * @return int|null */ - public function id() + public function id(): ?int { if ($user = SentinelFacade::check()) { return $user->id; @@ -57,7 +57,7 @@ public function id() * @param array $credentials * @return bool */ - public function validate(array $credentials = []) + public function validate(array $credentials = []): bool { return SentinelFacade::validForCreation($credentials); } @@ -67,17 +67,26 @@ public function validate(array $credentials = []) * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return bool */ - public function setUser(Authenticatable $user) + public function setUser(Authenticatable $user): bool { return SentinelFacade::login($user); } + /** + * Determine if the guard has a user instance.* + * @return bool + */ + public function hasUser(): bool + { + return !is_null($this->user()); + } + /** * Alias to set the current user. * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return bool */ - public function login(Authenticatable $user) + public function login(Authenticatable $user): bool { return $this->setUser($user); } @@ -87,7 +96,7 @@ public function login(Authenticatable $user) * @param bool $remember * @return bool */ - public function attempt(array $credentials, $remember = false) + public function attempt(array $credentials, bool $remember = false): bool { return SentinelFacade::authenticate($credentials, $remember); } @@ -95,7 +104,7 @@ public function attempt(array $credentials, $remember = false) /** * @return bool */ - public function logout() + public function logout(): bool { return SentinelFacade::logout(); } @@ -104,7 +113,7 @@ public function logout() * @param int $userId * @return bool */ - public function loginUsingId($userId) + public function loginUsingId(int $userId): bool { $user = app(\Modules\User\Repositories\UserRepository::class)->find($userId); diff --git a/Modules/User/composer.json b/Modules/User/composer.json index 300d48530..53e6225df 100644 --- a/Modules/User/composer.json +++ b/Modules/User/composer.json @@ -22,16 +22,15 @@ "source": "https://github.com/AsgardCms/User" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "ramsey/uuid": "^4.0" + "ramsey/uuid": "^4.6" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "scrutinizer/ocular": "~1.1", - "fzaninotto/faker": "~1.5", - "mockery/mockery": "^0.9.4" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "~7.16", + "scrutinizer/ocular": "~1.9", + "mockery/mockery": "^1.5.1" }, "autoload": { "psr-4": { @@ -50,5 +49,10 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "composer/installers": false + } + } } diff --git a/Modules/Workshop/composer.json b/Modules/Workshop/composer.json index d6e609418..96086606f 100644 --- a/Modules/Workshop/composer.json +++ b/Modules/Workshop/composer.json @@ -21,14 +21,14 @@ "source": "https://github.com/AsgardCms/Workshop" }, "require": { - "php": "^7.1.3", + "php": "^8.0", "composer/installers": "~1.0", - "symfony/yaml": "^5.1" + "symfony/yaml": "^v6.2.2" }, "require-dev": { - "phpunit/phpunit": "~7.0", - "orchestra/testbench": "3.8.*", - "spatie/phpunit-snapshot-assertions": "^1.0" + "phpunit/phpunit": "~9.5", + "orchestra/testbench": "^7.16", + "spatie/phpunit-snapshot-assertions": "^4.2.16" }, "autoload-dev": { "psr-4": { @@ -42,5 +42,10 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "composer/installers": false + } + } } diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 7daf51f16..724b15625 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -2,8 +2,8 @@ namespace App\Http\Middleware; -use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; +use Symfony\Component\HttpFoundation\Request; class TrustProxies extends Middleware { @@ -19,5 +19,10 @@ class TrustProxies extends Middleware * * @var int */ - protected $headers = Request::HEADER_X_FORWARDED_ALL; + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; } diff --git a/composer.json b/composer.json index 074cdaa36..7731b4294 100644 --- a/composer.json +++ b/composer.json @@ -1,101 +1,102 @@ { - "name": "asgardcms/platform", - "description": "The AsgardCms application.", - "keywords": [ - "cms", - "asgardcms", - "multilingual", - "laravel", - "laravel8" - ], - "license": "MIT", - "type": "project", - "require": { - "php": "^7.3", - "astrotomic/laravel-translatable": "^11.9", - "cartalyst/sentinel": "^5.0", - "doctrine/dbal": "^2.11", - "fideloper/proxy": "^4.4", - "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^7.0.1", - "nwidart/laravel-menus": "^7.0", - "imagina/stylist": "^3.0", - "intervention/image": "^2.5", - "laracasts/presenter": "^0.2.4", - "laravelcollective/html": "^6.0", - "laravel/framework": "^8.13", - "laravel/tinker": "^2.5", - "laravel/ui": "^3.0", - "maatwebsite/laravel-sidebar": "^2.4", - "mcamara/laravel-localization": "^1.6", - "nwidart/laravel-modules": "^8.0", - "ramsey/uuid": "^4.0", - "symfony/yaml": "^5.1", - "tightenco/ziggy": "^0.9.4", - "typicms/nestablecollection": "^1.1", - "venturecraft/revisionable": "^1.35", - "yajra/laravel-datatables-oracle": "~9.0", - "idavoll/adminlte-theme": "4.0.x-dev", - "idavoll/core-module": "4.0.x-dev", - "idavoll/dashboard-module": "4.0.x-dev", - "idavoll/flatly-theme": "4.0.x-dev", - "idavoll/media-module": "4.0.x-dev", - "idavoll/menu-module": "4.0.x-dev", - "idavoll/page-module": "4.0.x-dev", - "idavoll/setting-module": "4.0.x-dev", - "idavoll/tag-module": "4.0.x-dev", - "idavoll/translation-module": "4.0.x-dev", - "idavoll/user-module": "4.0.x-dev", - "idavoll/workshop-module": "4.0.x-dev" - - }, - "require-dev": { - "barryvdh/laravel-debugbar": "^3.5", - "fzaninotto/faker": "^1.9.1", - "league/flysystem-aws-s3-v3": "^1.0", - "mockery/mockery": "^1.3.1", - "nunomaduro/collision": "^5.0", - "orchestra/testbench": "^6.2", - "phpunit/phpunit": "~9.4.0", - "predis/predis": "^1.1", - "facade/ignition": "^2.3.6" - }, - "autoload": { - "psr-4": { - "App\\": "app/", - "Modules\\": "Modules/", - "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } + "name": "asgardcms/platform", + "description": "The AsgardCms application.", + "keywords": [ + "cms", + "asgardcms", + "multilingual", + "laravel", + "laravel8" + ], + "license": "MIT", + "type": "project", + "require": { + "php": "^8.0", + "astrotomic/laravel-translatable": "^11.9", + "cartalyst/sentinel": "^6.0", + "doctrine/dbal": "^3.5", + "fideloper/proxy": "^4.4", + "fruitcake/laravel-cors": "^3.0", + "guzzlehttp/guzzle": "^7.2.0", + "imagina/stylist": "^3.0", + "intervention/image": "^2.5", + "laracasts/presenter": "^0.2.4", + "laravel/framework": "^9.0", + "laravel/tinker": "^2.5", + "laravel/ui": "^4.0", + "laravelcollective/html": "~6.2", + "maatwebsite/laravel-sidebar": "^2.4", + "mcamara/laravel-localization": "^v1.7.0", + "nwidart/laravel-menus": "^7.0", + "nwidart/laravel-modules": "^9.0", + "ramsey/uuid": "~4.0", + "symfony/yaml": "^v6.2.2", + "tightenco/ziggy": "^v1.5.0", + "typicms/nestablecollection": "~2.0", + "venturecraft/revisionable": "^1.39", + "yajra/laravel-datatables-oracle": "~v10.2", + "idavoll/adminlte-theme": "4.0.x-dev", + "idavoll/core-module": "4.0.x-dev", + "idavoll/dashboard-module": "4.0.x-dev", + "idavoll/flatly-theme": "4.0.x-dev", + "idavoll/media-module": "4.0.x-dev", + "idavoll/menu-module": "4.0.x-dev", + "idavoll/page-module": "4.0.x-dev", + "idavoll/setting-module": "4.0.x-dev", + "idavoll/tag-module": "4.0.x-dev", + "idavoll/translation-module": "4.0.x-dev", + "idavoll/user-module": "4.0.x-dev", + "idavoll/workshop-module": "4.0.x-dev" + }, + "require-dev": { + "barryvdh/laravel-debugbar": "^3.5", + "league/flysystem-aws-s3-v3": "~3.10", + "mockery/mockery": "^1.3.1", + "nunomaduro/collision": "^v6.3.1", + "orchestra/testbench": "~v7.16", + "phpunit/phpunit": "~9.5.27", + "predis/predis": "^2.0", + "spatie/laravel-ignition": "^1.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Modules\\": "Modules/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" }, - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - }, - "laravel": { - "dont-discover": [] - } - }, - "scripts": { - "post-install-cmd": [ - "@php artisan clear-compiled" - ], - "pre-update-cmd": [], - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ] - }, - "config": { - "preferred-install": "dist", - "sort-packages": true, - "optimize-autoloader": true - }, - "minimum-stability": "dev", - "prefer-stable": true + "laravel": { + "dont-discover": [] + } + }, + "scripts": { + "post-install-cmd": [ + "@php artisan clear-compiled" + ], + "pre-update-cmd": [], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ] + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true, + "allow-plugins": { + "composer/installers": true + } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/readme.md b/readme.md index 7e290b0e3..c38d0d821 100644 --- a/readme.md +++ b/readme.md @@ -4,7 +4,7 @@ [![Total Downloads](https://img.shields.io/packagist/dd/asgardcms/platform.svg?style=flat-square)](https://packagist.org/packages/asgardcms/platform) [![Total Downloads](https://img.shields.io/packagist/dm/asgardcms/platform.svg?style=flat-square)](https://packagist.org/packages/asgardcms/platform) [![Total Downloads](https://img.shields.io/packagist/dt/asgardcms/platform.svg?style=flat-square)](https://packagist.org/packages/asgardcms/platform) -[![PHP7 Compatible](https://img.shields.io/badge/php-7-green.svg?style=flat-square)](https://packagist.org/packages/asgardcms/platform) +[![PHP8 Compatible](https://img.shields.io/badge/php-8-green.svg?style=flat-square)](https://packagist.org/packages/asgardcms/platform) ## AsgardCMS Platform